版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PAGE PAGE - 60 -C語言課程設(shè)計(jì)報(bào)告 2010年11月26日?qǐng)?bào)告目錄一、課程設(shè)計(jì)目的 3二、實(shí)習(xí)內(nèi)容及要求 3 三、需求分析 3四、總體分析 3五、詳細(xì)設(shè)計(jì) 45.0 頭文件及結(jié)構(gòu)體 45.1 主函數(shù)55.2 菜單模塊55.3 添加模塊65.4 修改模塊10 5.5 瀏覽模塊 14 5.6 查詢模塊 15 5.6.1 按學(xué)號(hào)查詢 15 5.6.2 按名字查詢 16 5.6.3 按班級(jí)查詢 175.7 統(tǒng)計(jì)模塊 18 5.7.1 男生信息19 5.7.2 女生信息21 5.7.3 全體學(xué)生信息 23 5.8 刪除模塊 23六、上機(jī)操作 26 6.1 系統(tǒng)說明 266.2 系統(tǒng)測(cè)試
2、26 七、總結(jié) 32八、源代碼 32一、課程設(shè)計(jì)目的通過實(shí)踐,學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,加深對(duì)C語言基礎(chǔ)知識(shí)的理解和掌握,進(jìn)一步鞏固C語言編程實(shí)踐能力,鍛煉思維邏輯和解決綜合性實(shí)際問題的能力。二、實(shí)習(xí)內(nèi)容及要求1、用C語言編寫一個(gè)學(xué)生證管理系統(tǒng),該系統(tǒng)具有以下功能: (1)錄入某位學(xué)生的學(xué)生證信息;(2)給定學(xué)號(hào),顯示某位學(xué)生的學(xué)生證信息;(3)給定某個(gè)班級(jí)的班號(hào),顯示該班所有學(xué)生的學(xué)生證信息;(4)給定某位學(xué)生的學(xué)號(hào),修改該學(xué)生的學(xué)生證信息;(5)給定某位學(xué)生的學(xué)號(hào),刪除該學(xué)生的學(xué)生證信息;(6)提供一些統(tǒng)計(jì)各類信息的功能;(7)提供瀏覽所有學(xué)生的學(xué)生證信息的功能
3、。2、輸入要求應(yīng)用程序運(yùn)行后,在屏幕上顯示一個(gè)菜單;用戶可以根據(jù)要求,選定相應(yīng)的操作項(xiàng)目;進(jìn)入某個(gè)操作后,根據(jù)應(yīng)用程序的提示,從鍵盤輸入相應(yīng)的信息。3、輸出要求(1)應(yīng)用程序運(yùn)行后,要在屏幕上顯示一個(gè)菜單;(2)要求用戶輸入數(shù)據(jù)時(shí),給出清晰、明確的提示信息,包括輸入的數(shù)據(jù)內(nèi)容、格式及結(jié)束方式等。三、需求分析根據(jù)題目要求,學(xué)生信息要從文本文件中存取,所以本程序應(yīng)該提供讀寫文件,顯示、統(tǒng)計(jì)、查詢、修改記錄,保存文件等操作,此外,還應(yīng)該提供鍵盤式選擇菜單實(shí)現(xiàn)功能。四、總體設(shè)計(jì)根據(jù)需求分析,可以把這個(gè)系統(tǒng)的設(shè)計(jì)分為添加、修改、查詢、瀏覽、統(tǒng)計(jì)、刪除六大模塊,其中查詢模塊可以分為三個(gè)子模塊,統(tǒng)計(jì)模塊可以
4、分為三個(gè)子模塊,子模塊下面還有子函數(shù);系統(tǒng)功能模塊圖如下所示:五、詳細(xì)設(shè)計(jì)5.0 頭文件及結(jié)構(gòu)體#include#include#include#define N 100struct Class /班級(jí) char Cname20; /班名 char Cno20;/班號(hào);struct Student /學(xué)生 char Sname20; /姓名 char Sex10;/性別 char Sno20;/學(xué)號(hào) int Age;/年齡 struct Class CInfo; /嵌套結(jié)構(gòu)體,表示班級(jí)信息StuInfoN; /結(jié)構(gòu)體數(shù)組,用作讀取和存放臨時(shí)數(shù)據(jù)5.1 主函數(shù)void main() menu()
5、; /菜單 getchar();5.2 菜單void menu() int chose; int right; do printf(ntttt學(xué)生證管理系統(tǒng)n); printf(); printf( 菜單:t1-添加t2-修改t3-瀏覽全部t4-查詢t5-統(tǒng)計(jì)t6-刪除t7-退出n); printf(); printf(請(qǐng)輸入數(shù)字選擇:); scanf(%d,&chose); if(chose8) right=1; printf(輸入錯(cuò)誤,請(qǐng)重新輸入!n); getchar(); else right=0;while(right=1);switch(chose)case 1:add(); br
6、eak; /添加模塊case 2:modify(); break; /修改模塊case 3:browse(); break; /瀏覽模塊case 4:quiry(); break; /查詢模塊case 5:stastic(); break; /統(tǒng)計(jì)模塊case 6:Delete(); break; /刪除模塊case 7:exit(0); /退出 5.3 添加模塊首先要判斷文件StuInfo.txt是否存在,如果存在就以讀寫(r+)的方式打開,如果不存在,就以寫(w)的方式創(chuàng)建文件StuInfo.txt。輸入格式要求:性別為男或女,學(xué)號(hào)為11位且不能重復(fù),年齡在0-100之間,班級(jí)號(hào)為6位,程
7、序提供了完善的驗(yàn)證機(jī)制,輸入錯(cuò)誤時(shí)將提示重新輸入直到正確為止。此外,如果以讀寫的方式打開,還要判斷記錄數(shù)numN是否成立,因?yàn)榻Y(jié)構(gòu)體數(shù)組的大小為N,當(dāng)num=N時(shí),表示已滿,不能再存儲(chǔ)數(shù)據(jù),需要修改N的值。void add() int num; /表示記錄數(shù) int i; int age; /臨時(shí)變量,用于驗(yàn)證輸入的性別是否滿足條件 char sno20; /臨時(shí)變量,用于驗(yàn)證輸入的學(xué)號(hào)是否滿足條件 char sex20; /臨時(shí)變量,用于驗(yàn)證輸入的性別是否滿足條件 char cno20; /臨時(shí)變量,用于驗(yàn)證輸入的班號(hào)是否滿足條件 int right; FILE*fp; if(fp=fope
8、n(StuInfo.txt,r+)=NULL) /以讀寫方式打開 if(fp=fopen(StuInfo.txt,w)=NULL) /文件不存在就創(chuàng)建文件 printf(n文件不存在且創(chuàng)建失敗,返回!n); menu(); printf(n請(qǐng)按照提示輸入學(xué)生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯(cuò)誤,請(qǐng)輸入男或女!n);right=1;getchar(); else
9、right=0; while(right=1); strcpy(StuInfo0.Sex,sex); do printf(n學(xué)號(hào)(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯(cuò)誤,學(xué)號(hào)長(zhǎng)度應(yīng)為11位數(shù)!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.Sno,sno); do printf(n年齡:); scanf(%d,&age); if(age100) printf(年齡應(yīng)在0-100之間,請(qǐng)重新輸入年齡!n);right=1;getchar()
10、; else right=0; while(right=1); StuInfo0.Age=age; do printf(n班號(hào)(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯(cuò)誤,班號(hào)長(zhǎng)度應(yīng)為6位數(shù)!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfo0.CInfo.Cname); fprintf(fp,n%st%st%st%dt%st%s,StuInfo0.Sna
11、me,StuInfo0.Sex,StuInfo0.Sno,StuInfo0.Age,StuInfo0.CInfo.Cno,StuInfo0.CInfo.Cname); fclose(fp); printf(n保存成功!n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu(); /以上的輸入是以寫的方式輸入,下面是以讀寫的方式輸入數(shù)據(jù) for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age
12、,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; /記錄數(shù) if(num=N) printf(n保存記錄數(shù)超出結(jié)構(gòu)體數(shù)組數(shù)的大小,請(qǐng)先修改N的值!n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu(); printf(n請(qǐng)按照提示輸入學(xué)生信息:nn); printf(姓名:); scanf(%s,&StuInfonum.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!
13、=0) printf(輸入錯(cuò)誤,請(qǐng)輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.Sex,sex); do printf(n學(xué)號(hào)(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯(cuò)誤,學(xué)號(hào)長(zhǎng)度應(yīng)為11位數(shù)!n);right=1;getchar(); else right=0; for(i=0;inum;i+) if(strcmp(sno,StuInfoi.Sno)=0) printf(該學(xué)號(hào)已經(jīng)存在,請(qǐng)重新輸入!n); right=1;
14、 getchar(); while(right=1); strcpy(StuInfonum.Sno,sno); do printf(n年齡:); scanf(%d,&age); if(age100) printf(年齡應(yīng)在0-100之間,請(qǐng)重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.Age=age; do printf(n班號(hào)(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯(cuò)誤,班號(hào)長(zhǎng)度應(yīng)為6位數(shù)!n);right=1;getchar(); el
15、se right=0; while(right=1); strcpy(StuInfonum.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfonum.CInfo.Cname); /把該記錄寫到文件末尾 fprintf(fp,n%st%st%st%dt%st%s,StuInfonum.Sname,StuInfonum.Sex,StuInfonum.Sno,StuInfonum.Age,StuInfonum.CInfo.Cno,StuInfonum.CInfo.Cname); fclose(fp); printf(n保存成功!n); printf(n請(qǐng)按
16、enter鍵返回主菜單!n); getchar(); getchar(); menu();5.4 修改模塊先判斷文件StuInfo.txt以讀(r)的方式能否打開,不能就返回,可以就讀入記錄;然后輸入學(xué)號(hào)查找記錄,沒找到就返回,找到就按照提示修改該記錄,與輸入模塊一樣,輸入的格式要求:性別為男或女,學(xué)號(hào)為11位且不能與除當(dāng)前修改的記錄的學(xué)號(hào)外的記錄的學(xué)號(hào)重復(fù),年齡在0-100之間,班級(jí)號(hào)為6位,程序提供了完善的驗(yàn)證機(jī)制,輸入錯(cuò)誤時(shí)將提示重新輸入直到正確為止。輸入完成后,再以寫(w)的方式創(chuàng)建文件,不能創(chuàng)建就返回,可以就將結(jié)構(gòu)體數(shù)組中的所有記錄保存到文件中,這與添加稍有差別,最后返回主菜單。vo
17、id modify() int num; int i; int right; int age; char sex20; char cno20; char sno20; int found=-1; char StuNO20; FILE*fpr,*fpw; if(fpr=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fpr);i+) / fscanf(fpr,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInf
18、oi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fpr); printf(n請(qǐng)輸入學(xué)號(hào)選擇要修改的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=0) found=i; printf(n你要修改的學(xué)生信息為:nn); printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); printf(%st%st%st%dt%st%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.C
19、Info.Cno,StuInfoi.CInfo.Cname); printf(n請(qǐng)按照提示輸入學(xué)生的新信息:n); printf(姓名:); scanf(%s,&StuInfofound.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯(cuò)誤,請(qǐng)輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfofound.Sex,sex); do printf(n學(xué)號(hào)(11位):)
20、; scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯(cuò)誤,學(xué)號(hào)長(zhǎng)度應(yīng)為11位數(shù)!n);right=1;getchar(); else right=0; for(i=0;inum;i+) if(i!=found)&(strcmp(sno,StuInfoi.Sno)=0) printf(該學(xué)號(hào)已經(jīng)存在,請(qǐng)重新輸入!n); right=1; getchar(); while(right=1); strcpy(StuInfofound.Sno,sno); do printf(n年齡:); scanf(%d,&age); if(age100) printf(年齡應(yīng)
21、在0-100之間,請(qǐng)重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfofound.Age=age; do printf(n班號(hào)(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯(cuò)誤,班號(hào)長(zhǎng)度應(yīng)為6位數(shù)!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfofound.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfofound.CInfo.C
22、name); if(fpw=fopen(StuInfo.txt,w)=NULL) printf(文件打不開,保存失敗!n); menu(); for(i=0;inum;i+) /保存文件 fprintf(fpw,n%st%st%st%dt%st%s,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); fclose(fpw); printf(n修改成功!n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); m
23、enu(); if(found0) printf(n沒有找到該學(xué)號(hào)的記錄:n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu(); 5.5 瀏覽模塊 void browse() int num; int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfo
24、i.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; printf(n已添加%d個(gè)學(xué)生信息nn,num); printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); for(i=0;inum;i+) printf(%st%st%st%dt%s%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); g
25、etchar(); menu();5.6 查詢模塊void quiry() int chose; int right; do printf(n1-按學(xué)號(hào)查詢t2-按姓名查詢t3-某班學(xué)生信息t4-返回n); printf(n請(qǐng)輸入數(shù)字選擇:); scanf(%d,&chose); if(chose4) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:bySno();break;case 2:bySname();break;case 3:byCno();break;case 4:menu(); 5.6.1
26、根據(jù)學(xué)號(hào)查找某學(xué)生的學(xué)生證信息:void bySno() int found=-1; int num; int i; char no20; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp
27、); printf(n請(qǐng)輸入學(xué)生學(xué)號(hào):); scanf(%s,no); for(i=0;inum;i+) if(strcmp(no,StuInfoi.Sno)=0) found=i;printf(n該學(xué)生的信息為:nn);printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) prin
28、tf(n沒有找到該班號(hào)的記錄!n); printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar(); getchar(); quiry();5.6.2 根據(jù)姓名查找某學(xué)生的學(xué)生證信息:void bySname() int found=-1; int num; int i; char name20; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&S
29、tuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp); printf(n請(qǐng)輸入學(xué)生姓名:); scanf(%s,name); for(i=0;inum;i+) if(strcmp(name,StuInfoi.Sname)=0) found=i; printf(n該學(xué)生的信息為:nn);printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInf
30、ofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n沒有找到該班號(hào)的記錄!n); printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar(); getchar(); quiry(); 5.6.3 根據(jù)班號(hào)查詢某個(gè)班級(jí)所有學(xué)生的學(xué)生證信息:void byCno() int found=-1; int num; int i; char ClaNO20; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) prin
31、tf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp); printf(n請(qǐng)輸入班號(hào):); scanf(%s,ClaNO); printf(n該班級(jí)的學(xué)生信息為:nn); printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); for(i=0;inum;i+) if(strcmp(C
32、laNO,StuInfoi.CInfo.Cno)=0) found=i; printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) /found小于0,說明不存在班號(hào)的學(xué)生記錄 printf(n沒有找到該班號(hào)的記錄!n); printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar(); getchar(); quiry();5.7
33、 統(tǒng)計(jì)模塊該模塊實(shí)現(xiàn)了基本的統(tǒng)計(jì)功能,包括分別統(tǒng)計(jì)男女生的人數(shù)、平均年齡,以及全體學(xué)生的人數(shù)和基本年齡;void stastic() int chose; int right; do printf(n1-全體男生t2-全體女生t3-全體學(xué)生t4-返回n); printf(n請(qǐng)輸入數(shù)字選擇:); scanf(%d,&chose); if(chose4) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:Male(); /男生的統(tǒng)計(jì)信息printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar();
34、getchar(); stastic();break;case 2:Female(); /女生的統(tǒng)計(jì)信息printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar();getchar(); stastic();break;case 3:StuMsg(); /全體學(xué)生的統(tǒng)計(jì)信息printf(n請(qǐng)按enter鍵返回上級(jí)菜單!n); getchar();getchar(); stastic();break;case 4:menu(); 5.7.1 統(tǒng)計(jì)男生信息子模塊void Male() int num; /人數(shù) float mg; /平均年齡 num=MaleNum(); mg=Male
35、MG(); printf(n男生總?cè)藬?shù)為:%dn平均年齡為:%fn,num,mg); 返回男生人數(shù)子函數(shù)int MaleNum() int num; int count=0; int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo
36、.Cname); fclose(fp); num=i; for(i=0;inum;i+) if(strcmp(男,StuInfoi.Sex)=0) count+; return count; 返回男生平均年齡float MaleMG() int num; int count=0; int found; float mAge=0; int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname
37、,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;i0) mAge/=count; return mAge;5.7.2 統(tǒng)計(jì)女生信息子模塊void Female() int num; float mg; num=FemaleNum(); mg=FemaleMG(); printf(n女生總?cè)藬?shù)為:%dn平均年齡為:%fn,num,mg); 返回女生人數(shù)子函數(shù)int FemaleNum() int num; int co
38、unt=0; int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;inum;i+) if(strcmp(女,StuInfoi.Sex)=0) count+;
39、 return count;返回女生平均年齡float FemaleMG() int num; int count=0; int found; float mAge=0; int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.C
40、name); fclose(fp); num=i; for(i=0;i0) mAge/=count; return mAge;5.7.3 全體學(xué)生統(tǒng)計(jì)信息子模塊void StuMsg() int num; float mg; num=StuNum(); mg=MG(); printf(n學(xué)生總?cè)藬?shù)為:%dn學(xué)生平均年齡為:%fn,num,mg); Male(); Female(); 返回全體學(xué)生的人數(shù)子函數(shù)int StuNum() int num; num=MaleNum()+FemaleNum(); return num; 返回全體學(xué)生的平均年齡子函數(shù)float MG() float mAg
41、e; mAge=(MaleNum()*MaleMG()+FemaleNum()*FemaleMG()/(MaleNum()+FemaleNum(); return mAge;5.8 刪除模塊 void Delete() int num; int i; int found=-1; char StuNO20; FILE*fpr,*fpw; if(fpr=fopen(StuInfo.txt,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fpr);i+) fscanf(fpr,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi
42、.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fpr); printf(n請(qǐng)輸入學(xué)號(hào)選擇你要?jiǎng)h除的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=0) found=i; printf(n你刪除的學(xué)生信息為:nn);printf(姓名 性別 學(xué)號(hào) 年齡 班號(hào) 班名n); printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInf
43、ofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(foundnum-1) for(found;foundnum-1;found+) strcpy(StuInfofound.Sname,StuInfofound+1.Sname); strcpy(StuInfofound.Sex,StuInfofound+1.Sex); strcpy(StuInfofound.Sno,StuInfofound+1.Sno); StuInfofound.Age=StuIn
44、fofound+1.Age; strcpy(StuInfofound.CInfo.Cno,StuInfofound+1.CInfo.Cno); strcpy(StuInfofound.CInfo.Cname,StuInfofound+1.CInfo.Cname); if(fpw=fopen(StuInfo.txt,w)=NULL) printf(文件打不開!n); menu(); for(i=0;inum-1;i+) /保存文件 fprintf(fpw,n%st%st%st%dt%st%s,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Ag
45、e,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); fclose(fpw); printf(n修改成功!n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu(); if(found0) printf(n沒有找到該學(xué)號(hào)的記錄:n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu(); 六、上機(jī)操作6.1 系統(tǒng)說明本系統(tǒng)存儲(chǔ)信息的文本文件名為StuInfo.txt;該文件在程序主目錄下,添加模塊先采用讀寫的方式(r+)打開文件,如果不存在就以寫
46、的方式(w+)創(chuàng)建該文件,因此,假如該文件已存在,則也可以直接打開該文件進(jìn)行瀏覽、編輯; 6.2 系統(tǒng)測(cè)試6.2.1 瀏覽數(shù)據(jù)6.2.2 添加數(shù)據(jù)添加該生信息后瀏覽結(jié)果:6.2.3 修改數(shù)據(jù)修改后的結(jié)果6.2.4 查詢記錄按學(xué)號(hào)查詢:按姓名查詢:按班級(jí)查詢:6.2.5 統(tǒng)計(jì)數(shù)據(jù)男生統(tǒng)計(jì)信息:女生統(tǒng)計(jì)信息:全體學(xué)生統(tǒng)計(jì)信息:6.2.6 刪除記錄刪除后的結(jié)果:七、總結(jié) 本次C語言課程設(shè)計(jì)非常有意義,它鍛煉了我們解決實(shí)際問題的能力。由于本人對(duì)編程感興趣,在編程方面有一定基礎(chǔ),因此嘗試著由自己完成整個(gè)系統(tǒng),在設(shè)計(jì)的過程里也遇到了很多麻煩,但是通過查詢參考書和網(wǎng)絡(luò),一個(gè)個(gè)疑難迎刃而解。通過這次實(shí)踐課,不
47、只是強(qiáng)化了我們C語言編程的能力,更重要的是使我們學(xué)會(huì)了一種工作方法,學(xué)會(huì)了如何規(guī)劃、組織、設(shè)計(jì)、實(shí)施項(xiàng)目,從整體到局部,從局部又到整體。此外,在設(shè)計(jì)流程圖和編制報(bào)告的過程里也學(xué)了不少東西,學(xué)會(huì)了用office visio制作流程圖,學(xué)會(huì)了組織報(bào)告等等。八、源代碼#include#include#include#define N 100struct Class /班級(jí) char Cname20;/班名 char Cno20;/班號(hào);struct Student/學(xué)生 char Sname20;/姓名 char Sex10;/性別 char Sno20;/學(xué)號(hào) int Age;/年齡 struct
48、 Class CInfo;/嵌套結(jié)構(gòu)體,表示班級(jí)信息StuInfoN;void menu(); /主菜單 void add(); /添加模塊void modify(); /修改模塊void Delete(); /刪除模塊void browse(); /瀏覽模塊void quiry(); /查詢模塊void stastic(); /統(tǒng)計(jì)模塊void bySname(); /按姓名查詢,子模塊void bySno(); /按學(xué)號(hào)查詢,子模塊void byCno(); /按班號(hào)查詢,子模塊void StuMsg(); /返回全體學(xué)生統(tǒng)計(jì)信息,子模塊void Female(); /女生統(tǒng)計(jì)信息,子模塊
49、void Male(); /男生統(tǒng)計(jì)信息,子模塊int FemaleNum(); /返回女生人數(shù),子函數(shù)float FemaleMG(); /返回女生平均年齡,子函數(shù)int MaleNum(); /返回男生人數(shù),子函數(shù)float MaleMG(); /返回男生平均年齡,子函數(shù)int StuNum(); /返回全體學(xué)生人數(shù),子函數(shù)float MG(); /返回全體學(xué)生的平均年齡,子函數(shù)void main() menu(); getchar();void menu() /菜單int chose; int right; do system(cls); /清屏 printf(ntttt學(xué)生證管理系統(tǒng)n
50、); printf(); printf( 菜單:t1-添加t2-修改t3-瀏覽全部t4-查詢t5-統(tǒng)計(jì)t6-刪除t7-退出n); printf(); printf(請(qǐng)輸入數(shù)字選擇:); scanf(%d,&chose); if(chose7) printf(輸入錯(cuò)誤,請(qǐng)重新輸入!n);right=1;getchar(); else right=0;while(right=1);switch(chose)case 1:add(); break;case 2:modify(); break;case 3:browse(); break;case 4:quiry(); break;case 5:st
51、astic(); break;case 6:Delete(); break;case 7:exit(0); void add() /添加學(xué)生信息,一次添加一條記錄 int num; int i; int age; char sno20; char sex20; char cno20; int right; FILE*fp; if(fp=fopen(StuInfo.txt,r+)=NULL) /以讀寫方式打開 if(fp=fopen(StuInfo.txt,w)=NULL) /文件不存在則創(chuàng)建文件 printf(n文件不存在且創(chuàng)建失敗,返回!n); menu(); printf(n請(qǐng)按照提示輸入
52、學(xué)生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯(cuò)誤,請(qǐng)輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.Sex,sex); do printf(n學(xué)號(hào)(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯(cuò)誤,學(xué)號(hào)長(zhǎng)度應(yīng)為1
53、1位數(shù)!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.Sno,sno); do printf(n年齡:); scanf(%d,&age); if(age100) printf(年齡應(yīng)在0-100之間,請(qǐng)重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfo0.Age=age; do printf(n班號(hào)(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯(cuò)誤,班號(hào)長(zhǎng)度應(yīng)為6位數(shù)!
54、n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfo0.CInfo.Cname); fprintf(fp,n%st%st%st%dt%st%s,StuInfo0.Sname,StuInfo0.Sex,StuInfo0.Sno,StuInfo0.Age,StuInfo0.CInfo.Cno,StuInfo0.CInfo.Cname); fclose(fp); printf(n保存成功!n); printf(n請(qǐng)按ente
55、r鍵返回主菜單!n); getchar(); getchar(); menu(); for(i=0;!feof(fp);i+) /讀取文件 fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; if(num=N) printf(n保存記錄數(shù)超出結(jié)構(gòu)體數(shù)組數(shù)的大小,請(qǐng)先修改N的值n); menu(); printf(n請(qǐng)按照提示輸入學(xué)生信息:nn); printf(姓名:); scanf(
56、%s,&StuInfonum.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯(cuò)誤,請(qǐng)輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.Sex,sex); do printf(n學(xué)號(hào)(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯(cuò)誤,學(xué)號(hào)長(zhǎng)度應(yīng)為11位數(shù)!n);right=1;getchar();
57、 else right=0; for(i=0;inum;i+) if(strcmp(sno,StuInfoi.Sno)=0) printf(該學(xué)號(hào)已經(jīng)存在,請(qǐng)重新輸入!n); right=1; getchar(); while(right=1); strcpy(StuInfonum.Sno,sno); do printf(n年齡:); scanf(%d,&age); if(age100) printf(年齡應(yīng)在0-100之間,請(qǐng)重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.Age=age; do pr
58、intf(n班號(hào)(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯(cuò)誤,班號(hào)長(zhǎng)度應(yīng)為6位數(shù)!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfonum.CInfo.Cname); /把該記錄寫到文件末尾 fprintf(fp,n%st%st%st%dt%st%s,StuInfonum.Sname,StuInfonum.Sex,StuInfonum.Sno,StuI
59、nfonum.Age,StuInfonum.CInfo.Cno,StuInfonum.CInfo.Cname); fclose(fp); printf(n保存成功!n); printf(n請(qǐng)按enter鍵返回主菜單!n); getchar(); getchar(); menu();void modify()/修改學(xué)生信息 int num; int i; int right; int age; char sex20; char cno20; char sno20; int found=-1; char StuNO20; FILE*fpr,*fpw; if(fpr=fopen(StuInfo.tx
60、t,r)=NULL) printf(文件打不開!n); menu(); for(i=0;!feof(fpr);i+) /讀取文件 fscanf(fpr,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fpr); printf(n請(qǐng)輸入學(xué)號(hào)選擇要修改的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《食用菌栽培技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025湖南省安全員-C證考試題庫(kù)
- 2025山東省安全員B證考試題庫(kù)附答案
- 2025年湖北省建筑安全員知識(shí)題庫(kù)
- 【語文課件】《我的信念》課件
- 《壺口瀑布》課件
- 單位管理制度展示選集【人員管理篇】
- 單位管理制度展示合集【職員管理】十篇
- 電力天然氣周報(bào):多省2025年長(zhǎng)協(xié)電價(jià)落地11月我國(guó)天然氣表觀消費(fèi)量同比下降0.3
- 2024年上海市縣鄉(xiāng)教師選調(diào)考試《教育學(xué)》真題匯編帶解析含完整答案(各地真題)
- 魯科版化學(xué)必修二 1.1 原子結(jié)構(gòu) 課件
- 思博安根測(cè)儀熱凝牙膠尖-說明書
- 國(guó)家開放大學(xué)《西方行政學(xué)說》形考任務(wù)1-4參考答案
- 內(nèi)容320neo教程正式版
- 風(fēng)機(jī)招標(biāo)技術(shù)要求
- 出院小結(jié)模板
- 數(shù)電課程設(shè)計(jì)-籃球計(jì)分器資料
- HITACHI (日立)存儲(chǔ)操作說明書
- 孫健敏 徐世勇組織行為學(xué)課后習(xí)題解答
- 高考?xì)v史二輪復(fù)習(xí)熱點(diǎn)主題二關(guān)注民生-構(gòu)建和諧社會(huì)“制度自信”讓生活更美好課件
- 針灸推拿治療失眠PPT
評(píng)論
0/150
提交評(píng)論