版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 學(xué)生成績統(tǒng)計管理</b></p><p><b> 一、課程設(shè)計內(nèi)容</b></p><p> 輸入一個班級的學(xué)生的基本信息(包括學(xué)號,姓名,性別,5門課程成績)。</p><p> 按姓名或者學(xué)號查找、修改、刪除和保存各個學(xué)生的信息。</p><p> 計算每
2、個學(xué)生各門功課總分和平均分,按學(xué)號或總分排序輸出每個學(xué)生的基本信息及總分、平均分和名次。</p><p> 計算全班各門功課的平均分,顯示每門課程中低于平均分的每一個學(xué)生的學(xué)號,姓名,性別,科目,成績。</p><p> 顯示每門科目中,成績在90分以上的學(xué)生信息,以及每門科目中不及格的學(xué)生信息。</p><p><b> 用菜單進(jìn)行管理</b
3、></p><p> 只有正確輸入用戶名密碼才能使用此系統(tǒng)。</p><p> 所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b> 二、課程設(shè)計目的</b></p><p> 1. 培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識獨(dú)立完成課題的能力。 </p><
4、p> 2. 使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計思想和方法。</p><p> 3. 提高對工作認(rèn)真負(fù)責(zé)、一絲不茍,對同學(xué)團(tuán)結(jié)友愛,協(xié)作攻關(guān)的基本素質(zhì)。 </p><p> 4. 培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實事求是、有錯必改,用實踐來檢驗理論,全方位考慮問題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。 </p><p> 5. 培
5、養(yǎng)從資料文獻(xiàn)、科學(xué)實驗中獲得知識的能力,提高從別人經(jīng)驗中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。 </p><p> 6. 對掌握知識的深度、運(yùn)用理論去處理問題的能力、實驗?zāi)芰?、課程設(shè)計能力、書面及口頭表達(dá)能力進(jìn)行考核</p><p><b> 三、工具/準(zhǔn)備工作</b></p><p> 查閱相關(guān)資料,借鑒他人
6、寫過的程序,從中找到突破口。從程序中了解需要的各種函數(shù)準(zhǔn)備,再進(jìn)一步獲悉該函數(shù)的功能與使用方法。</p><p><b> 功能分析:</b></p><p> 菜單管理:分列功能選項,學(xué)生信息的構(gòu)建,查找、修改、刪除和保存各個學(xué)生的信息,計算各科總分,平均分,并排序,查找優(yōu)秀學(xué)生信息及不及格學(xué)生信息。</p><p> 功能實現(xiàn):實現(xiàn)各
7、個功能。</p><p> 寫入文件:所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b> 四、設(shè)計步驟、方法</b></p><p><b> 4. 1 菜單管理</b></p><p><b> 菜單顯示: </b></p&
8、gt;<p> 4. 2 輸入一個班級的學(xué)生信息</p><p> 4. 2. 1 創(chuàng)建一個鏈表</p><p><b> 結(jié)構(gòu)體:</b></p><p> struct student</p><p><b> {</b></p><p> in
9、t num; //學(xué)號</p><p> float score[Subject_n]; //五個學(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é)號查找、修改、刪除和保存各個學(xué)生的信息</p><p> 4. 3. 1 查找學(xué)生信息</p><p> 4. 3. 2 修改學(xué)生信息</p><p> 4. 3. 3 刪除學(xué)生信息</p><p> 4. 4 計算總分和平均分</p&g
12、t;<p> 4. 4. 1 總分</p><p> 4. 4. 2 平均分</p><p> ( 1 ) 學(xué)生的平均成績</p><p> ( 2 ) 學(xué)科的平均成績</p><p> 4. 5 按總分/學(xué)號排序</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 每門課程低于平均分的學(xué)生</p><p><b> 4. 8 寫入文本</b></p><p><b> 4. 9 密碼管理</b></p>&l
14、t;p><b> 五、設(shè)計結(jié)果及分析</b></p><p><b> 5. 1 輸入密碼</b></p><p> 5. 2輸入學(xué)生信息</p><p> 5. 3 根據(jù)所需功能選擇選項</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è)計結(jié)論</b></p><p> 在實現(xiàn)程序過程中往往不會一帆風(fēng)順,學(xué)會調(diào)試才是關(guān)鍵。</p
17、><p> 注意使用子函數(shù),在子函數(shù)中分段調(diào)試實現(xiàn)階段性成功,能更好地走向終點(diǎn)。</p><p> 編譯成功不代表程序運(yùn)行的完整性,在運(yùn)行程序時,要更多的實現(xiàn)各種各樣的特殊值,提高程序的可行性。</p><p><b> 七、問題及心得體會</b></p><p> 常見問題:變量的定義,在循環(huán)過程中變量的初始化。&
18、lt;/p><p> 程序測試時出現(xiàn)的問題:</p><p> 1.科目平均成績計算錯誤;</p><p> 2.科目平均成績有時會亂碼;</p><p><b> 3.不顯示總成績;</b></p><p> 4.修改信息沒有提示;</p><p> 5.修改信息
19、要輸入兩次學(xué)號;</p><p> 6.文件操作時,按提示操作確無法創(chuàng)建也無法打開文件;</p><p> 7.文件在程序結(jié)束前不能保存;</p><p><b> 8.不能讀取文件;</b></p><p> 9.查找不存在的學(xué)生時程序崩潰;</p><p> 10.第一次顯示鏈表時平
20、均成績沒有計算出來;</p><p> 11.按總成績排序時,第一個和最后一個無法參與排序;</p><p><b> 12.沒有名次;</b></p><p> 13.文件輸出格式不對;</p><p> 14.人數(shù)大于科目數(shù)時,明明有數(shù)據(jù)輸出卻同時輸出了無;</p><p> 15.
21、寫入文件后,鏈表變成空;</p><p> 16.鏈表為空時,修改學(xué)生信息仍然工作,但寫入信息后程序崩潰;</p><p> 17.主菜單,第二次輸入操作數(shù)字時,如果輸入的不是數(shù)字,程序陷入死循環(huán);</p><p> 18.修改不存在的學(xué)生信息,雖然提示了學(xué)生不存在,但修改信息確依然工作,輸入信息后程序崩潰;</p><p> 19.
22、兩個學(xué)生的排序無法進(jìn)行;</p><p> 20.不只是主菜單,其他要求輸入數(shù)字的菜單,如果收入的不是數(shù)字,程序陷入死循環(huán);</p><p> 21.輸入密碼的時候,如果輸入的密碼過長,程序崩潰;</p><p> 22.輸入學(xué)生姓名過長時,程序崩潰;</p><p> 23.類似問題就是輸入字符串較長的時候,程序一般都會崩潰;<
23、;/p><p> 24.多重錯誤信息的輸出;</p><p> 25.學(xué)生姓名為四個漢字時,因為姓名與性別連在一起,輸出文件后再讀取文件時,把姓名和性別當(dāng)成一個字符串,導(dǎo)致后面所有的信息讀取錯誤;26.修改學(xué)生信息時,輸出的確認(rèn)信息里,沒有重新計算總分,平均分;27.0個文件讀取錯誤;28.當(dāng)添加相同學(xué)號的學(xué)生時,不會提示重復(fù);29.添加學(xué)生后,沒有計算總分與平均分;30.修改了
24、代碼的格式,簡化了排序函數(shù);31.經(jīng)過按成績排序后,添加相同學(xué)號的學(xué)生,不會提示重復(fù);32.修改信息,如果不想修改,增加了可跳過的功能;</p><p> 在程序?qū)崿F(xiàn)的過程中,需要考慮變量的范圍,一般程序順序思考過程中,要全面考慮。另外在實現(xiàn)程序的過程中要學(xué)會注釋,使得在重新審視程序時能更方便快捷。其中,在書寫程序師趨向于人性化,一步一步步驟化。解決實際問題是需要樣樣斟酌,考慮不同的可能性。</p&g
25、t;<p> 八、對本設(shè)計過程及方法、手段的改進(jìn)建議</p><p> 本程序?qū)τ脩糨斎氲南拗品矫嫒杂腥毕?,?dāng)接受不符合要求或過長的字符(串)時,程序仍然可能出現(xiàn)異常。建議對每一次的輸入都進(jìn)行檢驗,并使用更安全的函數(shù)scanf_s(); fgets(); 等函數(shù)取代scanf(); gets(); 以確保程序的穩(wěn)定運(yùn)行。</p><p> 程序顯示過程中沒有清屏操作,每
26、一次顯示都在上一次的結(jié)果后進(jìn)行,導(dǎo)致程序多次執(zhí)行顯示任務(wù)后,界面變得很混亂。建議在某些顯示任務(wù)執(zhí)行前,使用system(“cls”); 函數(shù)執(zhí)行清屏操作。</p><p> 程序在讀取文件或者創(chuàng)建新的成績單時,覆蓋了上一次的成績單,但是程序并沒有將上一次保存在內(nèi)存中的數(shù)據(jù)清理,也沒有釋放被占用的內(nèi)存。這就有可能導(dǎo)致程序在執(zhí)行多次讀取或創(chuàng)建操作后,占用的內(nèi)存越來越大。建議在覆蓋后立即釋放不需要的內(nèi)存,節(jié)約空間。&
27、lt;/p><p><b> 參考文獻(xiàn)</b></p><p> [1] 賈宗璞、許合利.《C語言程序設(shè)計(第二版)》.人民郵電出版社,2014年.</p><p><b> [2] 百度百科.</b></p><p><b> 附錄I</b></p><
28、;p><b> 分工:</b></p><p> 程序設(shè)計、編寫、修改和測試,撰寫報告。</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é)號\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é)號\t姓名\t 性別\t該科成績\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é)生成績統(tǒng)計管理程序\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("輸入錯誤,請重新輸入:");</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密碼錯誤,你還有%d次機(jī)會輸入\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錯誤次數(shù)過多,程序終止!\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此操作會覆
54、蓋原有的成績單!是否繼續(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請輸入學(xué)生的學(xué)號(輸入 0 結(jié)束):");</p><p> while(scanf("%d", &x) != 1)</p><p><b> {</b></p><p> printf("輸入錯誤,請重新輸入:");</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("請輸入學(xué)生的姓名:");</p><p> scanf_s("%s", &(*p).name,16);</p><p> printf("
58、請輸入學(xué)生的姓別:");</p><p> scanf_s("%s", &(*p).sex,3);</p><p> printf("請輸入學(xué)生五門課的成績:");</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("輸入錯誤,請重新輸入:");</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("請輸入學(xué)生的學(xué)號(輸入 0 結(jié)束):");</p><p> while(scanf("%d", &x) != 1)</p><p><b> {</b></p><p> printf("輸入錯誤,請重新輸入:&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請輸入學(xué)生的學(xué)號:");</p><p> while(scanf("%d",&(*new_stu).num) != 1)</p><p><b> {</b>
67、;</p><p> printf("輸入錯誤,請重新輸入:");</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("請輸入學(xué)生的姓名:");</p>
75、;<p> scanf_s("%s", &(*new_stu).name,16);</p><p> printf("請輸入學(xué)生的姓別:");</p><p> scanf_s("%s", &(*new_stu).sex,3);</p><p> printf(&quo
76、t;請輸入學(xué)生五門課的成績:");</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("輸入錯誤,請重新輸入:");</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請輸入需要刪除的學(xué)生的學(xué)號:");</p><p> while(scanf("%d", &am
86、p;num) != 1)</p><p><b> {</b></p><p> printf("輸入錯誤,請重新輸入:");</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("輸入錯誤,請重新輸入:");</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此操作會覆蓋原有的成績單!是否繼續(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請輸入要查找的學(xué)生的學(xué)號:");</p><p> while(scanf("%d&quo
127、t;,&num) != 1)</p><p><b> {</b></p><p> printf("輸入錯誤,請重新輸入:");</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請重新輸入學(xué)生信息\n");</p><p> printf("請輸入學(xué)生的姓名(直接按回車鍵可跳過此步驟):");</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("請輸入學(xué)生的姓別(直接按回車鍵可跳過此步驟):");</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("請輸入學(xué)生五門課的成績(輸入 -1 可跳過此步驟):");</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、入錯誤,請重新輸入:");</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++語言課程設(shè)計 ----學(xué)生成績統(tǒng)計
- c語言課程設(shè)計學(xué)生成績統(tǒng)計設(shè)計報告
- c語言課程設(shè)計--學(xué)生成績管理
- c語言課程設(shè)計--- 學(xué)生成績管理
- c語言課程設(shè)計報告-- 學(xué)生成績統(tǒng)計系統(tǒng)
- c語言課程設(shè)計--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計---學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計----學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)--c語言課程設(shè)計
- c語言課程設(shè)計--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計---學(xué)生成績管理1
- c語言課程設(shè)計--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計---學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
評論
0/150
提交評論