C語言課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)_第1頁
C語言課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)_第2頁
C語言課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)_第3頁
C語言課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)_第4頁
C語言課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語言課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告一、設(shè)計(jì)目的:學(xué)生信息包括:學(xué)號(hào)、姓名、性別、系名、班級(jí)名、出生年月、住址、電話號(hào)碼。設(shè)計(jì)一學(xué)生信息管理系統(tǒng),使之能提供以下功能:1.系統(tǒng)以菜單方式工作;2.學(xué)生信息錄入功能(輸入);3.學(xué)生信息瀏覽功能(輸出);4.學(xué)生信息檢索功能;5.學(xué)生信息的刪除與修改功能;二、總體設(shè)計(jì)思路:1程序設(shè)計(jì)組成框圖主菜單添加新的學(xué)生信息瀏覽所有學(xué)生信息檢索學(xué)生信息按學(xué)號(hào)檢索按姓名檢索修改此同學(xué)信息刪除此同學(xué)信息檢索信息庫添加新的學(xué)生信息刪除所有記錄保存并退出2N-S流程圖case 4case 3Case 2case 1結(jié)束調(diào)用add()添加新的學(xué)生信息fileopen()Menu()輸

2、入選擇x調(diào)用scan()瀏覽所有學(xué)生信息退出系統(tǒng)調(diào)用res()檢索學(xué)生信息x開始filesave()三、詳細(xì)設(shè)計(jì)說明:1頭文件#include #include#include#include2數(shù)入口說明main();主函數(shù);void menu();主菜單界面;void add();添加新的學(xué)生信息;void print(int i);打印學(xué)生信息;void scan();查找學(xué)生信息;void res();檢索學(xué)生信息界面;void res_name();按姓名檢索;void res_num();按學(xué)號(hào)檢索;void del(int i);刪除學(xué)生信息;void modify(int i);

3、修改學(xué)生信息;void fileopen();打開文件;void filesave();保存文件;2調(diào)用關(guān)系add()menu() add()fileopen()res()add()menu()scan()menu()main()modify(int i)res_name()res()del(int i)menu()res_num()filesave()4.調(diào)試與測(cè)試: 編譯工具1.C/C+程序設(shè)計(jì)學(xué)習(xí)與實(shí)驗(yàn)系統(tǒng)2.Tc3.VC+6.0均通過調(diào)試! 主菜單 添加新的學(xué)生信息 瀏覽所有學(xué)生信息 檢索信息庫 繼續(xù)查找下一條 修改學(xué)生信息 刪除信息庫所有記錄五、調(diào)試中所遇到的問題及解決方法1問題:程

4、序退出后,再次打開,上次輸入的數(shù)據(jù)無法保存。 解決:調(diào)用fileopen()與filesave()保存文件數(shù)據(jù),方便第二次打開程序時(shí)仍能調(diào)用上次輸入的數(shù)據(jù)。2問題:跳出的界面與選擇分支中的對(duì)應(yīng)項(xiàng)不符合。 解決:改getchar()為getch(),頭文件中加”conio.h”.因?yàn)間etchar()從輸入輸出流中一次只能讀取一個(gè)字符,而且需要以回車來確認(rèn)輸入。本文件中多次用到getchar(),鍵盤緩沖區(qū)的n會(huì)被下次調(diào)用getchar()時(shí)接收。而getch()則不會(huì),從鍵盤上讀入一個(gè)數(shù)據(jù),不給回顯,不需要回車確認(rèn),按下鍵就實(shí)現(xiàn)了函數(shù)。 3問題:誤輸入X,導(dǎo)致退出。 解決:加標(biāo)志變量flag=

5、1,用while(flag)循環(huán)switch語句,當(dāng)正確輸入時(shí),flag=1,跳出循環(huán)。4問題:檢索時(shí)只能查到第一個(gè)學(xué)生信息。 解決:定義數(shù)組log(100)記錄符合的結(jié)構(gòu)體數(shù)組。循環(huán)打印。5問題:不能刷新界面。 解決:調(diào)用system(“cls”)清屏函數(shù)。6問題:刪除某項(xiàng)信息,返回主函數(shù)時(shí)不能暫停。 解決:調(diào)用system(“PAUSE”)暫停函數(shù)。六、程序源碼#include stdio.h#include string.h#include stdlib.h#include conio.hvoid menu(); /聲明所有函數(shù);void add();void print(int i);

6、void scan();void res();void res_name();void res_num();void del(int i);void modify(int i);void fileopen();void filesave(); /定義全局變量x,減少代碼量;int n=0; /定義全局變量n,代表信息條數(shù);struct student /定義結(jié)構(gòu)體數(shù)組stu100;char num15;char name30;char sex2;char xi30;char ban10;char birth10;char address30;char tel20;stu100;void mai

7、n() /主函數(shù);fileopen(); menu(); /調(diào)用menu()函數(shù),打開主界面;filesave();void fileopen() /打開data文件;FILE *fp;int i;if(fp=fopen(data,r+)=NULL) /若無data文件,則新建;fp=fopen(data,w+);for(i=0;i100;i+) /讀取數(shù)據(jù);fread(&stui,sizeof(struct student),1,fp);fread(&n,4,1,fp);fclose(fp);void menu() /主菜單; int flag=1; /定義標(biāo)志標(biāo)量flag;system(c

8、ls); /清屏函數(shù); printf(n); /主界面; printf( 歡迎登錄學(xué)生信息管理系統(tǒng) n); printf( n); printf( 1.添加新的學(xué)生信息 n); printf( 2.瀏覽所有學(xué)生信息 n); printf( 3.檢索學(xué)生信息 n); printf( 4.保存并退出系統(tǒng) n); printf( n); printf( by rlkn); printf(n); while(flag) /防止用戶誤選導(dǎo)致退出; switch(getch() /用switch分支選擇語句;getch()獲取用戶鍵入值;case 1:flag=0;add();break;/當(dāng)用戶選擇1時(shí)

9、,調(diào)用add()函數(shù),添加新的學(xué)生信息;case 2:flag=0;scan();break;/當(dāng)用戶選擇2時(shí),調(diào)用scan()函數(shù),瀏覽所有學(xué)生信息; case 3:flag=0;res();break;/當(dāng)用戶選擇3時(shí),調(diào)用res()函數(shù),檢索學(xué)生信息;case 4:flag=0;printf(保存成功!);break; /當(dāng)用戶選擇4時(shí),調(diào)用flag()函數(shù),退出系統(tǒng); default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); /其它輸入,提示錯(cuò)誤; void add() /信息添加函數(shù);int flag=1;system(cls); /清屏函數(shù);printf(%2dn,n+1); /逐一

10、輸入各項(xiàng)數(shù)據(jù);printf( *添加新的學(xué)生信息*n);printf( 學(xué)號(hào):);scanf(%s,&stun.num);printf( 姓名:);scanf(%s,&);printf( 性別:);scanf(%s,&stun.sex);printf( 系名:);scanf(%s,&stun.xi);printf( 班級(jí)名:);scanf(%s,&stun.ban); printf( 出生年月:); scanf(%s,&stun.birth); printf( 住址:); scanf(%s,&stun.address); printf( 電話號(hào)碼:); scanf(%s,&s

11、tun.tel); printf(n); printf(n添加成功!nn 請(qǐng)選擇 : 1.繼續(xù)添加 2.返回主菜單n); n+; /總信息量增加一項(xiàng); while(flag) switch(getch() case 1:flag=0;add();break; /選擇1,重新調(diào)用add(); case 2:flag=0;menu();break; /選擇2,調(diào)用menu(),返回主菜單; default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); /其它輸入,提示錯(cuò)誤; void print(int i) /學(xué)生信息打印函數(shù); printf(%2dn,i+1); printf( 學(xué)號(hào):%sn,stu

12、i.num); printf( 姓名:%sn,); printf( 性別:%sn,stui.sex); printf( 系名:%sn,stui.xi); printf( 班級(jí)名:%sn,stui.ban); printf( 出生年月:%sn,stui.birth); printf( 住址:%sn,stui.address); printf( 電話號(hào)碼:%sn,stui.tel); printf(n);void scan() /信息瀏覽函數(shù);int i,flag=1;system(cls);if(n=0) /當(dāng)n=0時(shí),信息庫中無記錄; printf(n); printf( 當(dāng)

13、前信息庫記錄為0!n); printf(n); printf( 請(qǐng)選擇 : 1.添加新的學(xué)生信息 2.返回主菜單n); while(flag) switch(getch() case 1:flag=0;add();break;case 2:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); else /當(dāng)n不為0時(shí),打印信息; printf(*目前信息庫里共有%d條記錄.*n,n);for(i=0;in;i+)print(i);printf( 請(qǐng)選擇 : 1.檢索信息庫 2.添加新的學(xué)生信息n);printf( 3.刪除所有記錄4.返回主菜單 n);

14、while(flag)switch(getch()case 1:flag=0;res();break;case 2:flag=0;add();break;case 3: flag=0; printf(n!警告:您將刪除信息庫所有記錄!n); printf( n 請(qǐng)選擇 : 1.確認(rèn)刪除 2.返回n); flag=1; while(flag) switch(getch() case 1:flag=0;n=0;printf(已刪除!n);system(PAUSE);scan();break;case 2:flag=0;scan(); default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); brea

15、k;case 4:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); void modify(int i) /信息修改函數(shù); int flag=1;printf( n); /信息修改界面;printf( 請(qǐng)輸入你想修改的內(nèi)容:n);printf( 1.學(xué)號(hào) 2.姓名 3.性別 4.系名n);printf( 5.班級(jí)名 6.出生年月 7.住址 8.電話號(hào)碼n);printf( n);while(flag) switch(getch() case 1:flag=0;printf(請(qǐng)重新輸入學(xué)號(hào):);scanf(%s,&stui.num);break;ca

16、se 2:flag=0;printf(請(qǐng)重新輸入姓名:);scanf(%s,&);break;case 3:flag=0;printf(請(qǐng)重新輸入性別:);scanf(%s,&stui.sex);break;case 4:flag=0;printf(請(qǐng)重新輸入系名:);scanf(%s,&stui.xi);break;case 5:flag=0;printf(請(qǐng)重新輸入班級(jí)名:);scanf(%s,&stui.ban);break; case 6:flag=0;printf(請(qǐng)重新輸入出生年月:);scanf(%s,&stui.birth);break; case 7:fla

17、g=0;printf(請(qǐng)重新輸入住址:);scanf(%s,&stui.address);break; case 8:flag=0;printf(請(qǐng)重新輸入電話號(hào)碼:);scanf(%s,&stui.tel);break; default:printf(錯(cuò)誤!請(qǐng)重新輸入.); printf(修改成功!n修改后的學(xué)生信息:n); print(i); system(PAUSE); /暫停函數(shù):按任意鍵繼續(xù).; printf( 請(qǐng)選擇 : 1.繼續(xù)修改此學(xué)生信息 2.查看下一條相關(guān)信息 3.返回主菜單n); flag=1; while(flag) switch(getch() case 1:flag

18、=0;modify(i);break; case 2:flag=0;break; case 3:flag=0;menu(); default:printf(錯(cuò)誤!請(qǐng)重新輸入.n); void del(int i) /信息刪除函數(shù);int a,flag=1;printf(n!警告:您將刪除此條學(xué)生信息!);printf(n 請(qǐng)輸入 : 1.繼續(xù)刪除);printf(n 2.不刪除,返回主菜單n); while(flag) switch(getch()case 1: flag=0; for(a=i;an-1;a+) /拷貝后一個(gè)學(xué)生信息到前一個(gè)人上。 strcpy(stua.num,stua+1.

19、num); strcpy(,stua+1.name); strcpy(stua.sex,stua+1.sex);strcpy(stua.xi,stua+1.xi);strcpy(stua.ban,stua+1.ban);strcpy(stua.birth,stua+1.birth);strcpy(stua.address,stua+1.address);strcpy(stua.tel,stua+1.tel); n-; printf(刪除成功!n);/總信息量減少一項(xiàng); system(PAUSE); menu(); break; case 2: flag=0; system(P

20、AUSE); /暫停函數(shù):按任意鍵繼續(xù).; menu(); /返回主菜單; break; default:printf(錯(cuò)誤!請(qǐng)重新輸入.n);void res_num() /按學(xué)號(hào)檢索函數(shù);int i,j=0,flag=1,log100;char xh15;system(cls);printf(*n); printf(n請(qǐng)輸入要檢索的學(xué)號(hào):);scanf(%s,&xh);for(i=0;in;i+)if(!strcmp(stui.num,xh) /字符串比較函數(shù);while(j100)logj=i;j+;break; /記錄下相關(guān)的信息; if(!j) /信息庫中沒查找到所需信息;print

21、f( 對(duì)不起,信息庫里沒要你想要查找的信息!n);printf(n*n);printf(n 請(qǐng)選擇 :1.繼續(xù)查找 2.返回主菜單n); while(flag)switch(getch()case 1:flag=0;res();break;case 2:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n);elseprintf(n在信息庫中共找到%d條相關(guān)信息.n,j);for(i=0;ij;i+)flag=1;printf(n第%d條n,i+1);print(logi);printf(n*n);printf(n 請(qǐng)選擇 :1.修改此學(xué)生信息 2.刪除此

22、學(xué)生信息n);printf( 3.繼續(xù)查找下一條 4.返回主菜單n);while(flag)switch(getch()case 1:flag=0;modify(logi);break;case 2:flag=0;del(logi);break;case 3:flag=0;break;case 4:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n);printf(n已到最后一條相關(guān)信息.n);system(PAUSE); /暫停函數(shù):按任意鍵繼續(xù).; menu();void res_name() /按姓名檢索函數(shù);int i,j=0,flag=1,lo

23、g100;char mz20;system(cls);printf(*n); printf(n請(qǐng)輸入要檢索的姓名:);scanf(%s,&mz);for(i=0;in;i+)if(!strcmp(,mz) /字符串比較函數(shù);while(j100)logj=i;j+;break; /記錄下相關(guān)的信息; if(!j) /信息庫中沒查找到所需信息;printf( 對(duì)不起,信息庫里沒要你想要查找的信息!n);printf(n*n);printf(n 請(qǐng)選擇 :1.繼續(xù)查找 2.返回主菜單n); while(flag)switch(getch()case 1:flag=0;res();

24、break;case 2:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n);elseprintf(n在信息庫中共找到%d條相關(guān)信息.n,j);for(i=0;ij;i+)flag=1;printf(n第%d條n,i+1);print(logi);printf(n*n);printf(n 請(qǐng)選擇 :1.修改此學(xué)生信息 2.刪除此學(xué)生信息n);printf( 3.繼續(xù)查找下一條 4.返回主菜單n);while(flag)switch(getch()case 1:flag=0;modify(logi);break;case 2:flag=0;del(logi);break;case 3:flag=0;break;case 4:flag=0;menu();break;default:printf(錯(cuò)誤!請(qǐng)重新輸入.n);printf(n已到最后一條相關(guān)信息.n);system(PAUSE);menu();void res() /檢索函數(shù);int flag=1;system(cls);printf( n); /檢索界面;printf( *檢索模式選擇*n);printf( 1.按學(xué)號(hào)檢索n);printf( 2.按姓名檢索n);print

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論