版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、學生成績管理系統(tǒng)一、實驗目的1.通過此次課程設計中學生成績管理系統(tǒng)的題目,掌握鏈表等數據結構的基本操作方面的知識,并能靈活的解決一些基本的問題,加深對其性質及各項操作的理解;2.將所學數據結構方面的知識與一門具體的語言C語言來進行實現,感受數據結構的強大作用,加深理解。二、試驗要求管理系統(tǒng)中有五個要求:輸入 查找 修改 插入 刪除 存儲(1) 輸入要求:能夠通過鍵盤輸入和文件輸入兩種(2) 查找要求:能夠根據學生號查找單個學生的信息,也可以遍歷所有學生信息(3) 修改要求:能夠根據學生號修改單個學生所有信息(4) 插入要求:能夠實現頭插和尾插(5) 刪除要求:能夠根據學生號刪除單個學生信息(6
2、) 存儲要求:通過鏈表存儲所有信息三、 算法的思想與算法實現步驟1.基本思想通過鏈表數據類型進行基本操作,主要有三個模塊:分別是主函數模塊、主要操作函數及基本操作函數。其中,主函數負責其他子函數的調用實現以及基本界面的操作主要函數包括:void StuInput(Student *); /學生成績管理系統(tǒng)的輸入函數,由主函數調用void StuSelect(Student *); /學生成績管理系統(tǒng)的查找函數,由主函數調用void StuAlter(Student *); /學生成績管理系統(tǒng)的修改函數,由主函數調用void StuInsert(Student *); /學生成績管理系統(tǒng)的插入函
3、數,由主函數調用void StuDelect(Student *); /學生成績管理系統(tǒng)的刪除函數,由主函數調用void StuSave(Student *); /學生成績管理系統(tǒng)的存儲函數,由主函數調用基本操作函數:void StuOutput(Student *p); /輸出函數int StuImport(Student *head,Student *p); /輸入函數void StuInputHand(Student *head); /學生成績管理系統(tǒng)的手動輸入函數,由輸入函數調用void StuInputFile(Student *head); /學生成績管理系統(tǒng)的文件輸入函數,由輸入
4、函數調用void StuSelectErg(Student *head); /學生成績管理系統(tǒng)的遍歷函數,由查找函數調用 void StuSelectNumFind(Student *head); /學生成績管理系統(tǒng)的按學號查找函數,由查找函數調用void StuSelectSubFind(Student *head); /學生成績管理系統(tǒng)的按科目查找函數,由查找函數調用2.實現步驟首先,分析題目要求劃分實現模塊,定義基本數據類型,諸如結構體、鏈表等;其次,針對上述的基本操作實現具體需要進行的操作,具體實現每個環(huán)節(jié)需要進行的基本操作,即具體編寫每個小函數實現功能;最后,編寫主函數對每個實現進行
5、按需調用,實現操作。3.流程圖mainStuMainStuInputStuSelectStuAlterStuInsertStuDelectStuSaveStuInputHandStuInputFileStuSelectErgStuSelectNumFindStuSelectSubFind四代碼:#include<stdio.h>#include<malloc.h>#include<string.h>struct Student char name10; char subject10; int num; int grade; Student *next;voi
6、d StuMain(); /學生成績管理系統(tǒng)的主函數,由main函數調用void StuInput(Student *); /學生成績管理系統(tǒng)的輸入函數,由主函數調用void StuSelect(Student *); /學生成績管理系統(tǒng)的查找函數,由主函數調用void StuAlter(Student *); /學生成績管理系統(tǒng)的修改函數,由主函數調用void StuInsert(Student *); /學生成績管理系統(tǒng)的插入函數,由主函數調用void StuDelect(Student *); /學生成績管理系統(tǒng)的刪除函數,由主函數調用void StuSave(Student *); /
7、學生成績管理系統(tǒng)的存儲函數,由主函數調用void StuOutput(Student *p); /輸出函數int StuImport(Student *head,Student *p); /輸入函數void StuOutput(Student *p) /打印函數,將鏈表的該節(jié)點信息輸出 printf("學生姓名:"); printf("%s ",p->name);printf("學生號:");printf("%d ",p->num);printf("科目: ");printf(&qu
8、ot;%s ",p->subject);printf("學生成績:");printf("%d n",p->grade);int StuImport(Student *head,Student *p)Student *Opinion=(Student *)malloc(sizeof(Student); /用來判斷輸入節(jié)點中學生號是否有重復Opinion=head->next; printf("學生姓名:n"); scanf("%s",p->name);printf("學生號
9、: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");return 1; Opinion=Opinion->next;printf("學生成績:n
10、");scanf("%d",&p->grade);return 0;void main() StuMain();void StuMain() char decide='y' /定義while變量,函數是否繼續(xù)進行int num=1; /定義switch變量,函數跳轉到哪個子函數Student *head; /定義鏈表的頭指針head=(Student *)malloc(sizeof(Student); /給頭指針開辟空間head->next=NULL; /初始化頭指針 while(decide!='n') pri
11、ntf(" *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: StuAlter(head); break; case 4: StuInsert(head); bre
12、ak; case 5: StuDelect(head); break; case 6: StuSave(head); break; default: decide='n' break;void StuInputHand(Student *head); /學生成績管理系統(tǒng)的手動輸入函數,由輸入函數調用void StuInputFile(Student *head); /學生成績管理系統(tǒng)的文件輸入函數,由輸入函數調用void StuInput(Student *head) /學生成績管理系統(tǒng)的輸入函數,由主函數調用 char decide='y' /定義while變
13、量,函數是否繼續(xù)進行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:StuInputFile(head);default:decide='n'break;void
14、StuInputHand(Student *head) /學生成績管理系統(tǒng)的手動輸入函數,由輸入函數調用 if(head->next=NULL) Student *point=(Student *)malloc(sizeof(Student); /鏈表中最后一個節(jié)點,只在該函數中存在 point->next=NULL; int decide=1; while(decide!=0) Student *p=(Student *)malloc(sizeof(Student); p->next=NULL; StuImport(head,p); if(head->next=NUL
15、L) head->next=p; point=p; else point->next=p; point=p; printf("是否繼續(xù):1/0n"); scanf("%d",&decide); else printf("管理系統(tǒng)中已存在信息,若想輸入學生信息,請轉插入子系統(tǒng)");void StuInputFile(Student *head) /學生成績管理系統(tǒng)的文件輸入函數,由輸入函數調用 if(head->next!=NULL) printf("學生管理系統(tǒng)中已有信息,請?zhí)D到插入選項n&quo
16、t;); 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 *Opinion=(Student *)malloc(sizeof(Student);
17、/用來判斷輸入節(jié)點中學生號是否有重復 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) printf("該文件中有重復學生信息,請驗明再傳輸n"); head->
18、;next=NULL;return ; Opinion=Opinion->next; if(head->next=NULL) head->next=p; point=p; else point->next=p; point=p; ; Opinion=head->next; while(Opinion->next!=NULL) Opinion=Opinion->next; if(Opinion->next->next=NULL) Opinion->next=NULL; ; fclose(fp); printf("傳輸成功n&q
19、uot;);void StuSelectErg(Student *head); /學生成績管理系統(tǒng)的遍歷函數,由查找函數調用 void StuSelectNumFind(Student *head); /學生成績管理系統(tǒng)的按學號查找函數,由查找函數調用void StuSelectSubFind(Student *head); /學生成績管理系統(tǒng)的按科目查找函數,由查找函數調用void StuSelect(Student *head) /學生成績管理系統(tǒng)的查找函數,由主函數調用 char decide='y' /定義while變量,函數是否繼續(xù)進行int num; /定義swit
20、ch變量,函數跳轉到哪個子函數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: StuSelectSubFind(head);break;default:dec
21、ide='n'break;void StuSelectErg(Student *head) /學生成績管理系統(tǒng)的遍歷函數,由查找函數調用 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+;void StuSelectNumFind(Student *head) /學生成績管理系統(tǒng)的查找子系統(tǒng),有查找函數調用 int num; prin
22、tf("輸入想要查找學生的學生號: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(Student *head) /學生成績管理系統(tǒng)的按科目查找函數,由查找函數調用 cha
23、r 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(Student *head) /學生成績管理系統(tǒng)的修改函數,由主函數調用
24、int num; 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&&!strcmp(Sub,p->subject) printf("輸入修
25、改成績:n"); scanf("%d",&p->grade); printf("修改成功n"); i+; p=p->next; if(i=1) printf("沒有該學生信息");void StuInsert(Student *head) /學生成績管理系統(tǒng)的插入函數,由主函數調用 Student *point=(Student *)malloc(sizeof(Student); point=head->next; while(point->next!=NULL) point=point-&g
26、t;next; /找到尾結點 char decide='y' /定義while變量,函數是否繼續(xù)進行 int num; /定義switch變量,函數跳轉到哪個子函數 while(decide!='n') printf(" *n"); printf(" * 1 頭插 2 尾插 3 退出 *n"); printf(" *n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student); switch(num)
27、case 1: StuImport(head,p); p->next=head->next; 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) /學生成績管理系統(tǒng)的刪除函數,由主函數調用 int num; printf("輸入想要刪除學生的學生號:n"); scanf("%d",&num);char Sub10; printf("輸入想要刪除科目:n"); scanf("%s",Sub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理研究生教學實踐總結(3篇)
- 專題04 語言表達+綜合性學習(第2期)
- 專題07:環(huán)境描寫作用(講解)
- 中班幼兒語言教學活動策劃方案五篇
- 幼兒園組織旅游活動策劃方案五篇
- ktv房間租賃合同
- 幼兒園找春天主題活動策劃方案五篇
- 10kV配電站房場地選擇與環(huán)境評估
- 個人擔保借款合同
- 政府采購合同協(xié)議書
- 2025-2030年中國電動高爾夫球車市場運行狀況及未來發(fā)展趨勢分析報告
- 河南省濮陽市2024-2025學年高一上學期1月期末考試語文試題(含答案)
- 長沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會招考(826)筆試歷年參考題庫附帶答案詳解
- 蘇教版二年級數學下冊全冊教學設計
- 職業(yè)技術學院教學質量監(jiān)控與評估處2025年教學質量監(jiān)控督導工作計劃
- 金字塔原理與結構化思維考核試題及答案
- 廣東省梅州市2023-2024學年七年級上學期期末數學試題
- 基礎護理學導尿操作
- 標牌加工風險防范方案
- 2015-2024北京中考真題英語匯編:閱讀單選CD篇
評論
0/150
提交評論