版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、*實(shí)踐教學(xué)*蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院2009年春季學(xué)期計(jì)算機(jī)語言B 課程設(shè)計(jì)題 目:學(xué)生成績(jī)管理系統(tǒng) 專業(yè)班級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 成 績(jī): 目 錄摘 要1前 言2正 文31.問題描述32.需求分析33.系統(tǒng)總體設(shè)計(jì)34.詳細(xì)設(shè)計(jì)45.系統(tǒng)測(cè)試66.軟件使用說明書7總 結(jié)9參考文獻(xiàn)10致 謝11附件 部分原程序代碼12摘 要建立一個(gè)“學(xué)生成績(jī)管理系統(tǒng)”,系統(tǒng)以菜單方式工作,編寫存放有學(xué)生信息,包含學(xué)生姓名、學(xué)號(hào)、學(xué)生的成績(jī)、班級(jí)等,并可對(duì)這些信息進(jìn)行瀏覽;可按學(xué)號(hào)查找此信息,建立學(xué)生成績(jī)信息的文件,并且可以實(shí)現(xiàn)一個(gè)新的學(xué)生信息的插入,可以按照學(xué)號(hào)來刪除一個(gè)學(xué)生的信息,可以按照
2、平均分對(duì)學(xué)生進(jìn)行排序。關(guān)鍵詞:學(xué)生成績(jī)管理;文件;插入學(xué)生成績(jī)信息;查詢;修改;對(duì)學(xué)生的平均成績(jī)進(jìn)行排序。 前 言近年來,隨著學(xué)校規(guī)模的不斷擴(kuò)大,學(xué)生數(shù)量也相應(yīng)的增加,有關(guān)學(xué)生考試的各種信息量也成倍增加,面對(duì)著龐大的信息量,傳統(tǒng)的人工方式管理會(huì)導(dǎo)致學(xué)生成績(jī)管理上的混亂,人力與物力過多浪費(fèi),學(xué)生成績(jī)管理費(fèi)用的增加,從而使學(xué)校的負(fù)擔(dān)過重,影響整個(gè)學(xué)校的運(yùn)作和控制管理,因此,必須制定一套合理、有效,規(guī)范和實(shí)用的學(xué)生成績(jī)管理系統(tǒng),對(duì)學(xué)生成績(jī)進(jìn)行集中統(tǒng)一的管理。系統(tǒng)開發(fā)的總的設(shè)計(jì)目標(biāo)是學(xué)生成績(jī)管理的系統(tǒng)化、規(guī)范化和自動(dòng)化,實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的集中統(tǒng)一的管理。正 文1. 問題描述由于學(xué)生人數(shù)的增加,使得學(xué)生成
3、績(jī)管理工作繁重,而且手工管理效率極低,急需一個(gè)軟件系統(tǒng)解決這些問題。為了跟上時(shí)代潮流,規(guī)范管理,提高學(xué)生成績(jī)的管理水平和管理效率,為全校職工和學(xué)生提供方便、快捷、準(zhǔn)確的學(xué)生成績(jī)服務(wù),開發(fā)一個(gè)學(xué)生成績(jī)管理系統(tǒng)”。;2. 需求分析本系統(tǒng)通過管學(xué)生成績(jī)信息,可以進(jìn)行學(xué)生成成績(jī)信息的插入,修改,對(duì)學(xué)生的平均分進(jìn)行排序,為學(xué)生成績(jī)供準(zhǔn)確的資料,提高了人員的工作效率。3. 系統(tǒng)總體設(shè)計(jì)1:整體結(jié)構(gòu)流程圖主菜單輸入記錄排序顯示保存讀取刪除退出查詢按姓名按平均成績(jī)按學(xué)號(hào)插入按平均成績(jī)高低 3、添加學(xué)生成績(jī)信息流程圖開始結(jié)束選擇操作輸入數(shù)據(jù)顯示數(shù)據(jù)查詢刪除輸出界面退出系統(tǒng)按學(xué)號(hào)按姓名統(tǒng)計(jì)成績(jī)按景平均成績(jī)選7選6
4、選5選4擇4選3選2選1選8讀取數(shù)據(jù)吧選0三門成績(jī)學(xué)號(hào)姓名插入數(shù)據(jù)排序按平均成績(jī)高低i2:系統(tǒng)的執(zhí)行應(yīng)從功能菜單的選擇開始,依據(jù)用戶的選擇來進(jìn)行后續(xù)處理直到 用戶選擇退出系統(tǒng)為止。其間應(yīng)對(duì)用戶的選擇做出判斷和異常處理。 4. 詳細(xì)設(shè)計(jì)對(duì)應(yīng)于總體設(shè)計(jì)時(shí)的系統(tǒng)功能模塊圖,各個(gè)功能模塊的處理邏輯如下:信息輸入模塊:打開學(xué)生信息文件;while (繼續(xù)輸入 ) 讀入學(xué)生成績(jī)信息;將讀入信息添加到學(xué)生信息文件中;提示是否繼續(xù)輸入;關(guān)閉學(xué)生成績(jī)信息文件;信息瀏覽模塊:打開學(xué)生信息文件;while ( 不到文件結(jié)束 ) 從文件中順序讀出一個(gè)學(xué)生的信息;按指定格式輸出該學(xué)生成績(jī)的信息;關(guān)閉學(xué)生成績(jī)信息文件;信
5、息查詢模塊:while ( 仍繼續(xù)查詢 ) if( 按書名查詢 ) 讀入查詢的學(xué)生的條件; 打開圖書信息文件;while( 不到文件結(jié)束 ) 順序讀出一個(gè)學(xué)生成績(jī)的信息;if( 該學(xué)生成績(jī)信息符合條件 ) 輸出該學(xué)生成績(jī)的信息;關(guān)閉學(xué)生成績(jī)信息文件;提示共有幾條符合條件的記錄; else if ( 按學(xué)號(hào)查詢 ) 讀入學(xué)生成績(jī)的條件; 打開學(xué)生成績(jī)信息文件;while( 不到文件結(jié)束 ) 順序讀出一個(gè)學(xué)生成績(jī)的信息;if( 該學(xué)生成績(jī)信息的學(xué)歷符合條件 ) 輸出該學(xué)生成績(jī)的信息;關(guān)閉圖書信息文件;提示符合條件的記錄數(shù); else 提示輸入不合適;提示是否繼續(xù)查詢;5. 系統(tǒng)測(cè)試用以下的例子做測(cè)
6、試,選擇輸入操作,依次輸入,學(xué)號(hào),姓名,C語言成績(jī),英語成績(jī)。數(shù)學(xué)成績(jī)。返回則選擇瀏覽、查詢、修改、刪除,排序等功能。學(xué)號(hào)姓名C語言英語數(shù)學(xué)平均分001小明87898888.0002小雨78798079.0003張啟66676867.0004周琦60616863.06. 軟件使用說明書(1)根據(jù)正確的提示安裝軟件。(2)Intel486以上系列、AMD K6 以上系列等PC臺(tái)式機(jī)和便攜式電腦都可運(yùn)行。 (3) 打開該程序系統(tǒng),瀏覽菜單,根據(jù)需要選擇功能,進(jìn)行各項(xiàng)操作。操作如下:點(diǎn)擊開始菜單,進(jìn)入菜單選擇。輸入:將所需的信息輸入。輸出: 學(xué)號(hào),姓名,成績(jī),排名,。輸入:根據(jù)不同的需要選擇,當(dāng)信息
7、輸入顯示出錯(cuò)誤時(shí),進(jìn)入瀏覽信息,找出錯(cuò)誤。當(dāng)錯(cuò)誤不能改正,則退出瀏覽信息。進(jìn)入查詢信息:則屏幕會(huì)出現(xiàn)兩個(gè)對(duì)話框按作學(xué)號(hào)和按姓名查找,查處相應(yīng)的所需信息和書的狀態(tài)(是否借出)。當(dāng)查詢不能顯示需要時(shí)進(jìn)入修改程序,把所輸入的信息進(jìn)行修改,使之正確能夠正常運(yùn)行或進(jìn)入刪除信息中,重新輸入自己所要的信息。當(dāng)信息輸入正確,進(jìn)入你所需要的菜單程序中:學(xué)生信息:顯示學(xué)生的成績(jī),學(xué)號(hào),姓名,班級(jí),排名等總 結(jié)該系統(tǒng)以學(xué)生成績(jī)信息管理為背景,并且有一定的可行性和安全性,確保了各項(xiàng)指定功能得以運(yùn)行。本系統(tǒng)以基本函數(shù)、結(jié)構(gòu)體、枚舉性、文件以及鏈表等多方位知識(shí)貫穿實(shí)現(xiàn)。 通過此次程序設(shè)計(jì)實(shí)踐,是同學(xué)們對(duì)所學(xué)知識(shí)的綜合運(yùn)用
8、,也是程序設(shè)計(jì)得以提高的表現(xiàn)。通過此次編程培養(yǎng)了我們結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深了對(duì)高級(jí)語言基本語言要素和控制結(jié)構(gòu)的理解,鍛煉我們獨(dú)立思考制作程序的能力,并且掌握了一些課程設(shè)計(jì)的相關(guān)知識(shí)與實(shí)踐操作能力,為以后的學(xué)習(xí)提供了鍛煉的機(jī)會(huì)。經(jīng)過設(shè)計(jì)和開發(fā),學(xué)生成績(jī)管理系統(tǒng)基本開發(fā)完畢以及各類相關(guān)報(bào)表的打印。并提供部分系統(tǒng)維護(hù)功能,使用戶方便進(jìn)行數(shù)據(jù)備份和恢復(fù)、數(shù)據(jù)刪除。對(duì)于數(shù)據(jù)的一致性的問題也通過程序進(jìn)行了有效的解決。從而是我對(duì)c語言這門課程有了更好的了解。但是由于設(shè)計(jì)時(shí)間較短,所以該系統(tǒng)還有許多不盡如人意的地方,比如聯(lián)機(jī)文檔比較少,用戶界面不夠美觀,出錯(cuò)處理不夠等多方面問題。這些都有待進(jìn)一步改善。 參
9、考文獻(xiàn)1c+程序設(shè)計(jì)教程 ,王連相,中國鐵道出版社,2007 2 C語言程序設(shè)計(jì),譚浩強(qiáng),清華大學(xué)出版社,1999 3C程序設(shè)計(jì)題解與上機(jī)指導(dǎo),譚浩強(qiáng),清華大學(xué)出版社,1999 4 C語言的實(shí)際應(yīng)用,安徽科學(xué)技術(shù)出版社,2000 5 C語言函數(shù)手冊(cè),機(jī)械工業(yè)出版社,1999 6 C語言實(shí)用程序薈萃,西安電子科技大學(xué)出版社,1993 致 謝在編寫程序的過程中,我們得到了周小健、丁政建老師的精心指導(dǎo)以及孜孜不倦的教誨,在老師的指導(dǎo)下,我們的能力得到了提高,同時(shí)養(yǎng)成了科學(xué)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)和習(xí)慣,在此,我們對(duì)老師的精心栽培表示衷心的感謝! 感謝我們小組同學(xué)對(duì)我的幫助和指點(diǎn),尤其感謝我的舍友在非常時(shí)期,在生
10、活和學(xué)習(xí)上幫我許多忙。在課設(shè)即將完成之際,我的心情無法平靜,從開始進(jìn)入課題到課設(shè)的順利完成,有多少可敬的師長(zhǎng)、同學(xué)、朋友給了我無言的幫助,在這里請(qǐng)接受我誠摯的謝意。附件 部分原程序代碼#include stdio.h #include stdlib.h #include string.h int shoudsave=0; / struct student char num10;/學(xué)號(hào) char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/最近更新時(shí)間 ;
11、typedef struct node struct student data; struct node *next; Node,*Link; void menu() printf(*); printf(t1輸入學(xué)生資料ttttt2刪除學(xué)生資料n); printf(t3查詢學(xué)生資料ttttt4修改學(xué)生資料n); printf(t5顯示學(xué)生資料ttttt6統(tǒng)計(jì)學(xué)生成績(jī)n); printf(t7排序?qū)W生成績(jī)ttttt8保存學(xué)生資料n); printf(t9獲取幫助信息ttttt0退出系統(tǒng)n); printf(*n); void printstart() printf(-n); void Wrong
12、() printf(n=提示:輸入錯(cuò)誤!n); void Nofind() printf(n=提示:沒有找到該學(xué)生!n); void printc() / 本函數(shù)用于輸出中文 printf( 學(xué)號(hào)t 姓名 性別 英語成績(jī) 數(shù)學(xué)成績(jī) C語言成績(jī) 總分 平均分n); void printe(Node *p)/本函數(shù)用于輸出英文 printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave);
13、 Node* Locate(Link l,char findmess,char nameornum) /該函數(shù)用于定位連表中符合要求的接點(diǎn),并返回該指針 Node *r; if(strcmp(nameornum,num)=0) /按學(xué)號(hào)查詢 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)
14、 return r; r=r-next; return 0; void Add(Link l) /增加學(xué)生 Node *p,*r,*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); pri
15、ntstart(); printc(); printe(s); printstart(); printf(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語言成績(jī):); scanf(%d,&p-data.cgrade); getchar(); printf(請(qǐng)你輸入數(shù)
16、學(xué)成績(jī):); scanf(%d,&p-data.mgrade); getchar(); printf(請(qǐng)你輸入英語成績(jī):); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /信息輸入已經(jīng)完成 p-next=NULL; r-next=p; r=p; shoudsave=1; void Qur(Link l) /查詢學(xué)生 int sel; char findmess20; Node *p; if(!l-
17、next) printf(n=提示:沒有資料可以查詢!n); 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); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /姓名 printf(請(qǐng)你輸入要查找的姓名:); scanf(%s,
18、findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找結(jié)果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /刪除 int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:沒有資料可以刪除!n); return; printf(n=1按學(xué)號(hào)刪除n=2按姓名刪除n); scanf(%d,&sel); if(sel=1) pr
19、intf(請(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); shoudsave=1; else Nofind(); else if(sel=2) printf(請(qǐng)你輸入要?jiǎng)h除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next
20、; r-next=p-next; free(p); printf(n=提示:該學(xué)生已經(jīng)成功刪除!n); shoudsave=1; else Nofind(); else Wrong(); void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:沒有資料可以修改!n); return; printf(請(qǐng)你輸入要修改的學(xué)生學(xué)號(hào):); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(請(qǐng)你輸入新學(xué)號(hào)(原來是%s):,p-data.num); scan
21、f(%s,p-data.num); printf(請(qǐng)你輸入新姓名(原來是%s):,); scanf(%s,); getchar(); printf(請(qǐng)你輸入新性別(原來是%s):,p-data.sex); scanf(%s,p-data.sex); printf(請(qǐng)你輸入新的c語言成績(jī)(原來是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(請(qǐng)你輸入新的數(shù)學(xué)成績(jī)(原來是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); get
22、char(); printf(請(qǐng)你輸入新的英語成績(jī)(原來是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提示:資料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l) int count=0; Node *p; p=l-next; if(!p) printf(n=提示:沒有資料可以顯示!n); return;
23、 printf(tttt顯示結(jié)果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); printf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /用于指向分?jǐn)?shù)最高的接點(diǎn) Node *r=l-next; if(!r) printf(n=提示:沒有資料可以統(tǒng)計(jì)!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if
24、(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-統(tǒng)計(jì)結(jié)果-n); printf(總分最高者:t%s %d分n,,pt-data.totle); printf(平均分最高者:t%s %d分n,,pa-data.ave); printf(英語最高者:t%s %d分n,pe-d
25、,pe-data.egrade); printf(數(shù)學(xué)最高者:t%s %d分n,,pm-data.mgrade); printf(c語言最高者:t%s %d分n,,pc-data.cgrade); printstart(); void Sort(Link l) Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /用于做新的連表 ll-next=NULL; if(l-next=NULL) printf(n=提示:沒有資料可以排序!n); return ; p=l-next;
26、 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=提示:排序已經(jīng)完成!n); void Save(Link l) FILE* fp;
27、Node *p; int flag=1,count=0; fp=fopen(c:student,wb); if(fp=NULL) printf(n=提示:重新打開文件時(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) printf(n=提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n,count); shoudsave=0; fclose(fp); void main() Link l;/連表 FILE *fp; /文件指針 int sel; char ch; char jian; int count=0; Node *p,*r; l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 制作莫扎特課件
- 2024-2025學(xué)年初中同步測(cè)控優(yōu)化設(shè)計(jì)物理八年級(jí)下冊(cè)配人教版第8章 第3節(jié) 摩擦力含答案
- 咕咚 生字課件
- 第五講 巧用關(guān)聯(lián)詞寫一寫(看圖寫話教學(xué))-一年級(jí)語文上冊(cè)(統(tǒng)編版·2024秋)
- 地高辛藥品課件
- 2024年黑龍江省齊齊哈爾中考語文真題卷及答案解析
- 幼兒園小班音樂《開汽車》課件
- 西京學(xué)院《云計(jì)算》2022-2023學(xué)年期末試卷
- 2024版教材七年級(jí)上冊(cè)道德與法治期末訓(xùn)練
- 《煤油燈》少兒美術(shù)教育繪畫課件創(chuàng)意教程教案
- 職業(yè)健康風(fēng)險(xiǎn)評(píng)估數(shù)據(jù)(井仔)
- 蜂蟄傷急救護(hù)理課件
- 學(xué)習(xí)不是唯一出路
- 民航行業(yè)應(yīng)急管理體系建設(shè)
- 大學(xué)生返回母校宣講
- 體育教師國培心得體會(huì)
- 電子百拼練習(xí)題
- 廢舊鋰電池綜合回收利用
- 糖皮質(zhì)激素用藥原則
- 無人機(jī)航拍服務(wù)投標(biāo)方案(技術(shù)方案)
- 不良清收培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論