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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  需求分析</b></p><p>  隨著信息科技的發(fā)展,傳統(tǒng)的學(xué)校學(xué)生成績管理方法不適應(yīng)現(xiàn)代管理方法,且存在好多弊端。 使用計(jì)算機(jī)可以高速、快捷的完成各種工作。提高管理效率和水平。學(xué)生成績管理信息系統(tǒng),以計(jì)算機(jī)為工具通過對教務(wù)管理所需的信息管理,把管理人員從繁瑣的數(shù)據(jù)計(jì)算中解脫出來,從而全面提高教學(xué)質(zhì)量。</p><p><b&g

2、t;  1.1文檔目的</b></p><p>  學(xué)校需要一套學(xué)生成績管理系統(tǒng)來對學(xué)生成績等情況進(jìn)行管理。建立該系統(tǒng)有利于教務(wù)處,學(xué)生處,院長辦公室,各系輔導(dǎo)員對各自所需的及管理的學(xué)生信息進(jìn)行查閱和管理,同時(shí)有利于學(xué)生自己的學(xué)習(xí)情況查看,方便掌握子自己的學(xué)習(xí)信息。</p><p><b>  1.2 適用對象</b></p><p&g

3、t;  各大學(xué)校:教務(wù)處,學(xué)生工作處,院長辦公室,各學(xué)院輔導(dǎo)員,學(xué)生等。</p><p><b>  1.3 配置要求</b></p><p><b> ?。?) 硬件平臺(tái) </b></p><p>  cpu :酷睿 1.2GHz以上;</p><p>  內(nèi)存: 512M以上;</p>

4、;<p><b> ?。?) 軟件平臺(tái)</b></p><p>  操作系統(tǒng):Windows xp 以上,或者windows server 2003以上;</p><p><b> ?。?) 開發(fā)工具</b></p><p>  Linux 系統(tǒng)下IDE和Windows系統(tǒng)下vs2013</p>

5、<p>  1.4 系統(tǒng)功能分析</p><p>  1.4.1 系統(tǒng)概述</p><p>  本系統(tǒng)采用c語言設(shè)計(jì),運(yùn)行在windows系統(tǒng)下,用戶需要通過安裝本應(yīng)用才可以運(yùn)行。由于本系統(tǒng)有管理員功能,所以不同級別的用戶可以對本系統(tǒng)進(jìn)行不同的管理和操作。系統(tǒng)管理員對本系統(tǒng)進(jìn)行必要的維護(hù):對用戶信息的維護(hù)包括對學(xué)生用戶的增加、刪除、和修改、排序等操作和管理員用戶的修改等操作。一

6、般用戶只有查詢功能,不允許修改等操作。每個(gè)用戶在進(jìn)入系統(tǒng)之前必須登錄系統(tǒng),選擇管理員操作或者一般用戶。文件采用二進(jìn)制方式寫入,防止其他用戶盜取信息。</p><p>  1.4.2 系統(tǒng)功能分析</p><p>  通過進(jìn)行實(shí)際需求分析,本成績管理系統(tǒng)主要包括以下功能</p><p><b>  (1)登錄模塊</b></p>&

7、lt;p>  登錄頁面上有一個(gè)角色選擇表單,包括管理員和來賓模式,管理員需要輸入帳號和密碼。登錄前選擇登錄的角色,輸入帳號和密碼,如果相應(yīng)的數(shù)據(jù)庫表中與輸入的帳號密碼相同則登錄成功,否則頁面上顯示錯(cuò)誤信息。系統(tǒng)第一次使用沒有管理員賬號,它會(huì)提示讓你輸入賬號密碼,作為默認(rèn)賬號密碼。</p><p><b> ?。?)輸入成績</b></p><p>  該功能需要

8、管理員賬戶登錄才可以操作,增加安全性。提供學(xué)生信息和學(xué)生成績的錄入,包括學(xué)校、學(xué)院、專業(yè)、學(xué)號、姓名、各科成績等,自動(dòng)計(jì)算出總成績、平均分。輸入過程中對學(xué)號進(jìn)行檢查,不允許重復(fù),有位數(shù)限制等,防止學(xué)號出錯(cuò)。輸入成績時(shí)可以連續(xù)輸入,按0退出。可以很方便的錄入學(xué)生信息。</p><p><b> ?。?)刪除成績</b></p><p>  該功能需要管理員賬戶登錄才可以

9、操作,增加安全性。默認(rèn)按學(xué)號搜索進(jìn)行刪除,如果輸入錯(cuò)誤提示“沒有該記錄”。</p><p><b> ?。?)查詢成績</b></p><p>  該功能一般用戶和管理員用戶可以操作。提供學(xué)生信息的查詢和成績查詢??砂凑諏W(xué)號或者姓名進(jìn)行搜索。方便快捷,易于操作。</p><p><b>  (5)修改成績</b></

10、p><p>  該功能需要管理員賬戶登錄才可以操作,增加安全性??赡艹煽冊阡浫脒^程中會(huì)出現(xiàn)錯(cuò)誤,或者老師判卷時(shí)出現(xiàn)錯(cuò)誤,造成學(xué)生成績有誤。該功能為了更加方便學(xué)生成績的管理而設(shè)計(jì)。</p><p><b> ?。?)排序成績</b></p><p>  該功能一般用戶和管理員用戶可以操作。成績默認(rèn)降序排列,可以很方便的查詢學(xué)生成績情況,與其他學(xué)生做比

11、較,找出自己的不足之處等。</p><p><b> ?。?)保存記錄</b></p><p>  該功能需要管理員用戶登錄才可以操作。學(xué)生成績輸入完畢后需要保存。此功能可保存新加所有學(xué)生記錄,并在保存完畢后輸出總共學(xué)生記錄</p><p><b>  (8)顯示所有</b></p><p>  該

12、功能一般用戶和管理員用戶可以操作。顯示所有儲(chǔ)存的學(xué)生信息和學(xué)生成績成績。</p><p><b> ?。?)退出系統(tǒng)</b></p><p>  退出學(xué)生成績管理系統(tǒng),退出系統(tǒng)時(shí)會(huì)檢測成績是否有修改等操作,若被修改,會(huì)提示儲(chǔ)存信息,防止意外沒有儲(chǔ)存而退出系統(tǒng),造成學(xué)生信息有誤。</p><p>  2該系統(tǒng)所用的知識點(diǎn)</p>&

13、lt;p>  2.1結(jié)構(gòu)體(struct)</p><p>  結(jié)構(gòu)體可以看成一種自定義的數(shù)據(jù)類型,它還有一個(gè)很重要的特征就是結(jié)構(gòu)體可以嵌套使用,結(jié)構(gòu)體中可以包含結(jié)構(gòu)體指針,但不可包含結(jié)構(gòu)體變量。</p><p><b>  形式為:</b></p><p><b>  struct 名</b></p>

14、<p><b>  {</b></p><p><b>  數(shù)據(jù)類型 變量名</b></p><p><b>  ……….</b></p><p><b>  ………..</b></p><p><b>  };</b>&

15、lt;/p><p>  2.2鏈表(Linked list)</p><p>  鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針(Pointer)。由于 不必須按順序存儲(chǔ),鏈表在插入的時(shí)候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個(gè)節(jié)點(diǎn)或者訪問特定編號的節(jié)點(diǎn)則需要O(n)的時(shí) 間,而順序表相應(yīng)的時(shí)間復(fù)雜度

16、分別是O(logn)和O(1)。</p><p>  使用鏈表結(jié)構(gòu)可以克服數(shù)組鏈表需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn),鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動(dòng)態(tài)管理。但是鏈表失去了數(shù)組隨機(jī)讀取的優(yōu)點(diǎn),同時(shí)鏈表由于增加了結(jié)點(diǎn)的指針域,空間開銷比較大。</p><p>  鏈表中有單向鏈表、雙向鏈表和循環(huán)鏈表等,本程序用的單向鏈表。</p><p><b>

17、;  2.2.1單向鏈表</b></p><p>  鏈表中最簡單的一種是單向鏈表,它包含指針域和數(shù)據(jù)域。這個(gè)鏈表指向列表中的下一個(gè)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)指針為NULL。</p><p>  鏈表最基本的結(jié)構(gòu)是在每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和到下一個(gè)節(jié)點(diǎn)的地址,在最后一個(gè)節(jié)點(diǎn)保存一個(gè)特殊的結(jié)束標(biāo)記,另外在一個(gè)固定的位置保存指向第一個(gè)節(jié)點(diǎn)的指針,有 的時(shí)候也會(huì)同時(shí)儲(chǔ)存指向最后一個(gè)節(jié)點(diǎn)的指針。一般

18、查找一個(gè)節(jié)點(diǎn)的時(shí)候需要從第一個(gè)節(jié)點(diǎn)開始每次訪問下一個(gè)節(jié)點(diǎn),一直訪問到需要的位置。但是也可以提前把一 個(gè)節(jié)點(diǎn)的位置另外保存起來,然后直接訪問。當(dāng)然如果只是訪問數(shù)據(jù)就沒必要了,不如在鏈表上儲(chǔ)存指向?qū)嶋H數(shù)據(jù)的指針。這樣一般是為了訪問鏈表中的下一個(gè)或者 前一個(gè)(需要儲(chǔ)存反向的指針,雙向鏈表)節(jié)點(diǎn)。</p><p><b>  2.3文件讀寫</b></p><p>  文件指

19、針FILE *fp;</p><p>  讀寫方式:rb 二進(jìn)制方式讀;</p><p>  wb 二進(jìn)制方式寫入;</p><p><b>  用到語法:</b></p><p>  fread(變量,字節(jié),次數(shù),文件指針);從文件中讀取。</p><p>  fwrite(變量,字節(jié),次數(shù),文

20、件指針);向文件寫入。</p><p><b>  3.系統(tǒng)功能概述</b></p><p>  根據(jù)前面對學(xué)生成績管理系統(tǒng)的分析。主要功能模塊如下:</p><p><b>  3.1概要設(shè)計(jì)</b></p><p>  用struct 建立一個(gè)學(xué)生的結(jié)構(gòu)體struct student,然后用st

21、ruct定義一個(gè)鏈表,里面分別建立指針域和數(shù)據(jù)域。建立菜單函數(shù),一個(gè)是用戶菜單,一個(gè)是管理員菜單,不同菜單對應(yīng)不同操作。因?yàn)橐啻螖?shù)出表頭信息,為了方便,用#define定義了兩個(gè)宏,一個(gè)輸出表頭,另一個(gè)存儲(chǔ)輸出控制符。定義printheader()函數(shù)輸出表頭,定義printdata()函數(shù)輸出表中數(shù)據(jù),定義wrong()函數(shù)輸出按鍵錯(cuò)誤信息,定義disp()函數(shù)顯示鏈表中數(shù)據(jù),add()函數(shù)添加學(xué)生信息,qur()函數(shù)查詢學(xué)生信息,

22、del()函數(shù)刪除學(xué)生信息,modify()修改學(xué)生信息,sort()函數(shù)排序,save()函數(shù)儲(chǔ)存到文件中,</p><p>  Login()登錄函數(shù)等。共同構(gòu)成了整個(gè)系統(tǒng)。</p><p><b>  4.詳細(xì)設(shè)計(jì)</b></p><p>  經(jīng)過上面的需求分析和總體設(shè)計(jì),對此學(xué)生成績管理系統(tǒng)有了詳細(xì)的了解。下面就幾個(gè)重要模塊,介紹一下詳

23、細(xì)設(shè)計(jì)。</p><p><b>  4.1登錄功能</b></p><p>  登錄功能分管理員和來賓用戶兩種角色,每一類用戶根據(jù)自己的角色擁有不同的權(quán)限菜單,不同類用戶只能訪問各自工作領(lǐng)域內(nèi)的相關(guān)頁面。</p><p><b>  登錄流程圖如下:</b></p><p><b>  

24、N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  4.2 添加功能</b></p><p>  為防止輸入錯(cuò)誤

25、,添加功能加入了學(xué)號檢查功能,如果學(xué)號重復(fù),或者位數(shù)不對會(huì)提示重新輸入,連續(xù)存儲(chǔ),按0退出。</p><p><b>  添加流程圖如下:</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</

26、b></p><p><b>  4.3 刪除功能</b></p><p>  為了方便數(shù)據(jù)管理,在刪除功能中有兩種選擇,1、通過學(xué)號刪除 2、通過姓名刪除。在鏈表中讀取,用free()釋放動(dòng)態(tài)內(nèi)存空間,然后保存。</p><p><b>  刪除流程圖如下:</b></p><p><

27、b>  NN</b></p><p><b>  YY</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  5 測試結(jié)果</b></p><p>

28、;<b>  5.1登錄功能測試</b></p><p><b>  5.2添加功能測試</b></p><p><b>  5.3刪除功能測試</b></p><p><b>  5.4程序運(yùn)行截圖</b></p><p><b>  1.登錄

29、方式截圖</b></p><p><b>  2管理員登錄截圖</b></p><p><b>  3.來賓登錄截圖</b></p><p><b>  4.排序成績截圖</b></p><p><b>  6總結(jié)及經(jīng)驗(yàn)體會(huì)</b></p

30、><p>  在設(shè)計(jì)這個(gè)系統(tǒng)的過程中,遇到了很多麻煩,學(xué)習(xí)到很多以前沒有學(xué)到的知識,也熟悉了以前的知識。每次遇到麻煩時(shí)都是上網(wǎng)查資料,或者問身邊同學(xué)。通過這次程序設(shè)計(jì),溫習(xí)了函數(shù)調(diào)用,指針函數(shù),結(jié)構(gòu)體,文件等的基本操作。主要掌握了數(shù)據(jù)結(jié)構(gòu)中鏈表增、刪、改等知識點(diǎn)和文件的各種操作。知道了怎么用數(shù)據(jù)結(jié)構(gòu)和文件關(guān)聯(lián)起來使用,怎么用鏈表排序。通過與其他人交流,學(xué)到了很多其他人的思考問題的方法??傊斋@好豐富。</p&g

31、t;<p><b>  7附錄</b></p><p>  #include <stdio.h></p><p>  #include <string.h></p><p>  #include <conio.h></p><p>  #include <time.

32、h></p><p>  #include <stdlib.h></p><p>  #define HEADER2 " 學(xué)校 學(xué)院 班級 學(xué)號 姓名 英語 數(shù)學(xué) C語言 總分 平均\n"</p><p>  #define FOR

33、MAT " %15s %20s %8s %8s %10s %4d %4d %4d %4d %.2f\n"</p><p>  #define DATA p->data.school,p->data.xueyuan,p->data.classs,p->data.num,p->data.name,p->data.egrade,p->da

34、ta.mgrade,p->data.cgrade,p->data.total,p->data.ave</p><p>  int saveflag = 0; /*是否需要存盤的標(biāo)志變量*/</p><p>  struct student {</p><p>  char school[50];</p><p>  char

35、 xueyuan[50];</p><p>  char classs[20];</p><p>  char num[10]; /*學(xué)號*/</p><p>  char name[15]; /*姓名*/</p><p>  int cgrade; /*C語言成績*/</p><p>  int mgra

36、de; /*數(shù)學(xué)成績*/</p><p>  int egrade; /*英語成績*/</p><p>  int total; /*總分*/</p><p>  float ave; /*平均分*/</p><p><b>  };</b></p><p> 

37、 typedef struct node{ //定義每條記錄或結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)</p><p>  struct student data; /*數(shù)據(jù)域*/</p><p>  struct node *next; /*指針域*/</p><p>  }Node, *Link; /*Node為node類型的結(jié)構(gòu)變量,*Link為node類型的指針變量

38、*/</p><p>  void menu() {</p><p>  time_t now;</p><p>  now = time(NULL);</p><p>  printf(" 學(xué)生成績管理系統(tǒng) \n");</p><p>  prin

39、tf("\n");</p><p>  printf(" *************************************************************\n");</p><p>  printf(" *

40、 *\n");</p><p>  printf(" * 1 輸入成績 2 刪除成績 *\n");</p><p>  printf(" *

41、 *\n");</p><p>  printf(" * 3 查詢成績 4 修改成績 *\n");</p><p>  printf(" *

42、 *\n");</p><p>  printf(" * 5 排序成績 6 保存記錄 *\n");</p><p>  printf(" *

43、*\n");</p><p>  printf(" * 7 顯示所有 0 退出系統(tǒng) *\n");</p><p>  printf(" * *\n&

44、quot;);</p><p>  printf(" *************************************************************\n");</p><p>  printf(" * 8 切換登錄模式 9 修改管理員信息 *\n");&l

45、t;/p><p>  printf(" *************************************************************\n");</p><p>  printf(" Made by 徐海興, now time is %s\n ", ctime(&now));</p&g

46、t;<p>  printf("\n請您選擇操作命令(0~9):"); /*顯示提示信息*/</p><p><b>  }</b></p><p>  void menu2(){</p><p>  time_t now;</p><p>  now = time(NULL);&

47、lt;/p><p>  system("cls"); //清屏</p><p>  printf("\n 來賓模式\n\n\n");</p><p>  printf("

48、 學(xué)生成績管理系統(tǒng) \n");</p><p>  printf("\n");</p><p>  printf(" *************************************************************\n");</p><p&g

49、t;  printf(" * *\n");</p><p>  printf(" * 1 查詢成績 2 排序成績 *\n");</p><p>  

50、printf(" * *\n");</p><p>  printf(" * 3 顯示所有 0 退出系統(tǒng) *\n");</p><p>  prin

51、tf(" * *\n");</p><p>  printf(" *************************************************************\n");</p><p>  

52、printf(" * 4 切換登錄模式 *\n");</p><p>  printf(" *************************************************************\n");</p><p>  pr

53、intf(" Made by 徐海興, now time is %s\n ", ctime(&now));</p><p>  printf("\n請您選擇操作命令(0~4):"); /*顯示提示信息*/</p><p><b>  }</b></p><p>  voi

54、d printheader(){ /*格式化輸出表頭*/</p><p>  printf(HEADER2);</p><p><b>  }</b></p><p>  void printdata(Node *pp) {/*格式化輸出表中數(shù)據(jù)*/</p><p><b>  Node* p;</b&g

55、t;</p><p><b>  p = pp;</b></p><p>  printf(FORMAT, DATA);</p><p><b>  }</b></p><p>  void Wrong() { /*輸出按鍵錯(cuò)誤信息*/</p><p>  printf(&

56、quot;\n\n\n\n\n**********錯(cuò)誤:輸入不合法!!!**********\a\n");</p><p><b>  getch();</b></p><p><b>  }</b></p><p>  void Nofind(){ /*輸出未查找此學(xué)生的信息*/</p><

57、p>  printf("\n沒有該學(xué)生!!\n");</p><p><b>  }</b></p><p>  void Disp(Link l){ /*顯示單鏈表l中存儲(chǔ)的學(xué)生記錄,內(nèi)容為student結(jié)構(gòu)中定義的內(nèi)容*/</p><p>  system("cls");</p>

58、<p><b>  Node *p;</b></p><p>  p = l->next; /*l存儲(chǔ)的是單鏈表中頭結(jié)點(diǎn)的指針,該頭結(jié)點(diǎn)沒有存儲(chǔ)學(xué)生信息,指針域指向的后繼結(jié)點(diǎn)才有學(xué)生信息*/</p><p>  if (!p) /*p==NULL,NUll在stdlib中定義為0*/</p><p><b>  {&l

59、t;/b></p><p>  printf("\n目前無學(xué)生成績記錄!!\n");</p><p><b>  getch();</b></p><p><b>  return;</b></p><p><b>  }</b></p>

60、<p>  printf("\n\n");</p><p>  printheader(); /*輸出表格頭部*/</p><p>  while (p) /*逐條輸出鏈表中存儲(chǔ)的學(xué)生信息*/</p><p><b>  {</b></p><p>  printdata(p);&l

61、t;/p><p>  p = p->next; /*移動(dòng)直下一個(gè)結(jié)點(diǎn)*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  Node* Locate(Link l, char findmess[], char nameornum[]){</p

62、><p><b>  Node *r;</b></p><p>  if (strcmp(nameornum, "num") == 0) /*按學(xué)號查詢*/</p><p><b>  {</b></p><p>  r = l->next;</p><p&

63、gt;<b>  while (r)</b></p><p><b>  {</b></p><p>  if (strcmp(r->data.num, findmess) == 0) /*若找到findmess值的學(xué)號*/</p><p><b>  return r;</b></p&g

64、t;<p>  r = r->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (strcmp(nameornum, "name") == 0) /*按姓名查詢*/</p><p>

65、<b>  {</b></p><p>  r = l->next;</p><p><b>  while (r)</b></p><p><b>  {</b></p><p>  if (strcmp(r->data.name, findmess) == 0)

66、 /*若找到findmess值的學(xué)生姓名*/</p><p><b>  return r;</b></p><p>  r = r->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>

67、;  return 0; /*若未找到,返回一個(gè)空指針*/</p><p><b>  }</b></p><p>  void stringinput(char *t, int lens, char *notice){</p><p>  char n[255];</p><p><b>  do</b

68、></p><p><b>  {</b></p><p>  printf(notice); /*顯示提示信息*/</p><p>  scanf("%s", n); /*輸入字符串*/</p><p>  if (strlen(n)>lens)printf("\n 超出長度!

69、!!\n"); /*進(jìn)行長度校驗(yàn),超過lens值重新輸入*/</p><p>  } while (strlen(n)>lens);</p><p>  strcpy(t, n); /*將輸入的字符串拷貝到字符串t中*/</p><p><b>  }</b></p><p>  int numberin

70、put(char *notice){</p><p>  int t = 0;</p><p><b>  do</b></p><p><b>  {</b></p><p>  printf(notice); /*顯示提示信息*/</p><p>  scanf(&quo

71、t;%d", &t); /*輸入分?jǐn)?shù)*/</p><p>  if (t>100 || t<0) printf("\n 分?jǐn)?shù)必須在0~100之間!!! \n"); //分?jǐn)?shù)校驗(yàn)</p><p>  } while (t>100 || t<0);</p><p><b>  return t;&l

72、t;/b></p><p><b>  }</b></p><p>  void Add(Link l){</p><p>  Node *p, *r, *s;</p><p>  char ch, flag = 0, num[10];</p><p><b>  r = l;&l

73、t;/b></p><p>  system("cls");</p><p>  Disp(l); /*先打印出已有的學(xué)生信息*/</p><p>  while (r->next != NULL)</p><p>  r = r->next; /*將指針移至于鏈表最末尾,準(zhǔn)備添加記錄*/</p&g

74、t;<p>  while (1) /*一次可輸入多條記錄,直至輸入學(xué)號為0的記錄結(jié)點(diǎn)添加操作*/</p><p><b>  {</b></p><p>  s = l->next;</p><p><b>  while (1)</b></p><p><b>  

75、{</b></p><p>  stringinput(num, 10, "學(xué)號(按0退出):"); /*格式化輸入學(xué)號并檢驗(yàn)*/</p><p><b>  flag = 0;</b></p><p>  if (strcmp(num, "0") == 0) /*輸入為0,則退出添加操作,返

76、回主界面*/</p><p><b>  return;</b></p><p>  s = l->next;</p><p>  while (s) /*查詢該學(xué)號是否已經(jīng)存在,若存在則要求重新輸入一個(gè)未被占用的學(xué)號*/</p><p><b>  {</b></p><

77、p>  if (strcmp(s->data.num, num) == 0)</p><p><b>  {</b></p><p><b>  flag = 1;</b></p><p><b>  break;</b></p><p><b>  }&

78、lt;/b></p><p>  s = s->next;</p><p><b>  }</b></p><p>  if (flag == 1) /*提示用戶是否重新輸入*/</p><p><b>  {</b></p><p>  getchar();&l

79、t;/p><p>  printf("=====>學(xué)號%s已存在,是否重新輸入?(y/n)\a:", num);</p><p>  scanf("%c", &ch);</p><p>  if (ch == 'y' || ch == 'Y')</p><p>

80、<b>  continue;</b></p><p><b>  else</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p

81、><p><b>  break;</b></p><p><b>  }</b></p><p>  p = (Node *)malloc(sizeof(Node));</p><p>  strcpy(p->data.num, num); /*將字符串num拷貝到p->data.num中

82、*/</p><p>  stringinput(p->data.name, 15, "Name:");</p><p>  stringinput(p->data.school, 50, "學(xué)校:");</p><p>  stringinput(p->data.xueyuan, 50, "學(xué)院:

83、");</p><p>  stringinput(p->data.classs, 20, "班級:");</p><p>  p->data.cgrade = numberinput("C語言0-100]:");</p><p>  p->data.mgrade = numberinput(&qu

84、ot;數(shù)學(xué)[0-100]:");</p><p>  p->data.egrade = numberinput("英語[0-100]:");</p><p>  p->data.total = p->data.egrade + p->data.cgrade + p->data.mgrade; /*計(jì)算總分*/</p>

85、<p>  p->data.ave = (float)(p->data.total / 3); /*計(jì)算平均分*/</p><p>  p->next = NULL;</p><p>  while (r->next != NULL)</p><p>  r = r->next;</p><p>  

86、r->next = p;</p><p>  saveflag = 1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Qur(Link l){ /*按學(xué)號或姓名,查詢學(xué)生記錄*/</p><p>  sy

87、stem("cls");</p><p>  int select; /*1:按學(xué)號查,2:按姓名查,其他:返回主界面(菜單)*/</p><p>  char searchinput[20]; /*保存用戶輸入的查詢內(nèi)容*/</p><p><b>  Node *p;</b></p><p>  

88、if (!l->next) /*若鏈表為空*/</p><p><b>  {</b></p><p>  printf("\n暫無學(xué)生記錄!!!\n");</p><p><b>  return;</b></p><p><b>  }</b>&l

89、t;/p><p>  printf("\n =====>1 通過學(xué)號查找 =====>2 通過姓名查找\n");</p><p>  printf(" 請選擇[1,2]:");</p><p>  scanf("%d", &select);</p><p

90、>  if (select == 1) /*按學(xué)號查詢*/</p><p><b>  {</b></p><p>  stringinput(searchinput, 10, "請輸入要查找的學(xué)號:");</p><p>  p = Locate(l, searchinput, "num");

91、/*在l中查找學(xué)號為searchinput值的節(jié)點(diǎn),并返回節(jié)點(diǎn)的指針*/</p><p>  if (p) /*若p!=NULL*/</p><p><b>  {</b></p><p>  printheader();</p><p>  printdata(p);</p><p><b

92、>  }</b></p><p><b>  else</b></p><p><b>  Nofind();</b></p><p><b>  }</b></p><p>  else if (select == 2) /*按姓名查詢*/</p>

93、;<p><b>  {</b></p><p>  stringinput(searchinput, 15, "請輸入學(xué)生姓名:");</p><p>  p = Locate(l, searchinput, "name");</p><p><b>  if (p)</b

94、></p><p><b>  {</b></p><p>  printheader();</p><p>  printdata(p);</p><p><b>  }</b></p><p><b>  else</b></p>

95、<p><b>  Nofind();</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  Wrong();</b></p><p>  system("PAUSE

96、");</p><p><b>  }</b></p><p>  void Del(Link l){//刪除學(xué)生記錄:先找到保存該學(xué)生記錄的節(jié)點(diǎn),然后刪除該節(jié)點(diǎn)</p><p><b>  int sel;</b></p><p>  Node *p, *r;</p>&l

97、t;p>  char findmess[20];</p><p>  if (!l->next)</p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("\n=====>暫無學(xué)生記錄!!\n")

98、;</p><p><b>  getch();</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  system("cls");</p><p><b>

99、  Disp(l);</b></p><p>  printf("\n 1 通過學(xué)號刪除 2 通過姓名刪除\n");</p><p>  printf(" 請選擇[1,2]:");</p><p>  scanf("%d", &sel);&l

100、t;/p><p>  if (sel == 1)</p><p><b>  {</b></p><p>  stringinput(findmess, 10, "請輸入學(xué)號:");</p><p>  p = Locate(l, findmess, "num");</p>

101、<p><b>  if (p)</b></p><p><b>  {</b></p><p><b>  r = l;</b></p><p>  while (r->next != p)</p><p>  r = r->next;</p&

102、gt;<p>  r->next = p->next;</p><p>  free(p); /*釋放內(nèi)存空間*/</p><p>  printf("\n刪除成功!\n");</p><p>  saveflag = 1;</p><p><b>  }</b></p

103、><p><b>  else</b></p><p><b>  Nofind();</b></p><p><b>  }</b></p><p>  else if (sel == 2) /*先按姓名查詢到該記錄所在的節(jié)點(diǎn)*/</p><p><

104、b>  {</b></p><p>  stringinput(findmess, 15, "請輸入學(xué)生姓名:");</p><p>  p = Locate(l, findmess, "name");</p><p><b>  if (p)</b></p><p&

105、gt;<b>  {</b></p><p><b>  r = l;</b></p><p>  while (r->next != p)</p><p>  r = r->next;</p><p>  r->next = p->next;</p><

106、p><b>  free(p);</b></p><p>  printf("\n刪除成功!!!\n");</p><p>  saveflag = 1;</p><p><b>  }</b></p><p><b>  else</b></p

107、><p><b>  Nofind();</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  Wrong();</b></p><p><b>  getc

108、h();</b></p><p><b>  }</b></p><p>  void Modify(Link l){//修改學(xué)生記錄.先按輸入的學(xué)號查詢到該記錄,然后提示用戶修改學(xué)號之外的值,學(xué)號不能修改</p><p><b>  Node *p;</b></p><p>  cha

109、r findmess[20];</p><p>  if (!l->next)</p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("\n沒有該生記錄!\n");</p><p>

110、<b>  getch();</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  system("cls");</p><p>  printf("修改學(xué)生記錄");&l

111、t;/p><p><b>  Disp(l);</b></p><p>  stringinput(findmess, 10, "請輸入學(xué)號:"); /*輸入并檢驗(yàn)該學(xué)號*/</p><p>  p = Locate(l, findmess, "num"); /*查詢到該節(jié)點(diǎn)*/</p><

112、;p>  if (p) /*若p!=NULL,表明已經(jīng)找到該節(jié)點(diǎn)*/</p><p><b>  {</b></p><p>  printf("學(xué)號:%s,\n", p->data.num);</p><p>  printf("姓名:%s,", p->data.name);</

113、p><p>  stringinput(p->data.name, 15, "輸入新姓名:");</p><p>  printf("C語言:%d,", p->data.cgrade);</p><p>  p->data.cgrade = numberinput("C語言[0-100]:")

114、;</p><p>  printf("數(shù)學(xué):%d,", p->data.mgrade);</p><p>  p->data.mgrade = numberinput("數(shù)學(xué)[0-100]:");</p><p>  printf("英語:%d,", p->data.egrade);&l

115、t;/p><p>  p->data.egrade = numberinput("英語[0-100]:");</p><p>  p->data.total = p->data.egrade + p->data.cgrade + p->data.mgrade;</p><p>  p->data.ave = (fl

116、oat)(p->data.total / 3);</p><p>  printf("\n=====>修改成功!\n");</p><p>  saveflag = 1;</p><p><b>  }</b></p><p><b>  else</b></p

117、><p><b>  Nofind();</b></p><p><b>  getch();</b></p><p><b>  }</b></p><p>  void Sort(Link l){</p><p>  system("cls&q

118、uot;);</p><p><b>  Link ll;</b></p><p>  Node *p, *rr, *s;</p><p>  int i = 0;</p><p>  if (l->next == NULL)</p><p><b>  {</b>&l

119、t;/p><p>  printf("\n暫無學(xué)生記錄!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  ll = (Node*)malloc(sizeof(Node)); /*用于創(chuàng)建新的節(jié)點(diǎn)*/</p

120、><p>  ll->next = NULL;</p><p>  printf("當(dāng)前狀態(tài):\n");</p><p>  // puts("錯(cuò)誤不在這!");</p><p>  Disp(l); /*顯示排序前的所有學(xué)生記錄*/</p><p>  // system

121、("PAUSE");</p><p>  p = l->next;</p><p>  while (p) /*p!=NULL*/</p><p><b>  {</b></p><p>  s = (Node*)malloc(sizeof(Node)); /*新建節(jié)點(diǎn)用于保存從原鏈表中取出的節(jié)

122、點(diǎn)信息*/</p><p>  s->data = p->data; /*填數(shù)據(jù)域*/</p><p>  s->next = NULL; /*指針域?yàn)榭?/</p><p><b>  rr = ll;</b></p><p>  /*rr鏈表于存儲(chǔ)插入單個(gè)節(jié)點(diǎn)后保持排序的鏈表,ll是這個(gè)鏈表的

123、頭指針,每次從頭開始查找插入位置*/</p><p>  while (rr->next != NULL && rr->next->data.total >= p->data.total)</p><p><b>  {</b></p><p>  rr = rr->next;</p&g

124、t;<p>  } /*指針移至總分比p所指的節(jié)點(diǎn)的總分小的節(jié)點(diǎn)位置*/</p><p>  if (rr->next == NULL)/*若新鏈表ll中的所有節(jié)點(diǎn)的總分值都比p->data.total大時(shí),就將p所指節(jié)點(diǎn)加入鏈表尾部*/</p><p>  rr->next = s;</p><p>  else /*否則將該節(jié)點(diǎn)插

125、入至第一個(gè)總分字段比它小的節(jié)點(diǎn)的前面*/</p><p><b>  {</b></p><p>  s->next = rr->next;</p><p>  rr->next = s;</p><p><b>  }</b></p><p>  p =

126、p->next; /*原鏈表中的指針下移一個(gè)節(jié)點(diǎn)*/</p><p><b>  }</b></p><p>  l->next = ll->next; /*ll中存儲(chǔ)是的已排序的鏈表的頭指針*/</p><p>  p = l->next; /*已排好序的頭指針賦給p,準(zhǔn)備填寫名次*/</p&

127、gt;<p>  while (p != NULL) /*當(dāng)p不為空時(shí),進(jìn)行下列操作*/</p><p><b>  {</b></p><p>  i++; /*結(jié)點(diǎn)序號*/</p><p>  p = p->next; /*指針后移*/</p><p><b>  }&l

128、t;/b></p><p>  printf("\n*********************************************\n");</p><p>  // puts("錯(cuò)誤不在這!");</p><p><b>  Disp(l);</b></p><p

129、>  saveflag = 1;</p><p>  printf("\n =====>排序完成!!\n");</p><p>  system("PAUSE");</p><p><b>  }</b></p><p>  void Save(Link l){

130、 //數(shù)據(jù)存盤,若用戶沒有專門進(jìn)行此操作且對數(shù)據(jù)有修改,在退出系統(tǒng)時(shí),會(huì)提示用戶存盤</p><p><b>  FILE* fp;</b></p><p><b>  Node *p;</b></p><p>  int count = 0;</p><p>  fp = fopen("

131、;student.txt", "wb");/*以只寫方式打開二進(jìn)制文件*/</p><p>  p = l->next;</p><p><b>  while (p)</b></p><p><b>  {</b></p><p>  if (fwrite(p,

132、 sizeof(Node), 1, fp) == 1)</p><p><b>  {</b></p><p>  p = p->next;</p><p><b>  count++;</b></p><p><b>  }</b></p><p&g

133、t;<b>  else</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (count>0)</p><p><b>  {</b></p><p>

134、  printf("\n\n\n\n\n 保存完畢,當(dāng)前有%d名學(xué)生記錄\n", count);</p><p>  saveflag = 0;</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf(

135、"空文件,保存失敗!!\n");</p><p>  fclose(fp); //關(guān)閉此文件</p><p><b>  getch();</b></p><p><b>  }</b></p><p>  int login(){</p><p>  F

136、ILE *fp1, *fp2;</p><p>  int state;</p><p>  char str1[20], str2[20], str_z[20], str_m[20];</p><p>  if ((fp1 = fopen("admin.txt", "rb")) == NULL)</p><

137、;p><b>  {</b></p><p>  printf("本系統(tǒng)無管理員,請創(chuàng)建!\n\n請輸入管理員賬號:");</p><p>  scanf("%s", str_z);</p><p>  printf("請輸入密碼:");</p><p>

138、  scanf("%s", str_m);</p><p>  fp2 = fopen("admin.txt", "wb");</p><p>  fprintf(fp2, "%s%c", str_z, '\n');</p><p>  fprintf(fp2, &quo

139、t;%s%c", str_m, ' ');</p><p>  fclose(fp2);</p><p><b>  }</b></p><p>  fp1 = fopen("admin.txt", "rb");</p><p>  fscanf(fp1,

140、 "%s", str1);</p><p>  fscanf(fp1, "%s", str2);</p><p>  fclose(fp1);</p><p><b>  while (1)</b></p><p><b>  {</b></p>

141、<p>  printf("請選擇你的登錄方式:\n\n");</p><p>  printf("1.管理員模式 0.來賓模式\n");</p><p>  printf("請你選擇:(0-1)");</p><p>  scanf("%d", &sta

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論