版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 沈陽航空航天大學(xué)課 程 設(shè) 計 報 告大作業(yè)名稱:C語言課程設(shè)計大作業(yè)題目:學(xué)生成績管理系統(tǒng)設(shè)計院(系):計算機學(xué)院專 業(yè):計算機科學(xué)與技術(shù)班 級:學(xué) 號:姓 名:指導(dǎo)教師:完成日期:2016年12月24日目 錄第1章 概要設(shè)計11.1題目的內(nèi)容與要求11.2總體結(jié)構(gòu)1第2章 詳細(xì)設(shè)計22.1主模塊22.2輸入模塊32.3顯示模塊32.4修改模塊4 2.5刪除模塊42.6查詢模塊52.7統(tǒng)計模塊6第3章 調(diào)試分析7第4章 使用說明8參考文獻12附 錄(程序清單)10第1章 概要設(shè)計1.1題目的內(nèi)容與要求內(nèi)容: 學(xué)生成績信息包括:姓名、學(xué)號、語文、數(shù)學(xué)、英語。 實現(xiàn)的主要功能有: 1)信息維護
2、。包括學(xué)生成績的輸入、按學(xué)號刪除、按學(xué)號修改等。 2) 信息查詢。輸入學(xué)號或姓名,顯示出該生三個科目的成績,計算出三科總分 并顯示,按總分將所有學(xué)生成績排序,顯示出該生的名次。 3)成績統(tǒng)計。先輸入任意一個科目,接著選擇a或b來分別顯示平均分或統(tǒng)計 分?jǐn)?shù)段學(xué)生,若選擇a,則直接顯示出該科目的平均分;若選擇b,則提示 用戶輸入一個分?jǐn)?shù)段,顯示所有該科目屬于該分?jǐn)?shù)段內(nèi)的學(xué)生信息,并給出 學(xué)生總數(shù)。要求: 1)系統(tǒng)以菜單方式工作。在不同的界面為用戶給出具體提示。 2)系統(tǒng)利用C語言實現(xiàn),源程序要有適當(dāng)?shù)淖⑨尅?3)采用VC環(huán)境進行運行調(diào)試。1.2總體結(jié)構(gòu)本程序主要分為七個模塊(功能模塊圖見圖1.1)
3、:結(jié)構(gòu)體模塊,輸入模塊,顯示模塊,修改模塊,刪除模塊,查詢模塊,統(tǒng)計模塊。結(jié)構(gòu)體模塊:建立一個結(jié)構(gòu)體模塊,為鏈表存信息用。輸入模塊:鍵盤輸入每個學(xué)生的信息,并保存在文件中。顯示模塊:顯示全部學(xué)生的具體信息。修改模塊:修改某個學(xué)生的成績信息。刪除模塊:刪除某個學(xué)生的全部信息。查詢模塊:查詢某個學(xué)生的具體信息。統(tǒng)計模塊:通過功能選擇,統(tǒng)計并顯示某一科目的平均分或某分?jǐn)?shù)段學(xué)生的具體信息。 學(xué)生成績管理系統(tǒng)輸入模塊修改模塊統(tǒng)計模塊查詢模塊刪除模塊顯示模塊主模塊 圖1.1 功能模塊圖第2章 詳細(xì)設(shè)計2.1主模塊 開始控制整個程序的運行,控制菜單操作,通過主函數(shù)模塊分別調(diào)用各個模塊,實現(xiàn)各項功能,流程如圖
4、2.1所示。 顯示主菜單選0退出 Y選1-6 N N 執(zhí)行具體功能 Y 顯示結(jié)果 結(jié)束 圖2.1 主模塊流程圖注釋:1. 顯示主菜單;2. 選擇不同序號執(zhí)行不同功能;2.2輸入模塊 input()輸入所有學(xué)生信息并保存,流程如圖2.2所示。printf("輸入學(xué)號:");printf("輸入姓名:");printf("第%d門成績的分?jǐn)?shù):",j+1);計算總分、平均分 printf("nn信息保存成功!恭喜!nn"); 結(jié)束圖2.2 輸入模塊流程圖注釋:1. 循環(huán)輸入每個學(xué)生的信息;2. 保存所有信息2.3顯示模塊
5、Print() 顯示所有學(xué)生的具體信息,流程圖如2.3所示。 顯示信息 結(jié)束 圖2.3 顯示模塊流程圖 注釋:1. 選擇號好功能;2. 顯示全部學(xué)生的具體信息。2.4修改模塊xiugai()修改某個學(xué)生各個科目的成績,流程圖如2.4所示。printf("n請輸入要修改的同學(xué)的學(xué)號:");結(jié)束是否繼續(xù)修改?printf("n修改成功!恭喜!n");printf("n請輸入要修改學(xué)生修改后的的信息n"); Y N 圖2.4 修改模塊流程圖注釋:1. 輸入要修改學(xué)生的學(xué)號;2. 輸入要修改的科目信息;3. 修改成功,是否要繼續(xù)修改。是,繼續(xù)
6、;否,回到主菜單。2.5刪除模塊 按學(xué)號刪除某學(xué)生的全部信息,流程圖如圖2.5所示。printf("n請輸入要刪除的同學(xué)的學(xué)號:");shanchu()是否刪除? printf("n該同學(xué)信息如下:n"); Y是否繼續(xù)刪除?Yprintf("n刪除成功!恭喜!n"); N結(jié)束N 圖2.5 刪除模塊流程圖注釋:1. 輸入要刪除的學(xué)生的學(xué)號;2. 顯示該生信息,是否刪除。是,刪除;否,是否繼續(xù)操作。3. 是否繼續(xù)刪除。是,重復(fù)上述操作;否,退出回到主菜單。2.6查詢模塊chaxun() 輸入要查詢學(xué)生的學(xué)號,顯示該生具體信息,流程圖如圖2
7、.6所示。printf("n請輸入學(xué)生學(xué)號:");顯示該生具體信息是否繼續(xù)查詢?結(jié)束Y N 圖2.6 查詢模塊流程圖注釋:1. 輸入要查詢的學(xué)生的學(xué)號;2. 顯示該生的具體信息;3. 是否繼續(xù)查詢。是,繼續(xù)查詢下一位;否,回到主菜單。2.7統(tǒng)計模塊tongji() 通過選擇不同功能,顯示某個科目的平均分或某分?jǐn)?shù)段學(xué)生的具體信息,流程圖如圖2.7所示。 結(jié)束是否繼續(xù)查詢其他科目?顯示屬于該分?jǐn)?shù)段的學(xué)生;學(xué)生總數(shù) printf("nn該科目的平均成績?yōu)椋?.2fn",ave);計算該科目平均分printf("n請輸入分?jǐn)?shù)段:_ 空格_ n"
8、;);printf("n輸入一個科目:");選擇功能a或bcase a:case b:Y N 圖2.7 統(tǒng)計模塊流程圖注釋:1. 通過菜單選擇科目;2. 通過菜單選擇a或b功能,分別顯示該科目平均分或某分?jǐn)?shù)段學(xué)生信息;3. 是否繼續(xù)查詢?是,繼續(xù);否,回到主菜單。第3章 調(diào)試分析在這次課程設(shè)計中,程序編寫的過程中遇到了很多問題,主要是函數(shù)實現(xiàn)方面問題較多。問題1:查詢函數(shù)chaxun( )中,會造成數(shù)據(jù)混亂,原因是for循環(huán)中某行代碼運用錯誤,如下: for(i=0;i<n;i+) if(stui.num=x) k=i;/*找到要查詢的同學(xué)學(xué)號,并用k記下其下標(biāo)*/
9、OutputOneStudent(k); 將OutputOneStudent(k);拿出后,查詢功能正常實現(xiàn)。正確編寫如下: for(i=0;i<n;i+) if(stui.num=x) k=i;/*找到要查詢的同學(xué)學(xué)號,并用k記下其下標(biāo)*/ OutputOneStudent(k); 問題2:統(tǒng)計函數(shù)tongji(),功能實現(xiàn)完后不能回到主菜單。解決方法是,把功能函數(shù)gongneng()其中的while循環(huán)刪掉。 第4章 使用說明運行截圖如下:1.輸入成績2.信息顯示3.修改信息4.刪除信息5.查詢信息6.1統(tǒng)計信息-科目平均分6.2統(tǒng)計信息-科目某分?jǐn)?shù)段學(xué)生信息7.退出系統(tǒng)參考文獻1.
10、 王敬華,C語言程序設(shè)計教程(第二版),清華大學(xué)出版社,2009年8月2. 譚浩強,C語言程序設(shè)計教程(第二版),清華大學(xué)出版社,1999年12月3. 譚浩強,C語言程序設(shè)計題解與上機指導(dǎo),清華大學(xué)出版社,2000年11月4. 田淑清,C語言程序設(shè)計輔導(dǎo)與習(xí)題集,中國鐵道出版社,2000年1月5. 張榮梅、梁曉林,Visual C+實用教程,冶金工業(yè)出版社,2004年附 錄(程序清單)程序代碼:#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 3struct studentint n
11、um; /學(xué)號char name20; /姓名float score3; /三門課成績float sum; /總分float aver; /平均分stuN;void menu(); /主菜單功能void input(); /輸入信息到結(jié)構(gòu)體中void save(int x); /保存stud.dat文件函數(shù)void print(); /輸出顯示所有學(xué)生信息void SaveAllStudent(int n); /保存全部學(xué)生信息void xiugai(int n); /按學(xué)號修改成績int shanchu(int n); /按學(xué)號刪除void OutputOneStudent(int i);
12、/查詢一個學(xué)生的信息void chaxun(int n); /按學(xué)號查詢成績void tongji(); /統(tǒng)計科目信息void gongneng(int x); /a或b功能分別顯示科目平均分或分?jǐn)?shù)段學(xué)生信息int main() printf("*n"); printf("* *n"); printf("* Hwadee &學(xué)生成績管理系統(tǒng)& Hwadee *n"); printf("* *n"); printf("*nnn"); printf("*歡迎使用*n&qu
13、ot;);while(1)menu();return 0;/*主菜單*/void menu()int choice; int n=N; printf("n請選擇功能:n");printf("n1:輸入成績n2:顯示信息n3:修改成績n4:刪除信息n5:查詢成績n6:成績統(tǒng)計n0:退出系統(tǒng)nn");printf("n請選擇序號:n");scanf("%d",&choice);switch(choice)case 1:input();save(N);break;case 2:print();break;case
14、 3:xiugai(n);break;case 4:shanchu(n);break;case 5:chaxun(n);break;case 6:tongji();break;case 0:printf ("n謝謝使用,再見!nn");exit (-1);break;default:printf("輸入錯誤!n");break;/*寫入函數(shù)*/void input()int i,j;printf("n輸入信息n");for(i=0;i<N;i+)printf("輸入學(xué)號:");scanf("%d&q
15、uot;,&stui.num);printf("輸入姓名:");scanf("%s",&);for(j=0;j<N;j+)printf("第%d門成績的分?jǐn)?shù):",j+1);scanf("%f",&stui.scorej);stui.sum=stui.score0+stui.score1+stui.score2;stui.aver=stui.sum/3;printf("n");/*寫入文件*/void save(int x) FILE *fp;/*定
16、義文件指針用于向文件讀入數(shù)據(jù)*/ int i; if(fp=fopen("student.dat","rb+")=NULL)/*以二進制讀,寫方式打開文件*/ printf("cannot open filen"); exit(1); for(i=0;i<N;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf("file write errorn"); fclose(fp); printf("nn信息保存成功!恭喜!nn&q
17、uot;);/*顯示全部學(xué)生信息*/void print()int i;printf("學(xué)號 姓名 語文 數(shù)學(xué) 英語 總分 平均分n");for(i=0;i<N;i+)printf("%d %s %.2f %.2f %.2f %.2f %.2fn",stui.num,,stui.score0,stui.score1,stui.score2,stui.sum,stui.aver);/*保存全部學(xué)生信息*8*/void SaveAllStudent(int n) FILE *fp; if(fp=fopen("student.
18、dat","wb")=NULL) printf("文件打開失敗!n"); exit(1); fwrite(stu,sizeof(struct student),n,fp); fclose(fp);/*修改學(xué)生信息*/void xiugai(int n) struct student temp;int k=-1,x,i; char c1='y' while(c1='y') printf("n請輸入要修改的同學(xué)的學(xué)號:"); scanf("%d",&x); for(i=
19、0;i<n;i+) if(x=stui.num) k=i;/*找到要修改的同學(xué)學(xué)號,并用k記下其下標(biāo)*/ break; if(k<0) printf("n輸入學(xué)號有誤,請重新輸入!"); else printf("n請輸入要修改學(xué)生修改后的的信息n"); printf("語文(空格)數(shù)學(xué)(空格)英語tn"); scanf("%f %f %f",&temp.score0,&temp.score1,&temp.score2); temp.sum=(temp.score0+temp.s
20、core1+temp.score2); temp.aver=(temp.score0+temp.score1+temp.score2)/3;stuk.score0=temp.score0;/*修改該學(xué)生信息*/ stuk.score1=temp.score1; stuk.score2=temp.score2;stuk.sum=temp.sum;stuk.aver=temp.aver;printf("n修改成功!恭喜!n"); break; SaveAllStudent(k); printf("n繼續(xù)修改操作嗎?"); printf("n繼續(xù)修改
21、請按y;不進行修改請按nn");getchar(); c1=getchar(); printf("n按任意鍵繼續(xù)!n"); getchar();/*刪除學(xué)生信息*/int shanchu(int n) int i,k=-1,x; char c1='y',c2; while(c1='y') c2='n' printf("n請輸入要刪除的同學(xué)的學(xué)號:"); scanf("%d",&x); for(i=0;i<n;i+) if(x=stui.num) k=i;/*找到要
22、刪除的同學(xué)學(xué)號,并用k記下其下標(biāo)*/ break; if(k<0) printf("n輸入學(xué)號有誤,請重新輸入!"); else printf("n該同學(xué)信息如下:n"); OutputOneStudent(k); printf("nn確定刪除?n"); printf("確定進行刪除請按y;不進行刪除請按nn");getchar();c2=getchar(); if(c2='y') for(i=k;i<n;i+) stui=stui+1; n-;/*學(xué)生人數(shù)減1*/ printf(&qu
23、ot;n刪除成功!恭喜!n"); else printf("n取消刪除!n"); printf("n繼續(xù)刪除操作嗎?"); printf("n繼續(xù)刪除請按y;不進行刪除請按nn"); getchar(); c1=getchar(); save(n); printf("n按任意鍵繼續(xù)!n"); getchar(); return (n);/*查詢一個學(xué)生信息*/void OutputOneStudent(int i) printf("學(xué)號:%d 姓名:%s n",stui.num,stu
24、); printf("語文:%.1f 數(shù)學(xué):%.1f 英語:%.1f 總分:%.1f 平均分:%.2fn",stui.score0,stui.score1,stui.score2,stui.sum,stui.aver);/*按學(xué)號查詢學(xué)生信息*/void chaxun(int n) int i,j,k,x; char c='y' while(c='y') k=-1; printf("n請輸入學(xué)生學(xué)號:"); scanf("%d",&x); if(x>3|x<1) brea
25、k; for(i=0;i<n;i+) if(stui.num=x) k=i;/*找到要查詢的同學(xué)學(xué)號,并用k記下其下標(biāo)*/ OutputOneStudent(k); stux-1.num=1; /該生排名 for(j=0;j<3;j+) if(stuj.sum>stux-1.sum)stux-1.num+; printf("n該生排名為第%d名。n",stux-1.num); printf("nn繼續(xù)查詢其他學(xué)生信息嗎?"); printf("n繼續(xù)查詢請按y;不進行查詢請按nn");getchar(); c=get
26、char(); printf("n按任意鍵繼續(xù)!n"); getchar();/*學(xué)生信息統(tǒng)計操作*/void tongji()char c='y' while(c='y') int x; printf("n輸入一個科目:"); printf("nn1:語文n2:數(shù)學(xué)n3:英語n0:退出"); printf("nn請選擇序號:"); scanf("%d",&x); if(x>0&&x<6) switch(x) case 1: g
27、ongneng(x);break; case 2: gongneng(x);break; case 3:gongneng(x);break; case 0: exit (-1); break; default: printf("輸入錯誤!n"); printf("nn繼續(xù)查詢其他科目信息嗎?"); printf("n繼續(xù)查詢請按y;不進行查詢請按nn");getchar(); c=getchar();/*選擇a或b來分別顯示該科平均分或統(tǒng)計分?jǐn)?shù)段學(xué)生*/void gongneng(int x) printf("nn請選擇功能:n"); printf("na:顯示該科目平均分nb:統(tǒng)計分?jǐn)?shù)段學(xué)生n"); printf("n請選擇a或b:");char c; scanf("%s",&c);s
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《上杭?xì)v史文化旅游》課件
- 《統(tǒng)計初步復(fù)習(xí)》課件
- 藥學(xué)三基試題及答案
- 2024年生物制藥專利許可協(xié)議
- 2024年高端會所室內(nèi)設(shè)計合同范本二零二四2篇
- 2024年行政合同管理制度與流程執(zhí)行與監(jiān)督合同3篇
- 2024年行政單位合同業(yè)務(wù)流程重組與效率提升合同3篇
- 2024年跨區(qū)域物流配送合同(含配送路線規(guī)劃)
- 2024毛紗原料進出口貿(mào)易環(huán)境保護責(zé)任合同3篇
- 2024年電動窗簾生產(chǎn)設(shè)備租賃與購買合同
- 2024年度酒店管理與運營公司合同
- 2024年度工作總結(jié)會議議程樣本(5篇)
- 求職簡歷 課件
- 2024年國網(wǎng)公司企業(yè)文化與職業(yè)道德試考試題庫(含答案)
- 房地產(chǎn)中介公司業(yè)務(wù)管理制度
- 電大《生產(chǎn)與運作管理》2023-2024期末試題及答案(試卷代號2617)
- 中國腫瘤藥物治療相關(guān)惡心嘔吐防治專家共識(2022年版)解讀
- PLC應(yīng)用技術(shù)(三菱機型)三菱大中型PLC
- GB 21258-2024燃煤發(fā)電機組單位產(chǎn)品能源消耗限額
- 《用戶體驗設(shè)計導(dǎo)論》
- 美團外賣運營知識試題
評論
0/150
提交評論