《學(xué)生管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《學(xué)生管理系統(tǒng)(11頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、#include#include#include#defineN50#defineOLDFILEscore.dat#defineNUMFILEstd.dat#defineAVEFILEsort.dat#defineNEXTFILEnext.dattypedef struct int number;char name20;int score5;float average;stu;int readfile(char *file, stu *record);void writefile(char *file, stu *record,int stunum);void mycreate();void
2、display(char *file);void stamenu();void numsort();void stagrade();void managemenu();void makeup_note();void leave_note();void new_list();void avesort();void main() char choose = 0;do printf(請選擇你需要的服務(wù) n); printf(1. 創(chuàng)建學(xué)生記錄n); printf(2. 查詢菜單n); printf(3. 管理菜單n); printf(4. 文盲慎入n); printf(0. 退出系統(tǒng)n); scan
3、f(%c, &choose); switch(choose) case 1:mycreate();break;case 2:stamenu();break;case 3:managemenu();break;case 4:printf(ntt請自己實(shí)現(xiàn)創(chuàng)新功能!);getchar();break;case 0:exit(0);default: printf(ntt%c為非法選項(xiàng)!n,choose);break; while(1);int readfile(char *file, stu *record) int i = 0, j = 0; float ave = 0.0; FILE *fp =
4、 NULL;fp = fopen(file, r);if(fp = NULL) printf(Cant open the file!n); return -1;while (feof(fp) = 0) fscanf(fp,%5d%20s, &recordi.number, recordi.name);for(j = 0; j = N) printf(讀取文件出錯, 按任意鍵并關(guān)閉系統(tǒng)!/n);getchar(); exit(0);fclose(fp);return i;void writefile(char * file, stu * record, int stunum)int i = 0,
5、 j = 0; FILE *fp = NULL;for(i = 0; i stunum; i+)fprintf(fp, %5d%20s, recordi.number, recordi.name);for(j = 0; j 5; j+)fprintf(fp, %5d, recordi.scorej); fprintf(fp, 6.1Ifn, recordi.average); fclose(fp);void mycreate() int i = 0, j = 0, f = 0, number = 0; char yes_no = 0; stu recordN = 0; i = readfile
6、(OLDFILE, record); if (i = N) printf(超出存儲范圍, 保存并退出輸入. n); break; printf( 第%d個學(xué)生n,i+1);do f = 0;printf(n 學(xué)號:); scanf(%d, &number);for(j = 0; j = i; j+)if(recordj.number = number) printf(學(xué)號有誤, 請重新輸入. n);f = 1;break; while(f = 1);recordi.number = number;printf(n 姓名:); scanf(%s,recordi.name);printf(n 數(shù)學(xué)
7、成績:); scanf(%d, &recordi.score0);printf(n 英語成績:); scanf(%d, &recordi.score1);printf(n 物理成績:); scanf(%d, &recordi.score2);printf(n 編程成績:); scanf(%d, &recordi.score3);printf(n 馬哲成績:); scanf(%d, &recordi.score4);recordi.average=0;i+;getchar(); do printf(n 要繼續(xù)嗎 (Y/N)?n);scanf(%c, &yes_no); while(yes_no
8、!= Y & yes_no != y & yes_no != N & yes_no!=n); while(yes_no = y| yes_no = Y);writefile(OLDFILE, record, i);printf(以下是對已輸入學(xué)生信息的確認(rèn)!n); display(OLDFILE);getchar(); void display(char * file) stu student_infoN = 0; int stu_num = 0, i = 0, j = 0; stu_num = readfile(file, student_info); if (stu_num N) prin
9、tf(讀取文件出錯, 按任意鍵并關(guān)閉系統(tǒng)!/n);getchar(); exit(0);for (i = 0; i stu_num; i+) printf(學(xué)號: %dn, student_infoi.number); printf(姓名: %sn, student_infoi.name);printf(各門功課的分?jǐn)?shù)如下: %dn);printf( 數(shù)學(xué)成績: %d, student_infoi.score0);printf( 英語成績: %d, student_infoi.score1);printf( 物理成績: %d, student_infoi.score2);printf( 編程成
10、績: %d, student_infoi.score3);printf( 馬哲成績: %d, student_infoi.score4);printf(平均分: %d, student_infoi.average);printf(確認(rèn)完按任意鍵返回! n);getchar(); void stamenu()char choose=0; do printf(請選擇你需要的選項(xiàng)); printf(1. 按學(xué)號排序); printf(2. 按平均分并排序); printf(3. 統(tǒng)計(jì)分?jǐn)?shù)段); printf(4. 返回上一層); printf(0. 退出系統(tǒng)); switch(choose) cas
11、e 1: numsort(); break; /*按學(xué)號排序*/ case 2: avesort(); break; /*計(jì)算平均分并排序*/ case 3: stagrade(); break; /*統(tǒng)計(jì)分?jǐn)?shù)段*/ case 4: return; case 0: exit(0); default : printf(ntt%c為非法選項(xiàng)!n, choose); break; while(1);/按學(xué)號排列void numsort()stu student_infoN = 0; int stu_num = 0, i = 0, j = 0; int num, min, max; stu temp;
12、 stu_num = readfile(OLDFILE, student_info); if (stu_num N) printf(讀取文件出錯, 按任意鍵并關(guān)閉系統(tǒng)!/n);getchar(); exit(0);max = stu_num; min = 0; for (num = max - min; num 0; num /= 2) for (i = min + num; i = 0 & student_infoj.number temp.number; j -= num) student_infoj + num.average = student_infoj.average;strcpy
13、(student_infoj + num.name, student_infoj.name); student_infoj + num.number = student_infoj.number;strncpy(char *)student_infoj + num.score, (char *)student_infoj.score, sizeof(student_infoj.score);student_infoj + num.average = temp.average;strcpy(student_infoj + num.name, temp.name);student_infoj +
14、num.number = temp.number;strncpy(char *)student_infoj + num.score, (char *)temp.score, sizeof(student_infoj.score); /按平均成績排列void avesort()stu student_infoN = 0; int stu_num = 0, i = 0, j = 0; int num, min, max; stu temp; stu_num = readfile(OLDFILE, student_info); if (stu_num N) printf(讀取文件出錯, 按任意鍵并關(guān)
15、閉系統(tǒng)!/n);getchar(); exit(0);max = stu_num; min = 0; for (num = max - min; num 0; num /= 2) for (i = min + num; i = 0 & student_infoj.average temp.average; j -= num) student_infoj + num.average = student_infoj.average;strcpy(student_infoj + num.name, student_infoj.name); student_infoj + num.number = s
16、tudent_infoj.number;strncpy(char *)student_infoj + num.score, (char *)student_infoj.score, sizeof(student_infoj.score);student_infoj + num.average = temp.average;strcpy(student_infoj + num.name, temp.name);student_infoj + num.number = temp.number;strncpy(char *)student_infoj + num.score, (char *)tem
17、p.score, sizeof(student_infoj.score);void stagrade() stu record N = 0; int i = 0, j, n = 0, count55 = 0;n = readfile(AVEFILE,record);for(i = 0; i n; i+) /*統(tǒng)計(jì)各學(xué)科各分?jǐn)?shù)段人數(shù),行表示科目,列表示分?jǐn)?shù)段*/ for(j=0;j=90) countj0+; else if(recordi.scorej=80 & recordi.scorej=70 & recordi.scorej=60 & recordi.scorej70) countj3+
18、; else countj4+;printf(全班數(shù)學(xué)成績?nèi)缦? n);for (i = 0; i 4; i+) printf(%d 分以上的有 %d 人 n, 100 - 10 * i, count0i); printf(不及格 %d 人 n, count0i); printf(全班英語成績?nèi)缦? n);for (i = 0; i 4; i+) printf(%d 分以上的有 %d 人 n, 100 - 10 * i, count1i); printf(不及格 %d 人 n, count1i); printf(全班物理成績?nèi)缦? n);for (i = 0; i 4; i+) printf(
19、%d 分以上的有 %d 人 n, 100 - 10 * i, count2i); printf(不及格 %d 人 n, count2i); printf(全班編程成績?nèi)缦? n);for (i = 0; i 4; i+) printf(%d 分以上的有 %d 人 n, 100 - 10 * i, count3i); printf(不及格 %d 人 n, count3i); printf(全班馬哲成績?nèi)缦? n);for (i = 0; i 4; i+) printf(%d 分以上的有 %d 人 n, 100 - 10 * i, count4i); printf(不及格 %d 人 n, coun
20、t4i); void managemenu() char choose=0;do printf(請選擇從菜單中選擇你需要的選項(xiàng)); printf(1. 生成并打印補(bǔ)考通知單);printf(2. 生成并打印退學(xué)通知單);printf(3. 生成并打印新名冊);printf(4. 返回上一層);scanf(%c,&choose);switch(choose) case 1: makeup_note();break; /*生成并打印補(bǔ)考通知單*/case 2: leave_note();break; /* 生成并打印退學(xué)通知單*/case 3: new_list();break; /*生成并打印新
21、名冊*/case 4: return;case 0: exit(0); /*返回*/default: printf(ntt%c為非法選項(xiàng)!n, choose); while(1);void makeup_note() stu recordN=0; int i=0,j=0,n=0,t=0,count=0,time5=0,f=0;char site5; char sl6=0;n = readfile(OLDFILE, record);for(i = 0; i 5; i+) switch(i) case 0: strcpy(sl,數(shù)學(xué)); break; case 1: strcpy(sl,英語);
22、break; case 2: strcpy(sl,物理); break; case 3: strcpy(sl,編程); break; case 4: strcpy(sl,馬哲); break;printf(nn 請輸入科目%s補(bǔ)考時間(偶數(shù)的整點(diǎn)時間: 8 - 18點(diǎn)):, sl);do f=0;scanf(%d,&t);if(t%2!=0) printf(請輸入偶數(shù)整點(diǎn)時間:);f=1;continue;if(t18) printf(請輸入8-18整點(diǎn)時間:);f=1;continue;for(j=0;ji;j+)if(t=timej) printf(與其他時間沖突!請重新輸入:);f=i;
23、break; while(f = 1);timei = t;printf(輸入%s的補(bǔ)考地點(diǎn),4位數(shù)字的教室號:如1001, sl);scanf(%s, site);site4 = 0; printf(%s補(bǔ)考安排信息如下, 按任意鍵確認(rèn)! n, sl); printf(科目: %s, 時間: %d, 教室: %s! n, sl, timei, site); getchar(); void leave_note() void new_list()stu recordN=0;int i=0,j=0,n=0,count=0;n = readfile(OLDFILE, record);for(i=0;in;i+) count=0; for(j=0;j5;j+)if(recordi.scorej3) for(j=i;jn-1;j+) recordj=recordj+1;i-; n-;writefile(NEXTFILE,record,n);display(NEXTFILE);