版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 二一二 二一三 學(xué)年第 一 學(xué)期電子技術(shù)學(xué)院課程設(shè)計(jì)報(bào)告書課程名稱: c程序課程設(shè)計(jì) 班 級(jí): 電信db2011級(jí)1102班 學(xué) 號(hào): xxxxxxxxxxxxxxx 姓 名: xxxx 指導(dǎo)教師: xxxx 二一二年 九 月一、需求分析1、題目二 學(xué)生成績(jī)管理程序任務(wù):自學(xué)c語言中相關(guān)知識(shí),設(shè)計(jì)出學(xué)生成績(jī)管理程序。要求如下所述:u 錄入學(xué)生信息,每位學(xué)生錄入的信息有:姓名、學(xué)號(hào)、性別、班級(jí)、和三門功課(數(shù)學(xué),英語,計(jì)算機(jī))的成績(jī)。以文件(myfile.txt)的形式保存每個(gè)學(xué)生的所有信息。(實(shí)驗(yàn)中:假設(shè)3個(gè)班,每個(gè)班學(xué)生人數(shù)不得少于5人)學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué) 英語 計(jì)算機(jī) 1101
2、 王鵬 男 1班 70 58 981102 李燕 女 2班 68 88 951103 趙亞芳 女 3班 58 48 96 u 增加學(xué)生記錄,并將增加的信息以文件的(myfile.txt)的形式保存。u 刪除學(xué)生記錄,以“學(xué)號(hào)”、“姓名”為關(guān)鍵字刪除記錄,若要?jiǎng)h除的記錄不存在,給出必要的提示信息;u 統(tǒng)計(jì)各班級(jí)學(xué)生每門課程的班級(jí)平均分,并由高到低排序。u 按學(xué)號(hào)或者姓名查詢記錄并顯示其三門功課成績(jī);u 能瀏覽顯示全部學(xué)生成績(jī),若無記錄可以顯示,給出必要的提示信息;2、系統(tǒng)功能需求分析 該程序中需要有存儲(chǔ)、讀取外部文件的命令實(shí)現(xiàn)將信息儲(chǔ)存于指定文件中。程序中需要有建立、修改鏈表的命令實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)
3、鏈表存儲(chǔ)方式。程序還需要一系列的提示命令使程序的易用性提高。因?yàn)樾枰獙?duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)或查詢顯示,所以需要有對(duì)鏈表數(shù)據(jù)統(tǒng)計(jì)和對(duì)鏈表指定數(shù)據(jù)進(jìn)行查找的功能。二、概要設(shè)計(jì)文件讀取模塊數(shù)據(jù)保存模塊成績(jī)對(duì)比模塊數(shù)據(jù)顯示 模塊數(shù)據(jù)查找模塊數(shù)據(jù)刪除模塊數(shù)據(jù)增加模塊成績(jī)單建立模塊學(xué)生成績(jī)管理程序三、詳細(xì)設(shè)計(jì)1、建立結(jié)構(gòu)體struct studentint num; char name10,sex10; int class,math,english,computer; struct student * next;int n;2、成績(jī)單建立模塊開始struct student *head,*p1,*p2; n=0;
4、 p1=p2=(struct student *)malloc(len);輸入第一個(gè)學(xué)生的數(shù)據(jù)head=null;p1-num!=0 y鏈表指針向后移動(dòng) n輸入一個(gè)學(xué)生的數(shù)據(jù)輸入學(xué)號(hào)為“0” y np2-next=null; return(head);結(jié)束struct student *creat(void)struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)malloc(len);printf(請(qǐng)輸入學(xué)生信息(按學(xué)號(hào)順序輸入)n); printf(學(xué)號(hào):); scanf(%d,&p1-num); printf(姓名:); sc
5、anf(%s,p1-name); printf(性別:); scanf(%s,p1-sex); printf(班級(jí):); scanf(%d,&p1-class); printf(數(shù)學(xué):); scanf(%d,&p1-math); printf(英語:); scanf(%d,&p1-english); printf(計(jì)算機(jī):); scanf(%d,&p1-computer); head=null; while(1)n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *)malloc(len); printf(n請(qǐng)輸
6、入學(xué)生信息(按學(xué)號(hào)順序輸入)當(dāng)不再輸入時(shí)在學(xué)號(hào)處輸入0結(jié)束n); printf(學(xué)號(hào):);scanf(%d,&p1-num); if(p1-num=0)break; else printf(姓名:); scanf(%s,p1-name); printf(性別:); scanf(%s,p1-sex); printf(班級(jí):); scanf(%d,&p1-class); printf(數(shù)學(xué):); scanf(%d,&p1-math); printf(英語:); scanf(%d,&p1-english); printf(計(jì)算機(jī):); scanf(%d,&p1-computer); p2-next=
7、null; return(head);3、數(shù)據(jù)增加模塊開始struct student *p0,*p1,*p2; p1=head; p0=stud;phead; p0=stud;輸入一個(gè)學(xué)生的數(shù)據(jù)根據(jù)學(xué)號(hào)順序找到數(shù)據(jù)應(yīng)該插入的位置phead; p0=stud;插入數(shù)據(jù) 返回頭指針phead; p0=stud;結(jié)束struct student *insert(struct student *head,struct student *stud)struct student *p0,*p1,*p2;p1=head; p0=stud;if(head=null) head=p0; p0-next=nul
8、l;elsewhile(p0-nump1-num)&(p1-next!=null)p2=p1; p1=p1-next;if(p0-numnum)if(head=p1) head=p0;else p2-next=p0;p0-next=p1;else p1-next=p0; p0-next=null;n+;printf(n增加成功!n);return(head);4、數(shù)據(jù)刪除模塊開始struct student *p1,*p2;輸入刪除的學(xué)號(hào)(姓名)鏈表中有該數(shù)據(jù)p1=head y yhead=p1-next np2-next=p1-next;printf(“不到該數(shù)據(jù)!n);結(jié)束struct s
9、tudent *del1(struct student *head,int num)struct student *p1,*p2;if(head=null) printf(n表格不存在!n); return(head);p1=head;while(num!=p1-num)&(p1-next!=null)p2=p1; p1=p1-next;if(num=p1-num)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n刪除成功!n);n-;else printf(n找不到該數(shù)據(jù)!n);return(head);struct student
10、*del2(struct student *head,char *name)struct student *p1,*p2;if(head=null) printf(n表格不存在!n); return(head);p1=head;while(strcmp(name,p1-name)!=0)&(p1-next!=null)p2=p1; p1=p1-next;if(strcmp(name,p1-name)=0)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n刪除成功!n);n-;else printf(n找不到該數(shù)據(jù)!n);return(h
11、ead);5、數(shù)據(jù)查找模塊 開始struct student *p=head;輸入查找的學(xué)號(hào)(姓名)num=p-num 或strcmp(name,p-name)=0 n y輸出數(shù)據(jù) yp=p-next np!=null y結(jié)束void find1(struct student *head,int num)struct student *p=head;if(head!=null) doif(num=p-num)printf(n學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué) 英語 計(jì)算機(jī)n); printf(-n); printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name
12、,p-sex,p-class,p-math,p-english,p-computer); break; else p=p-next;while(p!=null);if(p=null) printf(n未找到相應(yīng)信息!n);else printf(n成績(jī)單為空!n);void find2(struct student *head,char *name)struct student *p=head;if(head!=null)doif(strcmp(name,p-name)=0)printf(n學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué) 英語 計(jì)算機(jī)n); printf(-n); printf(%d %-6s
13、%s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); break;else p=p-next;while(p!=null);if(p=null) printf(n未找到相應(yīng)信息!n);else printf(n成績(jī)單為空!n);void print(struct student *head)struct student *p;p=head;if(head!=null)printf(學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué) 英語 計(jì)算機(jī)n);printf(-n); do printf(%d %-6s %s
14、 %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); p=p-next;while(p!=null);else printf(無信息!n);6、數(shù)據(jù)顯示模塊開始struct student *p; p=head;head!=null y輸出一個(gè)學(xué)生的數(shù)據(jù) np=p-next;p!=null y結(jié)束 nvoid print(struct student *head)struct student *p;p=head;if(head!=null)printf(學(xué)號(hào) 姓名 性別 班級(jí) 數(shù)學(xué) 英語 計(jì)算機(jī)
15、n);printf(-n); do printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); p=p-next;while(p!=null);else printf(無信息!n);7、成績(jī)對(duì)比模塊開始struct student *p; p=head; float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;p!=null np-class=1 y ysum1=sum1+p-math(
16、englishi/computer); n1+; np-class=2 ysum1=sum1+p-math(englishi/computer); n1+;p-class=3 n ysum1=sum1+p-math(englishi/computer); n1+;p=p-next;算出各班平均分并比較輸出成績(jī)對(duì)比結(jié)果結(jié)束void compare(struct student *head)struct student *p;p=head;float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;printf( 數(shù)學(xué)班
17、級(jí)平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-math; n1+;if(p-class=2) sum2=sum2+p-math; n2+;if(p-class=3) sum3=sum3+p-math; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,ave
18、rage1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=ave
19、rage2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 英語班級(jí)平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-english; n1+;if(p-class=2) sum2=sum2+p-english; n2+;if(
20、p-class=3) sum3=sum3+p-english; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average
21、2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,av
22、erage3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 計(jì)算機(jī)班級(jí)平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-computer; n1+;if(p-class=2) sum2=sum2+p-computer; n2+;if(p-class=3) sum3=sum3+p-computer; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(
23、average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1
24、,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);8、數(shù)據(jù)保存模塊void save(struct student *head) struct student *p; file *fp; fp=fop
25、en(myfile.txt,wb); p=head; while(p!=null) fwrite(p,len,1,fp); p=p-next; fclose(fp); printf(保存成功!n);9、數(shù)據(jù)讀取模塊struct student *load() struct student *head,*p1,*p2; file *fp; n=0; head=null; fp=fopen(myfile.txt,rb); head=p2=p1=(struct student *)malloc(len); while(fread(p1,len,1,fp)=1)p2=p1; p1=(struct st
26、udent *)malloc(len); p2-next=p1; n+; p2-next=null; fclose(fp);printf(讀取成功!n); return(head); 10、主函數(shù)void main()system(color 0b);struct student *head=null,*stu;int num,choice;char name10; while(1)system(pause); system(cls);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(# #n);printf(# 學(xué)
27、生成績(jī)管理系統(tǒng)菜單 #n);printf(#-#n); printf(# 1.創(chuàng)建學(xué)生成績(jī)單 #n);printf(#-#n); printf(# 2.增加學(xué)生信息 #n); printf(#-#n); printf(# 3.刪除學(xué)生信息 #n);printf(#-#n); printf(# 4.查看學(xué)生信息 #n);printf(#-#n);printf(# 5.顯示所有學(xué)生信息 #n);printf(#-#n); printf(# 6.班級(jí)成績(jī)對(duì)比 #n);printf(#-#n); printf(# 7.保存至文件 #n);printf(#-#n); printf(# 8.從文件中讀取信
28、息 #n);printf(#-#n); printf(# 9.退出系統(tǒng) #n);printf(# #n);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(n請(qǐng)選擇所需功能:); scanf(%d,&choice);printf(n); switch(choice) case 1: head=creat(); break; case 2: stu=(struct student *)malloc(len); printf(請(qǐng)輸入學(xué)生信息n); printf(學(xué)號(hào):); scanf(%d,&stu-num); prin
29、tf(姓名:); scanf(%s,stu-name); printf(性別:); scanf(%s,stu-sex); printf(班級(jí):); scanf(%d,&stu-class); printf(數(shù)學(xué):); scanf(%d,&stu-math); printf(英語:); scanf(%d,&stu-english); printf(計(jì)算機(jī):); scanf(%d,&stu-computer); while(1) head=insert(head,stu); printf(請(qǐng)繼續(xù)輸入學(xué)生信息(按0退出)n); stu=(struct student *)malloc(len); p
30、rintf(學(xué)號(hào):); scanf(%d,&stu-num); if(stu-num=0) break; printf(姓名:); scanf(%s,stu-name); printf(性別:); scanf(%s,stu-sex); printf(班級(jí):); scanf(%d,&stu-class); printf(數(shù)學(xué):); scanf(%d,&stu-math); printf(英語:); scanf(%d,&stu-english); printf(計(jì)算機(jī):); scanf(%d,&stu-computer); break; case 3: printf(1.按學(xué)號(hào)刪除 2.按姓名刪除
31、n請(qǐng)選擇:); scanf(%d,&choice); switch(choice) case 1: printf(輸入要?jiǎng)h除的學(xué)生學(xué)號(hào)(按0退出):); scanf(%d,&num); while(num!=0) head=del1(head,num); printf(輸入要?jiǎng)h除的學(xué)生學(xué)號(hào)(按0退出):); scanf(%d,&num); break; case 2: printf(輸入要?jiǎng)h除的學(xué)生姓名(按0退出):); scanf(%s,name); while(strcmp(name,0)!=0) head=del2(head,name); printf(輸入要?jiǎng)h除的學(xué)生姓名(按0退出):
32、); scanf(%s,name); break; default: break; break; case 4: printf(1.按學(xué)號(hào)查找 2.按姓名查找n請(qǐng)選擇:); scanf(%d,&choice); switch(choice) case 1: printf(輸入要查找的學(xué)生學(xué)號(hào):); scanf(%d,&num); find1(head,num); break; case 2: printf(輸入要查找的學(xué)生姓名:); scanf(%s,name); find2(head,name); break; default: break; break; case 5: print(hea
33、d); break; case 6: compare(head); break; case 7: save(head); break; case 8: head=load(); break; default: break; if(choice=9) printf(謝謝使用!n); break;四、調(diào)試分析過程描述1、主菜單2、創(chuàng)建成績(jī)單3、增加學(xué)生記錄4、刪除學(xué)生記錄5、顯示所有學(xué)生記錄6、班級(jí)成績(jī)對(duì)比7、查找學(xué)生記錄8、保存學(xué)生記錄9、讀取文件信息調(diào)試過程中的問題與反思: 此次編寫的程序蓋內(nèi)容量很大,在編寫過程中采用的是寫好一個(gè)模塊測(cè)試一個(gè)模塊的方法,但是將各個(gè)模塊組合到一起后仍舊出現(xiàn)了許多小問題,經(jīng)過多次調(diào)試才達(dá)到各個(gè)模塊協(xié)調(diào)工作。最初程序編寫的時(shí)候并沒有太過提示性輸出語句,雖然程序運(yùn)行不會(huì)受到影響,但是非編寫人員就難以使用,在調(diào)試中明顯感受到有些地方如果
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2合肥2024年煙囪拆除工程售后服務(wù)合同
- 2024量子通信系統(tǒng)建設(shè)與服務(wù)合同
- 2024電子商務(wù)支付與安全概述
- 專業(yè)保安服務(wù)協(xié)議模板2024年適用版B版
- 標(biāo)準(zhǔn)合同某餐飲企業(yè)與某冷藏設(shè)備供應(yīng)商之間的采購合同(04版)
- 三方合作型企業(yè)2024年度投資運(yùn)營(yíng)協(xié)議一
- 2024木地板采購合同范本
- 2024網(wǎng)絡(luò)安全公司與政府機(jī)構(gòu)之間的技術(shù)服務(wù)合同
- 2024年:公寓買賣合同樣本
- 2024年網(wǎng)絡(luò)安全防護(hù)系統(tǒng)搭建合同
- 2025新北師大版英語七年級(jí)下單詞表
- 《智慧城市概述》課件
- 浙江省杭州市八縣區(qū)2024-2025學(xué)年高二數(shù)學(xué)上學(xué)期期末學(xué)業(yè)水平測(cè)試試題
- 超星爾雅學(xué)習(xí)通《孫子兵法與執(zhí)政藝術(shù)(浙江大學(xué))》2024章節(jié)測(cè)試含答案
- 分布式光伏高處作業(yè)專項(xiàng)施工方案
- 金屬鍍覆和化學(xué)處理表示方法
- 同濟(jì)大學(xué)本科生學(xué)籍管理規(guī)定
- 單細(xì)胞水平同位素拉曼散射分析
- 三年級(jí)數(shù)學(xué)寒假每日一練
- 最新宜昌市中考數(shù)學(xué)21題圓訓(xùn)練(1)教師版有答案
- 工作計(jì)劃酒店上半年工作總結(jié)及下半年工作計(jì)劃
評(píng)論
0/150
提交評(píng)論