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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、含號面使用的strcmp等函數(shù)*/ int havesave=0; /*全集變量*/ struct student char num10;/* 學(xué)號 */ char name18; char sex3; int clanguage; int math; int english; int totle; int average; ; typedef struct node /*使用typedef語句,簡化程序后續(xù)聲明定義的鍵盤輸入*/ 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查詢學(xué)生資料ttttt4修改學(xué)生資料 n); printf( n); printf( t5保存學(xué)生資料ttttt6統(tǒng)計最高分 n); printf( n); printf( t7按總分排名ttttt8打印學(xué)生成績 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=提示:輸入錯誤!n); void Nofind() printf(n=提示:沒有找到該學(xué)生!n); void printchinese() /* 本函數(shù)用于輸出中文 */ printf(t 學(xué)號t 姓名 性別 英語成績 數(shù)學(xué)成績 C語言成績 總分 平均分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)橛肅語言編寫的學(xué)生管理程序,第一次進(jìn)入該程序需要創(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é)號查詢 */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查詢 */ 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(請你輸入學(xué)號(以0返回上一級菜單:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(=提示:學(xué)號為%s的學(xué)生已經(jī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(請你輸入姓名:); scanf(%s,); getchar(); printf(請你輸入性別:); scanf(%s,p-data.sex); getchar(); printf(請你輸入c語言成績:); scanf(%d,&p-data.clanguage); getchar(); printf(請你輸入數(shù)學(xué)成績:); scanf(%d,&p-data.math); getchar(); prin

15、tf(請你輸入英語成績:); 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) /* 查詢學(xué)生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:沒有資料可以查詢!n);

16、return; printf(n=1按學(xué)號查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 學(xué)號 */ printf(請你輸入要查找的學(xué)號:); 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(請您輸入要查找的姓名:); 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=提示:沒有資料可以刪除!n); return; printf(n=1按學(xué)號刪除n=2按姓名刪除n); scanf(%d,&sel); if(sel=1) printf(請您輸入要刪除的學(xué)號:); 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(請你輸入要刪除

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=提示:沒有資料可以修改!n); return; printf(請您輸入要修改的學(xué)生學(xué)號:); sca

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

21、clanguage); getchar(); printf(請你輸入新的數(shù)學(xué)成績(原來是%d分):,p-data.math); getchar(); scanf(%d,&p-data.math); printf(請你輸入新的英語成績(原來是%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=提示:沒有資料可以統(tǒng)計!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)計結(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(英語最高者: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語言最高者: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=提示:沒有資料可以排序!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)/打印成績信息 Node *p; p=l; if(l!=NULL) printf(n全部成績?yōu)?nn); printf(學(xué)號t姓名t數(shù)學(xué)t英語tC語言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ù)為空,還沒有任何信息,請先創(chuàng)建成績信息!nn);void Save(Link l) FILE* fp; Node *p; int flag=1,count=0; fp=fopen(D:學(xué)生管理,wb); if(fp=NULL) printf(n=提示:重新打開文件時發(fā)生錯誤!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é)生成績管理系統(tǒng)ntttt-西安郵電學(xué)院 微電子0901 李歡(17號)n); l=(Node*)malloc(sizeof(Node); l-next=NULL; r=l; fp=fopen(D:學(xué)生管理,rb); if(fp=NULL) printf(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論