




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目 錄1 引言12 系統(tǒng)需求分析12.1項(xiàng)目背景分析12.2 系統(tǒng)開發(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)測試與分析94.1 運(yùn)行工具介紹94.2 系統(tǒng)操作9結(jié)束語10參考文獻(xiàn)10用C語言實(shí)現(xiàn)一個(gè)簡單的學(xué)生成績管理系統(tǒng)摘要:伴隨著現(xiàn)代社會的發(fā)展,網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,越來越多的管理工作都從傳統(tǒng)的現(xiàn)實(shí)社會中發(fā)展到了網(wǎng)絡(luò)上。高校是使用計(jì)算機(jī)技術(shù)最早的單位,學(xué)校的各項(xiàng)管理工作也從現(xiàn)實(shí)生
2、活走上了網(wǎng)絡(luò)空間。本文對學(xué)校的需求進(jìn)行分析,通過使用C語言設(shè)計(jì)并實(shí)現(xiàn)學(xué)生成績的管理,力求盡量簡潔實(shí)用地解決學(xué)校對學(xué)生成績的管理和學(xué)生對成績的查詢問題。關(guān)鍵字:C語言 成績管理系統(tǒng) 程序設(shè)計(jì)1 引言在信息時(shí)代,計(jì)算機(jī)以其極高的運(yùn)算速度、巨大的數(shù)據(jù)存儲容量,以及能準(zhǔn)確地進(jìn)行各種算術(shù)運(yùn)算和邏輯運(yùn)算的能力而成為現(xiàn)代化計(jì)算工具,并被廣泛應(yīng)用于社會各個(gè)領(lǐng)域。計(jì)算機(jī)技術(shù)的高速發(fā)展已被認(rèn)為是人類進(jìn)入信息時(shí)代的標(biāo)志。成績管理系統(tǒng)是計(jì)算機(jī)技術(shù)和信息時(shí)代的產(chǎn)物,是信息處理或數(shù)據(jù)處理的核心。該系統(tǒng)開發(fā)的總體任務(wù)是實(shí)現(xiàn)學(xué)生成績管理的系統(tǒng)化、規(guī)范化、自動(dòng)化,以達(dá)到提高學(xué)生成績管理效率的目的。通過運(yùn)用程序設(shè)計(jì)軟件實(shí)現(xiàn)學(xué)生成
3、績管理中的多種功能,如學(xué)生成績信息的添加、刪除、查詢、修改、顯示、排序等。該系統(tǒng)的設(shè)計(jì)充分利用計(jì)算機(jī)作為輔助工具,來實(shí)現(xiàn)學(xué)生考試成績從傳統(tǒng)的手工管理到計(jì)算機(jī)管理,并對提高管理效率和節(jié)約大量的人力、物力有一定的推動(dòng)作用。因此,開發(fā)這種管理軟件很必要,本文將在分析系統(tǒng)的應(yīng)用價(jià)值以及開發(fā)工具的基礎(chǔ)上,用C語言來開發(fā)成績管理系統(tǒng)。2 系統(tǒng)需求分析2.1項(xiàng)目背景分析在我國,各大中小學(xué)校的各類信息管理系統(tǒng)并非一個(gè)新的課題,但也有的學(xué)校根本就沒有任何信息管理系統(tǒng),特別是在西部貧困地區(qū),學(xué)校的各類管理依然由手工操作來完成,這十分落后,效率極低,成本很大,而且極異出錯(cuò)。隨著社會的發(fā)展,信息化是社會進(jìn)程的必然趨勢
4、,學(xué)校管理只有快,準(zhǔn),精才能發(fā)揮其價(jià)值。2.2 系統(tǒng)開發(fā)的目標(biāo)與意義(1)系統(tǒng)開發(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)工作過程的計(jì)算機(jī)化,提高工作效率和工作質(zhì)量,現(xiàn)提出如下的系統(tǒng)開發(fā)目標(biāo):系統(tǒng)應(yīng)具有實(shí)用性、可靠性和適用性。對系統(tǒng)中數(shù)據(jù)庫的信息進(jìn)行有效處理,防止數(shù)據(jù)錯(cuò)亂。能夠按照用戶選擇的不同的條件進(jìn)行簡單查詢。方便用戶的操作,盡量減少用戶的操作。(2)系統(tǒng)開發(fā)的意義:在各大中小學(xué)校,用計(jì)算機(jī)管理學(xué)校的信息已經(jīng)越來越普遍了。用計(jì)算機(jī)不但可以提高工作效率,而且還節(jié)省了許多人力物力財(cái)力。提高了學(xué)
5、校的管理能力,為此,用計(jì)算機(jī)來管理學(xué)校的信息,是非常必要的。2.3 項(xiàng)目需求分析學(xué)校工作流程分析:學(xué)校工作總體規(guī)劃由教務(wù)人員在學(xué)生成績管理系統(tǒng)中輸入學(xué)生的基本信息并對其進(jìn)行維護(hù)管理,包括對信息的增加、修改及對信息的各項(xiàng)處理操作等。新的學(xué)年,教務(wù)人員首先編排班級,再對在校學(xué)生進(jìn)行基本的信息錄入,新生入學(xué)后由教務(wù)人員在管理系統(tǒng)中完成新學(xué)生信息的維護(hù)。在每個(gè)學(xué)期開始,教務(wù)處根據(jù)班級的情況,以班為單位,為每個(gè)班級安排一個(gè)班主任,并對各科老師進(jìn)行安排。每舉行一次考試后由任課老師對成績進(jìn)行錄入。班主任對本班的成績匯總。并進(jìn)行排名,并對本年級各科成績及總成績進(jìn)行排名。教務(wù)處、班主任及任課老師跟據(jù)實(shí)際情況對錄
6、入的成績進(jìn)行維護(hù)管理,各位同學(xué)對以上錄入的信息可以跟據(jù)自己的需要進(jìn)行適當(dāng)?shù)牟樵儭? 系統(tǒng)總體設(shè)計(jì)3.1 功能模塊分析學(xué)生成績管理系統(tǒng)是對學(xué)生基本信息及成績的管理。開發(fā)工具主要采用TurboC2.0,主要用于對學(xué)生的學(xué)號、姓名等自然信息以及各項(xiàng)學(xué)科成績進(jìn)行增加、刪除、修改、查詢及保存到文件等操作。系統(tǒng)給用戶提供了一個(gè)簡單的人機(jī)界面,使用戶可以根據(jù)提示輸入操作項(xiàng),調(diào)用系統(tǒng)提供的管理功能。學(xué)生成績管理系統(tǒng)處理流程如圖1。0主菜單界面歡迎界面1輸入0退出2查詢3修改4刪除5插入6平均分7排序8顯示繼續(xù)輸入10返回主菜單1學(xué)號查詢2姓名查詢3總分查詢結(jié) 束9初始化10保存返回圖1 系統(tǒng)處理流程圖主要功能
7、設(shè)計(jì)描述如下:(1)系統(tǒng)主控平臺允許用戶選擇想要的操作,包括輸入學(xué)生信息、顯示學(xué)生信息、查詢學(xué)生信息、修改學(xué)生信息、刪除學(xué)生信息、計(jì)算成績以及成績的排序等。通過輸入相應(yīng)的序號選擇相應(yīng)的操作。(2)學(xué)生成績信息用戶根據(jù)提示輸入學(xué)生的學(xué)號、姓名、以及三門課的成績,如語文成績、英語成績、數(shù)學(xué)成績等。輸入完成一條學(xué)生記錄,可根據(jù)提示信息繼續(xù)輸入下一條學(xué)生記錄或者繼續(xù)其他的操作。允許輸入多條學(xué)生的成績信息記錄。輸入完的學(xué)生記錄暫時(shí)保持在單鏈表中,等待下一步的操作。(3)查詢學(xué)生信息可以根據(jù)學(xué)號,姓名,總分從單鏈表中對學(xué)生所有的信息進(jìn)行查詢,如果沒有查詢到任何信息,系統(tǒng)會給出提示信息。(4)修改學(xué)生信息首
8、先提示用戶輸入要進(jìn)行修改的操作的學(xué)號,如果單鏈表中有該學(xué)生的信息存在,則提示用戶輸入要修改的學(xué)生的基本信息、各科成績等,并將修改結(jié)果重新存儲在單鏈表中。如果用戶沒有找到要修改的學(xué)生信息,系統(tǒng)將給出提示。(5)插入學(xué)生信息對已經(jīng)建立好的信息若還需增加,則對信息進(jìn)行插入。首先提示用戶輸入要進(jìn)行插入的學(xué)號,然后在根據(jù)提示對用戶信息進(jìn)行完整輸入。輸入完成后系統(tǒng)將對其進(jìn)行保存。(6)刪除學(xué)生信息首先提示用戶輸入要?jiǎng)h除學(xué)生的學(xué)號,系統(tǒng)根據(jù)用戶輸入的信息在單鏈表中查找,如果找到,直接刪除該學(xué)生全部信息,如果沒有找到,系統(tǒng)給出提示信息。(7)計(jì)算各科成績平均分該模塊主要進(jìn)行學(xué)生成績的平均分計(jì)算,進(jìn)入計(jì)算界面,
9、系統(tǒng)自動(dòng)對各科進(jìn)行平均分計(jì)算。(8)顯示學(xué)生信息在選擇了顯示學(xué)生信息后,將剛輸入的學(xué)生信息從單鏈表中調(diào)出來顯示,如果沒有數(shù)據(jù),則提示無學(xué)生記錄。(9)學(xué)生成績排序成績信息輸入完整后,根據(jù)學(xué)生的總分對學(xué)生從小到大進(jìn)行排序,在顯示學(xué)生信息的時(shí)候可以看到學(xué)生在班級或校的排列名次。(10)操作完成后對操作結(jié)果進(jìn)行保存。運(yùn)行完畢,退出系統(tǒng)。3.2 系統(tǒng)功能模塊初始化準(zhǔn)備3.2.1 編譯預(yù)處理“編譯預(yù)處理”是C編譯系統(tǒng)的一個(gè)組成部分。在C編譯系統(tǒng)對程序進(jìn)行通常的編譯(包括詞法和語法分析、代碼生成、優(yōu)化等)之前,先對程序中這些特殊命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起再進(jìn)行通常的編譯處理,以得到
10、目標(biāo)代碼。C語言提供的預(yù)處理功能主要有:(1)宏定義;(2)文件包含;(3)條件編譯。而本程序使用文件包含的預(yù)處理方式進(jìn)行編譯預(yù)處理:#include<stdlib.h>/*標(biāo)準(zhǔn)庫函數(shù)*/#include<stdio.h>/*標(biāo)準(zhǔn)輸入、輸出函數(shù)庫*/#include<conio.h>/*屏幕操作函數(shù)*/#include<string.h>/*字符串函數(shù)*/3.2.2 數(shù)據(jù)結(jié)構(gòu)定義學(xué)生成績管理系統(tǒng)中的變量有學(xué)號,姓名,成績等,這些數(shù)據(jù)類型各不相同,無法用簡單數(shù)據(jù)類型來描述,顯然要定義結(jié)構(gòu)體類型。由于學(xué)生人數(shù)很多,還需要定義數(shù)組或者鏈表。數(shù)組的特點(diǎn)是
11、數(shù)據(jù)在內(nèi)存中順序存放,長度必須事先指定,而學(xué)生的人數(shù)很難估計(jì)。如果數(shù)組長度定的過大,會找出存儲空間浪費(fèi),如果過小,又無法滿足需求。特別是進(jìn)行插入,刪除等操作時(shí),代價(jià)較大而又容易出錯(cuò)。用鏈表來管理學(xué)生成績就顯得比較妥當(dāng),它無需估計(jì)學(xué)生人數(shù),進(jìn)行插入刪除等操作時(shí)代價(jià)較小。C語言中,說明和使用“結(jié)構(gòu)體”之前必須先定義,在編寫程序之前應(yīng)該對學(xué)生基本信息進(jìn)行定義,在這個(gè)程序中,使用struct來定義結(jié)構(gòu)體的類型為struct list,然后用它來定義變量,在定義結(jié)構(gòu)體類型的時(shí)候定義一個(gè)next成員,該成員可以把學(xué)生結(jié)點(diǎn)進(jìn)行鏈接。并且通過類型定義typedef將已有的各種類型名定義成為新的類型標(biāo)識符lin
12、k,經(jīng)類型定義后,link即可當(dāng)做原類型名使用。具體定義如下:struct listint ID; /*學(xué)號*/charname256; /*姓名*/int china; /*語文成績*/int english; /*英語成績*/int math; /*數(shù)學(xué)成績*/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; /*定義結(jié)點(diǎn)為link結(jié)構(gòu)*/3.3 具體模塊處理函數(shù)的實(shí)現(xiàn)3.3.1 菜
13、單函數(shù)界面的設(shè)計(jì)系統(tǒng)與用戶交換的界面是通過菜單實(shí)現(xiàn)的,菜單按預(yù)定義格式顯示主菜單界面,等待用戶輸入0-8中的任一數(shù)據(jù),系統(tǒng)會根據(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)的位置,在對其進(jìn)行輸出,從而可以使顯示的文字都出現(xiàn)在設(shè)定的窗口內(nèi),窗口的界面設(shè)置使用畫圖工具制作周圍的邊框,邊框的設(shè)置具體如下:gotoxy(8,2); putch(0xc9); /*輸入左上角邊框*/for(i=1;i<4
14、6;i+) putch(0xcd); /*輸出上邊框水平線*/putch(0xbb); /*輸出右上角邊框*/for(i=3;i<23;i+) gotoxy(8,i); putch(0xba); /*輸出左垂直線*/gotoxy(56,i); putch(0xba); /*輸出右垂直線*/gotoxy(8,23); putch(0xc8); /*輸出左下角邊框*/for(i=1;i<46;i+) putch(0xcd); /*輸出下邊框水平線*/putch(0xbc); /*輸出右下角邊框*/window(9,3,55,22);/*制作顯示菜單的窗口*/(2)菜單是由menu函數(shù)實(shí)
15、現(xiàn),主要通過printf函數(shù)顯示一些文本選項(xiàng)如:printf("<0>exit the program.n");構(gòu)建一個(gè)簡單的字符界面,系統(tǒng)設(shè)置11個(gè)模塊,用戶通過輸入關(guān)鍵字key從0-10之間選擇相應(yīng)的操作,函數(shù)通過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:h
16、ead=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é)生成績管理系統(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é)號,排名為整形,名字設(shè)為字符型,語文,數(shù)學(xué),英語成績設(shè)為單精度類型,并對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&quo
18、t;,&ID); head->ID=cIDprintf("please input name:"); scanf("%s",&cname);for(i=0;i<256;i+) head->namei=cnamei;printf("please input china:"); scanf("%d",&cchina);head->china=cchina;head->next=NULL; pointer=head;如果輸入正確既while為真的時(shí)候?yàn)閚ews新建立一
19、個(gè)結(jié)點(diǎn),提示用戶如果要繼續(xù)輸入按1,輸入0為退出。新輸入的數(shù)據(jù)存儲到news指針里,然后把head和news里面的數(shù)據(jù)一起放到pointer,供下面操作時(shí)調(diào)用pointer的數(shù)據(jù)。while(1)news=(link)malloc(sizeof(node);printf("Are you continue?");printf("If continue enter'1', or return enter'0'.");/*輸入1為繼續(xù),0為退出*/scanf("%d",&cID); if(cID=0
20、)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)會自動(dòng)將head指針進(jìn)行初始化數(shù)據(jù)將被清空,存放新創(chuàng)建的記錄。(3)查詢學(xué)生成績函數(shù)查詢函數(shù)search_chengji用來對學(xué)生的基本信息進(jìn)行查詢。首先使用光標(biāo)定位函數(shù)gotoxy(x,y)和printf函數(shù)制作查詢的子菜單,菜單包括:0.exit、1.search by ID、2.search by name、3.search by sum。查詢菜單設(shè)置完成后應(yīng)用switch
21、()case1:執(zhí)行語句;break;語句調(diào)用相應(yīng)函數(shù)操作功能。系統(tǒng)在調(diào)用函數(shù)時(shí),調(diào)用自定義的輔助函數(shù),按預(yù)定義格式顯示查詢成績的子菜單界面。用戶輸入的格式正確時(shí)使用while函數(shù)調(diào)用相應(yīng)的功能函數(shù)。 按學(xué)號查詢,輸入choose=1,key1為要查詢的學(xué)號,查找系統(tǒng)中學(xué)號為key1的學(xué)生是否存在,如果key1=ID說明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果,否則繼續(xù)查找直到找到為止。例如:if(choose=1)while(pointer!=NULL)if(pointer->ID-key1=0) flag=1;break;else pointer=pointer->
22、;next; 按名字查詢,輸入choose=2,sname為要查詢學(xué)生的名字,查找系統(tǒng)中名字為sname的學(xué)生是否存在,如果strcmp(pointer->name,sname)=0說明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果,否則繼續(xù)向下查找直到找到名字為sname的學(xué)生。 按學(xué)生的總成績查詢,輸入choose=3,score為要查找學(xué)生的總分,查找系統(tǒng)中總分為score的學(xué)生是否存在,如果if(pointer->sum-score=0)說明找到該學(xué)生,并標(biāo)記flag=1,中斷查詢顯示查詢的結(jié)果;否則繼續(xù)向下查找直到找到總分為score的學(xué)生;(4)修改學(xué)生成績函數(shù)
23、修改函數(shù)modify_chengji是對之前所輸入的信息如果出現(xiàn)錯(cuò)誤,或需要更改時(shí)使用。在編寫之前先對函數(shù)進(jìn)行定義,并把head的值賦給pointer,然后用簡單的printf函數(shù)編寫修改菜單的基本界面以及修改的內(nèi)容。用戶根據(jù)提示輸入要編輯的學(xué)號printf("please input number for modify:");scanf("%d",&keynum),系統(tǒng)根據(jù)學(xué)號查找該學(xué)生的基本信息,如果尋找到該生,系統(tǒng)提示要修改的具體內(nèi)容,根據(jù)用戶需要選擇相應(yīng)內(nèi)容進(jìn)行修改,此功能應(yīng)用switch(choose)case1:執(zhí)行語句;break;
24、語句執(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);信息輸入完成后
25、,按任意鍵系統(tǒng)自動(dòng)保存到pointer中,新信息將覆蓋原有信息pointer->namei=xnamei,運(yùn)行結(jié)束輸出修改后的信息,返回到菜單。如果沒有找到,系統(tǒng)將中止執(zhí)行。while(1) if(pointer->ID=key3) if(choose=1) for(i=0;i<256;i+)pointer->namei=xnamei; break; else if(choose=2)pointer->china=xchina;break;else if(choose=3)pointer->english=xenglish;break;else if(cho
26、ose=4)pointer->math=xmath;break; if(head!=NULL) printf("Pree any key 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é)號,定義完成后對pointer賦初值,用j記錄pointer的位置,將其設(shè)為整形并初始化。從鏈表中刪去一個(gè)節(jié)點(diǎn)只要改變鏈接的關(guān)系即可,既修改結(jié)點(diǎn)指針成員的值。從鏈表中刪除一個(gè)結(jié)點(diǎn)有三種情況:刪除鏈表的頭結(jié)點(diǎn),刪除
27、鏈表的中間結(jié)點(diǎn),刪除鏈表的尾節(jié)點(diǎn)。具體情況如圖2。. pointer!=key2時(shí)q pointer= =key2 j=0p pointer= =key2 j!=0jq=pointer;j+;pointer=pointer->next;qpp headhead.圖2 刪除算法當(dāng)pointer的后面指針不為空: 如果key2!=pointer->ID,則把pointer的值賦給q,pointer指向下一個(gè)記錄繼續(xù)尋找學(xué)號key2。while(pointer->next!=NULL)if(pointer->ID!=key2)q=pointer; j+; pointer=po
28、inter->next;else break; 如果key2=pointer->ID時(shí),判斷j是否為0,如果j為0說明pointer為頭結(jié)點(diǎn),則直接將結(jié)點(diǎn)刪除,head指向他的下一指針。if(pointer->ID=key2)if(j=0)head=head->next; free(pointer); 如果判斷j!=0,則說明刪除的結(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é)生成績插入功能主要用于插入新的學(xué)生記錄。在
29、insert_chengji函數(shù)先定義2個(gè)結(jié)構(gòu)體指針pointer和news,pointer為原指針,news為新插入指針。定義完成后對pointer初始化,然后為news建立新結(jié)點(diǎn)news=(link)malloc(sizeof(node),定義完成后為news輸入新數(shù)據(jù)。插入的情況有兩種既:如果pointer為空則直接將news的值賦給head輸入系統(tǒng)并做為頭指針;如果pointer不為空則把news的值賦給pointer,運(yùn)行如果正確且head不為空時(shí)顯示輸入的數(shù)據(jù)信息。具體操作如圖3。 pointer= =NULLheadp news pointer!=NULLnewsp 圖3 插入算
30、法程序:if(head!=NULL) news=(link)malloc(sizeof(node); /*如果head不為空,為news指針建立一個(gè)結(jié)點(diǎn)*/gotoxy(3,5); printf("please input student ID:");scanf("%d",&news->ID);while(1) if(pointer=NULL) news->next=head; head=news; break; /*如果pointer為空,news直接為頭指針*/if(pointer->ID=key3) news->ne
31、xt=pointer->next; pointer->next=news; break;/*如果key3等于ID直接插入news*/pointer=pointer->next;(8)計(jì)算各科成績的平均分函數(shù)計(jì)算函數(shù)average求各科的平均分。首先為各科成績進(jìn)行初始化操作,如果pointer不為空,說明里面有數(shù)據(jù),在對其求各科的總成績,最后在進(jìn)行平均分求值。計(jì)算完成顯示最后計(jì)算結(jié)果。具體程序如下:while(1) achina=achina+pointer->china; /*求總分*/aenglish=aenglish+pointer->english;amat
32、h=amath+pointer->math;cnt=+cnt;if(pointer->next=NULL) break;pointer=pointer->next; /*求平均分*/avechina=achina/cnt;aveenglish=aenglish/cnt;avemath=amath/cnt;(9)學(xué)生成績排序?qū)W生成績排序函數(shù)sort用來對學(xué)生成績進(jìn)行按從大到小的順序排序。處理過程:定義2個(gè)臨時(shí)指針pointer、max,max用來存放pointer的數(shù)據(jù),而pointer指向它的下一位。再定義一個(gè)單精度變量fen、整形變量k和字符型變量s256,分別存放成績、學(xué)
33、號、名字。定義完成后把先對pointer初始化,用count來記錄pointer的個(gè)數(shù),然后從1開始對max和pointer進(jìn)行比較。比較一次count加1,在把count的值賦給pointer->order。排序完成后到顯示界面查看。函數(shù)排序過程如下:for(i=1;i<count;i+) max=pointer=head;for(j=i+1;j<=count;j+) max=pointer->next;if(max->sum>pointer->sum) /*用總分對成績進(jìn)行排名*/ fen=max->sum; max->sum=poin
34、ter->sum; pointer->sum=fen; /*總分的交換*/k=max->ID; max->ID=pointer->ID; pointer->ID=k; /*學(xué)號的交換*/fen=max->china; max->china=pointer->china; pointer->china=fen; /*語文成績的交換*/fen=max->math; max->math=pointer->math; pointer->math=fen; /*數(shù)學(xué)成績的交換*/fen=max->english;
35、max->english=pointer->english; pointer->english=fen; /*英語成績的交換*/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->
36、;next;(10)顯示學(xué)生成績函數(shù)顯示函數(shù)printf_list主要顯示學(xué)生的基本信息,每當(dāng)操作完成的時(shí)候一般都會調(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|
37、english|math|sum|order|n");gotoxy(2,6);printf("+-+-+-+-+-+-+-+n");while(pointer!=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,p
38、ointer->order);pointer=pointer->next; gotoxy(2,8);printf("*end*n");gotoxy(2,10);getch();returnhead;clrscr();(11)保存學(xué)生成績函數(shù)保存函數(shù)save主要用來對學(xué)生成績運(yùn)行后的結(jié)果進(jìn)行保存。該函數(shù)在運(yùn)行之前先要定義一個(gè)指向文件的指針fp,在定義一個(gè)移動(dòng)指針p和保存輸出的文件名outfile。用戶根據(jù)系統(tǒng)的提示,輸入要保存的文件名和保存路徑。系統(tǒng)以只寫(”w”)方式打開文件,如果移動(dòng)指針p不為空則寫入一條記錄。運(yùn)行結(jié)束返回主菜單。運(yùn)行過程函數(shù):printf(&
39、quot;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!-n");fclose(fp);4 系統(tǒng)測試與分析4.1 運(yùn)行工具介紹C語言運(yùn)用的是TurboC程序應(yīng)用軟件中運(yùn)行。TurboC是美國Borland公司的產(chǎn)品,Borland公司是一家專門從事軟件
40、開發(fā)、研制的大公司。該公司相繼推出了一套Turbo系列軟件,如TurboBASIC,TurboPascal,TurboProlog,這些軟件很受用戶歡迎。該公司在1987年首次推出TurboC1.0產(chǎn)品,其中使用了全然一新的集成開發(fā)環(huán)境,即使用了一系列下拉式菜單,將文本編輯、程序編譯、連接以及程序運(yùn)行一體化,大大方便了程序的開發(fā)。1988年,Borland公司又推出TurboC1.5版本,增加了圖形庫和文本窗口函數(shù)庫等,而TurboC2.0則是該公司1989年出版的。TurboC2.0在原來集成開發(fā)環(huán)境的基礎(chǔ)上增加了查錯(cuò)功能,并可以在Tiny模式下直接生成.COM(數(shù)據(jù)、代碼、堆棧處在同一64K內(nèi)存中)文件。還可對數(shù)學(xué)協(xié)處理器(支持8087/80287/80387等)進(jìn)行仿真。4.2 系統(tǒng)操作將編寫好的程序在TurboC的代碼編輯器里進(jìn)行編輯,語法檢查正確后進(jìn)行運(yùn)行。系統(tǒng)進(jìn)入運(yùn)行后,首先進(jìn)入系統(tǒng)歡迎界面單擊任意鍵鍵進(jìn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國人呼吸道合胞病毒藥物行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國亞麻種子行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國中藥配方顆粒行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資研究報(bào)告
- 2025-2030中國不銹鋼筆尖行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030一次性無紡布床單行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 付款申請合同
- 房貸合同的變更手續(xù)
- 2025至2030年鉆石會議臺項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年螨停農(nóng)藥項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030防銹漆行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究報(bào)告
- 中醫(yī)內(nèi)科學(xué)陽痿專家講座
- ZL50裝載機(jī)反轉(zhuǎn)六連桿工作裝置設(shè)計(jì)
- LY/T 2698-2016鐵皮石斛雜交育種技術(shù)規(guī)程
- 綜合性學(xué)習(xí)之對聯(lián)-中考語文二輪復(fù)習(xí)
- 實(shí)驗(yàn)室生物安全程序文件
- 企業(yè)融資方式介紹課件
- 藥品生產(chǎn)監(jiān)督管理辦法
- 福建省普通高中學(xué)生綜合素質(zhì)學(xué)期評價(jià)表
- 五年級下冊數(shù)學(xué)課件 -4.1 用數(shù)對確定位置 ︳青島版 (共20張PPT)
- 柏拉圖分析案例
- 二襯帶模注漿施工方案
評論
0/150
提交評論