




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、設計題目:學生信息管理系統班 級:計算機1006姓 名:周言學 號:20101221450完成日期:2011-9-4 目錄 1.課程設計的目的和要求-22.課程設計任務內容-33.詳細設計說明-44.軟件使用說明-65.課程設計心得與體會-66.參考文獻7.附錄:部分程序清單(帶有詳細的注釋)一:課程設計的目的和要求學生信息初始化:創建學生信息文件(包括學號,姓名,學院,班級,高數,英語,c語言成績),然后計算總分和平均分,并將排序后的學生信息存入二進制文件中學生信息操作:(1)增加學生信息(增加后仍按學號排序,并保存)(2)刪除學生信息(輸入要刪除的學號,如果存在則刪除信息;若不存在,則輸出
2、提示信息)(3)修改學生信息(輸入要修改的學號,如果存在,提示要修改的選項并保存;若無則輸出提示信息)3.學生信息查詢:(1)按學號查詢學生信息(輸入學號,輸出學生信息)(2)按姓名查詢學生信息(包括精確查詢和模糊查詢)(3)按學院查詢學生信息(輸入學院名稱,輸出學院學生信息)(4)按班級查詢學生信息(輸入班級,輸出全部學生信息)4按不同條件對學生信息進行查詢:(1) 按總分對學生信息進行排序(由高到低),輸出排序后的信息并存放到一個新的二進制文件中。(2) 按平均分統計各個分數段的學生人數(不及格,60-69,70-79,80-89,90-100)。(3) 分別找出3門課程成績最高的學生,并
3、輸出他們的信息。(4) 分別統計出3門課程的不及格率,并輸出。二:課程設計任務內容:學生成績管理系統主菜單信息查詢信息刪除信息修改信息增加信息統計姓名查詢學號查詢總分統計平均分統計三門課最高分三門課不及格班級查詢信息輸入學院查詢按學號刪除按學號修改信息顯示信息保存三:詳細設計說明:數據結構設計:根據需要,定義了一個結構體類型,即學生類型。包括學生的學號,姓名,學院,班級和三門成績。定義如下:struct student /定義結構體類型int num;/學號char name 12;/姓名char college12;/學院char cla20;/班級int score3;/三門課程成績int
4、 total;/總分float average;/平均分studN;2.main函數的設計:由于學生信息都保存在文件中,因此系統首先調用LoadStuds()函數返回學生人數,并將值返給學生人數,然后登陸學生登陸系統,調用StudentLogin函數實現學生登錄,從而實現功能選擇3.學生信息處理:對學生信息處理主要調用一下函數,/學生信息管理模塊的函數聲明void InputOnestud(int i); /輸入一個學生信息的函數void InputAllStuds(int sn); /輸入全部學生信息的函數void SaveOnestud(int i); /保存一個學生的信息void sor
5、t(struct student x ); /對學生學號排序的函數int LoadStuds(); /從文件載入全部學生信息的函數void SaveAllStuds(int sn); /保存全部學生信息的函數int OriginalStud(void); /學生信息初始化的函數void ModifyStud(int sn); /修改學生信息的函數int AddStud(int sn); /添加學生信息的函數int DelStud(int sn); /刪除學生信息的函數void OutputAllStuds(int sn); /輸出全部學生信息的函數void OutputOnestud(int
6、i); /輸出一個學生信息的函數/學生信息查詢模塊的函數聲明void SearchMenu(int sn); /學生信息查詢函數void SearchSnum(int sn); /按學號查詢函數void SearchSname(int sn); /按姓名查詢函數void SearchScollege(int sn); /按學院查詢函數void SearchScla(int sn); /按班級查詢函數 /學生信息統計模塊的函數聲明void CountMenu(int sn); /學生信息統計函數void CountTotal(struct student x); /學生總分從高到低排序統計函數v
7、oid CountAverage(struct student x,int sn); /按平均分統計各個階段的學生人數的函數void CountTop(struct student x,int sn); /統計三門課程分數最高的學生的信息的函數int Search(struct student x,int n); /查找最高分的函數void CountNopass(struct student x,int sn); /統計三門課程的不及格率的函數四:軟件使用說明:該學生信息管理系統,通過學生用戶進行操作,實現學生信息的初始化,并能計算總分和平均分;對學生信息進行刪除、添加、刪除操作;而且通過調
8、用函數實現對學生信息通過學號、姓名、學院和班級的查詢;并可以對學生信息進行統計:其中包括按從高到低進行排序;統計三門課程的最高分學生的信息;三門課程的不及格率和統計各分數段的人數五:課程設計心得與體會:通過這一星期的編程,發現了很多的問題:其中就有對以前知識的模糊認識,沒有弄清楚結構體的使用。感覺學的東西很少,很零散,不知該怎么總和到一起,就要課程設計,是不是太難為我們了。上午基本上是看課本,畢竟一個暑假都沒有看課本了有些生疏。后來對照課本后面的程序,自己慢慢地學著編譯。先把程序中的幾個模塊編寫出來,覺得還是有很大收獲的。后來通過思考于對照課本,程序基本上算是編完了但一運行,那些錯誤我都不忍卒
9、讀啊!后來在同學們得幫助下,我把錯誤一點點減少,并學到了很多以前我認為自己會的知識。短短的一周課程設計結束了,但是這段時間里,我又學到了更多C 知識,如:數據結構體,函數調用時形參和實參的類型等等,總之這一周收獲很大的。六:參考文獻:C語言課本及學生信息管理系統七:附錄:代碼清單(帶有詳細解釋)/ fdasfas.cpp : Defines the entry point for the console application./#include#include#include#define N 10#define stud_LEN sizeof(stud) /學生類型占用存儲空間的大小str
10、uct student /定義結構體類型int num;char name 12;char college12;char cla20;int score3;int total;float average;studN;/用戶登錄模塊的函數聲明void StudentLogin(int *psn); /學生登錄函數/學生信息管理模塊的函數聲明void InputOnestud(int i); /輸入一個學生信息的函數void InputAllStuds(int sn); /輸入全部學生信息的函數void SaveOnestud(int i); /保存一個學生的信息void sort(struct
11、student x ); /對學生學號排序的函數int LoadStuds(); /從文件載入全部學生信息的函數void SaveAllStuds(int sn); /保存全部學生信息的函數int OriginalStud(void); /學生信息初始化的函數void ModifyStud(int sn); /修改學生信息的函數int AddStud(int sn); /添加學生信息的函數int DelStud(int sn); /刪除學生信息的函數void OutputAllStuds(int sn); /輸出全部學生信息的函數void OutputOnestud(int i); /輸出一個
12、學生信息的函數/學生信息查詢模塊的函數聲明void SearchMenu(int sn); /學生信息查詢函數void SearchSnum(int sn); /按學號查詢函數void SearchSname(int sn); /按姓名查詢函數void SearchScollege(int sn); /按學院查詢函數void SearchScla(int sn); /按班級查詢函數 /學生信息統計模塊的函數聲明void CountMenu(int sn); /學生信息統計函數void CountTotal(struct student x); /學生總分從高到低排序統計函數void Count
13、Average(struct student x,int sn); /按平均分統計各個階段的學生人數的函數void CountTop(struct student x,int sn); /統計三門課程分數最高的學生的信息的函數int Search(struct student x,int n); /查找最高分的函數void CountNopass(struct student x,int sn); /統計三門課程的不及格率的函數void main(void) int sn,select; int *psn; psn=&sn; sn=LoadStuds(); /調用LoadStuds(),返回值
14、為學生人數,將其賦值給snwhile(1) printf(n); printf(t-n); printf(t* 學生信息管理系統 *n); printf(t n); printf(t 1.學生n); printf(t 0.退出系統n); printf(t 請選擇用戶:); scanf(%d,&select); getchar(); switch(select) case 1:StudentLogin(&sn);break; case 0:printf(n謝謝使用!再見n);exit(1); default:printf(n按鍵錯誤,請重新選擇!n); /功能:實現學生登錄,顯示學生用戶菜單,進
15、行功能選擇/參數:psn為主函數中變量sn的地址/返回:無/主要思路:用if進行學號驗證,用switch結構實現菜單功能選擇void StudentLogin(int *psn) int select;while(1)printf(n);printf( 同學,你好!n);printf( -n);printf(1.學生信息初始化 5.學生信息查詢n); printf(2.修改學生信息 6.學生統計n);printf(3.添加學生信息 7.輸出全部學生信息n);printf(4.刪除學生信息n); printf(0.返回主菜單n);printf(n請你選擇需要的服務(0-7):);scanf(%d
16、,&select);getchar();switch(select)case 1:*psn=OriginalStud();break; case 2:ModifyStud(*psn);break;case 3:*psn=AddStud(*psn);break;case 4:*psn=DelStud(*psn);break; case 5:SearchMenu(*psn);break;case 6:CountMenu(*psn);break;case 7:OutputAllStuds(*psn);break;case 0:return;default:printf(n按鍵錯誤,請重新選擇!n);
17、/功能:實現學生信息的初始化/參數:無/返回:學生人數/主要思路:用for循環多次調用InputOnestud函數實現輸入多個信息,并寫入文件int OriginalStud(void)int i,j,sum,n;char c=y;for(n=0;c=y|c=Y;n+)printf(n輸入學生%d的信息:n,n+1);InputOnestud(n);printf(n繼續輸入請按y;停止請按n:);getchar();c=getchar();for(i=0;iN;i+) /計算每個學生的總成績和平均分sum=0;for(j=0;j3;j+)sum=sum+studi.scorej;studi.t
18、otal=sum;studi.average=(float)(sum/3.0);sort(stud);SaveAllStuds(n);return(n);/功能:輸入一個學生信息/參數:i表示對第i個學生進行輸入操作/返回:無/主要思路:用scanf函數輸入學生的學號,姓名,學院,班級和高數英語c語言成績void InputOnestud(int i)printf(n);int j;printf(輸入學號,姓名,學院,班級,高數,英語,C語言的成績:n);scanf(%d%s%s%s,&studi.num,,studi.college,studi.cla); for(j=0
19、;j3;j+)scanf(%d,&studi.scorej);/功能:按學號進行排序void sort(struct student x ) /對學號進行排序 int i,j; struct student temp; for(i=0;iN-1;i+)for(j=0;jxj+1.num)temp=xi; xi=xi+1; xi+1=temp; /功能:將一個學生信息保存到文件“stud.dat中/參數:i表示將第i個學生信息保存到文件中/返回:無/主要思路:用fseek函數定位,再用fwrite函數寫入第i個學生信息void SaveOnestud(int i) FILE * fs;if(fs
20、=fopen(stud.dat,rb+)=NULL) /以二進制讀寫方式打開文件printf(cant open file stud.datn);exit(1);fseek(fs,stud_LEN * i,0);fwrite(&studi,stud_LEN,1,fs);fclose(fs);/功能:從文件stud.dat中載入全部學生信息/參數:無/返回:返回文件中學生的人數/主要思路:用while循環從文件中讀取學生信息到數組student,同時統計學生人數int LoadStuds(void)FILE * fs;int sn=0;if(fs=fopen(stud.dat,rb+)=NULL
21、) /以二進制讀,寫方式打開文件printf(cant open file stud.datn);return(sn);while(!feof(fs) /文件沒有結束時進行讀數據if(fread(&studsn,stud_LEN,1,fs)sn+; /從文件中每讀一個學生的信息,學生人數加1 fclose(fs);return(sn); /返回學生人數,即sn的值/功能:將全部信息保存到文件“stud.dat中/參數:sn表示學生人數/返回:無/主要思路:用fwrite函數將數組student中的數據一次性寫入文件void SaveAllStuds(int sn) FILE * fs;if(f
22、s=fopen(stud.dat,wb)=NULL) /以二進制寫方式打開文件printf(cant open file stud.datn);exit(1);fwrite(stud,stud_LEN,sn,fs);fclose(fs);/功能:增加學生信息/參數:sn表示增加前的學生數量/返回:增加后的學生數量/主要思路:調用InputOnestud函數輸入要添加的學生信息,再用fwrite將其寫入文件int AddStud(int sn) int s;printf(n輸入增加前的學生數量:n);scanf(%d,&s);char c=y;FILE * fb;if(fb=fopen(stud
23、.dat,ab)=NULL)printf(cant open file stud.datn);exit(1);while(c=y|c=Y)printf(n請輸入新增學生的信息:n);InputOnestud(sn);/調用函數,輸入第sn個學生的信息fwrite(&studsn,stud_LEN,1,fb); /將第sn個學生的信息保存至文件sn+; /學生數量加1sort(stud);SaveAllStuds(sn);printf(n繼續輸入其它新學生的信息嗎?(y/n):);getchar();c=getchar();printf(n按任意鍵繼續!n);getchar();fclose(f
24、b);return(s); /返回增加后學生的數量/功能:刪除學生信息/參數:sn表示刪除前的學生數量/返回:刪除后的學生數量/主要思路:先輸入要刪除學生的學號,找到該學生后進行刪除操作,再調用SaveAllStuds/ 函數將刪除后的圖書信息寫入文件int DelStud(int sn)int s;printf(n輸入刪除前的學生數量:n);scanf(%d,&s);int i,k=-1;int num,c1=y,c2;if(sn=0)printf(n學生信息為空,無法執行操作!n);return(s);while(c1=y|c1=Y)c2=n;printf(n請輸入要刪除的學生的學號:);
25、scanf(%d,&num);for(i=0;is;i+)if(studi.num=num)k=i; /找到要刪除的學生,用k記錄其下標break;if(k0)printf(n輸入的學號有誤,請重新輸入!n);elseprintf(n確定要刪除該學生的全部信息嗎?(y/n):);getchar();c2=getchar();if(c2=y) /c2為y,表示確定進行刪除操作for(i=k;isn;i+)studi=studi+1; /從數組中刪除第k個學生sn-; /學生數量減1printf(n成功刪除!n);else /c2為n,表示不進行刪除操作printf(n取消刪除!n);printf
26、(n繼續刪除其他學生的信息嗎?(y/n):);getchar();c1=getchar();SaveAllStuds(sn); /保存刪除后的全部學生信息printf(n按任意鍵繼續!n);getchar();return(s); /返回刪除后的學生數量/功能:修改學生信息/參數:sn表示學生的數量/返回:無/主要思路:通過switch實現修改學生的任意信息項,并將修改后的信息寫入文件void ModifyStud(int sn) int s;printf(n輸入學生數量:n);scanf(%d,&s);int select,k=-1;int num,c1=y,c2;if(sn=0)print
27、f(n學生信息為空,無法執行操作!n);return;while(c1=y|c1=Y)c2=y;printf(n請輸入要修改的學生的學號:);scanf(%d,&num);for(int i=0;isn;i+)if(studi.num=num)k=i;break;if(k0) /k小于0,表示在數組st中沒找到輸入學號對應的學生printf(n輸入的學號有誤,請重新輸入!n);else /k大于等于0,表示找到該學生,應進行一下操作printf(n顯示此學生信息:n);OutputOnestud(k); /顯示該學生的全部信息while(c2=y|c2=Y)printf(n 學生信息包括以下數
28、據項n);printf(1.學號n);printf(2.姓名n);printf(3.學院n);printf(4.班級n);printf(5.成績n);printf(n請選擇要修改的數據項(1-5):);scanf(%d,&select);getchar();switch(select)case 1:printf(學號:);scanf(%d,&num);break; case 2:printf(姓名:);gets();break;case 3:printf(學院:);gets(studk.college);break;case 4:printf(班級:);gets(studk
29、.cla);break;case 5:printf(成績:%S,studk.score);break;default:printf(n按鍵錯誤,請重新輸入!n);printf(n還要修改此學生的其他信息嗎?(y/n):);getchar();c2=getchar();SaveOnestud(k); /保存修改后的學生信息printf(n還要修改其他學生的信息嗎?(y/n):); getchar();c1=getchar();printf(/n按任意鍵繼續!n);getchar();/功能:輸出一個學生信息/參數:i表示對第i個學生進行輸入操作/返回:無/主要思路:用printf函數輸出一個學生
30、的信息void OutputOnestud(int i) int j;printf(n一個學生的信息:n);printf(輸出學號,姓名,學院,班級,高數,英語,C語言的成績:n);printf(%d%s%s%s,studi.num,,studi.college,studi.cla); for(j=0;j3;j+)printf(%d,studi.scorej);/功能:輸出全部學生信息/參數:sn表示學生的數量/返回:無/主要思路:通過for循環輸出全部學生的信息void OutputAllStuds(int sn) int i,j;printf(n全部學生的詳細信息:n)
31、;printf(n學號 姓名 學院 班級 高數 英語 c語言成績n);for(i=0;isn;i+)printf(n輸出學生%d的信息:,i+1);printf(%d%s%s%s,studi.num,,studi.college,studi.cla);for(j=0;j3;j+)scanf(%d,studi.scorej);printf(n全部學生信息輸出完畢。n);printf(n按任意鍵返回!n);getchar(); /學生信息查詢模塊的函數定義/功能:顯示學生查詢菜單,實現功能選擇/參數:sn表示學生的數量/返回:無/主要思路:采用switch結構實現查詢功能的選擇
32、void SearchMenu(int sn)int select;while(1)printf(n歡迎使用學生信息查詢服務n);printf(t-n);printf(1.按學號查詢n);printf(2.按姓名查詢n);printf(3.按學院查詢n);printf(4.按班級查詢n);printf(0.返回主菜單n);printf(n請選擇查詢方式(0-4):);scanf(%d,&select);getchar();switch(select)case 1:SearchSnum(sn);break;case 2:SearchSname(sn);break;case 3:SearchSco
33、llege(sn);break;case 4:SearchScla(sn);break;case 0:return;default:printf(n按鍵錯誤,請重新選擇!n);/功能:按學號進行學生信息查詢/參數:sn表示學生的數量/返回:無/主要思路:輸入學生學號,用strcmp函數進行查詢void SearchSnum(int sn)int i,j ,k;int num,c=y;while(c=y|c=Y)k=-1;printf(n請輸入學號:);scanf(%d,&num);getchar();for(i=0,j=1;isn;i+) if(studi.num=num)k=i;printf
34、(n學生%d的信息:n,j+);OutputOnestud(k);printf(n還要查詢其他的學生信息嗎?(y/n):);getchar();c=getchar();/功能:按姓名進行查詢/參數:sn表示學生的數量/返回:無/主要思路:輸入姓名,先用strcmp函數進行精確查詢,若無查詢結果,再用strstr函數/ 進行模糊查詢void SearchSname(int sn)int i,j,k;char sname40,c=y;while(c=y|c=Y)k=-1;printf(n請輸入姓名:);gets(sname);for(i=0,j=1;isn;i+)if(strcmp(studi.n
35、ame,sname)=0)/精確查詢k=i;printf(n學生%d的信息:n,j+);OutputOnestud(k);printf(n還要查詢其他的學生信息嗎?(y/n):);getchar();c=getchar();if(k=-1)printf(n模糊查詢結果如下:n);for(i=0,j=1;isn;i+)if(strstr(,sname)!=NULL)/模糊查詢k=i;printf(n學生%d的信息:n,j+);OutputOnestud(k);printf(n還要查詢其他的學生信息嗎?(y/n):);getchar();c=getchar();if(j=1)
36、printf(n抱歉!沒有相應的學生信息!n);c=getchar();getchar();/功能:按學院進行學生信息查詢/參數:sn表示學生的數量/返回:無/主要思路:輸入學生所在學院,用strcmp函數進行查詢void SearchScollege(int sn) int i,j ,k;char college20,c=y;while(c=y|c=Y)k=-1;printf(n請輸入學院:);gets(college);for(i=0,j=1;isn;i+)if(strcmp(studi.college,college)=0)k=i;printf(n學生%d的信息:n,j+);Output
37、Onestud(k);printf(n還要查詢其他的學生信息嗎?(y/n):); getchar();c=getchar();/功能:按班級進行學生信息查詢/參數:sn表示學生的數量/返回:無/主要思路:輸入學生所在班級,用strcmp函數進行查詢void SearchScla(int sn) int i,j ,k;char cla20,c=y;while(c=y|c=Y)k=-1;printf(n請輸入班級:);gets(cla);for(i=0,j=1;isn;i+)if(strcmp(studi.cla,cla)=0)k=i;printf(n學生%d的信息:n,j+);OutputOne
38、stud(k);printf(n還要查詢其他的學生信息嗎?(y/n):); getchar();c=getchar();/學生信息統計模塊的函數定義/功能:顯示學生統計菜單,實現功能選擇/參數:sn表示學生的數量/返回:無/主要思路:采用switch結構實現統計功能的選擇void CountMenu(int sn)int select; while(1)printf(n歡迎使用學生信息統計服務n);printf(t-n);printf(1.按總分排序統計n);printf(2.按平均分統計各個階段n);printf(3.按三門課程最高統計n);printf(4.按三門課程的不及格率統計n);p
39、rintf(0.返回主菜單n);printf(n請選擇查詢方式(0-4):);scanf(%d,&select);getchar();switch(select)case 1:CountTotal(stud);break;case 2:CountAverage(stud,sn);break;case 3:CountTop(stud,sn);break;case 4:CountNopass(stud,sn);break;case 0:return;default:printf(n按鍵錯誤,請重新選擇!n);/功能:按總分進行排序并輸出且保存至新的二進制文件/參數:數組元素/返回:無/主要思路:采用冒泡排序將總分按從高到低排序void CountTotal(struct student
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年零售行業新零售模式下的電商行業供應鏈金融風險控制報告
- 計算機四級數據完整性檢驗試題及答案
- 公共充電基礎設施建設項目選址
- 《計算機網絡基礎》拓展練習答案-03.項目三
- 基于2025年高校創新創業教育課程體系的實踐教學體系構建研究報告
- 2025年即時配送行業配送路徑優化與成本控制創新模式研究與應用報告
- 無敵巨炮理論考試題練習試題及答案
- 2025年社區零售行業數字化運營中的新興技術應用趨勢
- 2025年工業互聯網平臺網絡切片技術在遠程醫療中的應用與實踐報告
- 2025年家庭教育指導服務市場細分領域競爭格局與增長潛力研究報告
- 2024年-2025年電梯檢驗員考試題庫及答案
- 02J915 公用建筑衛生間
- Excel數據透視表實戰演練培訓課件(2024年)
- 2024年福建省高中學業水平考試數學試卷真題(含答案詳解)
- 混凝土攪拌站安全操作技術交底
- 獸用生物制品保藏、運輸管理和相應的應急預案制度
- 檢驗科菌(毒)種及其樣品安全管理制度
- 水域救援課件教學課件
- (初級)航空油料特設維修員(五級)理論考試題庫-上(單選題)
- 2024年江蘇省宿遷市中考英語試題(含答案逐題解析)
- 尾礦庫安全規程
評論
0/150
提交評論