2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩29頁(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>  需求分析</b></p><p>  隨著信息科技的發(fā)展,傳統(tǒng)的學(xué)校學(xué)生成績(jī)管理方法不適應(yīng)現(xiàn)代管理方法,且存在好多弊端。 使用計(jì)算機(jī)可以高速、快捷的完成各種工作。提高管理效率和水平。學(xué)生成績(jī)管理信息系統(tǒng),以計(jì)算機(jī)為工具通過(guò)對(duì)教務(wù)管理所需的信息管理,把管理人員從繁瑣的數(shù)據(jù)計(jì)算中解脫出來(lái),從而全面提高教學(xué)質(zhì)量。</p><p><b&g

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

3、t;  各大學(xué)校:教務(wù)處,學(xué)生工作處,院長(zhǎng)辦公室,各學(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>  (2) 軟件平臺(tái)</b></p><p>  操作系統(tǒng):Windows xp 以上,或者windows server 2003以上;</p><p><b>  (3) 開(kāi)發(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語(yǔ)言設(shè)計(jì),運(yùn)行在windows系統(tǒng)下,用戶需要通過(guò)安裝本應(yīng)用才可以運(yùn)行。由于本系統(tǒng)有管理員功能,所以不同級(jí)別的用戶可以對(duì)本系統(tǒng)進(jìn)行不同的管理和操作。系統(tǒng)管理員對(duì)本系統(tǒng)進(jìn)行必要的維護(hù):對(duì)用戶信息的維護(hù)包括對(duì)學(xué)生用戶的增加、刪除、和修改、排序等操作和管理員用戶的修改等操作。一

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

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

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

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

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

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

12、功能一般用戶和管理員用戶可以操作。顯示所有儲(chǔ)存的學(xué)生信息和學(xué)生成績(jī)成績(jī)。</p><p><b> ?。?)退出系統(tǒng)</b></p><p>  退出學(xué)生成績(jī)管理系統(tǒng),退出系統(tǒng)時(shí)會(huì)檢測(cè)成績(jī)是否有修改等操作,若被修改,會(huì)提示儲(chǔ)存信息,防止意外沒(méi)有儲(chǔ)存而退出系統(tǒng),造成學(xué)生信息有誤。</p><p>  2該系統(tǒng)所用的知識(shí)點(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>  鏈表是一種常見(jiàn)的基礎(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)或者訪問(wèn)特定編號(hào)的節(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)的指針域,空間開(kāi)銷比較大。</p><p>  鏈表中有單向鏈表、雙向鏈表和循環(huán)鏈表等,本程序用的單向鏈表。</p><p><b>

17、;  2.2.1單向鏈表</b></p><p>  鏈表中最簡(jiǎn)單的一種是單向鏈表,它包含指針域和數(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)開(kāi)始每次訪問(wèn)下一個(gè)節(jié)點(diǎn),一直訪問(wèn)到需要的位置。但是也可以提前把一 個(gè)節(jié)點(diǎn)的位置另外保存起來(lái),然后直接訪問(wèn)。當(dāng)然如果只是訪問(wèn)數(shù)據(jù)就沒(méi)必要了,不如在鏈表上儲(chǔ)存指向?qū)嶋H數(shù)據(jù)的指針。這樣一般是為了訪問(wèn)鏈表中的下一個(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>  用到語(yǔ)法:</b></p><p>  fread(變量,字節(jié),次數(shù),文件指針);從文件中讀取。</p><p>  fwrite(變量,字節(jié),次數(shù),文

20、件指針);向文件寫入。</p><p><b>  3.系統(tǒng)功能概述</b></p><p>  根據(jù)前面對(duì)學(xué)生成績(jī)管理系統(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è)是管理員菜單,不同菜單對(duì)應(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)過(guò)上面的需求分析和總體設(shè)計(jì),對(duì)此學(xué)生成績(jī)管理系統(tǒng)有了詳細(xì)的了解。下面就幾個(gè)重要模塊,介紹一下詳

23、細(xì)設(shè)計(jì)。</p><p><b>  4.1登錄功能</b></p><p>  登錄功能分管理員和來(lái)賓用戶兩種角色,每一類用戶根據(jù)自己的角色擁有不同的權(quán)限菜單,不同類用戶只能訪問(wèn)各自工作領(lǐng)域內(nèi)的相關(guān)頁(yè)面。</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é)號(hào)檢查功能,如果學(xué)號(hào)重復(fù),或者位數(shù)不對(duì)會(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、通過(guò)學(xué)號(hào)刪除 2、通過(guò)姓名刪除。在鏈表中讀取,用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 測(cè)試結(jié)果</b></p><p>

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

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

30、><p>  在設(shè)計(jì)這個(gè)系統(tǒng)的過(guò)程中,遇到了很多麻煩,學(xué)習(xí)到很多以前沒(méi)有學(xué)到的知識(shí),也熟悉了以前的知識(shí)。每次遇到麻煩時(shí)都是上網(wǎng)查資料,或者問(wèn)身邊同學(xué)。通過(guò)這次程序設(shè)計(jì),溫習(xí)了函數(shù)調(diào)用,指針函數(shù),結(jié)構(gòu)體,文件等的基本操作。主要掌握了數(shù)據(jù)結(jié)構(gòu)中鏈表增、刪、改等知識(shí)點(diǎn)和文件的各種操作。知道了怎么用數(shù)據(jù)結(jié)構(gòu)和文件關(guān)聯(lián)起來(lái)使用,怎么用鏈表排序。通過(guò)與其他人交流,學(xué)到了很多其他人的思考問(wèn)題的方法??傊斋@好豐富。</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é)院 班級(jí) 學(xué)號(hào) 姓名 英語(yǔ) 數(shù)學(xué) C語(yǔ)言 總分 平均\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é)號(hào)*/</p><p>  char name[15]; /*姓名*/</p><p>  int cgrade; /*C語(yǔ)言成績(jī)*/</p><p>  int mgra

36、de; /*數(shù)學(xué)成績(jī)*/</p><p>  int egrade; /*英語(yǔ)成績(jī)*/</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é)生成績(jī)管理系統(tǒng) \n");</p><p>  prin

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

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

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

42、 *\n");</p><p>  printf(" * 5 排序成績(jī) 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請(qǐng)您選擇操作命令(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 來(lái)賓模式\n\n\n");</p><p>  printf("

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

49、t;  printf(" * *\n");</p><p>  printf(" * 1 查詢成績(jī) 2 排序成績(jī) *\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請(qǐng)您選擇操作命令(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沒(méi)有該學(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)沒(méi)有存儲(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目前無(wú)學(xué)生成績(jī)記錄!!\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é)號(hào)查詢*/</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é)號(hào)*/</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 超出長(zhǎng)度!

69、!!\n"); /*進(jìn)行長(zhǎng)度校驗(yàn),超過(guò)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é)號(hào)為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é)號(hào)(按0退出):"); /*格式化輸入學(xué)號(hào)并檢驗(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) /*查詢?cè)搶W(xué)號(hào)是否已經(jīng)存在,若存在則要求重新輸入一個(gè)未被占用的學(xué)號(hào)*/</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é)號(hào)%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, "班級(jí):");</p><p>  p->data.cgrade = numberinput("C語(yǔ)言0-100]:");</p><p>  p->data.mgrade = numberinput(&qu

84、ot;數(shù)學(xué)[0-100]:");</p><p>  p->data.egrade = numberinput("英語(yǔ)[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é)號(hào)或姓名,查詢學(xué)生記錄*/</p><p>  sy

87、stem("cls");</p><p>  int select; /*1:按學(xué)號(hào)查,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暫無(wú)學(xué)生記錄!!!\n");</p><p><b>  return;</b></p><p><b>  }</b>&l

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

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

91、/*在l中查找學(xué)號(hào)為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, "請(qǐng)輸入學(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=====>暫無(wú)學(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 通過(guò)學(xué)號(hào)刪除 2 通過(guò)姓名刪除\n");</p><p>  printf(" 請(qǐng)選擇[1,2]:");</p><p>  scanf("%d", &sel);&l

100、t;/p><p>  if (sel == 1)</p><p><b>  {</b></p><p>  stringinput(findmess, 10, "請(qǐng)輸入學(xué)號(hào):");</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, "請(qǐng)輸入學(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é)號(hào)查詢到該記錄,然后提示用戶修改學(xué)號(hào)之外的值,學(xué)號(hào)不能修改</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沒(méi)有該生記錄!\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, "請(qǐng)輸入學(xué)號(hào):"); /*輸入并檢驗(yàn)該學(xué)號(hào)*/</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é)號(hào):%s,\n", p->data.num);</p><p>  printf("姓名:%s,", p->data.name);</

113、p><p>  stringinput(p->data.name, 15, "輸入新姓名:");</p><p>  printf("C語(yǔ)言:%d,", p->data.cgrade);</p><p>  p->data.cgrade = numberinput("C語(yǔ)言[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("英語(yǔ):%d,", p->data.egrade);&l

115、t;/p><p>  p->data.egrade = numberinput("英語(yǔ)[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暫無(wú)學(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、頭指針,每次從頭開(kāi)始查找插入位置*/</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)序號(hào)*/</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ù)存盤,若用戶沒(méi)有專門進(jìn)行此操作且對(duì)數(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");/*以只寫方式打開(kāi)二進(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)無(wú)管理員,請(qǐng)創(chuàng)建!\n\n請(qǐng)輸入管理員賬號(hào):");</p><p>  scanf("%s", str_z);</p><p>  printf("請(qǐng)輸入密碼:");</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("請(qǐng)選擇你的登錄方式:\n\n");</p><p>  printf("1.管理員模式 0.來(lái)賓模式\n");</p><p>  printf("請(qǐng)你選擇:(0-1)");</p><p>  scanf("%d", &sta

溫馨提示

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

評(píng)論

0/150

提交評(píng)論