版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
資料內(nèi)容僅供您學習參考,如有不當之處,請聯(lián)系改正或者刪除。成績評定教師簽名嘉應學院計算機學院《數(shù)據(jù)結(jié)構(gòu)》實驗報告課程名稱:數(shù)據(jù)結(jié)構(gòu)開課學期:-第1學期班級:1401指導老師:鐘治初實驗題目:學生成績管理系統(tǒng)學號:姓名:蘇永達提交時間:10月27日實驗要求:設(shè)計一個學生成績管理系統(tǒng),模擬高考成績的管理。功能至少包括數(shù)據(jù)輸入,輸出,查找,插入,刪除,修改,排序,統(tǒng)計各成績段的人數(shù),考生成績的排位,報考志愿的檢索等。所有輸入輸出數(shù)據(jù)均使用文本文件進行讀寫。所有過渡性數(shù)據(jù)使用二進制文件進行讀寫和保存。設(shè)計使用平行志愿進行出檔。設(shè)計使用非平行志愿行進出檔。設(shè)計志愿時,能夠設(shè)計12個志愿,如果平行志愿,則前后各6個分別為第一組和第二組平行志愿處理。設(shè)計考生記錄的字段時,能夠預留補錄志愿的字段?;蛘邔⑽翠浫】忌臄?shù)據(jù)進行備份,然后將志愿清空后再增加補錄志愿。二、功能:(1)按學號順序輸入學生信息,包括學號、姓名、性別、課程單科成績(單科成績包括C語言、高數(shù)、大學語文、匯編、中近史),并存入文件中。(2)從文件讀取數(shù)據(jù)(3)刪除學生信息(4)查詢學生信息(查詢可分為精確查詢和模糊查詢)(5)修改學生信息(要求修改后,數(shù)據(jù)依然是按學號順序排列)(6)插入學生信息(要求插入后,數(shù)據(jù)依然是按學號順序排列)(7)附加功能,學生可自由發(fā)揮,如:排名、求各門課程平均分等。三、實驗目的1、掌握和鞏固C語言編寫的相關(guān)知識和技巧,特別是函數(shù)、指針、結(jié)構(gòu)體。2、能夠采用模塊化思想調(diào)試程序。3、經(jīng)過該課程設(shè)計的操作與實踐,能夠根據(jù)數(shù)據(jù)對象的特性,學會數(shù)據(jù)組織的方法,把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設(shè)計技能,全面提高學生的程序設(shè)計、開發(fā)能力。四、系統(tǒng)分析4.1相關(guān)基礎(chǔ)知識選擇、循環(huán)、函數(shù)、指針、結(jié)構(gòu)體、鏈表4.2總體方案架構(gòu)圖:方案描述:菜單:運用switchcase選擇功能,在每個case中有相對應的調(diào)用語句,調(diào)用相對應的函數(shù)。刪除功能:調(diào)用刪除函數(shù),判斷是否保存,如果保存寫入文件。插入功能:運用鏈表插入。修改功能:調(diào)用刪除函數(shù)跟插入函數(shù),先刪除再插入,從而實現(xiàn)修改功能。查詢功能:調(diào)用菜單中的查詢函數(shù),用循環(huán)實現(xiàn)查詢功能。排名功能:調(diào)用菜單中的排名函數(shù),經(jīng)過冒泡排序法實現(xiàn)功能。保存功能:運用寫入文件。五、系統(tǒng)設(shè)計定義一個student類型的結(jié)構(gòu)體,里面包含學生信息,包括學號、姓名、性別、課程單科成績(單科成績包括C語言、高數(shù)、大學語文、匯編、中近史)、總分、平均成績。5.1新建功能從鍵盤輸入N個學生基本信息,包括學號、姓名、性別、課程單科成績(單科成績包括C語言、高數(shù)、大學語文、匯編、中近史),編程根據(jù)輸入信息計算各學生總分和平均分。創(chuàng)立動態(tài)鏈表,將學生信息存入鏈表中。在DOS屏幕上打印鏈表內(nèi)所有學生信息。新建一個文件,將動態(tài)鏈表中的數(shù)據(jù)(即輸入的學生信息)存入文件中。5.2打開功能打開一個文件,從文件中讀取學生信息,并新建鏈表,將數(shù)據(jù)存入動態(tài)鏈表。在DOS屏幕上打印鏈表內(nèi)所有學生信息。5.3修改功能在DOS屏幕上打印出當前的所有學生信息。輸入待修改的學生學號,若不存在,輸出”查無此人”;若存在,則輸入修改的信息,并存回學生信息鏈表中,存回后學生信息鏈表依然是按學號順序排列。最后在DOS屏幕上打印出新的所有學生信息。5.4插入功能在DOS屏幕上打印出當前的所有學生信息。輸入插入信息的條數(shù),從第一條開始到最后一條,依次輸入每條學生信息,包括學號、姓名、性別、課程單科成績(單科成績包括C語言、高數(shù)、大學語文、匯編、中近史),根據(jù)輸入信息計算各學生總分和平均分。若輸入的學生學號已經(jīng)存在,則輸出”該學號已存在,無法操作!”,否則將學生信息插入到鏈表中,插入后鏈表中的數(shù)據(jù)依然按照學號排列。最后在DOS屏幕上打印出新的所有學生信息。5.5查詢功能查詢分為:精確查詢、模糊查詢精確查詢:按姓名查詢輸入待查詢的姓名;根據(jù)順序查詢的方法,對學生的姓名依次查詢,直到查詢到與輸入的信息相匹配的信息,并在DOS屏幕上顯示出來。若需要查詢的信息不存在,系統(tǒng)則會提示找不到此人??芍貜筒樵?。按學號查詢輸入待查詢的學號;根據(jù)順序查詢的方法,對學生的學號依次查詢,直到查詢到與輸入的信息相匹配的信息,并在DOS屏幕顯示出來。若需要查詢的信息不存在,系統(tǒng)則會提示找不到此人??芍貜筒樵?。模糊查詢:按姓氏查詢輸入待查詢的姓氏;根據(jù)順序查詢的方法,對學生的姓依次查詢,當查詢到與輸入的信息相匹配的信息,則在DOS屏幕顯示出來,直到鏈表結(jié)束。若需要查詢的信息不存在,系統(tǒng)則會提示找不到相關(guān)信息??芍貜筒樵儭0葱詣e查詢輸入待查詢的性別;根據(jù)順序查詢的方法,對學生的性別依次查詢,當查詢到與輸入的信息相匹配的信息,則在DOS屏幕顯示出來,直到鏈表結(jié)束??芍貜筒樵?。5.6刪除功能在DOS屏幕上打印出當前的所有學生信息。(1)按姓名刪除輸入需要刪除的學生姓名;根據(jù)順序查詢的方法,對學生的姓名依次查詢,當查詢到與輸入的信息相匹配的信息,則刪除該生信息,并在DOS屏幕顯示出新的所有學生信息。若需要刪除的信息不存在,系統(tǒng)則會提示刪除失敗。(2)按學號刪除輸入需要刪除的學生學號;根據(jù)順序查詢的方法,對學生的學號依次查詢,當查詢到與輸入的信息相匹配的信息,則刪除該生信息,并在DOS屏幕顯示出新的所有學生信息。若需要刪除的信息不存在,系統(tǒng)則會提示刪除失敗。5.7排名功能可根據(jù)學生的總分進行排名,并在DOS屏幕上輸出排名結(jié)果。5.8關(guān)于我們在DOS屏幕上輸出系統(tǒng)相關(guān)信息。5.9軟件說明5.10退出保存選擇‘0’退出系統(tǒng),保存功能在每段函數(shù)結(jié)束后實現(xiàn)。5.10運行結(jié)果5.10.0主界面5.10.1新建文件(輸入一組數(shù)據(jù),存入文件中)5.10.2打開文件(打開文件,讀取文件數(shù)據(jù)存入鏈表)5.10.3修改功能5.10.4插入功能5.10.5查詢功能精確查詢-按姓名查詢精確查詢-按學號查詢模糊查詢-按姓氏查詢模糊查詢-按性別查詢5.10.6刪除功能按姓名刪除按學號刪除5.10.7總分排名功能5.10.9軟件說明5.10.10退出保存保存功能在每段函數(shù)結(jié)束后實現(xiàn)。六、心得體會經(jīng)過這次實驗我們更好的掌握和鞏固C語言編寫的相關(guān)知識和技巧,特別是函數(shù)、指針、結(jié)構(gòu)體、鏈表等功能。經(jīng)過該課程設(shè)計的操作與實踐,能夠根據(jù)數(shù)據(jù)對象的特性,學會數(shù)據(jù)組織的方法,把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設(shè)計技能,雖然在設(shè)計過程中遇到了不少問題麻煩,在教材數(shù)據(jù)的幫助下,完成了這次程序設(shè)計。
七、源代碼#include<stdlib.h>#include<stdio.h>#include<string.h>/*---------------------------------------------------------*/#defineLENsizeof(structstudent)//結(jié)構(gòu)體長度/*---------------------------------------------------------*/#defineNEW(structstudent*)malloc(LEN)/*---------------------------------------------------------*/FILE*fp;/*文件指針*//*---------------------------------------------------------*/structstudent{ intnum;charname[20]; intscore1,score2,score3,score4,score5; charsex; doubleaver; floatsum;structstudent*next;};charfilename[100];structstudent*creat(){structstudent*h;structstudent*p,*q;printf("需要輸入幾條信息:");inti,n;scanf("%d",&n);printf("\n----------請按學號順序依次輸入學生信息----------\n");charc=getchar();h=NULL;for(i=1;i<=n;i++){p=NEW;if(p==NULL){printf("Allocationfailure\n");exit(0);} printf("\n"); printf("輸入姓名<如:zhangsan>:");gets(p->name); printf("輸入學號<如:1>:");scanf("%d",&p->num); c=getchar(); printf("輸入性別<M/F>:"); scanf("%c",&p->sex); printf("輸入c語言成績:"); scanf("%d",&p->score1); printf("輸入高數(shù)成績:"); scanf("%d",&p->score2); printf("輸入大學語文成績:"); scanf("%d",&p->score3); printf("輸入?yún)R編語言成績:"); scanf("%d",&p->score4); printf("輸入中近史成績:"); scanf("%d",&p->score5); c=getchar(); p->sum=p->score1+p->score2+p->score3+p->score4+p->score5; p->aver=(p->score1+p->score2+p->score3+p->score4+p->score5)/5.0;p->next=NULL;if(h==NULL)/*h為空,表示新結(jié)點為第一個結(jié)點*/h=p;/*頭指針指向第一個結(jié)點*/else/*h不為空*/q->next=p;/*新結(jié)點與尾結(jié)點相連接*/q=p;/*使q指向新的尾結(jié)點*/ }returnh;}structstudent*paixu(structstudent*head)/*總分排名*/{system("cls");printf("總分排名如下:\n");structstudent*op;structstudent*p;structstudent*p1,*p2;p1=(structstudent*)malloc(LEN);p1->next=head;head=p1;for(op=NULL;op!=head;op=p){for(p=p1=head;p1->next->next!=op;p1=p1->next){if(p1->next->sum<p1->next->next->sum){p2=p1->next->next;p1->next->next=p2->next;p2->next=p1->next;p1->next=p2;p=p1->next->next;}}}p1=head;head=head->next;free(p1);p1=NULL;returnhead;}voidprlist(structstudent*head)/*輸出函數(shù)*/{structstudent*p;p=head;printf("\n學號姓名性別c語言高數(shù)大學語文匯編語言中近史總分平均分\n");while(p!=NULL){printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);p=p->next;}system("pause");}/*-------------------------------------write將數(shù)據(jù)存入文件-------------------------------------------*/voidwrite(structstudent*head){structstudent*p;p=head;if(head!=NULL){while(p!=NULL) { fwrite(p,LEN,1,fp); p=p->next; }} printf("文件更新成功!\n"); fclose(fp);system("pause"); system("cls");}/*-------------------------------------read將文件數(shù)據(jù)讀入一個新鏈表中-------------------------------------------*/structstudent*read(void){structstudent*head;structstudent*p1,*p2;head=NULL; p1=NEW; rewind(fp);//指向文件頭 fread(p1,LEN,1,fp);while(!feof(fp)){ if(head==NULL)head=p1;elsep2->next=p1;p2=p1; p1=NEW; fread(p1,LEN,1,fp); }p2->next=NULL; fclose(fp);return(head);}voidfind(structstudent*head)/*查詢功能*/{intt,s,i,j;structstudent*p,*q;charx[10],y[2]={"0"},c[2];chark,f;p=head;printf("精確查找:\n*1按姓名查找\n*2按學號查找\n模糊查找\n*3按姓氏查找:\n*4按性別查找\n");scanf("%d",&s);k=getchar();if(s==1){printf("請輸入姓名:");gets(x);while(p!=NULL){ if(strcmp(x,p->name)==0) {printf("\n學號姓名性別c語言高數(shù)大學語文匯編語言中近史總分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next;}}elseif(s==2){printf("按學號查找:\n"); scanf("%d",&t); while(p!=NULL) { if(t==p->num) {printf("\n學號姓名性別c語言高數(shù)大學語文匯編語言中近史總分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next;}}elseif(s==3){printf("按姓氏查詢:\n");gets(c); while(p!=NULL) { if(strncmp(c,p->name,1)==0) {printf("\n學號姓名性別c語言高數(shù)大學語文匯編語言中近史總分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next; }}elseif(s==4){printf("按性別查詢:\n");f=getchar();while(p!=NULL){if(f==p->sex){printf("\n學號姓名性別c語言高數(shù)大學語文匯編語言中近史總分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);j=1;}elsei=1; q=p;p=p->next;}}if(i=1&&j!=1) printf("Notfound.輸入錯誤\n"); system("pause"); system("cls");}structstudent*delstudent(structstudent*head)/*刪除功能*/{ints,n,m=1;charc; structstudent*p,*q;charx[10];while(m){printf("*1按學號刪除\n*2按姓名刪除\n"); scanf("%d",&s); c=getchar(); printf("已有信息如下:\n"); prlist(head);if(head==NULL){printf("Thisisaemptylist.");returnhead;}p=head;switch(s){case2: {printf("請輸入姓名:");gets(x);while(strcmp(x,p->name)!=0&&p->next!=NULL){q=p;p=p->next;}if(strcmp(x,p->name)==0){if(p==head)head=p->next;elseq->next=p->next;free(p);}else{printf("Notfound.\n");continue;}};m=0;break; case1:{printf("請輸入學號:");scanf("%d",&n);c=getchar();while(n!=p->num&&p->next!=NULL){q=p;p=p->next;}if(n==p->num){if(p==head)head=p->next;elseq->next=p->next;free(p);}else{printf("Notfound.\n");continue;}};m=0;break; default:printf("輸入錯誤\n");break; }}returnhead;}voidabout()/*關(guān)于我們*/{system("cls"); printf("∩_∞,∩_∩\n\n"); printf("(●.●)(●﹏●)\n\n"); printf("/▓\/█\Hi\n\n"); printf("成員介紹\n\n"); printf("1.組長:\n\n"); printf("2.組員:\n\n"); printf("3.組員:\n\n"); printf("4.組員:\n\n"); printf("產(chǎn)品信息\n\n"); printf("一.產(chǎn)品用途:主要用于學生成績管理與查詢.\n\n"); printf("二.班級成績管理系統(tǒng)主要包括:數(shù)據(jù)的錄入\n\n"); printf("讀取顯示刪除插入查找修改排名.\n\n"); system("pause"); system("cls"); }voidend()/*退出系統(tǒng)*/{ chars; printf("是否退出系統(tǒng)Y/N?\n"); scanf("%c",&s); if(s=='Y'||s=='y') exit(0); elseif(s=='N'||s=='n') return; else { printf("輸入錯誤,請重新輸入\n\n");system("pause");return; }}structstudent*insert(structstudent*head,structstudent*op)/*插入功能*/{structstudent*p,*q;if(head==NULL){head=op;/*空表時,插入結(jié)點*/op->next=NULL;}else{p=head;while(op->num>p->num&&p->next!=NULL){q=p;p=q->next;}if(op->num==p->num){ printf("\n該學號已存在,無法插入!\n"); returnhead;}elseif(op->num<p->num){if(p==head)head=op;/*在表頭插入結(jié)點*/elseq->next=op;/*在表中間插入結(jié)點*/op->next=p;}else{p->next=op;/*在表尾插入結(jié)點*/op->next=NULL;}}returnhead;}structstudent*xiugai(structstudent*head)/*修改功能*/{ structstudent*op=NEW; intc; head=delstudent(head); printf("請輸入新名字:"); gets(op->name); printf("請輸入新學號:"); scanf("%d",&op->num); c=getchar(); printf("請輸入新性別:"); scanf("%c",&op->sex);printf("請輸入新C語言成績:");scanf("%d",&op->score1);printf("請輸入新高數(shù)成績:");scanf("%d",&op->score2);printf("請輸入新大學語文成績:");scanf("%d",&op->score3); printf("請輸入新匯編成績:");scanf("%d",&op->score4); printf("請輸入新中近史成績:");scanf("%d",&op->score5); c=getchar(); op->sum=op->score1+op->score2+op->score3+op->score4+op->score5; op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0;op->next=NULL;head=insert(head,op); returnhead;}structstudent*ca(structstudent*head)/*插入功能*/{structstudent*op=NEW;charc;printf("請輸入名字:"); gets(op->name); printf("請輸入學號:"); scanf("%d",&op->num); c=getchar();printf("請輸入性別:"); scanf("%c",&op->sex);printf("請輸入C語言成績:");scanf("%d",&op->score1);printf("請輸入高數(shù)成績:");scanf("%d",&op->score2);printf("請輸入大學語文成績:");scanf("%d",&op->score3); printf("請輸入?yún)R編成績:");scanf("%d",&op->score4); printf("請輸入中近史成績:");scanf("%d",&op->score5); c=getchar();op->next=NULL;head=insert(head,op);op->sum=op->score1+op->score2+op->score3+op->score4+op->score5; op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0; returnhead;}voidhelp()/*軟件說明*/{system("cls"); printf("\n說明\n\n\n"); printf("運行本軟件需先使用新建文件或打開文件功能,否則運行出錯。\n");printf("每次使用修改插入刪除等功能后需重新打開文件讀取數(shù)據(jù),\n"); printf("否則得到的數(shù)據(jù)是未保存的。每運行完一個功能會自動返回到\n"); printf("主界面。\n\n\n"); printf("\n\n 純屬原創(chuàng)禁止抄襲\n\n");system("pause"); system("cls");}/*-------------------主函數(shù)菜單--------------------------------------*/intmain(){system("color9f"); charc,r; structstudent*head; intz; while(1) { printf("\n"); printf("········╔------------------------╗········\n\n"); printf("········歡迎使用學生成績管理系統(tǒng)········\n\n"); printf("········╚------------------------╝········\n\n"); printf("***********************************菜單***********************************\n\n"); printf("==========================================================================\n\n"); printf("*******1.新建文件*****2.打開文件*******"); printf("\n\n"); printf("*******3.修改功能*****4.插入功能*******"); printf("\n\n"); printf("*******5.查詢功能*****6.刪除功能*******"); printf("\n\n"); printf("*******7.排名功能*****8.關(guān)于我們*******"); printf("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度棉花種植基地合作經(jīng)營合同4篇
- 寵物店裝修墊資合同
- 二零二五版環(huán)保設(shè)施實時監(jiān)控安裝工程合同3篇
- 通訊設(shè)備居間代理提成承諾
- 廣告經(jīng)營合同
- 房屋租賃定金意向協(xié)議合同范本
- 用能權(quán)交易制度對企業(yè)環(huán)境績效的影響機制與效應研究
- 二零二五年度煤礦安全監(jiān)控系統(tǒng)升級改造合同4篇
- 城市園林中歷史名勝的保護利用研究
- 2025年度拆遷安置房交易資金監(jiān)管合同4篇
- 自媒體內(nèi)容版權(quán)合同
- 獵聘-2024高校畢業(yè)生就業(yè)數(shù)據(jù)報告
- 2024虛擬現(xiàn)實產(chǎn)業(yè)布局白皮書
- 車站值班員(中級)鐵路職業(yè)技能鑒定考試題及答案
- JTG∕T E61-2014 公路路面技術(shù)狀況自動化檢測規(guī)程
- 高中英語短語大全(打印版)
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運算300題
- 寺院消防安全培訓課件
- 比摩阻-管徑-流量計算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗
評論
0/150
提交評論