學生信息管理系統(tǒng)79575_第1頁
學生信息管理系統(tǒng)79575_第2頁
學生信息管理系統(tǒng)79575_第3頁
學生信息管理系統(tǒng)79575_第4頁
學生信息管理系統(tǒng)79575_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一.設計目的:課程設計內(nèi)容:1.問題描述學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail 等。設計以學生信息管理系統(tǒng),使之能提供以下功能:(1).系統(tǒng)以菜單方式工作;(2).學生信息錄入功能(學生信息用文件保存)-輸入;(3).學生信息瀏覽功能-輸出;(4).查詢,排序功能-算法:a.按學號查詢;b.按姓名查詢。(5).學生信息的刪除與修改。2.功能要求A界面比較美觀;B有一定的容錯能力。3.函數(shù)功能描述輸入部分通過鍵盤輸入多位學生的學生信息。學生的信息包含有:學生姓名、性別、學號、出生年月、年齡等。此次做的學生管理系統(tǒng)是利用鏈表而完成的程序,故第一部分想要實現(xiàn)建立鏈表

2、、輸出部分輸出當前已存儲的學生信息、更新部分刪除 刪除用戶指定的學生信息 ,這部分的功能是輸入學生的學號,找到其在鏈表中存儲的結(jié)點處,并將這整個結(jié)點刪除,再把該結(jié)點的前驅(qū)結(jié)點和后驅(qū)節(jié)點連接,來實現(xiàn)這個學生信息的刪除.修改 修改用戶指定的學生信息 ,這部分是利用輸入學生的學號,來找到存儲該學生信息的結(jié)點,通過該結(jié)點的鏈域來修改其中的值域,來實現(xiàn)對學生信息的修改.、查詢部分按名字查詢 輸出用戶查詢的學生信息,這部分是利用輸入學生的姓名,來找到存儲該學生信息的結(jié)點,輸出該結(jié)點的值域中的內(nèi)容,來實現(xiàn)對學生信息的查詢功能.按學號查詢 輸出用戶查詢的學生信息,同上,只是查詢條件為學號 .4.要求與限制條件

3、 .各模塊間通過菜單切換和調(diào)用 .主函數(shù)通過調(diào)用菜單函數(shù)實現(xiàn)對各功能模塊的調(diào)用,各功能模塊間根據(jù)需要可相互調(diào)用。.程序能夠保證各模塊功能的獨立和數(shù)據(jù)共享。不使用全局變量則能保證函數(shù)之間的獨立性,利用形參與實參之間的數(shù)值傳遞來實現(xiàn)數(shù)據(jù)共享。二.總體設計:錄入數(shù)據(jù)break選擇2輸出界面選擇操作選擇9讀取文件執(zhí)行freeall()退出系統(tǒng)選擇1幫助說明Break結(jié)束選擇3增加數(shù)據(jù)Break選擇4選擇5修改數(shù)據(jù)增加數(shù)據(jù)BreakBreak選擇6刪除數(shù)據(jù)Break選擇7選擇8顯示數(shù)據(jù)保存數(shù)據(jù)BreakBreak輸出:無效選項Break結(jié)束主界面選擇錄入學生信息輸入學生信息正確 錯誤 正確 不錄入學生信

4、息錄入學生信息結(jié)束查找利用函數(shù)找到相關(guān)結(jié)點是否存在該學生信息輸出該結(jié)點的值域的內(nèi)容查詢完畢該學生不存在修改調(diào)用函數(shù)查找到相關(guān)結(jié)點地址修改相關(guān)結(jié)點的值域是否存在該學生信息修改完畢三.詳細設計:輸入模塊void insert() /*插入函數(shù)*/ int i=n,j,flag;printf("請輸入待增加的學生數(shù):n");scanf("%d",&m);do flag=1;while(flag)flag=0;printf("請輸入第 %d 個學生的學號:n",i+1);scanf("%s",stui.code);

5、for(j=0;j<i;j+)if(strcmp(stui.code,stuj.code)=0)printf("已有該學號,請檢查后重新錄入!n");flag=1;break; /*如有重復立即退出該層循環(huán),提高判斷速度*/printf("請輸入第 %d 個學生的姓名:n",i+1);scanf("%s",);printf("請輸入第 %d 個學生的年齡:n",i+1);scanf("%d",&stui.age);printf("請輸入第 %d 個學生的

6、性別:n",i+1);scanf("%s",stui.sex);printf("請輸入第 %d 個學生的出生年月:(格式:年.月)n",i+1);scanf("%s",stui.time);printf("請輸入第 %d 個學生的地址:n",i+1);scanf("%s",stui.add);printf("請輸入第 %d 個學生的電話:n",i+1);scanf("%s",stui.tel);printf("請輸入第 %d 個學生的E

7、-mail:n",i+1);scanf("%s",stui.mail);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("錄入完畢!nn");sort(); 查找模塊void seek() /*查找*/int i,item,flag;char s121; /* 以姓名和學號最長長度+1為準 */printf("-n");printf("-1.按學號查詢-n");printf("-2.按姓名查詢-n");printf("-3.退出本菜

8、單-n");printf("-n");while(1)printf("請選擇子菜單編號:");scanf("%d",&item);flag=0;switch(item)case 1:printf("請輸入要查詢的學生的學號:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0)flag=1;printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mailn");prin

9、tf("-n");printf("%6s %7s %6d %5s %9s %8s %10s %14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("該學號不存在!n"); break;case 2:printf("請輸入要查詢的學生的姓名:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(

10、,s1)=0)flag=1;printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mailn");printf("-n");printf("%6s %7s %6d %5s %9s %8s %10s %14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("該姓名不存在!n"); break;case 3:return;default:printf(&q

11、uot;請在1-3之間選擇n");修改模塊void modify() /*修改信息*/int i,item,num;char sex13,s1LEN+1,s2LEN+1; /* 以姓名和學號最長長度+1為準 */printf("請輸入要要修改的學生的學號:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) /*比較字符串是否相等*/num=i;printf("-n");printf("1.修改姓名n");printf("

12、2.修改年齡n");printf("3.修改性別n");printf("4.修改出生年月n");printf("5.修改地址n");printf("6.修改電話號碼n");printf("7.修改E-mail地址n");printf("8.退出本菜單n");printf("-n");while(1)printf("請選擇子菜單編號:");scanf("%d",&item);switch(item)c

13、ase 1:printf("請輸入新的姓名:n");scanf("%s",s2);strcpy(,s2); break;case 2:printf("請輸入新的年齡:n");scanf("%d",&stunum.age);break;case 3:printf("請輸入新的性別:n");scanf("%s",sex1);strcpy(stunum.sex,sex1); break;case 4:printf("請輸入新的出生年月:n&q

14、uot;);scanf("%s",s2);strcpy(stunum.time,s2); break;case 5:printf("請輸入新的地址:n");scanf("%s",s2);strcpy(stunum.add,s2); break;case 6:printf("請輸入新的電話號碼:n");scanf("%s",s2);strcpy(stunum.tel,s2); break;case 7:printf("請輸入新的E-mail地址:n");scanf("

15、%s",s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf("請在1-8之間選擇n");四.調(diào)試:A先編譯程序 B再連接程序 生成目標 C運行程序1調(diào)試中的主要問題調(diào)試中主要出現(xiàn)的問題:經(jīng)常遇到程序執(zhí)行到某部分就不運行,而編譯和鏈接都成功,說明程序設計上有些問題,語法等并未出錯,這時就要去再行考慮設計的程序哪部分考慮不周全。因為這次使用鏈表來設計程序,就牽扯到形參和實參的問題。曾經(jīng)因為考慮不周全,在自定義函數(shù)前的基類出錯,導致相關(guān)的值未改變,這里就要考慮好形參和實參的問題。剛開始沒有那個初始

16、化函數(shù),程序運行后沒有輸入任何數(shù)據(jù)就試得去執(zhí)行顯示功能,結(jié)果顯示的是一些亂碼!加入初始化函數(shù)后,這種現(xiàn)象也隨之消失。在沒有輸入任何信息的情況下,不能執(zhí)行查詢、修改、刪除、統(tǒng)計、排序功能 。 有時候,忘記定義就直接調(diào)用,使得出錯。我這時候才真正體會到了一致性的重要。檢查程序很多遍但卻始終不知道輸入的數(shù)據(jù)有錯,很令人頭疼。2程序的不足和改進之處因為用鏈表來設計一個程序,較復雜,最后沒來得及,設計相關(guān)的文件存儲來實現(xiàn)將數(shù)據(jù)保存,以致每次運行程序都要重新輸入新的數(shù)據(jù)改進之處:可以再考慮編寫一個函數(shù),這個函數(shù)的功能是將數(shù)據(jù)寫入文件中并保存。五.測試結(jié)果:程序運行:主界面:輸入信息顯示查詢修改刪除六.結(jié)束

17、語:回想學習C語言 的過程中,既有快樂又有煩惱。從領(lǐng)到書的那一刻,我就很郁悶,C 語言到底事學什么的,有什么用。剛開始上課時,還在迷茫這門課程是用來做什么的。不過,這些感受都是在對這門課程不了解的情況下產(chǎn)生的。后來慢慢的接觸多了,聽老師講的多了,了解多了,漸漸的產(chǎn)生了興趣。尤其是學到語句和函數(shù)時,上機操作程序,經(jīng)過編譯,調(diào)試和運行后,出現(xiàn)界面,當時覺得很好奇,想真正的學好這門課程。通過一個學期的學習,我掌握了基本知識。期末,被通知要進行課程設計。當時有點懵,感覺學的東西很少,很零散,不知該怎么練到一起,就要課程設計,是不是太難為我們了。通過兩周的自學,第二周結(jié)束的時候,我感覺自己收獲挺大的,從

18、一開始的迷茫,不知道從何下手到把程序中的幾個模塊編寫出來,心里挺開心的。但是,我們又不得不再次陷入困境。在整個程序的編寫過程中。最難的就是修改和刪除這兩個模塊,這也是我們要解決的重點問題。開始編寫修改和刪除時,很頭疼,去向其他人尋求幫助,在別人的幫助和提示下,我編完了修改程序,但編譯時老出錯,修改后的內(nèi)容將文本內(nèi)的信息全部覆蓋了。困難之時,我們組的其他人,幫助了我,完成了修改和刪除。這樣的話,整個程序基本上全部完成了,就剩下完善工作了。我們組寫了兩個程序,最后,兩個程序相互組合,互補,大功告成雖然設計時完成了,但是我覺得其中還是由一些不足之處:1. 警告句。程序中缺少一些警告句,例如:“是否真

19、的刪除(y/n)?”。2. 重名的情況。由于考慮的不周全,沒有設計遇到重名的情況該怎么處理。整個程序完成了,還有很多不完善的地方,希望自己以后辦事的時候要認真,仔細,考慮周全。短短的幾周課程設計結(jié)束了,但是這段時間里,我又學到了更多C 知識,如:對象數(shù)組,string類,文件流等,同時我也被提醒以后辦事的時候要認真,仔細,考慮周全。,也看到了團隊精神和互幫互助的重要性。這一點會讓我終生受益。通過這次的課程設計,我覺得自己肚子里的墨水多了,收獲也挺大的,這幾周過的挺充實! 七.源程序清單:#include<stdio.h> /*I/O函數(shù)*/#include<stdlib.h&

20、gt; /*其它說明*/#include<string.h> /*字符串函數(shù)*/#define BUFLEN 100 /* 緩沖區(qū)最大字符數(shù) */#define LEN 15 /* 學號和姓名最大字符數(shù),實際請更改 */#define N 100 /* 最大學生人數(shù),實際請更改*/struct record /*結(jié)構(gòu)體*/char codeLEN+1; /* 學號 */char nameLEN+1; /* 姓名 */int age; /* 年齡 */char sex3; /* 性別 */char timeLEN+1; /* 出生年月 */char add30; /* 家庭地址 */

21、char telLEN+1; /* 電話號碼 */char mail30; /* 電子郵件地址 */stuN;int k=1,n,m; /* 定義全局變量 */ void readfile();/* 聲明函數(shù) */void seek();void modify();void insert();void del();void display();void save();void menu(); int main() while(k)menu();system("pause");return 0; void help() /* 幫助*/ printf("n1.歡迎使用

22、系統(tǒng)幫助!n");printf("n2.進入系統(tǒng)后,先刷新學生信息,再查詢;n");printf("n3.按照菜單提示鍵入數(shù)字代號;n");printf("n4.增加學生信息后,切記保存按8;n");printf("n5.謝謝您的使用!n"); void readfile()/* 建立信息 */char *p="student.txt"FILE *fp;int i=0;if (fp=fopen("student.txt","r")=NULL) p

23、rintf("Open file %s error! Strike any key to exit!",p);system("pause");exit(0);while(fscanf(fp,"%s %s%d%s %s %s %s %s",stui.code,,&stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;printf("錄入完畢!n"); void seek() /*查找*

24、/int i,item,flag;char s121; /* 以姓名和學號最長長度+1為準 */printf("-n");printf("-1.按學號查詢-n");printf("-2.按姓名查詢-n");printf("-3.退出本菜單-n");printf("-n");while(1)printf("請選擇子菜單編號:");scanf("%d",&item);flag=0;switch(item)case 1:printf("請輸入要

25、查詢的學生的學號:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0)flag=1;printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mailn");printf("-n");printf("%6s %7s %6d %5s %9s %8s %10s %14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mai

26、l);if(flag=0)printf("該學號不存在!n"); break;case 2:printf("請輸入要查詢的學生的姓名:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(,s1)=0)flag=1;printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mailn");printf("-n");printf("%6s %7s %6d %5s %9s %8s %10s %14sn",s

27、tui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("該姓名不存在!n"); break;case 3:return;default:printf("請在1-3之間選擇n"); void modify() /*修改信息*/int i,item,num;char sex13,s1LEN+1,s2LEN+1; /* 以姓名和學號最長長度+1為準 */printf("請輸入要要修改的學生的學號:n");sca

28、nf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) /*比較字符串是否相等*/num=i;printf("-n");printf("1.修改姓名n");printf("2.修改年齡n");printf("3.修改性別n");printf("4.修改出生年月n");printf("5.修改地址n");printf("6.修改電話號碼n");printf("7.修改E-

29、mail地址n");printf("8.退出本菜單n");printf("-n");while(1)printf("請選擇子菜單編號:");scanf("%d",&item);switch(item)case 1:printf("請輸入新的姓名:n");scanf("%s",s2);strcpy(,s2); break;case 2:printf("請輸入新的年齡:n");scanf("%d",&

30、amp;stunum.age);break;case 3:printf("請輸入新的性別:n");scanf("%s",sex1);strcpy(stunum.sex,sex1); break;case 4:printf("請輸入新的出生年月:n");scanf("%s",s2);strcpy(stunum.time,s2); break;case 5:printf("請輸入新的地址:n");scanf("%s",s2);strcpy(stunum.add,s2); brea

31、k;case 6:printf("請輸入新的電話號碼:n");scanf("%s",s2);strcpy(stunum.tel,s2); break;case 7:printf("請輸入新的E-mail地址:n");scanf("%s",s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf("請在1-8之間選擇n"); void sort()/*按學號排序*/int i,j,*p,*q,s; char temp10;for(

32、i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(stuj-1.code,stuj.code)>0)strcpy(temp,stuj-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,);strcpy(,);strcpy(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,te

33、mp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(stuj.time,temp);strcpy(temp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mai

34、l,temp); p=&stuj-1.age; q=&stuj.age; s=*q; *q=*p; *p=s; void insert() /*插入函數(shù)*/ int i=n,j,flag;printf("請輸入待增加的學生數(shù):n");scanf("%d",&m);do flag=1;while(flag)flag=0;printf("請輸入第 %d 個學生的學號:n",i+1);scanf("%s",stui.code);for(j=0;j<i;j+)if(strcmp(stui.co

35、de,stuj.code)=0)printf("已有該學號,請檢查后重新錄入!n");flag=1;break; /*如有重復立即退出該層循環(huán),提高判斷速度*/printf("請輸入第 %d 個學生的姓名:n",i+1);scanf("%s",);printf("請輸入第 %d 個學生的年齡:n",i+1);scanf("%d",&stui.age);printf("請輸入第 %d 個學生的性別:n",i+1);scanf("%s"

36、;,stui.sex);printf("請輸入第 %d 個學生的出生年月:(格式:年.月)n",i+1);scanf("%s",stui.time);printf("請輸入第 %d 個學生的地址:n",i+1);scanf("%s",stui.add);printf("請輸入第 %d 個學生的電話:n",i+1);scanf("%s",stui.tel);printf("請輸入第 %d 個學生的E-mail:n",i+1);scanf("%s&q

37、uot;,stui.mail);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("錄入完畢!nn");sort(); void del() /* 刪除信息 */int i,j,flag=0;char s1LEN+1;printf("請輸入要刪除學生的學號:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) flag=1;for(j=i;j<n-1;j+)stuj=stuj+1;if(flag=0)printf("該學號不存在!n");if(flag=1)printf("刪除成功,顯示結(jié)果請選擇菜單6n");n-; void display() /* 顯示信息 */ int i;printf("所有學生的信息為:n");printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mailn");printf("-n");for(i=0;i<n;i+) printf("%6s %7s %5d %5s %9s %8s %10s %14sn",stui.code

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論