




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、PAGE PAGE - 60 -C語言課程設(shè)計報告 2010年11月26日報告目錄一、課程設(shè)計目的 3二、實習內(nèi)容及要求 3 三、需求分析 3四、總體分析 3五、詳細設(shè)計 45.0 頭文件及結(jié)構(gòu)體 45.1 主函數(shù)55.2 菜單模塊55.3 添加模塊65.4 修改模塊10 5.5 瀏覽模塊 14 5.6 查詢模塊 15 5.6.1 按學號查詢 15 5.6.2 按名字查詢 16 5.6.3 按班級查詢 175.7 統(tǒng)計模塊 18 5.7.1 男生信息19 5.7.2 女生信息21 5.7.3 全體學生信息 23 5.8 刪除模塊 23六、上機操作 26 6.1 系統(tǒng)說明 266.2 系統(tǒng)測試
2、26 七、總結(jié) 32八、源代碼 32一、課程設(shè)計目的通過實踐,學會編制結(jié)構(gòu)清晰、風格良好、數(shù)據(jù)結(jié)構(gòu)適當?shù)腃語言程序,加深對C語言基礎(chǔ)知識的理解和掌握,進一步鞏固C語言編程實踐能力,鍛煉思維邏輯和解決綜合性實際問題的能力。二、實習內(nèi)容及要求1、用C語言編寫一個學生證管理系統(tǒng),該系統(tǒng)具有以下功能: (1)錄入某位學生的學生證信息;(2)給定學號,顯示某位學生的學生證信息;(3)給定某個班級的班號,顯示該班所有學生的學生證信息;(4)給定某位學生的學號,修改該學生的學生證信息;(5)給定某位學生的學號,刪除該學生的學生證信息;(6)提供一些統(tǒng)計各類信息的功能;(7)提供瀏覽所有學生的學生證信息的功能
3、。2、輸入要求應(yīng)用程序運行后,在屏幕上顯示一個菜單;用戶可以根據(jù)要求,選定相應(yīng)的操作項目;進入某個操作后,根據(jù)應(yīng)用程序的提示,從鍵盤輸入相應(yīng)的信息。3、輸出要求(1)應(yīng)用程序運行后,要在屏幕上顯示一個菜單;(2)要求用戶輸入數(shù)據(jù)時,給出清晰、明確的提示信息,包括輸入的數(shù)據(jù)內(nèi)容、格式及結(jié)束方式等。三、需求分析根據(jù)題目要求,學生信息要從文本文件中存取,所以本程序應(yīng)該提供讀寫文件,顯示、統(tǒng)計、查詢、修改記錄,保存文件等操作,此外,還應(yīng)該提供鍵盤式選擇菜單實現(xiàn)功能。四、總體設(shè)計根據(jù)需求分析,可以把這個系統(tǒng)的設(shè)計分為添加、修改、查詢、瀏覽、統(tǒng)計、刪除六大模塊,其中查詢模塊可以分為三個子模塊,統(tǒng)計模塊可以
4、分為三個子模塊,子模塊下面還有子函數(shù);系統(tǒng)功能模塊圖如下所示:五、詳細設(shè)計5.0 頭文件及結(jié)構(gòu)體#include#include#include#define N 100struct Class /班級 char Cname20; /班名 char Cno20;/班號;struct Student /學生 char Sname20; /姓名 char Sex10;/性別 char Sno20;/學號 int Age;/年齡 struct Class CInfo; /嵌套結(jié)構(gòu)體,表示班級信息StuInfoN; /結(jié)構(gòu)體數(shù)組,用作讀取和存放臨時數(shù)據(jù)5.1 主函數(shù)void main() menu()
5、; /菜單 getchar();5.2 菜單void menu() int chose; int right; do printf(ntttt學生證管理系統(tǒng)n); printf(); printf( 菜單:t1-添加t2-修改t3-瀏覽全部t4-查詢t5-統(tǒng)計t6-刪除t7-退出n); printf(); printf(請輸入數(shù)字選擇:); scanf(%d,&chose); if(chose8) right=1; printf(輸入錯誤,請重新輸入!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)計模塊case 6:Delete(); break; /刪除模塊case 7:exit(0); /退出 5.3 添加模塊首先要判斷文件StuInfo.txt是否存在,如果存在就以讀寫(r+)的方式打開,如果不存在,就以寫(w)的方式創(chuàng)建文件StuInfo.txt。輸入格式要求:性別為男或女,學號為11位且不能重復,年齡在0-100之間,班級號為6位,程
7、序提供了完善的驗證機制,輸入錯誤時將提示重新輸入直到正確為止。此外,如果以讀寫的方式打開,還要判斷記錄數(shù)numN是否成立,因為結(jié)構(gòu)體數(shù)組的大小為N,當num=N時,表示已滿,不能再存儲數(shù)據(jù),需要修改N的值。void add() int num; /表示記錄數(shù) int i; int age; /臨時變量,用于驗證輸入的性別是否滿足條件 char sno20; /臨時變量,用于驗證輸入的學號是否滿足條件 char sex20; /臨時變量,用于驗證輸入的性別是否滿足條件 char cno20; /臨時變量,用于驗證輸入的班號是否滿足條件 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請按照提示輸入學生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯誤,請輸入男或女!n);right=1;getchar(); else
9、right=0; while(right=1); strcpy(StuInfo0.Sex,sex); do printf(n學號(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯誤,學號長度應(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之間,請重新輸入年齡!n);right=1;getchar()
10、; else right=0; while(right=1); StuInfo0.Age=age; do printf(n班號(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯誤,班號長度應(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請按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ù)的大小,請先修改N的值!n); printf(n請按enter鍵返回主菜單!n); getchar(); getchar(); menu(); printf(n請按照提示輸入學生信息:nn); printf(姓名:); scanf(%s,&StuInfonum.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!
13、=0) printf(輸入錯誤,請輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.Sex,sex); do printf(n學號(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯誤,學號長度應(yīng)為11位數(shù)!n);right=1;getchar(); else right=0; for(i=0;inum;i+) if(strcmp(sno,StuInfoi.Sno)=0) printf(該學號已經(jī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之間,請重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.Age=age; do printf(n班號(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯誤,班號長度應(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請按
16、enter鍵返回主菜單!n); getchar(); getchar(); menu();5.4 修改模塊先判斷文件StuInfo.txt以讀(r)的方式能否打開,不能就返回,可以就讀入記錄;然后輸入學號查找記錄,沒找到就返回,找到就按照提示修改該記錄,與輸入模塊一樣,輸入的格式要求:性別為男或女,學號為11位且不能與除當前修改的記錄的學號外的記錄的學號重復,年齡在0-100之間,班級號為6位,程序提供了完善的驗證機制,輸入錯誤時將提示重新輸入直到正確為止。輸入完成后,再以寫(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請輸入學號選擇要修改的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=0) found=i; printf(n你要修改的學生信息為:nn); printf(姓名 性別 學號 年齡 班號 班名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請按照提示輸入學生的新信息:n); printf(姓名:); scanf(%s,&StuInfofound.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯誤,請輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfofound.Sex,sex); do printf(n學號(11位):)
20、; scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯誤,學號長度應(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(該學號已經(jī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之間,請重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfofound.Age=age; do printf(n班號(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯誤,班號長度應(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請按enter鍵返回主菜單!n); getchar(); getchar(); m
23、enu(); if(found0) printf(n沒有找到該學號的記錄:n); printf(n請按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個學生信息nn,num); printf(姓名 性別 學號 年齡 班號 班名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請按enter鍵返回主菜單!n); getchar(); g
25、etchar(); menu();5.6 查詢模塊void quiry() int chose; int right; do printf(n1-按學號查詢t2-按姓名查詢t3-某班學生信息t4-返回n); printf(n請輸入數(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ù)學號查找某學生的學生證信息: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請輸入學生學號:); scanf(%s,no); for(i=0;inum;i+) if(strcmp(no,StuInfoi.Sno)=0) found=i;printf(n該學生的信息為:nn);printf(姓名 性別 學號 年齡 班號 班名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沒有找到該班號的記錄!n); printf(n請按enter鍵返回上級菜單!n); getchar(); getchar(); quiry();5.6.2 根據(jù)姓名查找某學生的學生證信息: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請輸入學生姓名:); scanf(%s,name); for(i=0;inum;i+) if(strcmp(name,StuInfoi.Sname)=0) found=i; printf(n該學生的信息為:nn);printf(姓名 性別 學號 年齡 班號 班名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沒有找到該班號的記錄!n); printf(n請按enter鍵返回上級菜單!n); getchar(); getchar(); quiry(); 5.6.3 根據(jù)班號查詢某個班級所有學生的學生證信息: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請輸入班號:); scanf(%s,ClaNO); printf(n該班級的學生信息為:nn); printf(姓名 性別 學號 年齡 班號 班名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,說明不存在班號的學生記錄 printf(n沒有找到該班號的記錄!n); printf(n請按enter鍵返回上級菜單!n); getchar(); getchar(); quiry();5.7
33、 統(tǒng)計模塊該模塊實現(xiàn)了基本的統(tǒng)計功能,包括分別統(tǒng)計男女生的人數(shù)、平均年齡,以及全體學生的人數(shù)和基本年齡;void stastic() int chose; int right; do printf(n1-全體男生t2-全體女生t3-全體學生t4-返回n); printf(n請輸入數(shù)字選擇:); scanf(%d,&chose); if(chose4) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:Male(); /男生的統(tǒng)計信息printf(n請按enter鍵返回上級菜單!n); getchar();
34、getchar(); stastic();break;case 2:Female(); /女生的統(tǒng)計信息printf(n請按enter鍵返回上級菜單!n); getchar();getchar(); stastic();break;case 3:StuMsg(); /全體學生的統(tǒng)計信息printf(n請按enter鍵返回上級菜單!n); getchar();getchar(); stastic();break;case 4:menu(); 5.7.1 統(tǒng)計男生信息子模塊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)計女生信息子模塊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 全體學生統(tǒng)計信息子模塊void StuMsg() int num; float mg; num=StuNum(); mg=MG(); printf(n學生總?cè)藬?shù)為:%dn學生平均年齡為:%fn,num,mg); Male(); Female(); 返回全體學生的人數(shù)子函數(shù)int StuNum() int num; num=MaleNum()+FemaleNum(); return num; 返回全體學生的平均年齡子函數(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請輸入學號選擇你要刪除的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=0) found=i; printf(n你刪除的學生信息為:nn);printf(姓名 性別 學號 年齡 班號 班名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請按enter鍵返回主菜單!n); getchar(); getchar(); menu(); if(found0) printf(n沒有找到該學號的記錄:n); printf(n請按enter鍵返回主菜單!n); getchar(); getchar(); menu(); 六、上機操作6.1 系統(tǒng)說明本系統(tǒng)存儲信息的文本文件名為StuInfo.txt;該文件在程序主目錄下,添加模塊先采用讀寫的方式(r+)打開文件,如果不存在就以寫
46、的方式(w+)創(chuàng)建該文件,因此,假如該文件已存在,則也可以直接打開該文件進行瀏覽、編輯; 6.2 系統(tǒng)測試6.2.1 瀏覽數(shù)據(jù)6.2.2 添加數(shù)據(jù)添加該生信息后瀏覽結(jié)果:6.2.3 修改數(shù)據(jù)修改后的結(jié)果6.2.4 查詢記錄按學號查詢:按姓名查詢:按班級查詢:6.2.5 統(tǒng)計數(shù)據(jù)男生統(tǒng)計信息:女生統(tǒng)計信息:全體學生統(tǒng)計信息:6.2.6 刪除記錄刪除后的結(jié)果:七、總結(jié) 本次C語言課程設(shè)計非常有意義,它鍛煉了我們解決實際問題的能力。由于本人對編程感興趣,在編程方面有一定基礎(chǔ),因此嘗試著由自己完成整個系統(tǒng),在設(shè)計的過程里也遇到了很多麻煩,但是通過查詢參考書和網(wǎng)絡(luò),一個個疑難迎刃而解。通過這次實踐課,不
47、只是強化了我們C語言編程的能力,更重要的是使我們學會了一種工作方法,學會了如何規(guī)劃、組織、設(shè)計、實施項目,從整體到局部,從局部又到整體。此外,在設(shè)計流程圖和編制報告的過程里也學了不少東西,學會了用office visio制作流程圖,學會了組織報告等等。八、源代碼#include#include#include#define N 100struct Class /班級 char Cname20;/班名 char Cno20;/班號;struct Student/學生 char Sname20;/姓名 char Sex10;/性別 char Sno20;/學號 int Age;/年齡 struct
48、 Class CInfo;/嵌套結(jié)構(gòu)體,表示班級信息StuInfoN;void menu(); /主菜單 void add(); /添加模塊void modify(); /修改模塊void Delete(); /刪除模塊void browse(); /瀏覽模塊void quiry(); /查詢模塊void stastic(); /統(tǒng)計模塊void bySname(); /按姓名查詢,子模塊void bySno(); /按學號查詢,子模塊void byCno(); /按班號查詢,子模塊void StuMsg(); /返回全體學生統(tǒng)計信息,子模塊void Female(); /女生統(tǒng)計信息,子模塊
49、void Male(); /男生統(tǒng)計信息,子模塊int FemaleNum(); /返回女生人數(shù),子函數(shù)float FemaleMG(); /返回女生平均年齡,子函數(shù)int MaleNum(); /返回男生人數(shù),子函數(shù)float MaleMG(); /返回男生平均年齡,子函數(shù)int StuNum(); /返回全體學生人數(shù),子函數(shù)float MG(); /返回全體學生的平均年齡,子函數(shù)void main() menu(); getchar();void menu() /菜單int chose; int right; do system(cls); /清屏 printf(ntttt學生證管理系統(tǒng)n
50、); printf(); printf( 菜單:t1-添加t2-修改t3-瀏覽全部t4-查詢t5-統(tǒng)計t6-刪除t7-退出n); printf(); printf(請輸入數(shù)字選擇:); scanf(%d,&chose); if(chose7) printf(輸入錯誤,請重新輸入!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() /添加學生信息,一次添加一條記錄 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請按照提示輸入
52、學生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯誤,請輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.Sex,sex); do printf(n學號(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯誤,學號長度應(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之間,請重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfo0.Age=age; do printf(n班號(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯誤,班號長度應(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請按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ù)的大小,請先修改N的值n); menu(); printf(n請按照提示輸入學生信息:nn); printf(姓名:); scanf(
56、%s,&StuInfonum.Sname); do printf(n性別(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(輸入錯誤,請輸入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.Sex,sex); do printf(n學號(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(輸入錯誤,學號長度應(yīng)為11位數(shù)!n);right=1;getchar();
57、 else right=0; for(i=0;inum;i+) if(strcmp(sno,StuInfoi.Sno)=0) printf(該學號已經(jī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之間,請重新輸入年齡!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.Age=age; do pr
58、intf(n班號(6位):); scanf(%s,cno); if(strlen(cno)!=6) printf(輸入錯誤,班號長度應(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請按enter鍵返回主菜單!n); getchar(); getchar(); menu();void 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.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請輸入學號選擇要修改的記錄:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市污水管網(wǎng)建設(shè)項目數(shù)字化方案(范文參考)
- 2025年垃圾收轉(zhuǎn)裝備項目發(fā)展計劃
- 市政污水管網(wǎng)改造項目資金申請報告(范文模板)
- 健康飲食產(chǎn)業(yè)園項目建議書
- 香港八井加油站維護修復計劃
- 物業(yè)元旦宣傳的標語(320句)
- 2025年跑道磨擦系數(shù)測試設(shè)備合作協(xié)議書
- 西藏拉薩中學2024-2025學年高二英語下學期第七次月考試題含解析
- 物流配送服務(wù)操作指南
- 衛(wèi)生應(yīng)急工作總結(jié)
- 《2025 急性心梗診療指南》解讀課件
- 醫(yī)院殯葬領(lǐng)域腐敗亂象專項整治工作方案
- 鳥牌呼吸機操作技術(shù)
- GB/T 7573-2025紡織品水萃取液pH值的測定
- 腎內(nèi)科護士長述職報告
- 新聞發(fā)言人培訓
- 實驗室安全操作培訓內(nèi)容
- 第五講-鑄牢中華民族共同體意識-2024年形勢與政策(講稿)
- 2025年中國城市集中供熱行業(yè)市場全景分析及投資前景展望報告
- 2025年度電商直播平臺主播直播內(nèi)容版權(quán)購買合同3篇
- 壓型機安全操作規(guī)程范文(2篇)
評論
0/150
提交評論