版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目錄一、 需求分析 1二、 概要設(shè)計(jì) 11、 系統(tǒng)功能組成框圖12、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)23、 模塊說明2三、 詳細(xì)設(shè)計(jì)21、 模塊設(shè)計(jì)代碼22、 程序詳細(xì)代碼33、 函數(shù)的調(diào)用11四、 調(diào)試分析11五、 用戶手冊(cè)11六、 測(cè)試數(shù)據(jù)15七、 附件16八、 心得體會(huì)16學(xué)生成績管理系統(tǒng)一、需求分析1、此程序里包含著多個(gè)屬性,所以類型為結(jié)構(gòu)體類型2、程序內(nèi)的對(duì)象調(diào)入和調(diào)出都需循環(huán)體類型的文件操作實(shí)現(xiàn)3、學(xué)生成績的信息修改、插入、刪除都需保存,而保存需進(jìn)行文件的讀寫操作4、排序操作可采用冒泡排序和選擇法排序5、主函數(shù)中根據(jù)不同選擇執(zhí)行不同操作可通過“多分支選擇語句switch”實(shí)現(xiàn)二、概要設(shè)計(jì)學(xué)生成績管理
2、系統(tǒng)1系統(tǒng)功能組成框圖輸入系統(tǒng)修改系統(tǒng)輸出系統(tǒng)刪除系統(tǒng)插入系統(tǒng)按學(xué)號(hào)查詢系統(tǒng)升序按姓名降序按學(xué)號(hào)排序系統(tǒng)升序按總分降序2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)成績管理系統(tǒng)為結(jié)構(gòu)體struct 結(jié)構(gòu)體名定義名字的長度,學(xué)號(hào)的長度定義性別三門課程的成績總分平均分3模塊說明1、每一條記錄包括一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、3門成績、總分、平均成績。2、輸入功能:可以一次完成規(guī)定數(shù)字記錄的輸入。3、輸出功能:完成全部學(xué)生記錄的顯示。4、插入功能:按學(xué)生的學(xué)號(hào)、姓名、性別、三門課程成績、總分、平均分插入學(xué)生信息。5、修改功能:選擇學(xué)生進(jìn)行修改6、排序功能:按學(xué)生總分進(jìn)行升降排序。7、查找功能:完成按姓名或者學(xué)號(hào)查找學(xué)生記錄,并顯示。
3、8、刪除功能:選擇學(xué)生的學(xué)號(hào)或者名字進(jìn)行核對(duì),確定之后刪除三、 詳細(xì)設(shè)計(jì)1、模塊設(shè)計(jì)代碼 input( )/*輸入模塊*/ output( )/*輸出模塊*/ search( )/*查詢模塊*/ modify( )/*修改模塊*/ delete( )/*刪除模塊*/ insert( )/*插入模塊*/ sort()/*排序模塊*/2、程序詳細(xì)代碼#include /*頭文件(源文件)*/struct stu /*定義一個(gè)結(jié)構(gòu)體用來存放學(xué)生學(xué)號(hào)、三門課成績、總分及平均成績*/char num10; /*學(xué)號(hào)長度*/ char name10; /*姓名長度*/char sex; /*性別類型*/
4、int score3; /*三門課程類型*/* float sum; /*總分類型*/ float ave; /*平均分類型*/student55; int n=3; /*定義n=3*/main() /*主函數(shù)*/char ch; /*定義類型*/while(1) /*循環(huán)(死循環(huán))主界面*/system(cls);printf(nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn);clrscr(); printf(*n);printf( welcome to the students management system n ); printf(*n);printf( * * n)
5、; printf( * * n); printf( * * n); printf( *1:input*n); printf( *2:output*n); printf( *3:search*n); printf( *4:delete*n); printf( *5:insert*n); printf( *6:modify* n ); printf( *7:sort* n); printf( *8:exit* n); printf( * n); printf( * n); printf( * n); printf( * n); printf( *n); printf(nntt please inp
6、ut the option:n); ch=getchar(); switch(ch) case1: input();break; case2: output();break; case3: search();break; case4: delete();break; case5: insert();break; case6: modify();break; case7: sort();break; case8: exit(0);input() /*輸入*/file *fp; /*定義指針 文件*/int i,j; /*定義i j*/if(fp=fopen(stu.dat,w+)=null) /
7、*若文件打不開*/printf(cannot open the file); /*顯示cannot open the file */exit(0); /*退出*/printf(please input the students imformation:n); /*顯示“請(qǐng)輸入學(xué)生信息”*/for(i=0;in;i+) /*從0開始,i3 一次次疊加*/printf(the %d,i+1); /*輸出第幾個(gè)學(xué)生*/ printf(the number:); /*輸出學(xué)號(hào)*/ scanf(%s,studenti.num); /*輸入這個(gè)學(xué)生的學(xué)號(hào)*/ printf(n the name:); /*
8、輸出學(xué)生姓名*/ scanf(%s,); /*輸入這個(gè)學(xué)生的姓名*/ printf(n the sex: ); /*輸出性別*/ scanf( %c,&studenti.sex); /*輸入這個(gè)學(xué)生的性別*/ printf(n the 3 score:); /*輸出3門科目的分?jǐn)?shù)*/ studenti.sum=0; /*定義這個(gè)學(xué)生剛開始的總分為0*/ for(j=0;j3;j+) /*j從0開始,j3,一次次疊加*/ printf(the score %d :,j+1); /*輸出科目的分?jǐn)?shù)*/ scanf(%d,&studenti.scorej); /*輸入這個(gè)學(xué)
9、生的學(xué)號(hào)和科目*/ studenti.sum+=studenti.scorej; /*學(xué)生的總分,sum+的意思為從0開始疊加*/ studenti.ave=studenti.sum/3.0; /*學(xué)生的平均分*/ fwrite(student,sizeof(struct stu),n,fp); /*將這個(gè)學(xué)生的信息寫入指針文件中*/getch();fclose(fp); /*關(guān)閉文件*/output() /*輸出文件*/file *fp; /*定義指針 文件*/ int i; /*定義i */ if(fp=fopen(stu.dat,r)=null) /*若文件打不開*/printf(can
10、not open the file); /*顯示cannot open the file */ exit(0); /*退出*/ n=0; while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; /*循環(huán),每讀取時(shí)都為一次*/ printf(num name sex score1 score2 score3 sum ave n); /*若讀取成功則輸出學(xué)生的學(xué)號(hào)姓名性別 123科目成績 總分平均分*/ for(i=0;in;i+) printf(%st%st%ct%dt%dt%dt%ft%fn,studenti.num,studenti.nam
11、e, studenti.sex,studenti.score0,studenti.score1,studenti.score2, studenti.sum,studenti.ave); /*輸出學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/ fclose(fp); /*關(guān)閉文件*/ getch(); insert() /*插入*/ file *fp; /*定義指針文件*/int i,j,m,x; /*定義i,j,m,x*/if(fp=fopen(stu.dat,ab+)=null) /*若文件打不開*/printf(cannot open the file); /*顯示cannot op
12、en the file */ exit(0);/*退出*/n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; /*循環(huán),每讀取時(shí)都為一次*/printf(please input the the count:n); /*請(qǐng)輸入數(shù)字*/scanf(%d,&m); /*輸入增加的數(shù)目*/printf(please input the students information:n); /*請(qǐng)輸入插入學(xué)生的信息*/for(i=n;in+m;i+) printf(the %d,i+1); /*輸出一項(xiàng)*/ printf(the number
13、:); /*輸出數(shù)字*/ scanf(%s,studenti.num); /*輸入插入學(xué)生的學(xué)號(hào)*/ printf(nthe name:); /*學(xué)生姓名*/ scanf(%s,); /*輸入插入學(xué)生的姓名*/ printf(n the sex: ); /*學(xué)生性別*/ scanf( %c,&studenti.sex); /*輸入插入學(xué)生的性別*/ printf(n the 3 score:); /*三門課程的成績*/ studenti.sum=0;/*總分初始為0*/ for(j=0;j3;j+) printf(the score %d :,j+1);/*課程的成績
14、累加*/ scanf(%d,&studenti.scorej); /*輸入插入學(xué)生第幾門成績*/ studenti.sum+=studenti.scorej; /*學(xué)生總分=三門課程成績的累加*/ studenti.ave=studenti.sum/3.0; /*學(xué)生平均分=學(xué)生的總分/3*/ for(i=n;in+m;i+) fwrite(&studenti,sizeof(struct stu),1,fp); /*保存輸入學(xué)生信息的數(shù)據(jù)進(jìn)文件*/fclose(fp); /*關(guān)閉文件*/modify() /*修改*/file *fp; /*定義指針文件*/int i,j;char name10
15、; /*定義name的長度*/ char ch; if(fp=fopen(stu.dat,rb+)=null) /*若文件打不開*/ printf(cannot open the file); /*顯示cannot open the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+;printf(please input the name of the student who should be modify!n); /*請(qǐng)輸入要修改學(xué)生的姓名*/printf(ttt the nam
16、e:n); /*輸出姓名*/scanf(%s,name); /*姓名*/for(i=0;in;i+)if(strcmp(name,)=0) /*比較輸入學(xué)生的姓名是否符合文件中學(xué)生的姓名*/printf(%st%st%ct%dt%dt%dt%ft%fn,studenti.num,,studenti.sex,studenti.score0,studenti.score1,studenti.score2,studenti.sum,studenti.ave); /*輸出學(xué)生的學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/break;print
17、f(nttt do you modify it, y/n? ); /*你要修改嗎?y/n*/scanf( %c,&ch); if(ch=y|ch=y) /*y=y*/printf(the %d,i+1); /*第一項(xiàng)*/ printf(the number:); /*學(xué)號(hào)*/ canf(%s,studenti.num); /*輸入學(xué)生的學(xué)號(hào)*/ rintf(nthe name:); /*姓名*/ canf(%s,); /*輸入學(xué)生的姓名*/ rintf(nthe sex: (mf) ); /*學(xué)生的性別(mf)*/ canf( %c,&studenti.sex); /
18、*輸入學(xué)生的性別*/ printf(n the 3 score:); /*三門課程的成績*/ tudenti.sum=0; /*初始總分為0*/ for(j=0;jnumn); /*輸出“選擇1為學(xué)號(hào)排序”*/printf(ntt 2-sumn); /*輸出“選擇2為總分排序”*/printf(please select:n); /*請(qǐng)選擇*/scanf( %c,&ch1); /*輸入1*/if(ch1=1) /*若選擇1 */printf(nt u-up); /*輸出u=up*/printf(nt d-down); /*輸出d=down*/printf(please select:n); /
19、*輸出“請(qǐng)選擇”*/scanf( %c,&ch2); /*輸入選擇*/if(ch2=u|ch2=u) /*選擇中的u=u*/for(i=0;in-1;i+) for(j=0;j0) /*比較studentj.num和studentj+1.num的長度0*/m=studentj;studentj=studentj+1;studentj+1=m; /*小點(diǎn)的數(shù)字覆蓋前面大點(diǎn)的數(shù)字,大點(diǎn)的數(shù)字往后移*/ if(ch2=d|ch2=d) /*選擇中的d=d*/for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(strcmp(studentj.num,studentj+1.nu
20、m)up); /*輸出u=up*/ printf(nt d-down); /*輸出d=down*/ printf(please select:n); /*輸出“請(qǐng)選擇”*/ scanf( %c,&ch2);/*輸入選擇*/ if(ch2=u|ch2=u)/*選擇中的u=u*/for(i=0;in-1;i+) for(j=0;jstudentj+1.sum) /*比較studentj.sumstudentj+1.sum的長度*/m=studentj;studentj=studentj+1;studentj+1=m; /*小點(diǎn)的數(shù)字覆蓋前面大點(diǎn)的數(shù)字,大點(diǎn)的數(shù)字往后移*/ if(ch2=d|ch2
21、=d) /*選擇中的d=d*/for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(studentj.sumstudentj+1.sum) /*若studentj.sumnumn); /*選擇1 為學(xué)號(hào)*/printf(ntt 2-namen); /*選擇2為姓名*/printf(please select:n); /*請(qǐng)選擇*/scanf( %c,&ch); /*輸入選擇*/if(ch=1) /*選擇1*/printf(please input the num: n); /*顯示請(qǐng)輸入學(xué)號(hào)*/ scanf(%s,num); /*輸入學(xué)號(hào)*/ for(i=0;in;i+
22、) if(strcmp(num,studenti.num)=0) /*比較num和studengti.num的長度*/ printf(%st%st%ct%dt%dt%dt%ft%fn,studenti.num,,studenti.sex, studenti.score0,studenti.score1,studenti.score2,studenti.sum,studenti.ave); /*輸入學(xué)生的學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/ if(ch=2) /*選擇2*/ printf(please input the name: n); /*顯示請(qǐng)輸
23、入姓名*/scanf(%s,name); /*輸入姓名*/ for(i=0;in;i+) if(strcmp(name,)=0)/*比較輸入的姓名是否符合*/ printf(%st%st%ct%dt%dt%dt%ft%fn,studenti.num,,studenti.sex, studenti.score0,studenti.score1,studenti.score2,studenti.sum,studenti.ave); /*輸出學(xué)生的學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/ fclose(fp); /*關(guān)閉文件*/dele
24、te() /*刪除*/file *fp; /*定義指針文件*/ int i,j,k; char ch1,ch2;char num10,name10; if(fp=fopen(stu.dat,rb)=null) /*若文件打不開*/printf(cannot open the file!n);/*顯示cannot open the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; printf(please input the students information:n); /*顯
25、示請(qǐng)輸入學(xué)生的信息*/ printf(tt 1=numt2=namen); /*1為學(xué)號(hào),2為姓名*/ scanf( %c,&ch1); /*選擇*/ f(ch1=1) /*選擇1*/ printf(please input the students num=n); /*請(qǐng)輸入學(xué)生的學(xué)號(hào)*/ scanf(%s,num); /*輸入學(xué)生的學(xué)號(hào)*/ for(i=0;in;i+) if(strcmp(num,studenti.num)=0) /*若um,studenti.num相等*/ printf(%st%st%ct%dt%dt%dt%ft%ftn, studenti.num,studenti.n
26、ame,studenti.sex,studenti.score0, studenti.score1,studenti.score2,studenti.sum,studenti.ave);/*輸出學(xué)生的學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/ k=i; /*用k標(biāo)記i的地址*/ if(ch1=2) /*選擇2*/printf(please input the students name=n); /*顯示請(qǐng)輸入學(xué)生的姓名*/ canf(%s,name); /*輸入姓名*/ or(i=0;in;i+)if(strcmp(name,)=0) /*若name,stu
27、符合*/printf(%st%st%ct%dt%dt%dt%ft%fn,studenti.num,,studenti.score0,studenti.score0,studenti.score2,studenti.sum,studenti.ave); /*輸出學(xué)生的學(xué)號(hào),姓名,性別,成績,成績,成績,總分,平均分*/ break;printf(n delete this student y/n?); /*顯示 是否刪除該學(xué)生*/scanf( %c,&ch2);if(ch2=y|ch2=y) /*y y 都可以.是個(gè)或邏輯結(jié)構(gòu)*/for(i=i+1;
28、in;i+) udenti-1=studenti; fclose(fp); /*關(guān)閉文件*/if(fp=fopen(stu.dat,wb)=null) /*若文件打不開*/printf(cannot open the file!n);exit(0); /*顯示cannot open the file 并退出*/for(i=0;in-1;i+) if(ik) fwrite(&studenti,sizeof(struct stu),1,fp); /*若ik,則從i+1個(gè)開始輸出*/fclose(fp); /*關(guān)閉文件*/3、函數(shù)的調(diào)用mian input output insert search
29、modify sort 四、調(diào)試分析1)剛開始沒有那個(gè)初始化函數(shù),程序運(yùn)行后,沒有輸入任何數(shù)據(jù)就試得去執(zhí)行顯示功能,結(jié)果顯示的是一些亂碼!加入初始化函數(shù)后,這種現(xiàn)象也隨之消失。(2)剛開始執(zhí)行輸入函數(shù),按學(xué)號(hào)順序輸入十個(gè)學(xué)生的成績,輸完后執(zhí)行顯示功能,學(xué)生成績記錄是按學(xué)號(hào)的反順序顯示的,試著在其中增加一些語句,希望能把學(xué)號(hào)按正常順序顯示,但暫時(shí)沒有成功,所以在輸入成績時(shí)只能按學(xué)號(hào)反順序輸入,最后就按學(xué)號(hào)正常順序輸出了。(3)剛開始時(shí),先把成績按平均分排序,再插入一個(gè)學(xué)生的成績,執(zhí)行顯示功能,雖然插入的學(xué)生的成績能正常插入,但該學(xué)生的名次為0。后來,在插入成績之后,調(diào)用排序函數(shù),把所有成績重新排序一次。(4)在輸入函數(shù)中設(shè)了一個(gè)無限循環(huán),可以輸入無數(shù)個(gè)學(xué)生的成績信息,當(dāng)學(xué)號(hào)為0的時(shí)候則停止輸入。(5)輸入太多個(gè)學(xué)生的成績時(shí),屏幕顯示不能控制為一頁一頁顯示,所以為了方便起見,不要輸入太多記錄(6)在沒有輸入任何信息的情況下,去執(zhí)行排序功能,最后顯示有一個(gè)記錄,學(xué)號(hào)、姓名為空白,成績都為0,名次為1。(7)在輸入選項(xiàng)時(shí)不能輸入字母,否則會(huì)死循環(huán),建議不要亂輸字母。五、用戶手冊(cè)1. 本程序運(yùn)行環(huán)境為dos操作系統(tǒng),執(zhí)行文件為student.exe。2. 進(jìn)入程序student.exe后進(jìn)入界面,直接進(jìn)入系統(tǒng)菜單 圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物業(yè)維修管理制度
- 制造業(yè)人力資源管理策略
- 銀行營銷策略總結(jié)精準(zhǔn)定位提升競爭力
- 2024年熱鬧的元宵節(jié)大班教案
- 2024年美術(shù)教案篇1
- 分公司資質(zhì)掛靠協(xié)議書(2篇)
- DB33T 2305-2021 大中型體育場(chǎng)館智慧化建設(shè)和管理規(guī)范
- 乳腺癌保乳手術(shù)
- 注塑產(chǎn)品項(xiàng)目可行性研究報(bào)告
- 《導(dǎo)彈驅(qū)逐艦》課件
- 貴州省遵義市播州區(qū)2023-2024學(xué)年二年級(jí)上學(xué)期數(shù)學(xué)期末質(zhì)量監(jiān)測(cè)試卷
- 2024版智能硬件產(chǎn)品研發(fā)合作協(xié)議3篇
- 甘肅省蘭州市第一中學(xué)2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 草地調(diào)查規(guī)劃學(xué)知到智慧樹章節(jié)測(cè)試課后答案2024年秋東北農(nóng)業(yè)大學(xué)
- 2024年礦產(chǎn)資源開發(fā)咨詢服務(wù)合同
- 上海市2024-2025學(xué)年高一語文下學(xué)期期末試題含解析
- 國家電網(wǎng)招聘之財(cái)務(wù)會(huì)計(jì)類題庫含完整答案(必刷)
- 建筑物拆除的拆除工廠考核試卷
- 廣東省深圳市2023-2024學(xué)年高二上學(xué)期期末測(cè)試英語試卷(含答案)
- 乘風(fēng)化麟 蛇我其誰 2025XX集團(tuán)年終總結(jié)暨頒獎(jiǎng)盛典
- 人教版一年級(jí)數(shù)學(xué)2024版上冊(cè)期末測(cè)評(píng)(提優(yōu)卷一)(含答案)
評(píng)論
0/150
提交評(píng)論