版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 課程名稱 程序設(shè)計(jì)基礎(chǔ)C語(yǔ)言 </p><p> 設(shè)計(jì)題目 成績(jī)記錄簿 </p><p> 姓 名 楊國(guó)俊 </p><p> 專 業(yè) 計(jì)算機(jī)工程 </p><p> 班 級(jí)
2、 </p><p> 學(xué) 號(hào) </p><p> 指導(dǎo)教師 </p><p> 日期 2012.6.25 ~7.6 </p><p><b> 目錄</b></p><p><b> 一、目的及要求4<
3、;/b></p><p> 二、課程設(shè)計(jì)內(nèi)容4</p><p><b> 三、總體設(shè)計(jì)5</b></p><p> 3.1 功能模塊設(shè)計(jì)5</p><p> 3.1.1成績(jī)記錄簿執(zhí)行的主流程5</p><p> 3.1.2輸入信息模塊5</p><p&
4、gt; 3.1.3修改成績(jī)模塊5</p><p> 3.1.4刪除模塊6</p><p> 3.1.5查學(xué)生成績(jī)模塊6</p><p> 3.1.6查班成績(jī)表模塊6</p><p> 3.1.7入文件模塊6</p><p> 3.1.8取文件模塊6</p><p> 3
5、.1.9出模塊。6</p><p> 3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)9</p><p> 3.2.1 stu 結(jié)構(gòu)體9</p><p> 3.2.2 全局變量9</p><p> 3.3 函數(shù)功能描述10</p><p> 1)init()10</p><p> 2)input_li
6、st()10</p><p> 3)insert()10</p><p> 4)input_info()10</p><p> 5)check_number(char* s)和same_numder(char* s)10</p><p> 6)check_name(char* s)10</p><p>
7、; 7)check_number2(char* s)和same_number2(student*p,int i)11</p><p> 8)int cheak_result(float s)和cheak_credit(float s)11</p><p> 9)void add_result()11</p><p> 10)search_delete(
8、)、delete_stu(student* s)和 student*searchfront_stu()11</p><p> 11)seach_findstudent()、 output_stuinfo(student* p)12</p><p> 12)seach_findclass()、output_classinfo(int i)12</p><p>
9、; 13)save_tofile()、output_tofile(FILE* fp, student* p)12</p><p> 14)load_file()12</p><p> 15)end()、free_list(student* p)13</p><p> 四、 程序?qū)崿F(xiàn)13</p><p> 4.1 源碼分析1
10、3</p><p> 1)程序預(yù)處理13</p><p> 2).主函數(shù)main15</p><p> 3).程序初始化16</p><p> 4).各種合法性檢測(cè)16</p><p> 5).輸入數(shù)據(jù)(添加)18</p><p> 6).修改成績(jī)22</p>
11、<p> 7).刪除成績(jī)25</p><p> 8).查詢信息(班級(jí)和個(gè)人)27</p><p><b> 查詢班級(jí)32</b></p><p> 9).保存和打開文件32</p><p> 10).退出系統(tǒng)35</p><p> 五、結(jié)論及體會(huì)42</
12、p><p><b> 參考文獻(xiàn)43</b></p><p><b> 一、目的及要求</b></p><p><b> 1、目的</b></p><p> 本課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語(yǔ)言》課程后進(jìn)行的一次全面的綜合練習(xí)。
13、本課程設(shè)計(jì)的目的和任務(wù):</p><p> 鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握;</p><p> 掌握C語(yǔ)言編程和程序調(diào)試的基本技能;</p><p> 利用C語(yǔ)言進(jìn)行基本的軟件設(shè)計(jì);</p><p> 掌握書寫程序設(shè)計(jì)說(shuō)明文檔的能力</p><p> 提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力。<
14、;/p><p> 2. 課程設(shè)計(jì)要求 </p><p> 分析課程設(shè)計(jì)題目的要求; </p><p> 寫出詳細(xì)設(shè)計(jì)說(shuō)明; </p><p> 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行; </p><p> 設(shè)計(jì)完成的軟件要便于操作和使用,有整齊、美觀的使用界面; </p><p> 設(shè)計(jì)完
15、成后提交課程設(shè)計(jì)報(bào)告和源代碼文件的電子文檔。 </p><p><b> 二、課程設(shè)計(jì)內(nèi)容</b></p><p><b> 題目四:成績(jī)記錄簿</b></p><p><b> 設(shè)計(jì)要求:</b></p><p><b> 基本要求:</b>&l
16、t;/p><p><b> 添加成績(jī) </b></p><p><b> 刪除成績(jī) </b></p><p><b> 查詢學(xué)生成績(jī) </b></p><p><b> 查詢班級(jí)成績(jī) </b></p><p><b>
17、 退出 </b></p><p><b> 拓展功能:</b></p><p><b> 寫入文件</b></p><p><b> 讀取文件</b></p><p><b> 創(chuàng)新(自擬)功能:</b></p><
18、;p> 程序?qū)崿F(xiàn)的其它功能由個(gè)人自擬。</p><p> 2. 設(shè)計(jì)要求具體說(shuō)明 基本功能: </p><p> 成績(jī)記錄簿中記錄以下數(shù)據(jù):學(xué)號(hào)、姓名、課程編號(hào)、課程名稱、成績(jī)、學(xué)分,所有成績(jī)都以百分制計(jì)分;輸入信息時(shí)要檢查數(shù)據(jù)項(xiàng)學(xué)號(hào)、課程編號(hào)、成績(jī)、學(xué)分的合法性,學(xué)號(hào):8位數(shù)字;課程編號(hào):5位數(shù)字;成績(jī):0 ~ 100 之間的整數(shù),學(xué)分: 1~ 5之間的實(shí)型數(shù)。 </p
19、><p> 添加成績(jī):需要輸入學(xué)生的學(xué)號(hào)或姓名、課程編號(hào)及成績(jī),如已有該門課程成績(jī)給出提示; </p><p> 查詢(班級(jí)或個(gè)人)成績(jī): </p><p> 查詢個(gè)人成績(jī):以學(xué)號(hào)或姓名作為關(guān)鍵字,可查詢一個(gè)學(xué)生的所有成績(jī),和已完成的總學(xué)分。 </p><p> 查詢班級(jí)成績(jī):以課程編號(hào)為關(guān)鍵字,成績(jī)表后面要統(tǒng)計(jì)平均分、及格率及全班同學(xué)不
20、同課程在不同分?jǐn)?shù)段分布的人數(shù)及百分比。 </p><p><b> 拓展功能: </b></p><p> a) 程序啟動(dòng)時(shí)先從文件讀入數(shù)據(jù),如果文件中沒有數(shù)據(jù)則給出提示; </p><p> b) 每次修改的數(shù)據(jù)寫入文件。</p><p> 3. 提示 定義合適的結(jié)構(gòu)體類型,使用鏈表或數(shù)組的方式組織數(shù)據(jù)。<
21、;/p><p><b> 三、總體設(shè)計(jì)</b></p><p> 3.1 功能模塊設(shè)計(jì)</p><p> 3.1.1成績(jī)記錄簿執(zhí)行的主流程</p><p> 主要的流程圖如下圖(圖1所示),首先,程序進(jìn)入main函數(shù)程序調(diào)用菜單函數(shù)menu(),在主函數(shù)運(yùn)行時(shí),調(diào)用init()函數(shù)默認(rèn)對(duì)系統(tǒng)進(jìn)行初始化,并將初始化函數(shù)
22、返回的值付給頭指針head,在屏幕上顯示菜單。</p><p> 3.1.2輸入信息模塊</p><p> 執(zhí)行“1.添加”操作時(shí)時(shí),調(diào)用input_list()函數(shù),要求用戶鍵入添加的人數(shù)。進(jìn)入input_list()函數(shù)時(shí),將調(diào)用insert()函數(shù)對(duì)每個(gè)的信息用頭插法建立鏈表節(jié)點(diǎn)并同時(shí)進(jìn)行對(duì)每一個(gè)人的信息進(jìn)行輸入(由insert()函數(shù)調(diào)用input_info()函數(shù)實(shí)現(xiàn))。(如
23、下圖3.1.2)</p><p> 3.1.3修改成績(jī)模塊</p><p> 執(zhí)行“2.修改成績(jī)”時(shí),調(diào)用add_result()函數(shù),要求用戶鍵入要修改的學(xué)生的姓名或者是學(xué)號(hào),然后鍵入要修改的課程編號(hào),在輸入成績(jī)時(shí),如果是已經(jīng)有成績(jī)則提示“已經(jīng)有程序”以后有“是否修改成績(jī)?”的提示。</p><p><b> 3.1.4刪除模塊</b>
24、</p><p> 執(zhí)行“3.刪除”時(shí),用戶輸入要?jiǎng)h除的學(xué)生姓名或?qū)W號(hào),檢查合法性后,調(diào)用查找函數(shù)search_number(char*)(學(xué)號(hào)查找)或search_name(char*)(姓名查找),將返回的鏈表地址給utput_stuinfo(student*)(顯示在屏幕)并且提示用戶是否刪除。如過(guò)刪除,則繼續(xù)將返回的鏈表給delete_stu(student*)函數(shù),將這個(gè)鏈表的下一個(gè)節(jié)點(diǎn)的頭指針連接到
25、這個(gè)鏈表的上一個(gè)尾指針,則刪除成功。</p><p> 3.1.5查學(xué)生成績(jī)模塊</p><p> 調(diào)用seach_findstudent()函數(shù),要求用戶輸入學(xué)號(hào)或者是姓名,通過(guò)check_name()和check_number2()函數(shù)判斷姓名或者學(xué)號(hào)的合法性(即是否姓名為字母,學(xué)號(hào)為)。</p><p> 3.1.6查班成績(jī)表模塊</p>
26、<p> 通過(guò)調(diào)用seach_findclass()函數(shù),要求用戶輸入課程編號(hào)進(jìn)入,通過(guò)課程編號(hào)查找所有節(jié)點(diǎn)的相同課程編號(hào),并且輸出所有學(xué)生的這一課程編號(hào)的成績(jī)、學(xué)分和平均分;成績(jī)表后面要統(tǒng)計(jì)平均分、及格率及全班同學(xué)不同課程在不同分?jǐn)?shù)段分布的人數(shù)及百分比。 </p><p> 3.1.7入文件模塊</p><p> 通過(guò)調(diào)用save_tofile()函數(shù),提示用戶輸入文件名
27、,這里為用戶自己定義,文件以“w”方式,當(dāng)程序開始運(yùn)行時(shí),提示是否打開文件,文件名稱要用戶自己定義。</p><p> 3.1.8取文件模塊</p><p> 通過(guò)load_file()函數(shù),可將本程序保存的數(shù)據(jù)文件在程序重新期待時(shí)讀寫到系統(tǒng)內(nèi)存里,可對(duì)其進(jìn)行查看、編輯、處理等任務(wù)。</p><p><b> 3.1.9出模塊。</b>&
28、lt;/p><p> 退出時(shí),釋放鏈表內(nèi)存。然后exit(0)退出程序。</p><p><b> 1.總體框圖</b></p><p><b> 圖1 總體框圖</b></p><p> 2. 目錄函數(shù)menu()</p><p> 圖2 目錄函數(shù)(menu)流程圖&
29、lt;/p><p><b> 3. 目錄主要源碼</b></p><p> int menu()</p><p><b> {</b></p><p><b> int n;</b></p><p><b> char ch;</b
30、></p><p> printf("************************\n");</p><p> printf("** 成績(jī)記錄簿 **\n");</p><p> printf("************************\n");</p>
31、<p> printf("** 1. 添加 **\n");</p><p> printf("** 2. 修改成績(jī) **\n");</p><p> printf("** 3. 刪除 **\n");</p><p> printf
32、("** 4. 查學(xué)生成績(jī) **\n");</p><p> printf("** 5. 查班成績(jī)表 **\n");</p><p> printf("** 6. 寫入文件 **\n");</p><p> printf("** 7. 讀取文件
33、 **\n");</p><p> printf("** 0. 退出 **\n");</p><p> printf("************************\n");</p><p> if(!SWITCH[3])</p><p><b>
34、 {</b></p><p> SWITCH[3]=1;</p><p> printf("是否打開文件?(y為打開,任意鍵取消!)\n");</p><p> scanf("%c",&ch);</p><p> if(ch=='y'||ch=='Y&
35、#39;)</p><p> load_file();//打開文件 </p><p><b> }</b></p><p> printf("\n\n輸入程序序號(hào):");</p><p> scanf("%d",&n);</p><p&g
36、t;<b> return n;</b></p><p><b> }</b></p><p><b> 4. 源碼解釋</b></p><p> menu()函數(shù)完成打印菜單和接收用戶選擇功能。</p><p><b> 3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b&g
37、t;</p><p> 3.2.1 stu 結(jié)構(gòu)體</p><p> typedef struct stu{</p><p> char number[20];//學(xué)號(hào)</p><p> char name[20];//姓名</p><p> char curriculum_
38、number[CLASS][6];//課程代號(hào) </p><p> float credit[CLASS]; //學(xué)分 </p><p> float result[CLASS];//分?jǐn)?shù) </p><p> float sum;// 總分 </p><p> float ave;
39、//平均分 </p><p> float sum_credit;//總學(xué)分 </p><p> struct stu *next;</p><p><b> }student;</b></p><p> 源碼解釋: 對(duì)結(jié)構(gòu)體使用鏈表處理。</p><p> 3.2.2
40、 全局變量</p><p> char result_name[CLASS][30]={"數(shù)學(xué)","英語(yǔ)","政治","計(jì)算機(jī)"};對(duì)課程的名字進(jìn)行定義。</p><p> int SWITCH[4]={0,0,0,0};為程序設(shè)定開關(guān),方便特定條件下決定部分程序是否運(yùn)行</p><p
41、> char classname[CLASS][6];為了記錄第一次定義的課程編碼 。</p><p> int number_student =0;記錄輸入數(shù)據(jù)的學(xué)生人數(shù) “輸入鏈表 ”即“添加”菜單步驟里做自增,計(jì)算人數(shù)。</p><p> student *head = NULL; 為鏈表的頭指針。</p><p> FILE* fp;
42、為文件指針。</p><p> 3.3 函數(shù)功能描述</p><p><b> 1)init()</b></p><p> 函數(shù)原型student* init(); </p><p> init()函數(shù)用于初始化程序,對(duì)頭函數(shù)進(jìn)行初值的操作。其返回值賦值給頭指針head。</p><p>
43、; 2)input_list() </p><p> 函數(shù)原型void input_list();</p><p> input_list()函數(shù)為輸入鏈表操作的第一步,接收用戶輸入的節(jié)點(diǎn)數(shù)(即記錄的學(xué)生人數(shù))。對(duì)頭插法函數(shù)進(jìn)行插入循環(huán)。</p><p> 3)insert()</p><p> 原型函數(shù)void insert();
44、</p><p> insert()函數(shù)為將數(shù)據(jù)運(yùn)用頭插法插入。</p><p> 4)input_info() </p><p> 原型函數(shù)void input_info(student*p);</p><p> input_info(student*)函數(shù)為給接收到的p指向的節(jié)點(diǎn)輸入數(shù)據(jù)。數(shù)據(jù)有學(xué)號(hào)、姓名、課程代碼(第一次運(yùn)行程
45、序并且沒有一開始讀取文件的時(shí)候執(zhí)行輸入,否則程序內(nèi)部將課程代碼復(fù)制給下一個(gè)學(xué)生的信息里。)、每個(gè)課程代碼對(duì)應(yīng)的課程的分?jǐn)?shù)和學(xué)分,并且自動(dòng)計(jì)算個(gè)人總分、平均分和總學(xué)分。</p><p> 5)check_number(char* s)和same_numder(char* s)</p><p> 原型函數(shù)int check_number(char* s) 和int same_numder(
46、char* s)</p><p> check_number(char* s)是檢測(cè)學(xué)號(hào)是否為8位阿拉伯?dāng)?shù)字。same_numder(char* s)函數(shù)為檢測(cè)這一次輸入的學(xué)號(hào)是否與前面所有學(xué)號(hào)有相同。</p><p> 6)check_name(char* s)</p><p> 函數(shù)原型int check_name(char* s)</p>
47、<p> check_name(char* s)函數(shù)為檢測(cè)輸入的姓名是否合法,是否為空,是否為英文字母。</p><p> 7)check_number2(char* s)和same_number2(student*p,int i)</p><p><b> 函數(shù)原型:</b></p><p> int check_numbe
48、r2(char* s)和check_number2(char* s) </p><p> check_number2(char* s)為檢測(cè)接收的課程編碼是否為5位阿拉伯?dāng)?shù)字。</p><p> same_number2(student*p,int i)檢測(cè)在有輸入課程編碼時(shí),查找輸入的課程編碼是否與原有的課程編碼有相同。</p><p> 8)int che
49、ak_result(float s)和cheak_credit(float s)</p><p><b> 函數(shù)原型:</b></p><p> int cheak_result(char* s)和int cheak_credit(float s)</p><p> cheak_result(char* s)函數(shù)為檢測(cè)輸入的分?jǐn)?shù)是否為1
50、~100;</p><p> cheak_credit(float s)函數(shù)則檢測(cè)學(xué)分是否為大于0且小于5的。</p><p> 9)void add_result()</p><p> 函數(shù)原型void add_result()</p><p> add_result()函數(shù)進(jìn)行修改成績(jī)的操作,用戶輸入學(xué)號(hào),查找是否有學(xué)號(hào),如果有
51、此學(xué)號(hào),則程序查找到這個(gè)學(xué)號(hào)對(duì)應(yīng)的節(jié)點(diǎn),然后要求用戶輸入要修改的課程代號(hào),找到需要修改的課程,輸入成績(jī),最后判斷是否修改,若否則不修改退出此操作。學(xué)分在成績(jī)以后修改。</p><p> 10)search_delete()、delete_stu(student* s)和 student*searchfront_stu()</p><p> 函數(shù)原型void search_delete(
52、)、void delete_stu(student* s) 和student* searchfront_stu(student* n)</p><p> void search_delete()為主函數(shù)調(diào)用的刪除指令,在調(diào)用check_number(char*)和check_name(char*)判斷輸入合法性和正確性后確認(rèn)刪除時(shí),打印要?jiǎng)h除的信息,如果確認(rèn)刪除,則調(diào)用delete_stu(student* s
53、)(刪除接受的s節(jié)點(diǎn)的指令)函數(shù)運(yùn)行student* searchfront_stu(student* n)(返回前一個(gè)節(jié)點(diǎn)的功能),將所要?jiǎng)h除的信息的后一個(gè)鏈表連接到要?jiǎng)h除的信息的前一個(gè)鏈表。</p><p> 11)seach_findstudent()、 output_stuinfo(student* p)</p><p><b> 函數(shù)原型:</b><
54、;/p><p> void seach_findstudent()、void output_stuinfo(student* p)</p><p> seach_findstudent()函數(shù)為查詢查學(xué)生成績(jī)的操作,用戶輸入要查詢的學(xué)生學(xué)號(hào)或者是姓名,調(diào)用check_number(char*)和check_name(char*)判斷輸入合法性和正確性后和判斷是學(xué)號(hào)還是姓名,最后再調(diào)用stu
55、dent*search_number(char*)按學(xué)號(hào)查找,或調(diào)用student* search_name(char*)按姓名查找,若查找到,則返回查找的指針,最后通過(guò)函數(shù)output_stuinfo(student* p)打印學(xué)生信息。</p><p> 12)seach_findclass()、output_classinfo(int i)</p><p> 函數(shù)原型void s
56、each_findclass(),void output_classinfo(int i)</p><p> seach_findclass()函數(shù)為查詢班級(jí)信息的操作,用戶輸入要查詢的課程編碼,在通過(guò)調(diào)用check_number2(char*)檢測(cè)編碼合法性后,執(zhí)行按節(jié)點(diǎn)查找課程編碼位置步驟,然后調(diào)用output_classinfo(int i)(輸出班級(jí)信息)函數(shù),將位置固定,查找head之后所有節(jié)點(diǎn)的同一
57、課程編碼并且輸出。</p><p> 然后計(jì)算head之后的所有節(jié)點(diǎn)的該課程編碼情況計(jì)算統(tǒng)計(jì)平均分、及格率及全班同學(xué)不同課程在不同分?jǐn)?shù)段分布的人數(shù)及百分比并且列出。 </p><p> 13)save_tofile()、output_tofile(FILE* fp, student* p)</p><p> 函數(shù)原型void save_tofile()、voi
58、d output_tofile(FILE* fp, student* p)</p><p> save_tofile()函數(shù)為主函數(shù)調(diào)用,并檢測(cè)輸入合法性。 output_tofile(FILE* fp, student* p)函數(shù)實(shí)現(xiàn)寫入文件操作。</p><p> 14)load_file()</p><p> 函數(shù)原型void load_file()&l
59、t;/p><p> load_file()函數(shù)實(shí)現(xiàn)從文件里將數(shù)據(jù)讀到內(nèi)存里,從而能進(jìn)行對(duì)數(shù)據(jù)的處理。</p><p> 15)end()、free_list(student* p)</p><p> 函數(shù)原型為void end()、void free_list(student* p)</p><p> void end()函數(shù)調(diào)用free
60、_list(student* p)函數(shù)將空間返回內(nèi)存。</p><p><b> 四、 程序?qū)崿F(xiàn)</b></p><p><b> 4.1 源碼分析</b></p><p><b> 1)程序預(yù)處理</b></p><p> #include <stdio.h&g
61、t;</p><p> #include<string.h></p><p> #include <stdlib.h></p><p> #define CLASS 4//課程多少</p><p> #define MALLOC (student*) malloc(sizeof(student))<
62、;/p><p> #define MAX_NO 8//學(xué)號(hào)長(zhǎng)度</p><p> typedef struct stu{</p><p> char number[20];//學(xué)號(hào)</p><p> char name[20];//姓名</p><p> char curriculum_nu
63、mber[CLASS][6];//課程代號(hào) </p><p> float credit[CLASS]; //學(xué)分 </p><p> float result[CLASS];//分?jǐn)?shù) </p><p> float sum;// 總分 </p><p> float ave;//平均分 </p>
64、<p> float sum_credit;//總學(xué)分 </p><p> struct stu *next;</p><p><b> }student;</b></p><p> char result_name[CLASS][30]={"數(shù)學(xué)","英語(yǔ)","政治&
65、quot;,"計(jì)算機(jī)"};</p><p><b> /*開關(guān)*/</b></p><p> int SWITCH[4]={0,0,0,0};</p><p> char classname[CLASS][6];//記錄第一次定義的課程 </p><p> int number_stude
66、nt =0;//記錄輸入數(shù)據(jù)的學(xué)生人數(shù) “輸入鏈表 ”即“添加”菜單步驟里計(jì)算人數(shù)。 </p><p><b> /* 頭指針 */</b></p><p> student *head = NULL;</p><p><b> /*文件指針*/ </b></p><p> FILE
67、* fp; </p><p><b> /*聲明*/ </b></p><p> int menu();//菜單</p><p> student* init();//初始化</p><p> void insert();// 頭插法插入節(jié)點(diǎn)</p><p&
68、gt; void input_list();//(寫入鏈表的操作) </p><p> void input_info(student*);//真正輸入的函數(shù)。</p><p> int check_number(char*);//學(xué)號(hào)檢測(cè)。 </p><p> int check_number2(char*);//檢測(cè)課程編號(hào)
69、</p><p> int same_number2(char*,int);//檢測(cè)相同課程編碼 </p><p> int cheak_result(float);//檢測(cè)分?jǐn)?shù) </p><p> int cheak_credit(float*);//檢測(cè)學(xué)分 </p><p> int check_name(ch
70、ar*);//檢測(cè)姓名</p><p> int same_numder(char*); //檢測(cè)相同姓名</p><p> int same_result(int*);//檢測(cè)相同成績(jī) </p><p> student* search_number(char*);// 按學(xué)號(hào)查找 </p><p>
71、 student* search_name(char*);//按姓名查找 </p><p> void compute(student*);//總分與平均分 </p><p> student* searchfront_stu(student*);//返回前一個(gè)節(jié)點(diǎn) 用于刪除 </p><p> void input(student*);
72、//輸入 </p><p> void seach_findstudent(); //查詢學(xué)生信息 </p><p> void search_delete();// 刪除操作 </p><p> void delete_stu(student*);// 刪除數(shù)據(jù) </p><p> void output_stu
73、info(student*);//輸出 個(gè)人信息 </p><p> void output_classinfo(student*,int*);//輸出 班級(jí)信息 </p><p> void seach_findclass();//查詢班級(jí)信息 </p><p> void result_outside();//成績(jī)表</p
74、><p> void output_tofile(FILE*,student*);//寫入文件 </p><p> void save_tofile();//保存到文件 </p><p> void load_file(); //讀出文件 </p><p> void free_list(student*);
75、//結(jié)束鏈表 </p><p> void end();// 結(jié)束</p><p> 2).主函數(shù)main</p><p> int main(void)</p><p><b> { </b></p><p><b> int n; </b><
76、;/p><p> head = init(); //初始化 </p><p><b> while(2){</b></p><p> n = menu();//菜單 </p><p> switch(n){</p><p> case 1: input_list();//鍵入信
77、息 </p><p><b> break;</b></p><p> case 2: add_result();//修改成績(jī) </p><p><b> break;</b></p><p> case 3: search_delete();//刪除信息 </p>
78、<p><b> break;</b></p><p> case 4: system("cls");//清屏 </p><p> seach_findstudent();//查詢學(xué)生信息 </p><p><b> break;</b></p><p&g
79、t; case 5: system("cls");</p><p> seach_findclass();//查詢班級(jí)信息 </p><p><b> break;</b></p><p> case 6: save_tofile();//寫入文件 </p><p><b&
80、gt; break;</b></p><p> case 7: head = init();</p><p> load_file();//文件中讀取 </p><p><b> break;</b></p><p> case 0: end();//退出 </p>
81、;<p><b> break;</b></p><p><b> default:</b></p><p> printf("無(wú)效命令!\n");</p><p> fflush(stdin); </p><p><b> }</b&
82、gt;</p><p><b> }</b></p><p> system("pause");</p><p><b> return 0;</b></p><p><b> }</b></p><p><b>
83、 3).程序初始化</b></p><p> student* init() //初始化</p><p> { student *head;</p><p> head = MALLOC;//建立head頭鏈表</p><p> head->next = NULL;//設(shè)定頭指針也是尾指針</
84、p><p> return head;//返回頭指針</p><p> 4).各種合法性檢測(cè)</p><p><b> /*姓名檢測(cè)*/</b></p><p> int check_name(char* s)</p><p><b> {</b></p&
85、gt;<p> if (strlen(s) == 0) </p><p> return 0; </p><p> for (int i = 0; i<(int)strlen(s); i++)</p><p><b> {</b></p><p> if (!(s[i] >= '
86、;a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z')) </p><p><b> return 0;</b></p><p><b> } </b></p><p>
87、<b> return 1;</b></p><p><b> }</b></p><p> /*課程編碼檢測(cè)*/ </p><p> int check_number2(char* s)</p><p><b> {</b></p><p>
88、 if (strlen(s) !=5) </p><p><b> return 0;</b></p><p> for (int i = 0; i <(int) strlen(s); i++)</p><p><b> { </b></p><p> if (s[i] <
89、 '0' || s[i] > '9') </p><p><b> return 0;</b></p><p><b> }</b></p><p><b> return 1;</b></p><p><b> }<
90、;/b></p><p> /*相同課程編碼檢測(cè)*/</p><p> int same_number2(student*p,int i)</p><p> {if(SWITCH[1])</p><p><b> { </b></p><p> for(int j=0;j<
91、i;j++)</p><p> {if(strcmp(p->curriculum_number[i],p->curriculum_number[j])==0)</p><p> return 0;}</p><p><b> }</b></p><p><b> else</b>
92、</p><p><b> return 1;</b></p><p><b> }</b></p><p><b> /*分?jǐn)?shù)檢測(cè)*/</b></p><p> int cheak_result(float s)</p><p><b&g
93、t; {</b></p><p> if(s<0||s>100)</p><p><b> return 0;</b></p><p><b> else</b></p><p><b> return 1;</b></p>&l
94、t;p><b> }</b></p><p><b> /*學(xué)分檢測(cè)*/</b></p><p> int cheak_credit(float s)</p><p><b> {</b></p><p> if(s<0||s>5)</p&g
95、t;<p><b> return 0;</b></p><p><b> else</b></p><p><b> return 1;</b></p><p><b> }</b></p><p><b> /*學(xué)號(hào)檢
96、測(cè)*/</b></p><p> int check_number(char* s)</p><p><b> { </b></p><p> if (strlen(s)!=8) </p><p> return 0; </p><p> for (int i = 0; i
97、<(int) strlen(s); i++)</p><p><b> { </b></p><p> if (s[i] < '0' || s[i] > '9') </p><p><b> return 0;</b></p><p>&l
98、t;b> }</b></p><p><b> return 1;</b></p><p><b> }</b></p><p> /* 檢查相同學(xué)號(hào) */</p><p> int same_numder(char* s)</p><p><
99、;b> {</b></p><p> student *p = head->next;</p><p> while(p != NULL)</p><p><b> {</b></p><p> if (strcmp(s, p->number) == 0)</p>&
100、lt;p><b> return 1;</b></p><p> p = p->next;</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p&
101、gt;<p> 5).輸入數(shù)據(jù)(添加)</p><p> void insert()</p><p><b> {</b></p><p> student * p= MALLOC;</p><p> input_info(p);</p><p> p->next
102、= head->next;</p><p> head->next = p;</p><p><b> }</b></p><p> /* 輸入鏈表 */</p><p> void input_list()</p><p><b> {</b><
103、/p><p><b> int n;</b></p><p> printf("輸入要插入的人數(shù): ");</p><p> scanf("%d", &n);</p><p> number_student += n;</p><p> whi
104、le (n--)</p><p><b> {</b></p><p><b> insert();</b></p><p><b> }</b></p><p><b> }</b></p><p> /* 給p指向的節(jié)
105、點(diǎn)輸入信息 */</p><p> void input_info(student* s)</p><p><b> { </b></p><p><b> /* 學(xué)號(hào) */</b></p><p> printf("\n請(qǐng)輸入學(xué)號(hào): ");</p><
106、;p><b> do</b></p><p><b> {</b></p><p> scanf("%s",s->number);</p><p> if (!check_number(s->number))</p><p><b> {&l
107、t;/b></p><p> printf("數(shù)據(jù)違法,請(qǐng)重新輸入學(xué)號(hào): ");</p><p><b> }</b></p><p> if(same_numder(s->number))</p><p> printf("學(xué)號(hào)相同,請(qǐng)重新輸入學(xué)號(hào):");&l
108、t;/p><p> }while (!check_number(s->number)||same_numder(s->number));</p><p><b> /* 姓名 */</b></p><p> printf("請(qǐng)輸入姓名: ");</p><p> getchar();&
109、lt;/p><p><b> do</b></p><p><b> {</b></p><p> gets(s->name); </p><p> if (!check_name(s->name))</p><p><b> {</b
110、></p><p> printf("數(shù)據(jù)違法,請(qǐng)重新輸入姓名: ");</p><p><b> }</b></p><p> }while (!check_name(s->name)); </p><p> /*課程編號(hào); 成績(jī);學(xué)分的存入*/ </p>
111、<p> float stu_resurt;</p><p> float stu_credit;</p><p> /*課程編碼輸入*/</p><p> if(!SWITCH[0])</p><p><b> {</b></p><p> printf("\n課
112、程編碼輸入第一個(gè)學(xué)生時(shí)定義!\n");</p><p> for(int j=0;j<CLASS;j++)</p><p><b> {</b></p><p> printf("請(qǐng)輸入 %s 課程編號(hào): ",result_name[j]);</p><p><b>
113、 do</b></p><p><b> {</b></p><p> scanf("%s",s->curriculum_number[j]);</p><p> if (!check_number2(s->curriculum_number[j]))</p><p>
114、 printf("\n數(shù)據(jù)違法,請(qǐng)重新輸入課程編號(hào): ");</p><p> else if(!same_number2(s,j))</p><p> printf("\n課程編號(hào)重復(fù),請(qǐng)重新輸入編號(hào):"); </p><p> }while (!check_number2(s->curriculum_nu
115、mber[j])||!same_number2(s,j));</p><p> SWITCH[1]=1;</p><p> strcpy(classname[j],s->curriculum_number[j]);</p><p><b> }</b></p><p> SWITCH[0]=1;</p
116、><p> SWITCH[2]=1;</p><p><b> }</b></p><p> if(SWITCH[2])</p><p><b> {</b></p><p> for(int j=0;j<CLASS;j++)</p><p&g
117、t; strcpy(s->curriculum_number[j],classname[j]);</p><p><b> }</b></p><p> float mun=0,avg=0,mun1=0;</p><p> for(int i=0;i<CLASS;i++)</p><p><b
118、> {</b></p><p><b> /* 成績(jī) */</b></p><p> printf("\n\n");</p><p> printf("請(qǐng)輸入 %s 成績(jī): ", result_name[i]);</p><p><b> do
119、</b></p><p><b> {</b></p><p> scanf("%f",&stu_resurt);</p><p> if (!cheak_result(stu_resurt))</p><p><b> {</b></p>
120、<p> printf("數(shù)據(jù)違法,請(qǐng)重新輸入 %s 成績(jī): ", result_name[i]);</p><p><b> } </b></p><p> }while (!cheak_result(stu_resurt)); </p><p> s->result[i]=stu_resu
121、rt;//存入成績(jī) </p><p> mun += s->result[i];// 記錄總分 </p><p> /*輸入課程學(xué)分*/</p><p> printf("請(qǐng)輸入課程學(xué)分: ");</p><p><b> do</b></p><p&
122、gt;<b> {</b></p><p> scanf("%f",&stu_credit); </p><p> if (!cheak_credit(stu_credit))</p><p><b> {</b></p><p> printf("
123、數(shù)據(jù)違法,請(qǐng)重新輸入 %s 學(xué)分:",result_name[i]);</p><p><b> } </b></p><p> }while (!cheak_credit(stu_credit)); </p><p> s->credit[i]=stu_credit;// 存入學(xué)分 </p>
124、<p> mun1 += s->credit[i];//記錄總學(xué)分 </p><p><b> }</b></p><p> s->ave=mun/CLASS;//存入平均分 </p><p> s->sum=mun;// 存入總分</p><p> s->sum
125、_credit=mun1; //存入總學(xué)分 </p><p> fflush(stdin);//清屏 </p><p><b> }</b></p><p> 說(shuō)明:調(diào)用input_list()函數(shù),要求用戶鍵入添加的人數(shù)。進(jìn)入input_list()函數(shù)時(shí),將調(diào)用insert()函數(shù)對(duì)每個(gè)的信息用頭插法建立鏈表節(jié)點(diǎn)并同時(shí)進(jìn)行對(duì)
126、每一個(gè)人的信息進(jìn)行輸入(由insert()函數(shù)調(diào)用input_info()。</p><p><b> 6).修改成績(jī)</b></p><p><b> /*修改成績(jī)*/</b></p><p> void add_result()</p><p><b> {</b>
127、</p><p><b> char ch;</b></p><p> char str[20];</p><p> student*s=head->next;</p><p> // 輸入合法性判斷 </p><p> printf("請(qǐng)輸入你要修改的學(xué)生的 姓名 或
128、學(xué)號(hào): ");</p><p><b> do</b></p><p><b> {</b></p><p> scanf("%s",str);</p><p> if ((check_number2(str)&&!check_name(str)
129、))</p><p><b> {</b></p><p> printf("數(shù)據(jù)違法,請(qǐng)重新輸入姓名或?qū)W號(hào): ");</p><p><b> }</b></p><p><b> }</b></p><p> while
130、 ((check_number2(str)&&!check_name(str)));</p><p> // 判斷是姓名還是學(xué)號(hào) </p><p> if (str[0] >= '0' && str[0] <= '9')</p><p><b> {</b><
131、;/p><p> s = search_number(str); //按學(xué)號(hào)查找</p><p> if (s == NULL)</p><p> printf("對(duì)不起,找不到這個(gè)學(xué)號(hào)\n");</p><p><b> }</b></p><p><b>
132、 else</b></p><p><b> {</b></p><p> s = search_name(str);</p><p> if (s == NULL)</p><p> printf("對(duì)不起,找不到這個(gè)學(xué)號(hào)\n");</p><p>&l
133、t;b> }</b></p><p><b> //輸入課程編碼</b></p><p> char curriculum[6];</p><p> int n;//記錄 課程順序 </p><p> printf("輸入課程編碼:"); </p><
134、;p><b> do</b></p><p><b> {</b></p><p> scanf("%s",curriculum);</p><p> if (!check_number2(curriculum))</p><p> printf("\n
135、數(shù)據(jù)違法,請(qǐng)重新輸入課程編號(hào): ");</p><p> }while (!check_number2(curriculum));</p><p> for(int i=0;i<CLASS;i++)</p><p><b> {</b></p><p> if(strcmp(s->curri
136、culum_number[i],curriculum)==0)</p><p><b> {</b></p><p><b> n=i;</b></p><p><b> break;</b></p><p><b> }</b></p>
137、;<p><b> }</b></p><p> float stu_resurt,stu_credit;</p><p> // 修改成績(jī)操作 </p><p> printf("\n\n");</p><p> printf("請(qǐng)輸入 %s 成績(jī): ",
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告-成績(jī)記錄簿
- 成績(jī)記錄簿課程設(shè)計(jì)
- 課程設(shè)計(jì)--- 成績(jī)記錄簿
- c語(yǔ)言課程設(shè)計(jì)成績(jī)記錄簿
- c語(yǔ)言課程設(shè)計(jì)成績(jī)記錄簿
- 課程設(shè)計(jì)---學(xué)生成績(jī)記錄簿設(shè)計(jì)
- c學(xué)生成績(jī)記錄簿課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)記錄簿
- c語(yǔ)言課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告成績(jī)記錄簿
- c語(yǔ)言課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告成績(jī)記錄簿
- 學(xué)生籍貫信息記錄簿課程設(shè)計(jì)報(bào)告
- 成績(jī)記錄簿
- 課程設(shè)計(jì)報(bào)告---學(xué)生籍貫信息記錄簿
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--學(xué)生成績(jī)信息記錄簿的設(shè)計(jì)
- 學(xué)生籍貫信息記錄簿(c語(yǔ)言課程設(shè)計(jì)報(bào)告)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告---學(xué)生籍貫信息記錄簿系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生籍貫信息記錄簿設(shè)計(jì)
- 黨小組記錄簿
- 黨小組記錄簿
- 員工工時(shí)記錄簿
評(píng)論
0/150
提交評(píng)論