2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論