數據結構之學生成績管理系統設計_第1頁
數據結構之學生成績管理系統設計_第2頁
數據結構之學生成績管理系統設計_第3頁
數據結構之學生成績管理系統設計_第4頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、專業資料學生成績管理系統一、實驗目的1. 通過此次課程設計中學生成績管理系統的題目 ,掌握鏈表等數據結構的基本操作方面的知識 ,并能靈活的解決一些基本的問題 ,加深對其性質及各項操作的理解;2. 將所學數據結構方面的知識與一門具體的語言 C 語言來進行實現,感受數據結構的強大作用,加深理解。二、試驗要求管理系統中有五個要求:輸入查找修改插入刪除存儲( 1) 輸入要求:能夠通過鍵盤輸入和文件輸入兩種( 2) 查找要求:能夠根據學生號查找單個學生的信息,也可以遍歷所有學生信息( 3) 修改要求:能夠根據學生號修改單個學生所有信息( 4) 插入要求:能夠實現頭插和尾插( 5) 刪除要求:能夠根據學生

2、號刪除單個學生信息( 6) 存儲要求:通過鏈表存儲所有信息三、算法的思想與算法實現步驟1. 基本思想通過鏈表數據類型進行基本操作,主要有三個模塊:分別是主函數模塊、主要操作函數及基本操作函數。其中,主函數負責其他子函數的調用實現以及基本界面的操作主要函數包括:void StuInput(Student *);/ 學生成績管理系統的輸入函數,由主函數調用void StuSelect(Student *);/ 學生成績管理系統的查找函數,由主函數調用WORD 完美格式下載可編輯專業資料void StuAlter(Student *);/ 學生成績管理系統的修改函數,由主函數調用void StuIn

3、sert(Student *);/ 學生成績管理系統的插入函數,由主函數調用void StuDelect(Student *);/ 學生成績管理系統的刪除函數,由主函數調用void StuSave(Student *);/ 學生成績管理系統的存儲函數,由主函數調用基本操作函數:void StuOutput(Student *p);/ 輸出函數int StuImport(Student *head,Student *p);/ 輸入函數void StuInputHand(Student *head);/ 學生成績管理系統的手動輸入函數,由輸入函數調用void StuInputFile(Studen

4、t *head);/ 學生成績管理系統的文件輸入函數,由輸入函數調用void StuSelectErg(Student *head);/ 學生成績管理系統的遍歷函數,由查找函數調用void StuSelectNumFind(Student *head);/ 學生成績管理系統的按學號查找函數,由查找函數調用void StuSelectSubFind(Student *head);/ 學生成績管理系統的按科目查找函數,由查找函數調用2. 實現步驟WORD 完美格式下載可編輯專業資料首先,分析題目要求劃分實現模塊,定義基本數據類型,諸如結構體、鏈表等;其次,針對上述的基本操作實現具體需要進行的操作,

5、具體實現每個環節需要進行的基本操作,即具體編寫每個小函數實現功能;最后,編寫主函數對每個實現進行按需調用,實現操作。3.流程圖mainStuMainStuInputStuSelectStuAlterStuInsertStuDelectStuSaveStuInputStuInputStuSelectEStuSelectNStuSelectSubHandFilergumFindFind四代碼:#include<stdio.h>#include<malloc.h>#include<string.h>struct Studentchar name10;char su

6、bject10;int num;int grade;Student *next;void StuMain();/ 學生成績管理系統的主函數,由main函數調用WORD 完美格式下載可編輯專業資料void StuInput(Student *);/ 學生成績管理系統的輸入函數,由主函數調用void StuSelect(Student *);/ 學生成績管理系統的查找函數,由主函數調用void StuAlter(Student *);/ 學生成績管理系統的修改函數,由主函數調用void StuInsert(Student *);/ 學生成績管理系統的插入函數,由主函數調用void StuDelec

7、t(Student *);/ 學生成績管理系統的刪除函數,由主函數調用void StuSave(Student *);/ 學生成績管理系統的存儲函數,由主函數調用void StuOutput(Student *p);/ 輸出函數int StuImport(Student *head,Student *p);/ 輸入函數void StuOutput(Student *p)/ 打印函數,將鏈表的該節點信息輸出printf(" 學生姓名: ");printf("%s",p->name);printf(" 學生號: ");printf(

8、"%d",p->num);printf(" 科目:");printf("%s",p->subject);printf(" 學生成績: ");printf("%dn",p->grade);int StuImport(Student *head,Student *p)Student*Opinion=(Student*)malloc(sizeof(Student);/ 用來判斷輸入節點中學生號是否有重復Opinion=head->next;printf(" 學生姓名:

9、 n");scanf("%s",p->name);printf(" 學生號: n");scanf("%d",&p->num);printf(" 科目: n");scanf("%s",p->subject);if(Opinion!=NULL)if(Opinion->num=p->num&&!strcmp(Opinion->subject,p->subject)printf(" 該學生這門科目已有成績,請重新輸入n

10、");return 1;Opinion=Opinion->next;printf(" 學生成績: n");WORD 完美格式下載可編輯專業資料scanf("%d",&p->grade);return 0;void main()StuMain();void StuMain()char decide='y'/ 定義 while變量, 函數是否繼續進行int num=1;/ 定義 switch變量,函數跳轉到哪個子函數Student *head;/ 定義鏈表的頭指針head=(Student *)malloc(si

11、zeof(Student);/ 給頭指針開辟空間head->next=NULL;/ 初始化頭指針while(decide!='n')printf("*n");printf("*1輸入2查找3修改4 插入 *n");printf("*5刪除6存儲7退出*n");printf("*n");scanf("%d",&num);switch(num)case 1:StuInput(head);break;case 2:StuSelect(head);break;case 3:

12、StuAlter(head);break;case 4:StuInsert(head);break;case 5:StuDelect(head);break;case 6:StuSave(head);break;default:WORD 完美格式下載可編輯專業資料decide='n'break;void StuInputHand(Student *head);/ 學生成績管理系統的手動輸入函數,由輸入函數調用void StuInputFile(Student *head);/ 學生成績管理系統的文件輸入函數,由輸入函數調用void StuInput(Student *head)

13、/ 學生成績管理系統的輸入函數,由主函數調用char decide='y'/ 定義 while變量, 函數是否繼續進行int num;/ 定義 switch變量,函數跳轉到哪個子函數while(decide!='n')printf("*n");printf("*1手動輸入2 文件輸入3 退出*n");printf("*n");scanf("%d",&num);switch(num)case 1:StuInputHand(head);break;case 2:StuInputF

14、ile(head);default:decide='n'break;voidStuInputHand(Student*head)/ 學生成績管理系統的手動輸入函數,由輸入函數調用if(head->next=NULL)Student*point=(Student*)malloc(sizeof(Student);/ 鏈表中WORD 完美格式下載可編輯專業資料最后一個節點,只在該函數中存在point->next=NULL;int decide=1;while(decide!=0)Student *p=(Student *)malloc(sizeof(Student);p-

15、>next=NULL;StuImport(head,p);if(head->next=NULL)head->next=p;point=p;elsepoint->next=p;point=p;printf(" 是否繼續: 1/0n");scanf("%d",&decide);elseprintf(" 管理系統中已存在信息,若想輸入學生信息,請轉插入子系統");void StuInputFile(Student *head)/ 學生成績管理系統的文件輸入函數,由輸入函數調用if(head->next!

16、=NULL)printf(" 學生管理系統中已有信息,請跳轉到插入選項 n"); return ;FILE *fp;printf(" 請輸入文件名(包括物理地址)n");char filename10;scanf("%s",filename);if(fp=fopen(filename,"r")=NULL)printf("can not open filen");return;Student *point=(Student *)malloc(sizeof(Student);Student*Opin

17、ion=(Student*)malloc(sizeof(Student);/ 用來WORD 完美格式下載可編輯專業資料判斷輸入節點中學生號是否有重復while(!feof(fp) Opinion=head->next;Student *p=(Student *)malloc(sizeof(Student);p->next=NULL;fread(p,sizeof(Student),1,fp);if(Opinion!=NULL)if(Opinion->num=p->num&&!strcmp(Opinion->subject,p->subject)

18、printf(" 該文件中有重復學生信息,請驗明再傳輸n");head->next=NULL;return ;Opinion=Opinion->next;if(head->next=NULL)head->next=p;point=p;elsepoint->next=p;point=p;Opinion=head->next;while(Opinion->next!=NULL)Opinion=Opinion->next;if(Opinion->next->next=NULL)Opinion->next=NULL;

19、fclose(fp);printf(" 傳輸成功 n");voidStuSelectErg(Student*head);/ 學生成績管理系統的遍歷函數,由查找函數調用void StuSelectNumFind(Student *head);/ 學生成績管理系統的按學號查找函數,由查找函數調用void StuSelectSubFind(Student *head);/ 學生成績管理系統的按科目查找函數,由查WORD 完美格式下載可編輯專業資料找函數調用void StuSelect(Student *head)/ 學生成績管理系統的查找函數,由主函數調用char decide=

20、'y'/ 定義 while變量, 函數是否繼續進行int num;/ 定義 switch變量,函數跳轉到哪個子函數while(decide!='n')printf("*n");printf("*1遍歷2 學號查找3 科目查找4 退出*n");printf("*n");scanf("%d",&num);switch(num)case 1:StuSelectErg(head);break;case 2:StuSelectNumFind(head);break;case 3:Stu

21、SelectSubFind(head);break;default:decide='n'break;void StuSelectErg(Student *head)/ 學生成績管理系統的遍歷函數,由查找函數調用Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL)printf(" 第 %d 位學生信息: n",i);StuOutput(p);p=p->next;i+;voidStuSelectNumFind(Student*head)/ 學生

22、成績管理系統的查找子系統,有查找WORD 完美格式下載可編輯專業資料函數調用int num;printf(" 輸入想要查找學生的學生號:n");scanf("%d",&num);Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL)if(num=p->num)StuOutput(p);i+;p=p->next;if(i=1)printf(" 沒有該學生信息");void StuSelectSubFind(

23、Student *head)/ 學生成績管理系統的按科目查找函數,由查找函數調用char Sub10;printf(" 輸入想要查找科目:n");scanf("%s",Sub);Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL)if(!strcmp(Sub,p->subject)StuOutput(p);i+;p=p->next;if(i=1)printf(" 沒有該學生信息");void StuAlter(

24、Student *head)/ 學生成績管理系統的修改函數,由主函數調用int num;WORD 完美格式下載可編輯專業資料printf(" 輸入想要查找學生的學生號:n");scanf("%d",&num);char Sub10;printf(" 輸入想要查找科目:n");scanf("%s",Sub);Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL)if(num=p->num&am

25、p;&!strcmp(Sub,p->subject)printf(" 輸入修改成績:n");scanf("%d",&p->grade);printf(" 修改成功 n");i+;p=p->next;if(i=1)printf(" 沒有該學生信息");void StuInsert(Student *head)/ 學生成績管理系統的插入函數,由主函數調用Student *point=(Student *)malloc(sizeof(Student);point=head->nex

26、t;while(point->next!=NULL)point=point->next;/ 找到尾結點char decide='y'/ 定義 while變量,函數是否繼續進行int num;/ 定義 switch變量,函數跳轉到哪個子函數while(decide!='n')printf("*n");printf("*1頭插2 尾插3 退出*n");printf("*n");scanf("%d",&num);Student *p=(Student *)malloc(

27、sizeof(Student);switch(num)case 1:StuImport(head,p);p->next=head->next;WORD 完美格式下載可編輯專業資料head->next=p;printf(" 插入成功 n");break;case 2:StuImport(head,p);point->next=p;p->next=NULL;printf(" 插入成功 n");break;default:decide='n'break;void StuDelect(Student *head)/ 學生成績管理系統的刪除函數,由主函數調用int num;printf(" 輸入想要刪除學生的學生號:n");scanf("%d",&num);char Sub10;printf(" 輸入想要刪除科目:n");scanf("%s",Sub);Student

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論