畢業(yè)論文用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)
畢業(yè)論文用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)_第2頁(yè)
畢業(yè)論文用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)_第3頁(yè)
畢業(yè)論文用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)_第4頁(yè)
畢業(yè)論文用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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、寧德師范高等??茖W(xué)校畢 業(yè) 論 文 (設(shè) 計(jì))專業(yè) 計(jì)算機(jī)教育 指導(dǎo)教師 學(xué)生 學(xué)號(hào) 題 目 用c語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng) 2010年5月15日10目 錄1 引言12 系統(tǒng)需求分析12.1項(xiàng)目背景分析12.2 系統(tǒng)開(kāi)發(fā)的目標(biāo)與意義12.3 項(xiàng)目需求分析13 系統(tǒng)總體設(shè)計(jì)13.1 功能模塊分析13.2 系統(tǒng)功能模塊初始化準(zhǔn)備33.2.1 編譯預(yù)處理33.2.2 數(shù)據(jù)結(jié)構(gòu)定義33.3 具體模塊處理函數(shù)的實(shí)現(xiàn)43.3.1 菜單函數(shù)界面的設(shè)計(jì)43.3.2 功能函數(shù)設(shè)計(jì)44 系統(tǒng)測(cè)試與分析94.1 運(yùn)行工具介紹94.2 系統(tǒng)操作9結(jié)束語(yǔ)10參考文獻(xiàn)10計(jì)算機(jī)與信息工程系畢業(yè)設(shè)計(jì)研究報(bào)告用c語(yǔ)言

2、實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)摘要:伴隨著現(xiàn)代社會(huì)的發(fā)展,網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,越來(lái)越多的管理工作都從傳統(tǒng)的現(xiàn)實(shí)社會(huì)中發(fā)展到了網(wǎng)絡(luò)上。高校是使用計(jì)算機(jī)技術(shù)最早的單位,學(xué)校的各項(xiàng)管理工作也從現(xiàn)實(shí)生活走上了網(wǎng)絡(luò)空間。本文對(duì)學(xué)校的需求進(jìn)行分析,通過(guò)使用c語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)學(xué)生成績(jī)的管理,力求盡量簡(jiǎn)潔實(shí)用地解決學(xué)校對(duì)學(xué)生成績(jī)的管理和學(xué)生對(duì)成績(jī)的查詢問(wèn)題。關(guān)鍵字:c語(yǔ)言 成績(jī)管理系統(tǒng) 程序設(shè)計(jì)1 引言在信息時(shí)代,計(jì)算機(jī)以其極高的運(yùn)算速度、巨大的數(shù)據(jù)存儲(chǔ)容量,以及能準(zhǔn)確地進(jìn)行各種算術(shù)運(yùn)算和邏輯運(yùn)算的能力而成為現(xiàn)代化計(jì)算工具,并被廣泛應(yīng)用于社會(huì)各個(gè)領(lǐng)域。計(jì)算機(jī)技術(shù)的高速發(fā)展已被認(rèn)為是人類進(jìn)入信息時(shí)代的標(biāo)志。成績(jī)管

3、理系統(tǒng)是計(jì)算機(jī)技術(shù)和信息時(shí)代的產(chǎn)物,是信息處理或數(shù)據(jù)處理的核心。該系統(tǒng)開(kāi)發(fā)的總體任務(wù)是實(shí)現(xiàn)學(xué)生成績(jī)管理的系統(tǒng)化、規(guī)范化、自動(dòng)化,以達(dá)到提高學(xué)生成績(jī)管理效率的目的。通過(guò)運(yùn)用程序設(shè)計(jì)軟件實(shí)現(xiàn)學(xué)生成績(jī)管理中的多種功能,如學(xué)生成績(jī)信息的添加、刪除、查詢、修改、顯示、排序等。該系統(tǒng)的設(shè)計(jì)充分利用計(jì)算機(jī)作為輔助工具,來(lái)實(shí)現(xiàn)學(xué)生考試成績(jī)從傳統(tǒng)的手工管理到計(jì)算機(jī)管理,并對(duì)提高管理效率和節(jié)約大量的人力、物力有一定的推動(dòng)作用。因此,開(kāi)發(fā)這種管理軟件很必要,本文將在分析系統(tǒng)的應(yīng)用價(jià)值以及開(kāi)發(fā)工具的基礎(chǔ)上,用c語(yǔ)言來(lái)開(kāi)發(fā)成績(jī)管理系統(tǒng)。2 系統(tǒng)需求分析2.1項(xiàng)目背景分析在我國(guó),各大中小學(xué)校的各類信息管理系統(tǒng)并非一個(gè)新的

4、課題,但也有的學(xué)校根本就沒(méi)有任何信息管理系統(tǒng),特別是在西部貧困地區(qū),學(xué)校的各類管理依然由手工操作來(lái)完成,這十分落后,效率極低,成本很大,而且極異出錯(cuò)。隨著社會(huì)的發(fā)展,信息化是社會(huì)進(jìn)程的必然趨勢(shì),學(xué)校管理只有快,準(zhǔn),精才能發(fā)揮其價(jià)值。2.2 系統(tǒng)開(kāi)發(fā)的目標(biāo)與意義(1)系統(tǒng)開(kāi)發(fā)目標(biāo):本系統(tǒng)是將現(xiàn)代化的計(jì)算機(jī)技術(shù)和傳統(tǒng)的教學(xué)、教務(wù)工作相結(jié)合,按照學(xué)院的工作流程設(shè)計(jì)完成的。為了使系統(tǒng)在學(xué)院的管理中發(fā)揮充分發(fā)揮其作用,實(shí)現(xiàn)工作過(guò)程的計(jì)算機(jī)化,提高工作效率和工作質(zhì)量,現(xiàn)提出如下的系統(tǒng)開(kāi)發(fā)目標(biāo):系統(tǒng)應(yīng)具有實(shí)用性、可靠性和適用性。對(duì)系統(tǒng)中數(shù)據(jù)庫(kù)的信息進(jìn)行有效處理,防止數(shù)據(jù)錯(cuò)亂。能夠按照用戶選擇的不同的條件進(jìn)行

5、簡(jiǎn)單查詢。方便用戶的操作,盡量減少用戶的操作。(2)系統(tǒng)開(kāi)發(fā)的意義:在各大中小學(xué)校,用計(jì)算機(jī)管理學(xué)校的信息已經(jīng)越來(lái)越普遍了。用計(jì)算機(jī)不但可以提高工作效率,而且還節(jié)省了許多人力物力財(cái)力。提高了學(xué)校的管理能力,為此,用計(jì)算機(jī)來(lái)管理學(xué)校的信息,是非常必要的。2.3 項(xiàng)目需求分析學(xué)校工作流程分析:學(xué)校工作總體規(guī)劃由教務(wù)人員在學(xué)生成績(jī)管理系統(tǒng)中輸入學(xué)生的基本信息并對(duì)其進(jìn)行維護(hù)管理,包括對(duì)信息的增加、修改及對(duì)信息的各項(xiàng)處理操作等。新的學(xué)年,教務(wù)人員首先編排班級(jí),再對(duì)在校學(xué)生進(jìn)行基本的信息錄入,新生入學(xué)后由教務(wù)人員在管理系統(tǒng)中完成新學(xué)生信息的維護(hù)。在每個(gè)學(xué)期開(kāi)始,教務(wù)處根據(jù)班級(jí)的情況,以班為單位,為每個(gè)班級(jí)

6、安排一個(gè)班主任,并對(duì)各科老師進(jìn)行安排。每舉行一次考試后由任課老師對(duì)成績(jī)進(jìn)行錄入。班主任對(duì)本班的成績(jī)匯總。并進(jìn)行排名,并對(duì)本年級(jí)各科成績(jī)及總成績(jī)進(jìn)行排名。教務(wù)處、班主任及任課老師跟據(jù)實(shí)際情況對(duì)錄入的成績(jī)進(jìn)行維護(hù)管理,各位同學(xué)對(duì)以上錄入的信息可以跟據(jù)自己的需要進(jìn)行適當(dāng)?shù)牟樵儭? 系統(tǒng)總體設(shè)計(jì)3.1 功能模塊分析學(xué)生成績(jī)管理系統(tǒng)是對(duì)學(xué)生基本信息及成績(jī)的管理。開(kāi)發(fā)工具主要采用turboc2.0,主要用于對(duì)學(xué)生的學(xué)號(hào)、姓名等自然信息以及各項(xiàng)學(xué)科成績(jī)進(jìn)行增加、刪除、修改、查詢及保存到文件等操作。系統(tǒng)給用戶提供了一個(gè)簡(jiǎn)單的人機(jī)界面,使用戶可以根據(jù)提示輸入操作項(xiàng),調(diào)用系統(tǒng)提供的管理功能。學(xué)生成績(jī)管理系統(tǒng)處理流

7、程如圖1。0主菜單界面歡迎界面1輸入0退出2查詢3修改4刪除5插入6平均分7排序8顯示繼續(xù)輸入10返回主菜單1學(xué)號(hào)查詢2姓名查詢3總分查詢結(jié) 束9初始化10保存返回圖1 系統(tǒng)處理流程圖主要功能設(shè)計(jì)描述如下:(1)系統(tǒng)主控平臺(tái)允許用戶選擇想要的操作,包括輸入學(xué)生信息、顯示學(xué)生信息、查詢學(xué)生信息、修改學(xué)生信息、刪除學(xué)生信息、計(jì)算成績(jī)以及成績(jī)的排序等。通過(guò)輸入相應(yīng)的序號(hào)選擇相應(yīng)的操作。(2)學(xué)生成績(jī)信息用戶根據(jù)提示輸入學(xué)生的學(xué)號(hào)、姓名、以及三門課的成績(jī),如語(yǔ)文成績(jī)、英語(yǔ)成績(jī)、數(shù)學(xué)成績(jī)等。輸入完成一條學(xué)生記錄,可根據(jù)提示信息繼續(xù)輸入下一條學(xué)生記錄或者繼續(xù)其他的操作。允許輸入多條學(xué)生的成績(jī)信息記錄。輸入

8、完的學(xué)生記錄暫時(shí)保持在單鏈表中,等待下一步的操作。(3)查詢學(xué)生信息可以根據(jù)學(xué)號(hào),姓名,總分從單鏈表中對(duì)學(xué)生所有的信息進(jìn)行查詢,如果沒(méi)有查詢到任何信息,系統(tǒng)會(huì)給出提示信息。(4)修改學(xué)生信息首先提示用戶輸入要進(jìn)行修改的操作的學(xué)號(hào),如果單鏈表中有該學(xué)生的信息存在,則提示用戶輸入要修改的學(xué)生的基本信息、各科成績(jī)等,并將修改結(jié)果重新存儲(chǔ)在單鏈表中。如果用戶沒(méi)有找到要修改的學(xué)生信息,系統(tǒng)將給出提示。(5)插入學(xué)生信息對(duì)已經(jīng)建立好的信息若還需增加,則對(duì)信息進(jìn)行插入。首先提示用戶輸入要進(jìn)行插入的學(xué)號(hào),然后在根據(jù)提示對(duì)用戶信息進(jìn)行完整輸入。輸入完成后系統(tǒng)將對(duì)其進(jìn)行保存。(6)刪除學(xué)生信息首先提示用戶輸入要?jiǎng)h

9、除學(xué)生的學(xué)號(hào),系統(tǒng)根據(jù)用戶輸入的信息在單鏈表中查找,如果找到,直接刪除該學(xué)生全部信息,如果沒(méi)有找到,系統(tǒng)給出提示信息。(7)計(jì)算各科成績(jī)平均分該模塊主要進(jìn)行學(xué)生成績(jī)的平均分計(jì)算,進(jìn)入計(jì)算界面,系統(tǒng)自動(dòng)對(duì)各科進(jìn)行平均分計(jì)算。(8)顯示學(xué)生信息在選擇了顯示學(xué)生信息后,將剛輸入的學(xué)生信息從單鏈表中調(diào)出來(lái)顯示,如果沒(méi)有數(shù)據(jù),則提示無(wú)學(xué)生記錄。(9)學(xué)生成績(jī)排序成績(jī)信息輸入完整后,根據(jù)學(xué)生的總分對(duì)學(xué)生從小到大進(jìn)行排序,在顯示學(xué)生信息的時(shí)候可以看到學(xué)生在班級(jí)或校的排列名次。(10)操作完成后對(duì)操作結(jié)果進(jìn)行保存。運(yùn)行完畢,退出系統(tǒng)。3.2 系統(tǒng)功能模塊初始化準(zhǔn)備3.2.1 編譯預(yù)處理“編譯預(yù)處理”是c編譯系

10、統(tǒng)的一個(gè)組成部分。在c編譯系統(tǒng)對(duì)程序進(jìn)行通常的編譯(包括詞法和語(yǔ)法分析、代碼生成、優(yōu)化等)之前,先對(duì)程序中這些特殊命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起再進(jìn)行通常的編譯處理,以得到目標(biāo)代碼。c語(yǔ)言提供的預(yù)處理功能主要有:(1)宏定義;(2)文件包含;(3)條件編譯。而本程序使用文件包含的預(yù)處理方式進(jìn)行編譯預(yù)處理:#include/*標(biāo)準(zhǔn)庫(kù)函數(shù)*/#include/*標(biāo)準(zhǔn)輸入、輸出函數(shù)庫(kù)*/#include/*屏幕操作函數(shù)*/#include/*字符串函數(shù)*/3.2.2 數(shù)據(jù)結(jié)構(gòu)定義學(xué)生成績(jī)管理系統(tǒng)中的變量有學(xué)號(hào),姓名,成績(jī)等,這些數(shù)據(jù)類型各不相同,無(wú)法用簡(jiǎn)單數(shù)據(jù)類型來(lái)描述,顯然要定

11、義結(jié)構(gòu)體類型。由于學(xué)生人數(shù)很多,還需要定義數(shù)組或者鏈表。數(shù)組的特點(diǎn)是數(shù)據(jù)在內(nèi)存中順序存放,長(zhǎng)度必須事先指定,而學(xué)生的人數(shù)很難估計(jì)。如果數(shù)組長(zhǎng)度定的過(guò)大,會(huì)找出存儲(chǔ)空間浪費(fèi),如果過(guò)小,又無(wú)法滿足需求。特別是進(jìn)行插入,刪除等操作時(shí),代價(jià)較大而又容易出錯(cuò)。用鏈表來(lái)管理學(xué)生成績(jī)就顯得比較妥當(dāng),它無(wú)需估計(jì)學(xué)生人數(shù),進(jìn)行插入刪除等操作時(shí)代價(jià)較小。c語(yǔ)言中,說(shuō)明和使用“結(jié)構(gòu)體”之前必須先定義,在編寫程序之前應(yīng)該對(duì)學(xué)生基本信息進(jìn)行定義,在這個(gè)程序中,使用struct來(lái)定義結(jié)構(gòu)體的類型為struct list,然后用它來(lái)定義變量,在定義結(jié)構(gòu)體類型的時(shí)候定義一個(gè)next成員,該成員可以把學(xué)生結(jié)點(diǎn)進(jìn)行鏈接。并且通過(guò)

12、類型定義typedef將已有的各種類型名定義成為新的類型標(biāo)識(shí)符link,經(jīng)類型定義后,link即可當(dāng)做原類型名使用。具體定義如下:struct listint id; /*學(xué)號(hào)*/charname256; /*姓名*/int china; /*語(yǔ)文成績(jī)*/int english; /*英語(yǔ)成績(jī)*/int math; /*數(shù)學(xué)成績(jī)*/float sum; /*總分*/int order; /*排序*/struct list *next; /*指向下一個(gè)學(xué)生的指針*/;typedef struct list node; /*自定義一個(gè)數(shù)據(jù)結(jié)構(gòu)的結(jié)點(diǎn)*/typedef node *link; /*定

13、義結(jié)點(diǎn)為link結(jié)構(gòu)*/3.3 具體模塊處理函數(shù)的實(shí)現(xiàn)3.3.1 菜單函數(shù)界面的設(shè)計(jì)系統(tǒng)與用戶交換的界面是通過(guò)菜單實(shí)現(xiàn)的,菜單按預(yù)定義格式顯示主菜單界面,等待用戶輸入0-8中的任一數(shù)據(jù),系統(tǒng)會(huì)根據(jù)用戶的輸入調(diào)用相應(yīng)的功能模塊,實(shí)現(xiàn)用戶所要求的操作。(1)本程序的菜單界面主要使用屏幕操作函數(shù)編寫,歡迎界面設(shè)置為白底紅字,菜單界面設(shè)置為綠底藍(lán)字,在歡迎界面中單擊任意鍵進(jìn)入菜單操作界面。整個(gè)系統(tǒng)都以光標(biāo)定位函數(shù)gotoxy(x,y)固定光標(biāo)的位置,在對(duì)其進(jìn)行輸出,從而可以使顯示的文字都出現(xiàn)在設(shè)定的窗口內(nèi),窗口的界面設(shè)置使用畫圖工具制作周圍的邊框,邊框的設(shè)置具體如下:gotoxy(8,2); putc

14、h(0xc9); /*輸入左上角邊框*/for(i=1;i46;i+) putch(0xcd); /*輸出上邊框水平線*/putch(0xbb); /*輸出右上角邊框*/for(i=3;i23;i+) gotoxy(8,i); putch(0xba); /*輸出左垂直線*/gotoxy(56,i); putch(0xba); /*輸出右垂直線*/gotoxy(8,23); putch(0xc8); /*輸出左下角邊框*/for(i=1;i46;i+) putch(0xcd); /*輸出下邊框水平線*/putch(0xbc); /*輸出右下角邊框*/window(9,3,55,22);/*制作顯

15、示菜單的窗口*/(2)菜單是由menu函數(shù)實(shí)現(xiàn),主要通過(guò)printf函數(shù)顯示一些文本選項(xiàng)如:printf(exit the program.n);構(gòu)建一個(gè)簡(jiǎn)單的字符界面,系統(tǒng)設(shè)置11個(gè)模塊,用戶通過(guò)輸入關(guān)鍵字key從0-10之間選擇相應(yīng)的操作,函數(shù)通過(guò)switch調(diào)用各功能模塊:switch(key) case0:exit(0);case1:head=init();break;case2:head=creat_list()break;case3:search_chengji(head);break;case4:head=modify_chengji(head,key);break;case5:

16、head=delete_chengji(head,key);break;case6:head=insert_chengji(head,key);break;case7:average(head);break;case8:sort(head);break;case9:printf_list(head);break;case10:save(head);break;3.3.2 功能函數(shù)設(shè)計(jì)(1)初始化鏈表學(xué)生成績(jī)管理系統(tǒng)使用前要先將系統(tǒng)進(jìn)行初始化操作,初始化函數(shù)init()就是將函數(shù)置空。(2)創(chuàng)建學(xué)生信息函數(shù)創(chuàng)建學(xué)習(xí)信息函數(shù)由creat_list函數(shù)實(shí)現(xiàn),首先在創(chuàng)建鏈表之前先定義函數(shù)的基本信息并創(chuàng)

17、建結(jié)構(gòu)體指針head,pointer和new,設(shè)學(xué)號(hào),排名為整形,名字設(shè)為字符型,語(yǔ)文,數(shù)學(xué),英語(yǔ)成績(jī)?cè)O(shè)為單精度類型,并對(duì)order和sum進(jìn)行初始化,為head建立一個(gè)空結(jié)點(diǎn),當(dāng)head不為空,輸入用戶信息,然后將新輸入的數(shù)據(jù)存于head指針。程序如下:head=(link)malloc(sizeof(node); /*建立一個(gè)新/空結(jié)點(diǎn)*/if(head=null) printf(memory allocate failure!n); exit(0);elseprintf(please inputid:); scanf(%d,&id); head-id=cidprintf(please i

18、nput name:); scanf(%s,&cname);for(i=0;inamei=cnamei;printf(please input china:); scanf(%d,&cchina);head-china=cchina;head-next=null; pointer=head;如果輸入正確既while為真的時(shí)候?yàn)閚ews新建立一個(gè)結(jié)點(diǎn),提示用戶如果要繼續(xù)輸入按1,輸入0為退出。新輸入的數(shù)據(jù)存儲(chǔ)到news指針里,然后把head和news里面的數(shù)據(jù)一起放到pointer,供下面操作時(shí)調(diào)用pointer的數(shù)據(jù)。while(1)news=(link)malloc(sizeof(node)

19、;printf(are you continue?);printf(if continue enter1, or return enter0.);/*輸入1為繼續(xù),0為退出*/scanf(%d,&cid); if(cid=0)break;news-next=null; pointer-next=news; pointer=news;創(chuàng)建函數(shù)時(shí)只能創(chuàng)建一次,因?yàn)閯?chuàng)建的鏈表暫時(shí)存于head指針里,如果再次創(chuàng)建,要先保存否則系統(tǒng)會(huì)自動(dòng)將head指針進(jìn)行初始化數(shù)據(jù)將被清空,存放新創(chuàng)建的記錄。(3)查詢學(xué)生成績(jī)函數(shù)查詢函數(shù)search_chengji用來(lái)對(duì)學(xué)生的基本信息進(jìn)行查詢。首先使用光標(biāo)定位函數(shù)go

20、toxy(x,y)和printf函數(shù)制作查詢的子菜單,菜單包括:0.exit、1.search by id、2.search by name、3.search by sum。查詢菜單設(shè)置完成后應(yīng)用switch()case1:執(zhí)行語(yǔ)句;break;語(yǔ)句調(diào)用相應(yīng)函數(shù)操作功能。系統(tǒng)在調(diào)用函數(shù)時(shí),調(diào)用自定義的輔助函數(shù),按預(yù)定義格式顯示查詢成績(jī)的子菜單界面。用戶輸入的格式正確時(shí)使用while函數(shù)調(diào)用相應(yīng)的功能函數(shù)。 按學(xué)號(hào)查詢,輸入choose=1,key1為要查詢的學(xué)號(hào),查找系統(tǒng)中學(xué)號(hào)為key1的學(xué)生是否存在,如果key1=id說(shuō)明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果,否則繼續(xù)查找直

21、到找到為止。例如:if(choose=1)while(pointer!=null)if(pointer-id-key1=0) flag=1;break;else pointer=pointer-next; 按名字查詢,輸入choose=2,sname為要查詢學(xué)生的名字,查找系統(tǒng)中名字為sname的學(xué)生是否存在,如果strcmp(pointer-name,sname)=0說(shuō)明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果,否則繼續(xù)向下查找直到找到名字為sname的學(xué)生。 按學(xué)生的總成績(jī)查詢,輸入choose=3,score為要查找學(xué)生的總分,查找系統(tǒng)中總分為score的學(xué)生是否存在,如果

22、if(pointer-sum-score=0)說(shuō)明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果;否則繼續(xù)向下查找直到找到總分為score的學(xué)生;(4)修改學(xué)生成績(jī)函數(shù)修改函數(shù)modify_chengji是對(duì)之前所輸入的信息如果出現(xiàn)錯(cuò)誤,或需要更改時(shí)使用。在編寫之前先對(duì)函數(shù)進(jìn)行定義,并把head的值賦給pointer,然后用簡(jiǎn)單的printf函數(shù)編寫修改菜單的基本界面以及修改的內(nèi)容。用戶根據(jù)提示輸入要編輯的學(xué)號(hào)printf(please input number for modify:);scanf(%d,&keynum),系統(tǒng)根據(jù)學(xué)號(hào)查找該學(xué)生的基本信息,如果尋找到該生,系統(tǒng)提示要修

23、改的具體內(nèi)容,根據(jù)用戶需要選擇相應(yīng)內(nèi)容進(jìn)行修改,此功能應(yīng)用switch(choose)case1:執(zhí)行語(yǔ)句;break;語(yǔ)句執(zhí)行。printf(enter0 exit modefiyn);printf(enter1 modefiy namen);printf(enter2 modefiy chinan);printf(enter3 modefiy englishn);printf(enter4 modefiy mathn);printf(please enter you choice:);scanf(%d,&choose);信息輸入完成后,按任意鍵系統(tǒng)自動(dòng)保存到pointer中,新信息將覆蓋原

24、有信息pointer-namei=xnamei,運(yùn)行結(jié)束輸出修改后的信息,返回到菜單。如果沒(méi)有找到,系統(tǒng)將中止執(zhí)行。while(1) if(pointer-id=key3) if(choose=1) for(i=0;inamei=xnamei; break; else if(choose=2)pointer-china=xchina;break;else if(choose=3)pointer-english=xenglish;break;else if(choose=4)pointer-math=xmath;break; if(head!=null) printf(pree any key

25、to save!);getch();printf_list(head);returnhead;(6)刪除學(xué)生信息函數(shù)刪除函數(shù)delete_chengji在編寫之前先定義2個(gè)結(jié)構(gòu)體pointer和q,key2為要?jiǎng)h除學(xué)生的學(xué)號(hào),定義完成后對(duì)pointer賦初值,用j記錄pointer的位置,將其設(shè)為整形并初始化。從鏈表中刪去一個(gè)節(jié)點(diǎn)只要改變鏈接的關(guān)系即可,既修改結(jié)點(diǎn)指針成員的值。從鏈表中刪除一個(gè)結(jié)點(diǎn)有三種情況:刪除鏈表的頭結(jié)點(diǎn),刪除鏈表的中間結(jié)點(diǎn),刪除鏈表的尾節(jié)點(diǎn)。具體情況如圖2。. pointer!=key2時(shí)q pointer= =key2 j=0p pointer= =key2 j!=0j

26、q=pointer;j+;pointer=pointer-next;qpp headhead.圖2 刪除算法當(dāng)pointer的后面指針不為空: 如果key2!=pointer-id,則把pointer的值賦給q,pointer指向下一個(gè)記錄繼續(xù)尋找學(xué)號(hào)key2。while(pointer-next!=null)if(pointer-id!=key2)q=pointer; j+; pointer=pointer-next;else break; 如果key2=pointer-id時(shí),判斷j是否為0,如果j為0說(shuō)明pointer為頭結(jié)點(diǎn),則直接將結(jié)點(diǎn)刪除,head指向他的下一指針。if(point

27、er-id=key2)if(j=0)head=head-next; free(pointer); 如果判斷j!=0,則說(shuō)明刪除的結(jié)點(diǎn)不是頭指針,結(jié)點(diǎn)位于中間,要?jiǎng)h除結(jié)點(diǎn)pointer首先應(yīng)該讓q-next指向pointer-next,然后釋放pointer。執(zhí)行完后系統(tǒng)將自動(dòng)停留幾秒然后返回主菜單。(7)插入學(xué)生成績(jī)插入功能主要用于插入新的學(xué)生記錄。在insert_chengji函數(shù)先定義2個(gè)結(jié)構(gòu)體指針pointer和news,pointer為原指針,news為新插入指針。定義完成后對(duì)pointer初始化,然后為news建立新結(jié)點(diǎn)news=(link)malloc(sizeof(node),定

28、義完成后為news輸入新數(shù)據(jù)。插入的情況有兩種既:如果pointer為空則直接將news的值賦給head輸入系統(tǒng)并做為頭指針;如果pointer不為空則把news的值賦給pointer,運(yùn)行如果正確且head不為空時(shí)顯示輸入的數(shù)據(jù)信息。具體操作如圖3。 pointer= =nullheadp news pointer!=nullnewsp 圖3 插入算法程序:if(head!=null) news=(link)malloc(sizeof(node); /*如果head不為空,為news指針建立一個(gè)結(jié)點(diǎn)*/gotoxy(3,5); printf(please input student id:)

29、;scanf(%d,&news-id);while(1) if(pointer=null) news-next=head; head=news; break; /*如果pointer為空,news直接為頭指針*/if(pointer-id=key3) news-next=pointer-next; pointer-next=news; break;/*如果key3等于id直接插入news*/pointer=pointer-next;(8)計(jì)算各科成績(jī)的平均分函數(shù)計(jì)算函數(shù)average求各科的平均分。首先為各科成績(jī)進(jìn)行初始化操作,如果pointer不為空,說(shuō)明里面有數(shù)據(jù),在對(duì)其求各科的總成績(jī),最

30、后在進(jìn)行平均分求值。計(jì)算完成顯示最后計(jì)算結(jié)果。具體程序如下:while(1) achina=achina+pointer-china; /*求總分*/aenglish=aenglish+pointer-english;amath=amath+pointer-math;cnt=+cnt;if(pointer-next=null) break;pointer=pointer-next; /*求平均分*/avechina=achina/cnt;aveenglish=aenglish/cnt;avemath=amath/cnt;(9)學(xué)生成績(jī)排序?qū)W生成績(jī)排序函數(shù)sort用來(lái)對(duì)學(xué)生成績(jī)進(jìn)行按從大到小的順

31、序排序。處理過(guò)程:定義2個(gè)臨時(shí)指針pointer、max,max用來(lái)存放pointer的數(shù)據(jù),而pointer指向它的下一位。再定義一個(gè)單精度變量fen、整形變量k和字符型變量s256,分別存放成績(jī)、學(xué)號(hào)、名字。定義完成后把先對(duì)pointer初始化,用count來(lái)記錄pointer的個(gè)數(shù),然后從1開(kāi)始對(duì)max和pointer進(jìn)行比較。比較一次count加1,在把count的值賦給pointer-order。排序完成后到顯示界面查看。函數(shù)排序過(guò)程如下:for(i=1;icount;i+) max=pointer=head;for(j=i+1;jnext;if(max-sumpointer-sum

32、) /*用總分對(duì)成績(jī)進(jìn)行排名*/ fen=max-sum; max-sum=pointer-sum; pointer-sum=fen; /*總分的交換*/k=max-id; max-id=pointer-id; pointer-id=k; /*學(xué)號(hào)的交換*/fen=max-china; max-china=pointer-china; pointer-china=fen; /*語(yǔ)文成績(jī)的交換*/fen=max-math; max-math=pointer-math; pointer-math=fen; /*數(shù)學(xué)成績(jī)的交換*/fen=max-english; max-english=pointe

33、r-english; pointer-english=fen; /*英語(yǔ)成績(jī)的交換*/strcpy(s,max-name); strcpy(max-name,pointer-name); strcpy(pointer-name,s);/*姓名的交換*/pointer=pointer-next;pointer=head; count=0;while(pointer!=null)/*賦排序的值*/ count+; pointer-order=count;pointer=pointer-next;(10)顯示學(xué)生成績(jī)函數(shù)顯示函數(shù)printf_list主要顯示學(xué)生的基本信息,每當(dāng)操作完成的時(shí)候一般都會(huì)

34、調(diào)用此函數(shù)進(jìn)行預(yù)覽。printf_list函數(shù)運(yùn)行時(shí)先輸出表頭,在單鏈表中反復(fù)調(diào)用函數(shù),逐條顯示學(xué)生的信息,直到運(yùn)行結(jié)束,返回到主菜單界面。具體顯示函數(shù)如下:printf_list(linkhead) int i=0;link pointer;clrscr(); pointer=head;gotoxy(2,4);printf(+-+-+-+-+-+-+-+n);/*顯示表頭*/gotoxy(2,5);printf(|id|name|china|english|math|sum|order|n);gotoxy(2,6);printf(+-+-+-+-+-+-+-+n);while(pointer

35、!=null) i+;gotoxy(2,7); /*如果pointer不為空,逐條顯示內(nèi)容*/printf(|%d|%s|%4.2f|%4.2f|%4.2f|%4.2f|%d|n,pointer-id,pointer-name,pointer-china,pointer-english,pointer-math,pointer-sum,pointer-order);pointer=pointer-next; gotoxy(2,8);printf(*end*n);gotoxy(2,10);getch();returnhead;clrscr();(11)保存學(xué)生成績(jī)函數(shù)保存函數(shù)save主要用來(lái)對(duì)學(xué)

36、生成績(jī)運(yùn)行后的結(jié)果進(jìn)行保存。該函數(shù)在運(yùn)行之前先要定義一個(gè)指向文件的指針fp,在定義一個(gè)移動(dòng)指針p和保存輸出的文件名outfile。用戶根據(jù)系統(tǒng)的提示,輸入要保存的文件名和保存路徑。系統(tǒng)以只寫(”w”)方式打開(kāi)文件,如果移動(dòng)指針p不為空則寫入一條記錄。運(yùn)行結(jié)束返回主菜單。運(yùn)行過(guò)程函數(shù):printf(enteroutfilename,forexamplec:f1te.txt:n);scanf(%s,outfile);fp=fopen(outfile,w);while(p!=null) fwrite(p,sizeof(node),1,fp);p=p-next; printf(-savesuccess

37、!-n);fclose(fp);4 系統(tǒng)測(cè)試與分析4.1 運(yùn)行工具介紹c語(yǔ)言運(yùn)用的是turboc程序應(yīng)用軟件中運(yùn)行。turboc是美國(guó)borland公司的產(chǎn)品,borland公司是一家專門從事軟件開(kāi)發(fā)、研制的大公司。該公司相繼推出了一套turbo系列軟件,如turbobasic,turbopascal,turboprolog,這些軟件很受用戶歡迎。該公司在1987年首次推出turboc1.0產(chǎn)品,其中使用了全然一新的集成開(kāi)發(fā)環(huán)境,即使用了一系列下拉式菜單,將文本編輯、程序編譯、連接以及程序運(yùn)行一體化,大大方便了程序的開(kāi)發(fā)。1988年,borland公司又推出turboc1.5版本,增加了圖形庫(kù)

38、和文本窗口函數(shù)庫(kù)等,而turboc2.0則是該公司1989年出版的。turboc2.0在原來(lái)集成開(kāi)發(fā)環(huán)境的基礎(chǔ)上增加了查錯(cuò)功能,并可以在tiny模式下直接生成.com(數(shù)據(jù)、代碼、堆棧處在同一64k內(nèi)存中)文件。還可對(duì)數(shù)學(xué)協(xié)處理器(支持8087/80287/80387等)進(jìn)行仿真。4.2 系統(tǒng)操作將編寫好的程序在turboc的代碼編輯器里進(jìn)行編輯,語(yǔ)法檢查正確后進(jìn)行運(yùn)行。系統(tǒng)進(jìn)入運(yùn)行后,首先進(jìn)入系統(tǒng)歡迎界面單擊任意鍵鍵進(jìn)入學(xué)生成績(jī)管理系統(tǒng)的主菜單界面,系統(tǒng)提示用戶輸入0-8之間的不同數(shù)字,來(lái)實(shí)現(xiàn)不同的操作。主菜單界面如圖4所示。圖4 學(xué)生成績(jī)管理主菜單界面進(jìn)入主菜單界面后,輸入數(shù)字1對(duì)本系統(tǒng)先

39、進(jìn)行初始化,初始化后并可以輸入2進(jìn)去創(chuàng)建界面,用戶可以根據(jù)提示信息輸入學(xué)生的基本信息,輸入完一條后,若要繼續(xù)輸入則輸入1,否則退出輸入0,輸入完成后調(diào)用顯示功能模塊,供用戶預(yù)覽。創(chuàng)建的時(shí)候只能創(chuàng)建一次,反復(fù)創(chuàng)建將把之前的數(shù)據(jù)清空,如需增加數(shù)據(jù)則使用插入功能。運(yùn)行結(jié)束返回主菜單界面。若要進(jìn)行查詢,在主菜單中輸入3,則進(jìn)入查詢學(xué)生信息的子菜單,用戶可以根據(jù)自己的喜歡選擇用學(xué)號(hào),姓名,總分中任一方式查詢。根據(jù)系統(tǒng)提示信息輸入查詢的條件,如果要查找的學(xué)生存在,系統(tǒng)根據(jù)要求從數(shù)據(jù)庫(kù)中查找到該學(xué)生的信息,并輸出顯示。否則提示沒(méi)有找到信息,返回主菜單界面。查詢學(xué)生信息子菜單界面如圖5所示。圖5 查詢信息若要

40、對(duì)學(xué)生信息進(jìn)行修改則在主菜單中輸入4,進(jìn)入修改學(xué)生信息界面,根據(jù)系統(tǒng)提示信息輸入要修改學(xué)生的學(xué)號(hào),系統(tǒng)根據(jù)輸入的學(xué)號(hào),檢索要修改的學(xué)生信息,在根據(jù)顯示的內(nèi)容,選擇要修改的具體內(nèi)容。修改完成先顯示未修改的信息,單擊任一鍵對(duì)其進(jìn)行保存。若要?jiǎng)h除學(xué)生信息,在主菜單中輸入5,進(jìn)入刪除學(xué)生信息界面,輸入要?jiǎng)h除的學(xué)生學(xué)號(hào),如果該學(xué)號(hào)存在,系統(tǒng)將自動(dòng)將其學(xué)生信息刪除,如果不存在,則顯示提示說(shuō)明沒(méi)有該學(xué)號(hào)學(xué)生。操作完成后刪除界面停留幾秒立即返回到主菜單界面。在主菜單中若輸入的是6,則進(jìn)入插入學(xué)生信息界面,根據(jù)系統(tǒng)提示信息輸入要增加的學(xué)生學(xué)號(hào),若此學(xué)號(hào)不存在則根據(jù)提示輸入學(xué)生的基本信息,輸入完成后系統(tǒng)會(huì)自動(dòng)保存

41、。在主菜單中若輸入7,則進(jìn)入計(jì)算各科平均分成績(jī),計(jì)算完成輸出計(jì)算結(jié)果。在主菜單界面中如果輸入8,則進(jìn)入學(xué)生成績(jī)排行界面,系統(tǒng)會(huì)自動(dòng)將剛輸入學(xué)生的成績(jī)進(jìn)行排列,通過(guò)顯示功能模塊輸出學(xué)生的排名。在主菜單界面中如果輸入9,則進(jìn)入顯示學(xué)生信息界面,系統(tǒng)會(huì)將剛輸入的學(xué)生的信息按照預(yù)定格式顯示出來(lái)。在主菜單中如果如果10,對(duì)其操作內(nèi)容進(jìn)行保存。退出系統(tǒng)輸入0。結(jié)束語(yǔ)本文簡(jiǎn)要介紹了如何用c語(yǔ)言來(lái)編寫學(xué)生成績(jī)管理系統(tǒng)和設(shè)計(jì)過(guò)程中的一些主要步驟。本系統(tǒng)基本上能夠?qū)崿F(xiàn)學(xué)生成績(jī)管理的添加、刪除、查詢、修改、計(jì)算、顯示、排序等功能,但是在設(shè)計(jì)過(guò)程中還有些功能不是很完善,操作界面不美觀,還有非常多地方需要以后繼續(xù)改進(jìn)。

42、因此在以后的學(xué)習(xí)當(dāng)中還應(yīng)該更加努力,盡量達(dá)到最好。參考文獻(xiàn):1 梁旭,古曉琳,黃明編著.c語(yǔ)言課程設(shè)計(jì)(第2版).電子工業(yè)出版社,2009.8.2 畢萬(wàn)新,景福文主編.c語(yǔ)言程序設(shè)計(jì)(第四版).大連理工大學(xué)出版社,2005.8.3 田淑清主編.全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)教程.c語(yǔ)言程序設(shè)計(jì)(2008年版).北京:高等教育出版社,2007.8.4 (美)羅伯茨(roberts,e,s)著,翁惠玉等譯.c語(yǔ)言的科學(xué)和藝術(shù).北京:機(jī)械工業(yè)出版社,2005.3.5 齊景嘉主編,陳炯,張三群,苗樹(shù)紅編.數(shù)據(jù)結(jié)構(gòu)(含實(shí)訓(xùn)).南京:東南大學(xué)出版社,2006.6.6 王曉東主編.c程序設(shè)計(jì)簡(jiǎn)明教程.北京:中國(guó)水利

43、水電出版社,2006(2007重印).7 張宗杰主編.c語(yǔ)言程序設(shè)計(jì)使用教材.北京:電子工業(yè)出版社,2008.1.附表1:寧德師范高等專科學(xué)校畢業(yè)論文(設(shè)計(jì))開(kāi)題報(bào)告學(xué)生姓名楊歡學(xué)號(hào)2007102235系別計(jì)算機(jī)與信息工程系專業(yè)計(jì)算機(jī)教育指導(dǎo)教師石曼銀職稱講師畢業(yè)論文(設(shè)計(jì))題目用c語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)畢業(yè)論文(設(shè)計(jì))工作期限2009年12月1日起至2010年5月30日止選題的目的和意義伴隨著現(xiàn)代社會(huì)的發(fā)展,網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,越來(lái)越多的管理工作都從傳統(tǒng)的現(xiàn)實(shí)社會(huì)中發(fā)展到了網(wǎng)絡(luò)上。c語(yǔ)言是計(jì)器語(yǔ)言中最基本的語(yǔ)言,是當(dāng)今世界上應(yīng)用最廣泛、影響最深遠(yuǎn)的高級(jí)程序設(shè)計(jì)語(yǔ)言之一,他既有高級(jí)

44、語(yǔ)言的全部功能,又具有計(jì)算機(jī)硬件操作密切相關(guān)的功能,通過(guò)使用c語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)學(xué)生成績(jī)的管理,不僅可以熟練掌握c語(yǔ)言,對(duì)以后學(xué)習(xí)其他語(yǔ)言也有重要促進(jìn)作用。畢業(yè)論文、設(shè)計(jì)綜述在信息時(shí)代,計(jì)算機(jī)以其極高的運(yùn)算速度、巨大的數(shù)據(jù)存儲(chǔ)容量,以及能準(zhǔn)確地進(jìn)行各種算術(shù)運(yùn)算和邏輯運(yùn)算的能力而成為現(xiàn)代化計(jì)算工具,并被廣泛應(yīng)用于社會(huì)各個(gè)領(lǐng)域。計(jì)算機(jī)技術(shù)的高速發(fā)展已被認(rèn)為是人類進(jìn)入信息時(shí)代的標(biāo)志。成績(jī)管理系統(tǒng)是計(jì)算機(jī)技術(shù)和信息時(shí)代的產(chǎn)物,是信息處理或數(shù)據(jù)處理的核心。用c語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)的管理首先要先對(duì)學(xué)校進(jìn)行需求分析,了解現(xiàn)在的學(xué)校都是以什么方式來(lái)管理學(xué)生和學(xué)生的成績(jī)?;仡欉^(guò)去和現(xiàn)在了解現(xiàn)代社會(huì)的發(fā)展現(xiàn)狀。在根據(jù)學(xué)校

45、的具體需求設(shè)計(jì)一個(gè)適合學(xué)生使用的學(xué)生成績(jī)管理系統(tǒng),在制作系統(tǒng)之前,應(yīng)該先畫一個(gè)學(xué)生成績(jī)管理系統(tǒng)的基本流程圖,畫出將要編寫的各個(gè)模塊,及各模塊功能是如何實(shí)現(xiàn)的。準(zhǔn)備工作做好后就可以進(jìn)行編寫程序了。編寫程序之前先要進(jìn)行預(yù)編譯處理,定義一個(gè)學(xué)生成績(jī)的數(shù)據(jù)結(jié)構(gòu),學(xué)生成績(jī)含有幾個(gè)必要的學(xué)生信息如:學(xué)號(hào)、姓名、各科成績(jī)(舉例3科語(yǔ)文,數(shù)學(xué),英語(yǔ)),總分及排名。結(jié)構(gòu)體定義完成后首先要編輯一個(gè)操作界面,本系統(tǒng)使用的是簡(jiǎn)單的屏幕操作函數(shù)gotox()制作了一個(gè)簡(jiǎn)單的歡迎界面和菜單界面。用戶根據(jù)系統(tǒng)提示輸入相應(yīng)的選項(xiàng),進(jìn)入操作界面,功能函數(shù)的實(shí)現(xiàn)使用了gotoxy函數(shù)和printf函數(shù)編輯操作窗口,靈活運(yùn)用switch函數(shù)調(diào)用各函數(shù),實(shí)現(xiàn)函數(shù)功能。在整個(gè)系統(tǒng)中普遍應(yīng)用條件語(yǔ)句if() else限制條件的操作和功能的實(shí)現(xiàn)。每一個(gè)功能函數(shù)之間都存在在一種依賴關(guān)系,互相關(guān)聯(lián),互相調(diào)用。系統(tǒng)操作時(shí)首先進(jìn)入菜單界面,當(dāng)用戶輸入0時(shí)退出操作系統(tǒng);在操作之前先輸入1對(duì)系統(tǒng)進(jìn)行初始化。當(dāng)用戶輸入2則進(jìn)行創(chuàng)建記錄信息,用戶根據(jù)系統(tǒng)提示信息輸入學(xué)生信息,輸入完成系統(tǒng)自動(dòng)保存。當(dāng)用戶輸入3時(shí)進(jìn)入查詢界面,用戶根據(jù)自己的需求輸入要查詢的學(xué)號(hào),輸入正確則調(diào)出信息供用戶查閱;當(dāng)輸入4時(shí)進(jìn)行修改,輸入要修改的學(xué)生學(xué)號(hào)在對(duì)其

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論