版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)——學(xué)生成績管理系統(tǒng)
- 課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng) 課程設(shè)計(jì)
- 課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)9
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)10
- vfp課程設(shè)計(jì)--- 學(xué)生成績管理系統(tǒng)
- java課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- vfp課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- vb課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- web課程設(shè)計(jì).學(xué)生成績管理系統(tǒng)
評論
0/150
提交評論