學(xué)籍管理系統(tǒng)(C語(yǔ)言課程設(shè)計(jì))(華麗版+詳細(xì)注釋)_第1頁(yè)
學(xué)籍管理系統(tǒng)(C語(yǔ)言課程設(shè)計(jì))(華麗版+詳細(xì)注釋)_第2頁(yè)
學(xué)籍管理系統(tǒng)(C語(yǔ)言課程設(shè)計(jì))(華麗版+詳細(xì)注釋)_第3頁(yè)
學(xué)籍管理系統(tǒng)(C語(yǔ)言課程設(shè)計(jì))(華麗版+詳細(xì)注釋)_第4頁(yè)
學(xué)籍管理系統(tǒng)(C語(yǔ)言課程設(shè)計(jì))(華麗版+詳細(xì)注釋)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 實(shí)驗(yàn)題目:學(xué)籍管理系統(tǒng)一、實(shí)驗(yàn)?zāi)康?綜合應(yīng)用所學(xué)的C語(yǔ)言程序設(shè)計(jì)知識(shí),自行設(shè)計(jì)并實(shí)現(xiàn)一個(gè)較為完整的小型管理信息系統(tǒng)。通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程實(shí)現(xiàn),寫(xiě)實(shí)驗(yàn)報(bào)告等環(huán)節(jié),初步掌握軟件系統(tǒng)的設(shè)計(jì)方法和步驟,提高靈活運(yùn)用程序語(yǔ)言進(jìn)行軟件開(kāi)發(fā)的技能,提高程序設(shè)計(jì)水平和分析問(wèn)題、解決問(wèn)題的能力。二、實(shí)驗(yàn)內(nèi)容 1):熟悉C語(yǔ)言的開(kāi)發(fā)環(huán)境,按照給定的上機(jī)步驟練習(xí)完成; 2):熟悉C程序的編輯,編譯,鏈接和運(yùn)行的過(guò)程。3):編譯一個(gè)應(yīng)用系統(tǒng)程序,形成一個(gè)軟件系統(tǒng)。三、詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果1、算法設(shè)計(jì)學(xué)籍管理系統(tǒng)程序采用了結(jié)構(gòu)化程序設(shè)計(jì)的思想,將程序分解成許多模塊,再由主函數(shù)調(diào)用這些模塊,實(shí)現(xiàn)不同的功能。1、學(xué)

2、生信息結(jié)構(gòu)體:儲(chǔ)存學(xué)生信息。2、主菜單模塊:通過(guò)利用輸出函數(shù)顯示輸出主菜單信息。3、提示錯(cuò)誤信息模塊:通過(guò)利用輸出函數(shù)輸出提示錯(cuò)誤信息。4、提示沒(méi)有找到模塊:通過(guò)利用輸出函數(shù)輸出提示沒(méi)有找到該學(xué)生。5、輸出中文、英文模塊:通過(guò)利用輸出函數(shù)輸出中文提示及學(xué)生數(shù)據(jù)。6、定位模塊:定位連表中符要求合的接點(diǎn),并返回該指針。7、增加學(xué)生信息模塊:通過(guò)指針的不斷后移逐個(gè)接受學(xué)生信息并將學(xué)生信息付給相應(yīng)變量。8、查詢(xún)學(xué)生信息模塊:根據(jù)用戶(hù)選擇按學(xué)號(hào)或按姓名查詢(xún),分別按學(xué)號(hào)或姓名逐個(gè)比較輸入的數(shù)據(jù)與結(jié)構(gòu)體中的數(shù)據(jù),有匹配的則輸出,沒(méi)有則提示沒(méi)有找到。9、刪除信息模塊:根據(jù)用戶(hù)選擇按學(xué)號(hào)或按姓名刪除,分別比對(duì)輸

3、入數(shù)據(jù)和結(jié)構(gòu)體中的數(shù)據(jù),有匹配的則刪除,沒(méi)有則提示無(wú)信息可刪。10、修改信息模塊:通過(guò)用戶(hù)輸入的學(xué)號(hào)找到相應(yīng)學(xué)生,然后逐項(xiàng)修改學(xué)生信息,否則提示無(wú)此學(xué)生。11、顯示信息模塊:將學(xué)生信息輸出。12、保存信息模塊:將接受的結(jié)構(gòu)體信息利用指針存入文件中。13、排序模塊:按照學(xué)生的最高分進(jìn)行排序,輸出。14、統(tǒng)計(jì)學(xué)生信息模塊:逐項(xiàng)比較相鄰兩項(xiàng)的成績(jī)信息,得到每項(xiàng)最大值,并輸出統(tǒng)計(jì)結(jié)果。15、主函數(shù):通過(guò)調(diào)用各模塊來(lái)實(shí)現(xiàn)學(xué)生信息的管理。2、模塊圖設(shè)計(jì)總分主函數(shù)增加學(xué)生信息刪除學(xué)生信息查詢(xún)學(xué)生信息修改學(xué)生信息顯示學(xué)生信息保存學(xué)生信息學(xué)生總分排序統(tǒng)計(jì)最高分按學(xué)號(hào)刪除按總分排序按學(xué)號(hào)查詢(xún)按姓名刪除按英語(yǔ)成績(jī)排

4、序按C語(yǔ)言成績(jī)排序按數(shù)學(xué)成績(jī)排序按平均分排序按姓名查詢(xún)總分3、流程圖設(shè)計(jì)1、主函數(shù)文件是否能打開(kāi)提示文件已打開(kāi),正在導(dǎo)入提示文件不能打開(kāi)能不能將文件內(nèi)容放入節(jié)點(diǎn)中關(guān)閉文件輸出菜單,請(qǐng)用戶(hù)選擇Choice1增加學(xué)生信息刪除學(xué)生信息查詢(xún)學(xué)生信息修改學(xué)生信息保存學(xué)生信息統(tǒng)計(jì)最高分按總分排名01234567按最高分打印8返回2、增加學(xué)生信息模塊:輸入信息提示學(xué)生已存在是否存在(Y/N)NY給相應(yīng)變量返回3刪除學(xué)生信息文件是否為空輸出提示:1、按學(xué)號(hào)2、按姓名否是沒(méi)有資料choice12提示輸入學(xué)號(hào)提示輸入姓名接收輸入學(xué)號(hào)接收輸入姓名是否找到是刪除該生信息否有提示沒(méi)有找到返回4.查詢(xún)學(xué)生信息文件是否為空

5、輸出提示:1、按學(xué)號(hào)2、按姓名否是提示無(wú)資料可查choice12提示輸入學(xué)號(hào)提示輸入姓名接收輸入學(xué)號(hào)接收輸入姓名是否找到是輸出查詢(xún)結(jié)果否有提示沒(méi)有找到返回4、修改學(xué)生信息文件中是否有資料是否提示輸入要修改的學(xué)號(hào)是否找到否是接收輸入的學(xué)號(hào)寫(xiě)入新數(shù)據(jù)并給相應(yīng)變量提示資料已修改完畢提示無(wú)資料可修改提示沒(méi)有找到返回6、顯示學(xué)生信息文件是否能打開(kāi)依次顯示學(xué)生信息是否提示無(wú)資料可查返回7、保存學(xué)生信息文件是否能打開(kāi)是否提示文件打開(kāi)錯(cuò)誤將輸入內(nèi)容存入文件提示保存完成返回8.按總分排序資料知否存在提示無(wú)資料查否是依次比較總分得出最大值輸出比較結(jié)果返回9、統(tǒng)計(jì)學(xué)生最高分資料知否存在提示無(wú)資料可統(tǒng)計(jì)否是依次比較總

6、分得出最大值依次比較平均分得出最大值依次比較數(shù)學(xué)成績(jī)得出最大值依次比較英語(yǔ)成績(jī)得出最大值依次比較C語(yǔ)言成績(jī)得出最大值輸出比較結(jié)果返回 四、調(diào)試情況,設(shè)計(jì)技巧及體會(huì)1、本系統(tǒng)在VC6下編譯調(diào)試通過(guò),可順利運(yùn)行,各項(xiàng)功能達(dá)到設(shè)計(jì)要求 本系統(tǒng)采用分模塊調(diào)試的方法進(jìn)行編譯,即完成一個(gè)函數(shù)功能模塊就編譯一個(gè)功能模塊,最后再進(jìn)行整體編譯并生成可執(zhí)行文件honest.exe。在調(diào)試過(guò)程中主要碰到以下問(wèn)題:(1)輸入函數(shù)中的取地址符即“&”不能正確使用,導(dǎo)致程序在輸入數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤。(2)在比較兩個(gè)字符串時(shí)不能正確使用“strcmp”函數(shù),導(dǎo)致比較結(jié)果不能輸出。(3)在應(yīng)用指針時(shí)沒(méi)有注意頭結(jié)點(diǎn)中的數(shù)據(jù)域中是不

7、存放數(shù)據(jù),導(dǎo)致指針指向錯(cuò)誤。 2、在這次課程設(shè)計(jì)中我充分體會(huì)到C語(yǔ)言作為一門(mén)編程的基本語(yǔ)言它的精妙。通過(guò)這次課程設(shè)計(jì)使我了解到我有很多的不足,在程序調(diào)試的時(shí)候常常會(huì)因?yàn)閹讉€(gè)錯(cuò)誤而弄得心煩,這說(shuō)明我對(duì)知識(shí)的掌握還不夠牢,在程序設(shè)計(jì)的過(guò)程中也暴露出了我的諸多弊端,借這次課程設(shè)計(jì)的機(jī)會(huì)我會(huì)認(rèn)真的加以改正,多多看書(shū) 多去圖書(shū)館學(xué)習(xí),同時(shí)應(yīng)該增強(qiáng)自己的實(shí)踐能力,為以后的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。五、源程序清單(略,詳見(jiàn)電子版實(shí)驗(yàn)報(bào)告)#include stdio.h #include conio.h#include stdlib.h /*包含后面使用的exit等函數(shù)*/#include string.h/*包

8、含號(hào)面使用的strcmp等函數(shù)*/ int havesave=0; /*全集變量*/ struct student char num10;/* 學(xué)號(hào) */ char name18; char sex3; int clanguage; int math; int english; int totle; int average; ; typedef struct node /*使用typedef語(yǔ)句,簡(jiǎn)化程序后續(xù)聲明定義的鍵盤(pán)輸入*/ struct student data; struct node *next; Node,*Link; void menu() printf(n);printf(

9、n);printf( n);printf( n);printf( n); printf( t1添加學(xué)生資料ttttt2刪除學(xué)生資料 n); printf( n); printf( t3查詢(xún)學(xué)生資料ttttt4修改學(xué)生資料 n); printf( n); printf( t5保存學(xué)生資料ttttt6統(tǒng)計(jì)最高分 n); printf( n); printf( t7按總分排名ttttt8打印學(xué)生成績(jī) n);printf( n); printf( t9幫助信息ttttt0退出系統(tǒng) n);printf( n);printf( n); printf( n);printf( n); printf(n);pr

10、intf(n); void print_san() printf(-n); void Wrong() printf(n=提示:輸入錯(cuò)誤!n); void Nofind() printf(n=提示:沒(méi)有找到該學(xué)生!n); void printchinese() /* 本函數(shù)用于輸出中文 */ printf(t 學(xué)號(hào)t 姓名 性別 英語(yǔ)成績(jī) 數(shù)學(xué)成績(jī) C語(yǔ)言成績(jī) 總分 平均分n); void printenglish(Node *p)/* 本函數(shù)用于輸出英文 */ printf(t%-9s%st%st%dt%dt%dt %dt %dn,p-data.num,,p-data.s

11、ex,p-data.english,p-data.math,p-data.clanguage,p-data.totle,p-data.average); void printhelp()printf(該程序?yàn)橛肅語(yǔ)言編寫(xiě)的學(xué)生管理程序,第一次進(jìn)入該程序需要?jiǎng)?chuàng)建學(xué)生數(shù)據(jù)n);printf(以后進(jìn)入可根據(jù)菜單欄顯示實(shí)現(xiàn)各項(xiàng)功能,系統(tǒng)默認(rèn)保存文件位置為D:/學(xué)生管理n);printf(按任意鍵返回);printf(n);getch();Node* Locate(Link l,char findmess,char nameornum) /* 該函數(shù)用于定位鏈表中符合要求的結(jié)點(diǎn),并返回該指針 */ No

12、de *r; if(strcmp(nameornum,num)=0) /* 按學(xué)號(hào)查詢(xún) */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查詢(xún) */ r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加學(xué)生 */ Node *p,*r

13、,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 將指針置于最末尾 */ while(1) printf(請(qǐng)你輸入學(xué)號(hào)(以0返回上一級(jí)菜單:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(=提示:學(xué)號(hào)為%s的學(xué)生已經(jīng)存在,若要修改請(qǐng)你選擇4 修改!n,num); print_san(); printchinese(); printenglish(s); print_san(); pri

14、ntf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); printf(請(qǐng)你輸入姓名:); scanf(%s,); getchar(); printf(請(qǐng)你輸入性別:); scanf(%s,p-data.sex); getchar(); printf(請(qǐng)你輸入c語(yǔ)言成績(jī):); scanf(%d,&p-data.clanguage); getchar(); printf(請(qǐng)你輸入數(shù)學(xué)成績(jī):); scanf(%d,&p-data.math); getchar(); prin

15、tf(請(qǐng)你輸入英語(yǔ)成績(jī):); scanf(%d,&p-data.english); getchar(); p-data.totle=p-data.english+p-data.clanguage+p-data.math; p-data.average=p-data.totle / 3; /* 信息輸入已經(jīng)完成 */ p-next=NULL; r-next=p; r=p; havesave=1; void Seek(Link l) /* 查詢(xún)學(xué)生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:沒(méi)有資料可以查詢(xún)!n);

16、return; printf(n=1按學(xué)號(hào)查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 學(xué)號(hào) */ printf(請(qǐng)你輸入要查找的學(xué)號(hào):); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找結(jié)果n); print_san();printf(n); printchinese(); printenglish(p);printf(n); print_san();printf(按任意鍵返回);getch(); else Nofind(); else if(sel=2) /* 姓名 *

17、/ printf(請(qǐng)您輸入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找結(jié)果n); print_san();printf(n); printchinese(); printenglish(p);printf(n); print_san();printf(按任意鍵返回); getch(); else Nofind(); else Wrong(); void Del(Link l) /* 刪除 */ int sel; Node *p,*r; char findmess20; if(!l-nex

18、t) printf(n=提示:沒(méi)有資料可以刪除!n); return; printf(n=1按學(xué)號(hào)刪除n=2按姓名刪除n); scanf(%d,&sel); if(sel=1) printf(請(qǐng)您輸入要?jiǎng)h除的學(xué)號(hào):); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:該學(xué)生已經(jīng)成功刪除!n); havesave=1; else Nofind(); else if(sel=2) printf(請(qǐng)你輸入要?jiǎng)h除

19、的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:該學(xué)生已經(jīng)成功刪除!n); havesave=1; else Nofind(); else Wrong(); void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:沒(méi)有資料可以修改!n); return; printf(請(qǐng)您輸入要修改的學(xué)生學(xué)號(hào):); sca

20、nf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(請(qǐng)你輸入新學(xué)號(hào)(原來(lái)是%s):,p-data.num); scanf(%s,p-data.num); printf(請(qǐng)你輸入新姓名(原來(lái)是%s):,); scanf(%s,); getchar(); printf(請(qǐng)你輸入新性別(原來(lái)是%s):,p-data.sex); scanf(%s,p-data.sex); printf(請(qǐng)你輸入新的c語(yǔ)言成績(jī)(原來(lái)是%d分):,p-data.clanguage); scanf(%d,&p-data.

21、clanguage); getchar(); printf(請(qǐng)你輸入新的數(shù)學(xué)成績(jī)(原來(lái)是%d分):,p-data.math); getchar(); scanf(%d,&p-data.math); printf(請(qǐng)你輸入新的英語(yǔ)成績(jī)(原來(lái)是%d分):,p-data.english); scanf(%d,&p-data.english); p-data.totle=p-data.english+p-data.clanguage+p-data.math; p-data.average=p-data.totle/3; printf(n=提示:資料修改成功!n); havesave=1; else N

22、ofind(); void Scoreone(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分?jǐn)?shù)最高的接點(diǎn) */ Node *r=l-next; if(!r) printf(n=提示:沒(méi)有資料可以統(tǒng)計(jì)!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.clanguage=pc-data.clanguage) pc=r; if(r-data.math=pm-data.math) pm=r; if(r-data.english=pe-data.english) pe=r; if(r-data.totl

23、e=pt-data.totle) pt=r; if(r-data.average=pa-data.average) pa=r; r=r-next; printf(-統(tǒng)計(jì)結(jié)果-n); printf(總分最高者:t%st%st %d分n,pt-data.num,,pt-data.totle); printf(平均分最高者:t%st%st %d分n,pa-data.num,,pa-data.average); printf(英語(yǔ)最高者:t%st%st %d分n,pe-data.num,,pe-data.english); pri

24、ntf(數(shù)學(xué)最高者:t%st%st %d分n,pm-data.num,,pm-data.math); printf(c語(yǔ)言最高者:t%st%st %d分n,pc-data.num,,pc-data.clanguage); print_san(); printf(按任意鍵返回n);getch(); void Scoretow(Link l) Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /* 用于做新的連表 */ ll-next=NULL; if(l-next=NULL) printf

25、(n=提示:沒(méi)有資料可以排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接點(diǎn)用于保存信息 */ s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.totle=p-data.totle) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next;printf(n=提

26、示:排序已經(jīng)完成!n); void printscore(Link l)/打印成績(jī)信息 Node *p; p=l; if(l!=NULL) printf(n全部成績(jī)?yōu)?nn); printf(學(xué)號(hào)t姓名t數(shù)學(xué)t英語(yǔ)tC語(yǔ)言t平均分t總分nn);p=p-next; do printf(%st%st%dt%dt%dt%dt%dn, p-data.num, ,p-data.math,p-data.english,p-data.clanguage,p-data.average,p-data.totle); p=p-next; while(p!=NULL); printf(n);p

27、rintf(按任意鍵返回);printf(n);getch(); else printf(n目前數(shù)據(jù)為空,還沒(méi)有任何信息,請(qǐng)先創(chuàng)建成績(jī)信息!nn);void Save(Link l) FILE* fp; Node *p; int flag=1,count=0; fp=fopen(D:學(xué)生管理,wb); if(fp=NULL) printf(n=提示:重新打開(kāi)文件時(shí)發(fā)生錯(cuò)誤!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node),1,fp)=1) p=p-next; count+; else flag=0; break; if(flag)

28、 printf(n=提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n,count); havesave=0; fclose(fp); void main() Link l;/* 連表 */ FILE *fp; /* 文件指針 */ int sel; char c; char chji; int count=0; Node *p,*r; printf(tttt學(xué)生成績(jī)管理系統(tǒng)ntttt-西安郵電學(xué)院 微電子0901 李歡(17號(hào))n); l=(Node*)malloc(sizeof(Node); l-next=NULL; r=l; fp=fopen(D:學(xué)生管理,rb); if(fp=NULL) printf(n=提示:文件還

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論