C語(yǔ)言程序設(shè)計(jì)學(xué)生成績(jī)記錄簿設(shè)計(jì)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)學(xué)生成績(jī)記錄簿設(shè)計(jì)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)學(xué)生成績(jī)記錄簿設(shè)計(jì)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)學(xué)生成績(jī)記錄簿設(shè)計(jì)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)學(xué)生成績(jī)記錄簿設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告書學(xué)生成績(jī)記錄簿設(shè)計(jì)班 級(jí): 0953-1學(xué) 號(hào): 20097268姓 名: 趙文龍指導(dǎo)老師: 楊 子 光石家莊鐵道大學(xué)四方學(xué)院2010年7月11日課程設(shè)計(jì)報(bào)告內(nèi)容1. 選擇題目題目:學(xué)生成績(jī)記錄薄設(shè)計(jì)2. 內(nèi)容摘要摘要:本系統(tǒng)實(shí)現(xiàn)學(xué)生成績(jī)信息的管理與查詢,程序具有包括學(xué)生信息查詢,如姓名,c語(yǔ)言成績(jī),成績(jī)分段查看等;同時(shí)可以c語(yǔ)言成績(jī)信息以及學(xué)生情況進(jìn)行修改,刪除和添加。另外還要做到可以對(duì)學(xué)生成績(jī)信息以及成績(jī)信息查詢和維護(hù)。程序應(yīng)具有以下編程思想:1.各模塊間通過(guò)菜單切換和調(diào)用2.主函數(shù)通過(guò)調(diào)用菜單函數(shù)實(shí)現(xiàn)對(duì)各功能模塊的調(diào)用,各功能模塊間根據(jù)需要可相互調(diào)用。3.程序能夠保證各模塊

2、功能的獨(dú)立和數(shù)據(jù)共享。/*不使用全局變量則能保證函數(shù)之間的獨(dú)立性,利用形參與實(shí)參之間的數(shù)值傳遞來(lái)實(shí)現(xiàn)數(shù)據(jù)共享*/4.相近功能以級(jí)聯(lián)菜單的形式集成。5.本模塊由創(chuàng)建文件以磁盤文件的形式保存。3. 索引關(guān)鍵詞關(guān)鍵詞:管理與查詢,信息鏈表,信息維護(hù)。目 錄1.題目要求 042.設(shè)計(jì)思想 043.系統(tǒng)完成功能及框圖 044.界面設(shè)計(jì) 055.核心算法及說(shuō)明 176.結(jié)論 197.參考資料 198.后記 209.附錄 205.正文第一部分:題目要求編制一個(gè)c語(yǔ)言成績(jī)記錄簿,每個(gè)學(xué)生信息包括:學(xué)號(hào)、姓名、c語(yǔ)言成績(jī)。具體功能:(1)創(chuàng)建信息鏈表并以磁盤文件保存;(2)讀取磁盤文件并顯示輸出所有學(xué)生的成績(jī);

3、(3)按學(xué)號(hào)或姓名查詢成績(jī);(4)添加成績(jī)記錄;(5)修改指定姓名或?qū)W號(hào)的學(xué)生的成績(jī)并可存盤;(6)顯示輸出60分以下、6079、8089、90分以上各分?jǐn)?shù)段的學(xué)生信息(可選)第二部分:設(shè)計(jì)思想1分析程序的功能要求,劃分程序功能模塊。 2. 畫出系統(tǒng)流程圖。 3. 代碼的編寫。定義數(shù)據(jù)結(jié)構(gòu)和各個(gè)功能子函數(shù)。 4. 程序的功能調(diào)試。 5. 完成系統(tǒng)總結(jié)報(bào)告以及使用說(shuō)明書 第三部分:系統(tǒng)完成功能及框圖1.學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實(shí)現(xiàn)學(xué)生信息數(shù)據(jù)的維護(hù)。此模塊包括子模塊有:增加學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息2.信息查詢時(shí)可實(shí)現(xiàn)按姓名查詢、按學(xué)號(hào)查詢3.輸入任意的一個(gè)學(xué)生名字(如花花)

4、或一個(gè)學(xué)號(hào)(如20097268),統(tǒng)計(jì)出在此學(xué)生的成績(jī)情況??驁D:學(xué)生成績(jī)記錄簿*1. 成績(jī)錄入2. 查詢3. 修改4. 增加5. 顯示6. 統(tǒng)計(jì)7. 刪除0. 退出*主模塊學(xué)生成績(jī)錄入學(xué)生成績(jī)添加添加學(xué)生信息刪除學(xué)生信息學(xué)生信息查詢學(xué)生成績(jī)顯示學(xué)生成績(jī)刪除學(xué)生信息統(tǒng)計(jì)修改學(xué)生信息按學(xué)號(hào)刪除按成績(jī)刪除學(xué)生優(yōu)秀人數(shù)退出程序不及格的人數(shù)及格的人數(shù)按姓名查詢按學(xué)號(hào)查詢第四部分:界面設(shè)計(jì)#include #include #include #include #define n 20typedef struct char name10; int num; float c;stu;/菜單void menu

5、() /*便于操作員使用*/ /*清屏*/ system(cls); printf(nnnnttt 學(xué)生平時(shí)成績(jī)管理n); printf(ttt=n); printf(ttt 1.成績(jī)錄入n); printf(ttt 2.查詢n); printf(ttt 3.修改n); printf(ttt 4.插入n); printf(ttt 5.顯示n); printf(ttt 6.統(tǒng)計(jì)n); printf(ttt 7.刪除n); printf(ttt 0.退出n); printf(ttt=n); printf(ttt請(qǐng)選擇相應(yīng)的功能:);/成績(jī)錄入void input() file *fp; stu x

6、s; /*定義一個(gè)結(jié)構(gòu)體變量來(lái)裝從文件中讀出來(lái)的數(shù)據(jù)*/ if(fp=fopen(student.dat,ab)=null) printf(cant open file!n);exit(0); printf(n錄入格式: 姓名 學(xué)號(hào) c語(yǔ)言 當(dāng)輸入姓名為ps結(jié)束錄入n); while(1) /*中間加油break,可使循環(huán)中斷*/ scanf(%s,); if(strcmp(,ps)=0) break;/*判斷姓名是否為ps,用字符串判斷*/ scanf(%d%f,&xs.num,&xs.c); fwrite(&xs,sizeof(stu),1,fp); /將成績(jī)信

7、息寫入文件 fclose(fp);/姓名定義void xingming() file *fp; stu xs; char name10; printf(n輸入要查學(xué)生的姓名: );scanf(%s,name); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(,name)=0)/*按姓名查詢時(shí)判斷輸入的姓名是否存在,會(huì)循環(huán)從數(shù)據(jù)中找取*/ printf( 學(xué)生的信息如下:n); pri

8、ntf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失敗!); /*學(xué)生不存在*/ fclose(fp);/學(xué)號(hào)定義void xuehao() file *fp; stu xs; int num; printf(n輸入要查學(xué)生的學(xué)號(hào): );scanf(%d,&num); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp)

9、fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*按學(xué)號(hào)查詢時(shí)判斷輸入的學(xué)號(hào)是否存在,會(huì)循環(huán)從數(shù)據(jù)中找取*/ printf( 學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失敗!); fclose(fp);/查詢void search() char ch1; system(cls); printf(請(qǐng)輸入按何種方式查詢:n); printf(1-姓名,2-學(xué)號(hào):

10、); ch1=getchar();/*用字符接收*/ switch(ch1)/*判斷*/ case 1:xingming();break; case 2:xuehao();break; getch();/*讓屏幕停留同時(shí)按任意鍵返回*/修改:輸入學(xué)生的姓名,查找該學(xué)生,若找到則修改該生的成績(jī)信息,并顯示修改前后的結(jié)果;void modi1() stu xs; file *fp; char name10; system(cls); printf(n輸入要查學(xué)生的姓名: );scanf(%s,name); if(fp=fopen(student.dat,rb+)=null) printf(cant

11、 open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(,name)=0)/*判斷輸入要修改的姓名是否存在*/ printf( 修改前學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.num,xs.c); printf(n請(qǐng)輸入該生的c語(yǔ)言成績(jī):);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的學(xué)生的信息如下:n)

12、; printf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*負(fù)號(hào)表示后退,1表示文件當(dāng)前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再寫入,同時(shí)把要修改的那個(gè)覆蓋掉*/ else printf(n學(xué)生不存在,修改失敗!); fclose(fp); getch();/修改:輸入學(xué)生的學(xué)號(hào),查找該學(xué)生,若找到則修改該生的成績(jī)信息,并顯示修改前后的結(jié)果;void modi2() stu xs; file *fp;

13、int num; system(cls); printf(n輸入要查學(xué)生的學(xué)號(hào): );scanf(%d,&num); if(fp=fopen(student.dat,rb+)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*判斷輸入要修改的姓名是否存在*/ printf( 修改前學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.n

14、um,xs.c); printf(n請(qǐng)輸入該生的c語(yǔ)言成績(jī):);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*負(fù)號(hào)表示后退,1表示文件當(dāng)前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再寫入,同時(shí)把要修改的那個(gè)覆蓋掉*/ else printf(n學(xué)生不存在,修改失敗!); f

15、close(fp); getch();/修改void search1() char ch1; system(cls); printf(請(qǐng)輸入按何種方式修改:n); printf(1-姓名,2-學(xué)號(hào):); ch1=getchar();/*用字符接收*/ switch(ch1)/*判斷*/ case 1:modi1();break; case 2:modi2();break; getch();/*讓屏幕停留同時(shí)按任意鍵返回*/插入:輸入學(xué)生的平時(shí)的各項(xiàng)成績(jī),插入到指定位置;當(dāng)指定的位置超出范圍時(shí),將其插入到全班的最后,并顯示插入成功后的結(jié)果。void insert() int i=0,j,k,le

16、nth; file *fp; stu s,xsn; system(cls); printf(n請(qǐng)輸入插入的學(xué)生的姓名:);scanf(%s,&); printf(n學(xué)生的學(xué)號(hào):);scanf(%d,&s.num); printf(n學(xué)生的c成績(jī):);scanf(%f,&s.c); printf(n插入位置:);scanf(%d,&k);/ i=0; if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xsi,sizeof(stu),1,fp);/*把數(shù)據(jù)

17、讀入到結(jié)構(gòu)體數(shù)組中*/ if(feof(fp) break; i+; fclose(fp); lenth=i; if(k=0)/*k的位置要位于數(shù)組范圍之內(nèi)*/ /插入 for(j=lenth-1;j=k;j-) xsj+1=xsj;/*一開始j是最大的,往后移一個(gè)這樣移動(dòng)避免數(shù)據(jù)被覆蓋*/ /*循環(huán)是只循環(huán)這一句的*/ xsk=s;/*將輸入的學(xué)生信息加入這個(gè)k位置*/ lenth+;/*長(zhǎng)度+1*/ /寫回 if(fp=fopen(student.dat,wb)=null) printf(不能建立文件!n);exit(0); for(i=0;ilenth;i+) fwrite(&xsi,s

18、izeof(stu),1,fp); else/*不再數(shù)組范圍之內(nèi)*/ if(fp=fopen(student.dat,ab)=null) printf(不能建立文件!n);exit(0); fwrite(&s,sizeof(stu),1,fp); fclose(fp);/顯示void print() file *fp; stu s; system(cls); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); printf(n%10s %s %6s n,姓名,學(xué)號(hào),c語(yǔ)言); while(!feof(fp) f

19、read(&s,sizeof(stu),1,fp);/從文件中讀取成績(jī)信息 if(feof(fp) break;/判斷是否文件尾 printf(%10s %6d %6.2f n,,s.num,s.c ); fclose(fp); getch();/統(tǒng)計(jì)void tongji() int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u; file *fp; stu sn, *p1n,*p2n,*p3n,*p4n;/*用指針數(shù)組*/ system(cls); if(fp=fopen(student.dat,rb)=null) printf(cantt open file

20、!n);exit(0); while(!feof(fp) fread(&si+,sizeof(stu),1,fp);/*讀入數(shù)據(jù)*/ if(feof(fp) break; t=i;i=0; for(u=0;ut;u+)/*以下每個(gè)指針數(shù)組用于指向各分?jǐn)?shù)段的學(xué)生信息*/ if(si.c=60&si.c=80&si.c=90) p4m+=&si+;continue; printf(不及格:姓名 學(xué)號(hào) c語(yǔ)言n); for(n=0;nname,p1n-num,p1n-c); printf( 60-79:姓名 學(xué)號(hào) c語(yǔ)言n); for(p=0;pname,p2p-num,p2p-c); printf

21、( 80-89:姓名 學(xué)號(hào) c語(yǔ)言n); for(q=0;qname,p3q-num,p3q-c); printf(90以上:姓名 學(xué)號(hào) c語(yǔ)言n); for(r=0;rname,p4r-num,p4r-c); fclose(fp); getch();/刪除:輸入學(xué)生姓名,若該學(xué)生存在,則刪除,并顯示刪除后余下的學(xué)生成績(jī)信息void dele1() stu xsn; file *fp; char name10; int i=0,len,k=-1/*k=0)/*k0說(shuō)明找到刪除學(xué)生位置*/ if(fp=fopen(student.dat,wb+)=null) printf(cant open f

22、ile!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*從這個(gè)位置開始寫入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(刪除失敗!n);getch(); /*失敗后重新返回菜單*/ print();/刪除:輸入學(xué)生學(xué)號(hào),若該學(xué)生存在,則刪除,并顯示刪除后余下的學(xué)生成績(jī)信息void dele2() stu xsn; file *fp; int num; int i=0,len,k=-1/*k=0)/*k0說(shuō)明找到刪除學(xué)生位置*/ if(fp=fopen(student.dat,w

23、b+)=null) printf(cant open file!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*從這個(gè)位置開始寫入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(刪除失敗!n);getch(); /*失敗后重新返回菜單*/ print();/刪除void search11() char ch1; system(cls); printf(請(qǐng)輸入按何種方式刪除:n); printf(1-姓名,2-學(xué)號(hào):); ch1=getchar();/*用字符接收*/ switch

24、(ch1)/*判斷*/ case 1:dele1();break; case 2:dele2();break; getch();/*讓屏幕停留同時(shí)按任意鍵返回*/菜單選擇void main() char ch; while(1) menu();/ 顯示菜單 ch=getch();/選擇菜單 if(ch=0) break; switch(ch)/判斷功能項(xiàng) case 1:input();break; case 2:search();break; case 3:search1();break; case 4:insert();break; case 5:print( );break; case 6

25、:tongji();break; case 7:search11();break; printf(n歡迎使用!n);第五部分:核心算法及說(shuō)明1.忽略了“=”與“=”的區(qū)別。 在許多高級(jí)語(yǔ)言中,用“=”符號(hào)作為關(guān)系運(yùn)算符“等于”。如在basic程序中可以寫 if (a=3) then 但c語(yǔ)言中,“=”是賦值運(yùn)算符,“=”是關(guān)系運(yùn)算符。如: if (a=3) a=b; 前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。2.忘記加分號(hào)。 分號(hào)是c語(yǔ)句中不可缺少的一部分,語(yǔ)句末尾必須有分號(hào)。 a=1 b=2 編譯時(shí),編譯程序在“a=1”后面沒(méi)發(fā)現(xiàn)分號(hào),就把下一行“b=2”也作為上

26、一行語(yǔ)句的一部分,這就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號(hào)。 如: int i=0,n; stu xsn; file *fp; if(fp=fopen(student.dat,rb+)=null) printf(cant open file!n);exit(0);對(duì)于復(fù)合語(yǔ)句來(lái)說(shuō),最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫(這是和pascal不同的)。 3.多加分號(hào)。 對(duì)于一個(gè)復(fù)合語(yǔ)句,如: z=x+y; t=z/100; printf(%f,t); ; 復(fù)合語(yǔ)句的花括號(hào)后不應(yīng)再加分號(hào),否則將會(huì)畫蛇添足。4. 輸入變量時(shí)忘記加地址運(yùn)算符“&”。

27、 scanf(%d%f%f%f,&xs.num,&xs.yuwen,&xs.math,&xs.english);這是不合法的。scanf函數(shù)的作用是:按照xs.num,xs.yuwen,xs.math,xs.english在內(nèi)存的地址將xs.num,xs.yuwen,xs.math,xs.english的值存進(jìn)去?!?xs.num”指xs.num在內(nèi)存中的地址。 6.輸入數(shù)據(jù)的方式與要求不符。scanf(%d%d,&a,&b); 輸入時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4 輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車鍵,跳格鍵tab。 scanf(%d,%d,&a,&b); c規(guī)定:如果在“格式控制”字符串中除了格式說(shuō)明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論