版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 學(xué)生成績(jī)統(tǒng)計(jì)管理</b></p><p><b> 一、課程設(shè)計(jì)內(nèi)容</b></p><p> 輸入一個(gè)班級(jí)的學(xué)生的基本信息(包括學(xué)號(hào),姓名,性別,5門(mén)課程成績(jī))。</p><p> 按姓名或者學(xué)號(hào)查找、修改、刪除和保存各個(gè)學(xué)生的信息。</p><p> 計(jì)算每
2、個(gè)學(xué)生各門(mén)功課總分和平均分,按學(xué)號(hào)或總分排序輸出每個(gè)學(xué)生的基本信息及總分、平均分和名次。</p><p> 計(jì)算全班各門(mén)功課的平均分,顯示每門(mén)課程中低于平均分的每一個(gè)學(xué)生的學(xué)號(hào),姓名,性別,科目,成績(jī)。</p><p> 顯示每門(mén)科目中,成績(jī)?cè)?0分以上的學(xué)生信息,以及每門(mén)科目中不及格的學(xué)生信息。</p><p><b> 用菜單進(jìn)行管理</b
3、></p><p> 只有正確輸入用戶名密碼才能使用此系統(tǒng)。</p><p> 所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b> 二、課程設(shè)計(jì)目的</b></p><p> 1. 培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。 </p><
4、p> 2. 使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)思想和方法。</p><p> 3. 提高對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)團(tuán)結(jié)友愛(ài),協(xié)作攻關(guān)的基本素質(zhì)。 </p><p> 4. 培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來(lái)檢驗(yàn)理論,全方位考慮問(wèn)題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。 </p><p> 5. 培
5、養(yǎng)從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高從別人經(jīng)驗(yàn)中找到解決問(wèn)題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。 </p><p> 6. 對(duì)掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰?、課程設(shè)計(jì)能力、書(shū)面及口頭表達(dá)能力進(jìn)行考核</p><p><b> 三、工具/準(zhǔn)備工作</b></p><p> 查閱相關(guān)資料,借鑒他人
6、寫(xiě)過(guò)的程序,從中找到突破口。從程序中了解需要的各種函數(shù)準(zhǔn)備,再進(jìn)一步獲悉該函數(shù)的功能與使用方法。</p><p><b> 功能分析:</b></p><p> 菜單管理:分列功能選項(xiàng),學(xué)生信息的構(gòu)建,查找、修改、刪除和保存各個(gè)學(xué)生的信息,計(jì)算各科總分,平均分,并排序,查找優(yōu)秀學(xué)生信息及不及格學(xué)生信息。</p><p> 功能實(shí)現(xiàn):實(shí)現(xiàn)各
7、個(gè)功能。</p><p> 寫(xiě)入文件:所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b> 四、設(shè)計(jì)步驟、方法</b></p><p><b> 4. 1 菜單管理</b></p><p><b> 菜單顯示: </b></p&
8、gt;<p> 4. 2 輸入一個(gè)班級(jí)的學(xué)生信息</p><p> 4. 2. 1 創(chuàng)建一個(gè)鏈表</p><p><b> 結(jié)構(gòu)體:</b></p><p> struct student</p><p><b> {</b></p><p> in
9、t num; //學(xué)號(hào)</p><p> float score[Subject_n]; //五個(gè)學(xué)科的分?jǐn)?shù)</p><p> float summary; //總分</p><p> float aver_score; //平均分</p><p> c
10、har name[16]; //學(xué)生姓名 </p><p> char sex[3]; //性別</p><p> struct student *next;</p><p><b> };</b></p><p><b> 輸入
11、學(xué)生信息: </b></p><p> 4. 3 按學(xué)號(hào)查找、修改、刪除和保存各個(gè)學(xué)生的信息</p><p> 4. 3. 1 查找學(xué)生信息</p><p> 4. 3. 2 修改學(xué)生信息</p><p> 4. 3. 3 刪除學(xué)生信息</p><p> 4. 4 計(jì)算總分和平均分</p&g
12、t;<p> 4. 4. 1 總分</p><p> 4. 4. 2 平均分</p><p> ( 1 ) 學(xué)生的平均成績(jī)</p><p> ( 2 ) 學(xué)科的平均成績(jī)</p><p> 4. 5 按總分/學(xué)號(hào)排序</p><p> 4. 6 篩選優(yōu)秀和不及格學(xué)生的信息</p>
13、<p> 4. 6. 1 篩選優(yōu)秀學(xué)生</p><p> 4. 6. 2 篩選不及格學(xué)生</p><p> 4. 7 每門(mén)課程低于平均分的學(xué)生</p><p><b> 4. 8 寫(xiě)入文本</b></p><p><b> 4. 9 密碼管理</b></p>&l
14、t;p><b> 五、設(shè)計(jì)結(jié)果及分析</b></p><p><b> 5. 1 輸入密碼</b></p><p> 5. 2輸入學(xué)生信息</p><p> 5. 3 根據(jù)所需功能選擇選項(xiàng)</p><p><b> 5. 4 文件讀取</b></p>
15、<p><b> 5. 5 排序</b></p><p><b> 5. 6 刪除</b></p><p><b> 5.7 添加</b></p><p><b> 5. 8 查找</b></p><p> 5. 9 低于平均分&l
16、t;/p><p> 5. 10 高于90分</p><p><b> 5. 11 不及格</b></p><p> 5.12 按0結(jié)束程序</p><p><b> 六、設(shè)計(jì)結(jié)論</b></p><p> 在實(shí)現(xiàn)程序過(guò)程中往往不會(huì)一帆風(fēng)順,學(xué)會(huì)調(diào)試才是關(guān)鍵。</p
17、><p> 注意使用子函數(shù),在子函數(shù)中分段調(diào)試實(shí)現(xiàn)階段性成功,能更好地走向終點(diǎn)。</p><p> 編譯成功不代表程序運(yùn)行的完整性,在運(yùn)行程序時(shí),要更多的實(shí)現(xiàn)各種各樣的特殊值,提高程序的可行性。</p><p><b> 七、問(wèn)題及心得體會(huì)</b></p><p> 常見(jiàn)問(wèn)題:變量的定義,在循環(huán)過(guò)程中變量的初始化。&
18、lt;/p><p> 程序測(cè)試時(shí)出現(xiàn)的問(wèn)題:</p><p> 1.科目平均成績(jī)計(jì)算錯(cuò)誤;</p><p> 2.科目平均成績(jī)有時(shí)會(huì)亂碼;</p><p><b> 3.不顯示總成績(jī);</b></p><p> 4.修改信息沒(méi)有提示;</p><p> 5.修改信息
19、要輸入兩次學(xué)號(hào);</p><p> 6.文件操作時(shí),按提示操作確無(wú)法創(chuàng)建也無(wú)法打開(kāi)文件;</p><p> 7.文件在程序結(jié)束前不能保存;</p><p><b> 8.不能讀取文件;</b></p><p> 9.查找不存在的學(xué)生時(shí)程序崩潰;</p><p> 10.第一次顯示鏈表時(shí)平
20、均成績(jī)沒(méi)有計(jì)算出來(lái);</p><p> 11.按總成績(jī)排序時(shí),第一個(gè)和最后一個(gè)無(wú)法參與排序;</p><p><b> 12.沒(méi)有名次;</b></p><p> 13.文件輸出格式不對(duì);</p><p> 14.人數(shù)大于科目數(shù)時(shí),明明有數(shù)據(jù)輸出卻同時(shí)輸出了無(wú);</p><p> 15.
21、寫(xiě)入文件后,鏈表變成空;</p><p> 16.鏈表為空時(shí),修改學(xué)生信息仍然工作,但寫(xiě)入信息后程序崩潰;</p><p> 17.主菜單,第二次輸入操作數(shù)字時(shí),如果輸入的不是數(shù)字,程序陷入死循環(huán);</p><p> 18.修改不存在的學(xué)生信息,雖然提示了學(xué)生不存在,但修改信息確依然工作,輸入信息后程序崩潰;</p><p> 19.
22、兩個(gè)學(xué)生的排序無(wú)法進(jìn)行;</p><p> 20.不只是主菜單,其他要求輸入數(shù)字的菜單,如果收入的不是數(shù)字,程序陷入死循環(huán);</p><p> 21.輸入密碼的時(shí)候,如果輸入的密碼過(guò)長(zhǎng),程序崩潰;</p><p> 22.輸入學(xué)生姓名過(guò)長(zhǎng)時(shí),程序崩潰;</p><p> 23.類似問(wèn)題就是輸入字符串較長(zhǎng)的時(shí)候,程序一般都會(huì)崩潰;<
23、;/p><p> 24.多重錯(cuò)誤信息的輸出;</p><p> 25.學(xué)生姓名為四個(gè)漢字時(shí),因?yàn)樾彰c性別連在一起,輸出文件后再讀取文件時(shí),把姓名和性別當(dāng)成一個(gè)字符串,導(dǎo)致后面所有的信息讀取錯(cuò)誤;26.修改學(xué)生信息時(shí),輸出的確認(rèn)信息里,沒(méi)有重新計(jì)算總分,平均分;27.0個(gè)文件讀取錯(cuò)誤;28.當(dāng)添加相同學(xué)號(hào)的學(xué)生時(shí),不會(huì)提示重復(fù);29.添加學(xué)生后,沒(méi)有計(jì)算總分與平均分;30.修改了
24、代碼的格式,簡(jiǎn)化了排序函數(shù);31.經(jīng)過(guò)按成績(jī)排序后,添加相同學(xué)號(hào)的學(xué)生,不會(huì)提示重復(fù);32.修改信息,如果不想修改,增加了可跳過(guò)的功能;</p><p> 在程序?qū)崿F(xiàn)的過(guò)程中,需要考慮變量的范圍,一般程序順序思考過(guò)程中,要全面考慮。另外在實(shí)現(xiàn)程序的過(guò)程中要學(xué)會(huì)注釋,使得在重新審視程序時(shí)能更方便快捷。其中,在書(shū)寫(xiě)程序師趨向于人性化,一步一步步驟化。解決實(shí)際問(wèn)題是需要樣樣斟酌,考慮不同的可能性。</p&g
25、t;<p> 八、對(duì)本設(shè)計(jì)過(guò)程及方法、手段的改進(jìn)建議</p><p> 本程序?qū)τ脩糨斎氲南拗品矫嫒杂腥毕?,?dāng)接受不符合要求或過(guò)長(zhǎng)的字符(串)時(shí),程序仍然可能出現(xiàn)異常。建議對(duì)每一次的輸入都進(jìn)行檢驗(yàn),并使用更安全的函數(shù)scanf_s(); fgets(); 等函數(shù)取代scanf(); gets(); 以確保程序的穩(wěn)定運(yùn)行。</p><p> 程序顯示過(guò)程中沒(méi)有清屏操作,每
26、一次顯示都在上一次的結(jié)果后進(jìn)行,導(dǎo)致程序多次執(zhí)行顯示任務(wù)后,界面變得很混亂。建議在某些顯示任務(wù)執(zhí)行前,使用system(“cls”); 函數(shù)執(zhí)行清屏操作。</p><p> 程序在讀取文件或者創(chuàng)建新的成績(jī)單時(shí),覆蓋了上一次的成績(jī)單,但是程序并沒(méi)有將上一次保存在內(nèi)存中的數(shù)據(jù)清理,也沒(méi)有釋放被占用的內(nèi)存。這就有可能導(dǎo)致程序在執(zhí)行多次讀取或創(chuàng)建操作后,占用的內(nèi)存越來(lái)越大。建議在覆蓋后立即釋放不需要的內(nèi)存,節(jié)約空間。&
27、lt;/p><p><b> 參考文獻(xiàn)</b></p><p> [1] 賈宗璞、許合利.《C語(yǔ)言程序設(shè)計(jì)(第二版)》.人民郵電出版社,2014年.</p><p><b> [2] 百度百科.</b></p><p><b> 附錄I</b></p><
28、;p><b> 分工:</b></p><p> 程序設(shè)計(jì)、編寫(xiě)、修改和測(cè)試,撰寫(xiě)報(bào)告。</p><p><b> 附錄II</b></p><p><b> 源代碼:</b></p><p> #include<stdio.h></p>
29、<p> #include<string.h></p><p> #include<malloc.h></p><p> #define Subject_n 5</p><p> #define LEN sizeof(struct student)</p><p> struct student
30、</p><p><b> {</b></p><p><b> int num;</b></p><p> float score[Subject_n];</p><p> float summary; </p><p> float aver_score;<
31、;/p><p> char name[16];</p><p> char sex[3];</p><p> struct student *next;</p><p><b> };</b></p><p> typedef struct student stu;</p>&
32、lt;p> const static char Format_head[]={"學(xué)號(hào)\t姓名\t 性別\t科目1\t科目2\t科目3\t科目4\t科目5\t總分\t平均分\n"};</p><p> const static char Format_head_2[]={"\n學(xué)號(hào)\t姓名\t 性別\t該科成績(jī)\n"};</p><p>
33、 const static char Format_data[]={"%-8d%-10s %-3s\t"};</p><p> const static char PassWord[16]={"123456\n"};</p><p> float sub_ave_s[Subject_n]={0};</p><p> s
34、tu *Creat(stu *head);</p><p> stu *Insert(stu *head);</p><p> stu *Insert_File(int rf_stu_n);</p><p> stu *Delete(stu *head);</p><p> stu *Sort(stu *head);</p>
35、;<p> stu *File_R_And_W(stu *head,const char *type);</p><p> stu *Find_Stu(stu *head);</p><p> stu *Change_Value(stu *head);</p><p> int Count_Stu(stu *head);</p>
36、<p> void Summary_Score(stu *head);</p><p> void Stu_Aver_Score(stu *head,int count);</p><p> void Sub_Aver_Score(stu *head);</p><p> void Display(stu *head);</p>&l
37、t;p> void Show_Under_Average(stu *head);</p><p> void Show_Higher(stu *head);</p><p> void Show_Fail(stu *head);</p><p> void Show_One(stu *one);</p><p> void S
38、how_Subject_Average(stu *head,float *sub_ave_s);</p><p> void Show_By_Condition(stu *head,int type);</p><p> void help(int type);</p><p> int Log_In();</p><p> int
39、main(void)</p><p><b> {</b></p><p> stu *head = NULL;</p><p> int Access=0;</p><p> int Access_n=3;</p><p> int operate = 0;</p>&l
40、t;p> char File_type[3];</p><p> int Show_type=0;</p><p> printf("學(xué)生成績(jī)統(tǒng)計(jì)管理程序\n");</p><p> Access=Log_In();</p><p> while(Access_n)</p><p>
41、<b> {</b></p><p> if(Access>0)</p><p><b> {</b></p><p><b> help(1);</b></p><p> while (scanf("%d", &operate)==
42、1)</p><p><b> {</b></p><p> switch (operate)</p><p><b> {</b></p><p> case 1:head = Creat(head);Display(head);break;</p><p> c
43、ase 2:Display(head);break;</p><p> case 3:head = Insert(head);break;</p><p> case 4:head = Delete(head);break;</p><p> case 5:Show_By_Condition(Find_Stu(head),4);break;</p>
44、<p> case 6:Change_Value(head);Sub_Aver_Score(head);break;</p><p> case 7:Stu_Aver_Score(head,Count_Stu(head));Display(head);break;</p><p> case 8:Sub_Aver_Score(head);Show_Subject_Ave
45、rage(head,sub_ave_s);break;</p><p> case 9:help(4);Sort(head);Display(head);break;</p><p> case 10:help(2);</p><p> while(scanf("%d",&Show_type) != 1)</p>&l
46、t;p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p> Show_By_Condition(head,Show_type)
47、;break;</p><p> case 11:help(3);scanf_s("%s",File_type,3);</p><p> head=File_R_And_W(head,File_type);break;</p><p> case 0:return 0;</p><p><b> defa
48、ult:;</b></p><p><b> }</b></p><p><b> help(1);</b></p><p><b> }</b></p><p> fflush(stdin);</p><p><b>
49、 }</b></p><p> else if(Access_n>1)</p><p><b> {</b></p><p> Access_n--;</p><p> printf("\n密碼錯(cuò)誤,你還有%d次機(jī)會(huì)輸入\n",Access_n);</p>&l
50、t;p> Access=Log_In();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("\n錯(cuò)誤次數(shù)過(guò)多,程序終止!\n"); &l
51、t;/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }<
52、/b></p><p> stu *Creat(stu *head)</p><p><b> {</b></p><p> stu *head_old = head;</p><p><b> stu *p;</b></p><p> stu *tail;&
53、lt;/p><p><b> int x=0;</b></p><p> int score_n;</p><p><b> char y_n;</b></p><p> tail = head = NULL;</p><p> printf("\n此操作會(huì)覆
54、蓋原有的成績(jī)單!是否繼續(xù)?(y/n) ");</p><p> getchar();</p><p> y_n=getchar();</p><p> if(y_n == 'y' || y_n == 'Y')</p><p><b> {</b></p>&
55、lt;p> printf("\n請(qǐng)輸入學(xué)生的學(xué)號(hào)(輸入 0 結(jié)束):");</p><p> while(scanf("%d", &x) != 1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p&
56、gt;<p> fflush(stdin);</p><p><b> }</b></p><p> while (x != 0)</p><p><b> {</b></p><p> p = (stu *)malloc(LEN);</p><p>
57、 (*p).num = x;</p><p> if (head == NULL) head = p;</p><p> printf("請(qǐng)輸入學(xué)生的姓名:");</p><p> scanf_s("%s", &(*p).name,16);</p><p> printf("
58、請(qǐng)輸入學(xué)生的姓別:");</p><p> scanf_s("%s", &(*p).sex,3);</p><p> printf("請(qǐng)輸入學(xué)生五門(mén)課的成績(jī):");</p><p> for(score_n=0;score_n<Subject_n;score_n++)</p><
59、;p><b> {</b></p><p> while(scanf("%f", &(*p).score[score_n]) != 1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p>
60、<p> fflush(stdin);</p><p><b> }</b></p><p><b> }</b></p><p> if (tail != NULL) (*tail).next = p;</p><p><b> tail = p;</b>
61、;</p><p> printf("請(qǐng)輸入學(xué)生的學(xué)號(hào)(輸入 0 結(jié)束):");</p><p> while(scanf("%d", &x) != 1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:&qu
62、ot;);</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> }</b></p><p> if (tail != NULL) (*tail).next = NULL;</p><p> Stu_Aver
63、_Score(head,Count_Stu(head));</p><p> Sub_Aver_Score(head);</p><p> return head;</p><p><b> }</b></p><p><b> else</b></p><p>&
64、lt;b> {</b></p><p> return head_old;</p><p><b> }</b></p><p><b> }</b></p><p> stu *Insert(stu *head)</p><p><b>
65、; {</b></p><p> int score_n;</p><p> stu *new_stu = (stu *)malloc(LEN);</p><p> stu *find = NULL;</p><p> stu *last = NULL;</p><p> stu *traver
66、sal = NULL; </p><p> find = head;</p><p> printf("\n請(qǐng)輸入學(xué)生的學(xué)號(hào):");</p><p> while(scanf("%d",&(*new_stu).num) != 1)</p><p><b> {</b>
67、;</p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p> if (find != NULL)</p><p><b> {</b>&
68、lt;/p><p> for ( ; find!=NULL&&(*find).num < (*new_stu).num ; find = (*find).next )</p><p><b> {</b></p><p> last = find;</p><p><b> }<
69、/b></p><p> for(traversal = head ; traversal != NULL ; traversal=(*traversal).next )</p><p><b> {</b></p><p> if((*new_stu).num == (*traversal).num)</p><
70、;p><b> {</b></p><p> printf("\n該學(xué)生已存在\n");</p><p> free(new_stu);</p><p> new_stu=NULL;</p><p> return head;</p><p><b>
71、 }</b></p><p><b> }</b></p><p> if (find != NULL)</p><p><b> {</b></p><p> if(find != head) (*last).next = new_stu;</p><p
72、> else head = new_stu;</p><p> (*new_stu).next = find;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><
73、p> (*last).next = new_stu;</p><p> (*new_stu).next = NULL;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p>
74、<p><b> {</b></p><p> head = new_stu;</p><p> (*new_stu).next = NULL;</p><p><b> }</b></p><p> printf("請(qǐng)輸入學(xué)生的姓名:");</p>
75、;<p> scanf_s("%s", &(*new_stu).name,16);</p><p> printf("請(qǐng)輸入學(xué)生的姓別:");</p><p> scanf_s("%s", &(*new_stu).sex,3);</p><p> printf(&quo
76、t;請(qǐng)輸入學(xué)生五門(mén)課的成績(jī):");</p><p> for(score_n=0;score_n<Subject_n;score_n++)</p><p><b> {</b></p><p> while(scanf("%f", &(*new_stu).score[score_n]) != 1
77、)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> }</b&g
78、t;</p><p> Stu_Aver_Score(new_stu,1);</p><p> if(new_stu != NULL)</p><p><b> {</b></p><p> printf("\n添加的學(xué)生信息:\n");</p><p> Show_
79、By_Condition(new_stu,4);</p><p><b> }</b></p><p> return head;</p><p><b> }</b></p><p> stu *Insert_File(int rf_stu_n)</p><p>&
80、lt;b> {</b></p><p> stu *rf = NULL;</p><p> stu *head = NULL;</p><p><b> int n=0;</b></p><p> if(rf_stu_n<1)</p><p><b>
81、 {</b></p><p> return head;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> rf = (stu *)malloc
82、(LEN);</p><p><b> head=rf;</b></p><p> for(n=0;n<rf_stu_n-1;n++)</p><p><b> {</b></p><p> (*rf).next = (stu *)malloc(LEN);</p><
83、;p> rf=(*rf).next;</p><p><b> }</b></p><p> (*rf).next=NULL;</p><p><b> }</b></p><p> return head;</p><p><b> }<
84、/b></p><p> stu *Delete(stu *head)</p><p><b> {</b></p><p> int num = 0;</p><p> stu *find = NULL;</p><p> stu *last = NULL;</p>
85、<p> find = head;</p><p> if(head != NULL)</p><p><b> {</b></p><p> printf("\n請(qǐng)輸入需要?jiǎng)h除的學(xué)生的學(xué)號(hào):");</p><p> while(scanf("%d", &am
86、p;num) != 1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p> for ( ;
87、 find != NULL && (*find).num != num ; find = (*find).next)</p><p><b> {</b></p><p> last = find;</p><p><b> }</b></p><p> if (find !
88、= NULL && (*find).num == num)</p><p><b> {</b></p><p> if (find == head) head = (*head).next;</p><p> else (*last).next = (*find).next;</p><p>
89、free(find);</p><p> printf("\n已刪除\n"); </p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> pr
90、intf("\nERROR:NotFound!\n");</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p
91、><p> printf("\nERROR:The list is NULL!\n");</p><p> return head;</p><p><b> }</b></p><p> return head;</p><p><b> }</b>
92、;</p><p> stu *Sort(stu *head)</p><p><b> {</b></p><p> stu *find = NULL;</p><p> stu *tail = NULL;</p><p> stu *next = NULL;</p>&
93、lt;p><b> stu temp;</b></p><p> int type=0;</p><p> find = head;</p><p> next = find;</p><p> while(scanf("%d",&type) != 1)</p>
94、<p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p> if(type==1)</p><p>
95、;<b> {</b></p><p> if (find != NULL)</p><p><b> {</b></p><p> if(head->next==NULL) return head;</p><p> for(find=head;find!=NULL;find=fi
96、nd->next);</p><p> tail=find;</p><p> while(tail!=head->next)</p><p><b> {</b></p><p> for(find=head;find->next!=tail;find=(*find).next)</p&
97、gt;<p><b> {</b></p><p> next=(*find).next;</p><p> if((*find).summary<(*next).summary)</p><p><b> {</b></p><p> temp=(*next);<
98、;/p><p> (*next)=(*find);</p><p> (*find)=temp;</p><p> temp.next=(*next).next;</p><p> (*next).next=(*find).next;</p><p> (*find).next=temp.next;&
99、lt;/p><p><b> }</b></p><p><b> }</b></p><p> tail=find;</p><p><b> }</b></p><p><b> }</b></p><
100、p> return head;</p><p><b> }</b></p><p> else if(type==2)</p><p><b> {</b></p><p> if(find != NULL)</p><p><b> {<
101、;/b></p><p> if(head->next==NULL) return head;</p><p> for(find=head;find!=NULL;find=find->next);</p><p> tail=find;</p><p> while(tail!=head->next)<
102、/p><p><b> {</b></p><p> for(find=head;find->next!=tail;find=(*find).next)</p><p><b> {</b></p><p> next=(*find).next;</p><p>
103、 if((*find).num>(*next).num)</p><p><b> {</b></p><p> temp=(*next);</p><p> (*next)=(*find);</p><p> (*find)=temp;</p><p> temp.next=(*
104、next).next;</p><p> (*next).next=(*find).next;</p><p> (*find).next=temp.next;</p><p><b> }</b></p><p><b> }</b></p><p> tail=
105、find;</p><p><b> }</b></p><p><b> }</b></p><p> return head;</p><p><b> }</b></p><p> else printf("\nERROR\n
106、");</p><p><b> }</b></p><p> stu* File_R_And_W(stu *head,const char *type)</p><p><b> {</b></p><p> FILE *read_f=NULL;</p><p
107、> FILE *write_f=NULL;</p><p> stu *p=NULL;</p><p> stu *head_new=head;</p><p> int rf_stu_n=0;</p><p> int sub_n=0;</p><p> char file_name[128];&l
108、t;/p><p> char temp[128];</p><p><b> char y_n;</b></p><p> if(strcmp(type,"r")==0 || strcmp(type,"R")==0)</p><p><b> {</b>&
109、lt;/p><p> getchar();</p><p> printf("\n此操作會(huì)覆蓋原有的成績(jī)單!是否繼續(xù)?(y/n) ");</p><p> y_n=getchar();</p><p> if(y_n == 'y' || y_n == 'Y')</p>&l
110、t;p><b> {</b></p><p> printf("文件名:");</p><p> getchar();</p><p> gets(file_name);</p><p> read_f=fopen(file_name,"r");</p>
111、<p> if(read_f==NULL)</p><p><b> {</b></p><p> printf("\nERROR:This file cannot be opened!\n");</p><p><b> }</b></p><p><
112、;b> else</b></p><p><b> {</b></p><p> fscanf(read_f,"%d\n",&rf_stu_n);</p><p> p=Insert_File(rf_stu_n);</p><p> head_new=p;</
113、p><p> fgets(temp,100,read_f);</p><p> while (p!=NULL&&!feof(read_f))</p><p><b> {</b></p><p> fscanf(read_f,"%d%s%s",&(*p).num,&
114、(*p).name,&(*p).sex);</p><p> for(sub_n=0;sub_n<Subject_n;sub_n++)</p><p><b> {</b></p><p> fscanf(read_f,"%f",&(*p).score[sub_n]);</p>&l
115、t;p><b> }</b></p><p> fscanf(read_f,"%f%f",&(*p).summary,&(*p).aver_score);</p><p> p = (*p).next;</p><p><b> }</b></p><p
116、> Display(head_new);</p><p><b> }</b></p><p> fclose(read_f);</p><p> return head_new;</p><p><b> }</b></p><p><b>
117、else</b></p><p><b> {</b></p><p> return head_new;</p><p><b> }</b></p><p><b> }</b></p><p> else if( (strcm
118、p(type,"w")==0 || strcmp(type,"W")==0) && head!=NULL)</p><p><b> {</b></p><p> getchar();</p><p> printf("文件名:");</p><
119、;p> gets(file_name);</p><p> write_f=fopen(file_name,"w");</p><p><b> p=head;</b></p><p> if(write_f==NULL)</p><p><b> {</b>&l
120、t;/p><p> printf("\nERROR:This file cannot be opened!\n");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
121、;<p> fprintf(write_f,"%d\n",Count_Stu(head));</p><p> fprintf(write_f,Format_head);</p><p><b> do</b></p><p><b> {</b></p><p
122、> fprintf(write_f,Format_data,(*p).num,(*p).name,(*p).sex);</p><p> for(sub_n=0;sub_n<Subject_n;sub_n++)</p><p><b> {</b></p><p> fprintf(write_f,"%5.1f\t
123、",(*p).score[sub_n]);</p><p><b> }</b></p><p> fprintf(write_f,"%5.1f\t%5.1f\n",(*p).summary,(*p).aver_score);</p><p> p = (*p).next;</p><p&
124、gt; } while (p != NULL);</p><p><b> }</b></p><p> fclose(write_f);</p><p><b> }</b></p><p> else printf("\nERROR!\n");</p>
125、<p> return head_new;</p><p><b> }</b></p><p> stu *Find_Stu(stu *head)</p><p><b> {</b></p><p><b> int num;</b></p>
126、;<p> stu *find = head;</p><p> if (head != NULL)</p><p><b> {</b></p><p> printf("\n請(qǐng)輸入要查找的學(xué)生的學(xué)號(hào):");</p><p> while(scanf("%d&quo
127、t;,&num) != 1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p><
128、;b> do</b></p><p><b> {</b></p><p> if((*find).num == num) break;</p><p> else find = (*find).next;</p><p> } while (find != NULL);</p>
129、<p> if(find == NULL)printf("\nERROR:NotFound!\n");</p><p><b> }</b></p><p> else printf("\nERROR:The list is NULL!\n");</p><p> return fin
130、d;</p><p><b> }</b></p><p> stu *Change_Value(stu *head)</p><p><b> {</b></p><p> stu *change=NULL;</p><p><b> stu temp;
131、</b></p><p> int score_n;</p><p> change=Find_Stu(head);</p><p> if(change!=NULL)</p><p><b> {</b></p><p> temp = *change;</p>
132、<p> getchar();</p><p> Show_One(change);</p><p> printf("\n請(qǐng)重新輸入學(xué)生信息\n");</p><p> printf("請(qǐng)輸入學(xué)生的姓名(直接按回車鍵可跳過(guò)此步驟):");</p><p> gets((*cha
133、nge).name);</p><p> if(strcmp((*change).name,"")==0)</p><p><b> {</b></p><p> strcpy((*change).name,temp.name);</p><p><b> }</b>&l
134、t;/p><p> printf("請(qǐng)輸入學(xué)生的姓別(直接按回車鍵可跳過(guò)此步驟):");</p><p> gets((*change).sex);</p><p> if(strcmp((*change).sex,"")==0)</p><p><b> {</b></
135、p><p> strcpy((*change).sex,temp.sex);</p><p><b> }</b></p><p> printf("請(qǐng)輸入學(xué)生五門(mén)課的成績(jī)(輸入 -1 可跳過(guò)此步驟):");</p><p> for(score_n=0;score_n<Subject_n;
136、score_n++)</p><p><b> {</b></p><p> while(scanf("%f", &(*change).score[score_n]) != 1)</p><p><b> {</b></p><p> printf("輸
137、入錯(cuò)誤,請(qǐng)重新輸入:");</p><p> fflush(stdin);</p><p><b> }</b></p><p> if((*change).score[0] == -1)</p><p><b> {</b></p><p> (*cha
138、nge).score[0]=temp.score[0];</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> Stu_Aver_Score(change,1);</p&g
139、t;<p> printf("\n修改的學(xué)生信息:\n");</p><p> Show_By_Condition(change,4);</p><p><b> }</b></p><p> return change; </p><p><b> }</b&
140、gt;</p><p> int Count_Stu(stu *head)</p><p><b> {</b></p><p> stu *p = head;</p><p> int count=0;</p><p> if (head != NULL)</p><
141、;p><b> {</b></p><p><b> do</b></p><p><b> {</b></p><p><b> count++;</b></p><p> p = (*p).next;</p><p&
142、gt; } while (p != NULL);</p><p><b> }</b></p><p> return count;</p><p><b> }</b></p><p> void Summary_Score(stu *head)</p><p>
143、<b> {</b></p><p> stu *p = head;</p><p> int score_n=0;</p><p> if (head != NULL)</p><p><b> {</b></p><p><b> do</b&
144、gt;</p><p><b> {</b></p><p> for(score_n=0,(*p).summary=0;score_n<Subject_n;score_n++)</p><p> (*p).summary += (*p).score[score_n];</p><p> p = (*p).
145、next;</p><p> } while (p != NULL);</p><p><b> }</b></p><p><b> }</b></p><p> void Stu_Aver_Score(stu *head,int count)</p><p>&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++語(yǔ)言課程設(shè)計(jì) ----學(xué)生成績(jī)統(tǒng)計(jì)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生成績(jī)統(tǒng)計(jì)設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理
- c語(yǔ)言課程設(shè)計(jì)--- 學(xué)生成績(jī)管理
- c語(yǔ)言課程設(shè)計(jì)報(bào)告-- 學(xué)生成績(jī)統(tǒng)計(jì)系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)--c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)---學(xué)生成績(jī)管理1
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論