版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告書學(xué)生成績記錄簿設(shè)計(jì)班 級: 0953-1學(xué) 號: 20097268姓 名: 趙文龍指導(dǎo)老師: 楊 子 光石家莊鐵道大學(xué)四方學(xué)院2010年7月11日課程設(shè)計(jì)報(bào)告內(nèi)容1. 選擇題目題目:學(xué)生成績記錄薄設(shè)計(jì)2. 內(nèi)容摘要摘要:本系統(tǒng)實(shí)現(xiàn)學(xué)生成績信息的管理與查詢,程序具有包括學(xué)生信息查詢,如姓名,c語言成績,成績分段查看等;同時可以c語言成績信息以及學(xué)生情況進(jìn)行修改,刪除和添加。另外還要做到可以對學(xué)生成績信息以及成績信息查詢和維護(hù)。程序應(yīng)具有以下編程思想:1.各模塊間通過菜單切換和調(diào)用2.主函數(shù)通過調(diào)用菜單函數(shù)實(shí)現(xiàn)對各功能模塊的調(diào)用,各功能模塊間根據(jù)需要可相互調(diào)用。3.程序能夠保證各模塊
2、功能的獨(dú)立和數(shù)據(jù)共享。/*不使用全局變量則能保證函數(shù)之間的獨(dú)立性,利用形參與實(shí)參之間的數(shù)值傳遞來實(shí)現(xiàn)數(shù)據(jù)共享*/4.相近功能以級聯(lián)菜單的形式集成。5.本模塊由創(chuàng)建文件以磁盤文件的形式保存。3. 索引關(guān)鍵詞關(guān)鍵詞:管理與查詢,信息鏈表,信息維護(hù)。目 錄1.題目要求 042.設(shè)計(jì)思想 043.系統(tǒng)完成功能及框圖 044.界面設(shè)計(jì) 055.核心算法及說明 176.結(jié)論 197.參考資料 198.后記 209.附錄 205.正文第一部分:題目要求編制一個c語言成績記錄簿,每個學(xué)生信息包括:學(xué)號、姓名、c語言成績。具體功能:(1)創(chuàng)建信息鏈表并以磁盤文件保存;(2)讀取磁盤文件并顯示輸出所有學(xué)生的成績;
3、(3)按學(xué)號或姓名查詢成績;(4)添加成績記錄;(5)修改指定姓名或?qū)W號的學(xué)生的成績并可存盤;(6)顯示輸出60分以下、6079、8089、90分以上各分?jǐn)?shù)段的學(xué)生信息(可選)第二部分:設(shè)計(jì)思想1分析程序的功能要求,劃分程序功能模塊。 2. 畫出系統(tǒng)流程圖。 3. 代碼的編寫。定義數(shù)據(jù)結(jié)構(gòu)和各個功能子函數(shù)。 4. 程序的功能調(diào)試。 5. 完成系統(tǒng)總結(jié)報(bào)告以及使用說明書 第三部分:系統(tǒng)完成功能及框圖1.學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實(shí)現(xiàn)學(xué)生信息數(shù)據(jù)的維護(hù)。此模塊包括子模塊有:增加學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息2.信息查詢時可實(shí)現(xiàn)按姓名查詢、按學(xué)號查詢3.輸入任意的一個學(xué)生名字(如花花)
4、或一個學(xué)號(如20097268),統(tǒng)計(jì)出在此學(xué)生的成績情況??驁D:學(xué)生成績記錄簿*1. 成績錄入2. 查詢3. 修改4. 增加5. 顯示6. 統(tǒng)計(jì)7. 刪除0. 退出*主模塊學(xué)生成績錄入學(xué)生成績添加添加學(xué)生信息刪除學(xué)生信息學(xué)生信息查詢學(xué)生成績顯示學(xué)生成績刪除學(xué)生信息統(tǒng)計(jì)修改學(xué)生信息按學(xué)號刪除按成績刪除學(xué)生優(yōu)秀人數(shù)退出程序不及格的人數(shù)及格的人數(shù)按姓名查詢按學(xué)號查詢第四部分:界面設(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é)生平時成績管理n); printf(ttt=n); printf(ttt 1.成績錄入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請選擇相應(yīng)的功能:);/成績錄入void input() file *fp; stu x
6、s; /*定義一個結(jié)構(gòu)體變量來裝從文件中讀出來的數(shù)據(jù)*/ if(fp=fopen(student.dat,ab)=null) printf(cant open file!n);exit(0); printf(n錄入格式: 姓名 學(xué)號 c語言 當(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); /將成績信
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)/*按姓名查詢時判斷輸入的姓名是否存在,會循環(huán)從數(shù)據(jù)中找取*/ printf( 學(xué)生的信息如下:n); pri
8、ntf(n%10s %6s %6s n,姓名,學(xué)號,c語言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失敗!); /*學(xué)生不存在*/ fclose(fp);/學(xué)號定義void xuehao() file *fp; stu xs; int num; printf(n輸入要查學(xué)生的學(xué)號: );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é)號查詢時判斷輸入的學(xué)號是否存在,會循環(huán)從數(shù)據(jù)中找取*/ printf( 學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號,c語言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失敗!); fclose(fp);/查詢void search() char ch1; system(cls); printf(請輸入按何種方式查詢:n); printf(1-姓名,2-學(xué)號:
10、); ch1=getchar();/*用字符接收*/ switch(ch1)/*判斷*/ case 1:xingming();break; case 2:xuehao();break; getch();/*讓屏幕停留同時按任意鍵返回*/修改:輸入學(xué)生的姓名,查找該學(xué)生,若找到則修改該生的成績信息,并顯示修改前后的結(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é)號,c語言); printf(%10s %6d %6.2f n,,xs.num,xs.c); printf(n請輸入該生的c語言成績:);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的學(xué)生的信息如下:n)
12、; printf(n%10s %6s %6s n,姓名,學(xué)號,c語言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*負(fù)號表示后退,1表示文件當(dāng)前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再寫入,同時把要修改的那個覆蓋掉*/ else printf(n學(xué)生不存在,修改失敗!); fclose(fp); getch();/修改:輸入學(xué)生的學(xué)號,查找該學(xué)生,若找到則修改該生的成績信息,并顯示修改前后的結(jié)果;void modi2() stu xs; file *fp;
13、int num; system(cls); printf(n輸入要查學(xué)生的學(xué)號: );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é)號,c語言); printf(%10s %6d %6.2f n,,xs.n
14、um,xs.c); printf(n請輸入該生的c語言成績:);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的學(xué)生的信息如下:n); printf(n%10s %6s %6s n,姓名,學(xué)號,c語言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*負(fù)號表示后退,1表示文件當(dāng)前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再寫入,同時把要修改的那個覆蓋掉*/ else printf(n學(xué)生不存在,修改失敗!); f
15、close(fp); getch();/修改void search1() char ch1; system(cls); printf(請輸入按何種方式修改:n); printf(1-姓名,2-學(xué)號:); ch1=getchar();/*用字符接收*/ switch(ch1)/*判斷*/ case 1:modi1();break; case 2:modi2();break; getch();/*讓屏幕停留同時按任意鍵返回*/插入:輸入學(xué)生的平時的各項(xiàng)成績,插入到指定位置;當(dāng)指定的位置超出范圍時,將其插入到全班的最后,并顯示插入成功后的結(jié)果。void insert() int i=0,j,k,le
16、nth; file *fp; stu s,xsn; system(cls); printf(n請輸入插入的學(xué)生的姓名:);scanf(%s,&); printf(n學(xué)生的學(xué)號:);scanf(%d,&s.num); printf(n學(xué)生的c成績:);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是最大的,往后移一個這樣移動避免數(shù)據(jù)被覆蓋*/ /*循環(huán)是只循環(huán)這一句的*/ xsk=s;/*將輸入的學(xué)生信息加入這個k位置*/ lenth+;/*長度+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é)號,c語言); while(!feof(fp) f
19、read(&s,sizeof(stu),1,fp);/從文件中讀取成績信息 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+)/*以下每個指針數(shù)組用于指向各分?jǐn)?shù)段的學(xué)生信息*/ if(si.c=60&si.c=80&si.c=90) p4m+=&si+;continue; printf(不及格:姓名 學(xué)號 c語言n); for(n=0;nname,p1n-num,p1n-c); printf( 60-79:姓名 學(xué)號 c語言n); for(p=0;pname,p2p-num,p2p-c); printf
21、( 80-89:姓名 學(xué)號 c語言n); for(q=0;qname,p3q-num,p3q-c); printf(90以上:姓名 學(xué)號 c語言n); for(r=0;rname,p4r-num,p4r-c); fclose(fp); getch();/刪除:輸入學(xué)生姓名,若該學(xué)生存在,則刪除,并顯示刪除后余下的學(xué)生成績信息void dele1() stu xsn; file *fp; char name10; int i=0,len,k=-1/*k=0)/*k0說明找到刪除學(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;/*從這個位置開始寫入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(刪除失敗!n);getch(); /*失敗后重新返回菜單*/ print();/刪除:輸入學(xué)生學(xué)號,若該學(xué)生存在,則刪除,并顯示刪除后余下的學(xué)生成績信息void dele2() stu xsn; file *fp; int num; int i=0,len,k=-1/*k=0)/*k0說明找到刪除學(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;/*從這個位置開始寫入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(刪除失敗!n);getch(); /*失敗后重新返回菜單*/ print();/刪除void search11() char ch1; system(cls); printf(請輸入按何種方式刪除:n); printf(1-姓名,2-學(xué)號:); ch1=getchar();/*用字符接收*/ switch
24、(ch1)/*判斷*/ case 1:dele1();break; case 2:dele2();break; getch();/*讓屏幕停留同時按任意鍵返回*/菜單選擇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);第五部分:核心算法及說明1.忽略了“=”與“=”的區(qū)別。 在許多高級語言中,用“=”符號作為關(guān)系運(yùn)算符“等于”。如在basic程序中可以寫 if (a=3) then 但c語言中,“=”是賦值運(yùn)算符,“=”是關(guān)系運(yùn)算符。如: if (a=3) a=b; 前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。2.忘記加分號。 分號是c語句中不可缺少的一部分,語句末尾必須有分號。 a=1 b=2 編譯時,編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上
26、一行語句的一部分,這就會出現(xiàn)語法錯誤。改錯時,有時在被指出有錯的一行中未發(fā)現(xiàn)錯誤,就需要看一下上一行是否漏掉了分號。 如: int i=0,n; stu xsn; file *fp; if(fp=fopen(student.dat,rb+)=null) printf(cant open file!n);exit(0);對于復(fù)合語句來說,最后一個語句中最后的分號不能忽略不寫(這是和pascal不同的)。 3.多加分號。 對于一個復(fù)合語句,如: z=x+y; t=z/100; printf(%f,t); ; 復(fù)合語句的花括號后不應(yīng)再加分號,否則將會畫蛇添足。4. 輸入變量時忘記加地址運(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ù)據(jù)間的分隔符,如下面輸入不合法: 3,4 輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。 scanf(%d,%d,&a,&b); c規(guī)定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電子商務(wù)平臺攤位銷售服務(wù)合同4篇
- 2025版智能農(nóng)業(yè)設(shè)備租賃合同示范范本3篇
- 2025年度民辦學(xué)校校長任期校園文化建設(shè)聘用合同3篇
- 二零二五年度影視制作勞務(wù)承攬合同4篇
- 二零二五版智慧城市內(nèi)部股東全部股權(quán)轉(zhuǎn)讓與公共服務(wù)合同4篇
- 2025版新型環(huán)保木地板研發(fā)生產(chǎn)合同模板4篇
- 2025版農(nóng)業(yè)資源整合農(nóng)副業(yè)承包合同書二份4篇
- 2025年投影儀行業(yè)市場趨勢分析報(bào)告
- 二零二五年度數(shù)據(jù)中心硬件搭建與維護(hù)合同3篇
- 2025年度大學(xué)宿舍樓消防設(shè)施檢測與維修服務(wù)承包協(xié)議4篇
- 《電力用直流電源系統(tǒng)蓄電池組遠(yuǎn)程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運(yùn)維服務(wù)信息化運(yùn)維方案
- 汽車修理廠員工守則
- 六年級上冊數(shù)學(xué)應(yīng)用題100題
- 個人代賣協(xié)議
- 公安交通管理行政處罰決定書式樣
- 10.《運(yùn)動技能學(xué)習(xí)與控制》李強(qiáng)
- 冀教版數(shù)學(xué)七年級下冊綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級護(hù)理制度
- 場館惡劣天氣處置應(yīng)急預(yù)案
評論
0/150
提交評論