當前位置:編程學習大全網 - 源碼下載 - c語言課程設計(教務信息管理系統)

c語言課程設計(教務信息管理系統)

/* - 1 - */

# include & ltbios.h & gt

# include & ltdos.h & gt/*頭文件*/

# include & ltconio.h & gt

# include & ltctype.h & gt

# include & ltprocess.h & gt

# include & ltstdlib.h & gt

# include & ltstdio.h & gt

# include & ltstring.h & gt

#定義NULL 0

#define ESC 0x001b /* Exit */

# define f1x3b00/*查看幫助信息並調用HelpMassage()函數*/

# define20x3c00/*輸入學生成績*/

# define30x3d00/*按學號搜索*/

# define40x3E00/*按姓名搜索*/

#define F5 0x3f00 /*列出所有學生的成績*/

#定義F6 0x4000 /*統計*/

Struct stuType /*定義結構變量*/

{

字符編號[11];/*學號是10*/

char XM[10];

char AGE[2];/*年齡長度為2*/

float CJ[4];/*包括4個等級*/

};

/* - 2 - */

Intjy _ no (char * stu _ num,file * FP)/*檢查學號的正確性*/

{ struct stuType stud

int號;

char * p = stu _ num

if(strcmp(stu_num," # " = = 0)返回1;/*如果輸入“#”並返回true值,則不會輸入*/

while(*p!='\0') /*學生ID必須是數字,否則返回並重新輸入*/

{ NO =(int)* p;

如果(否& lt48 | |否& gt57)

{ puts(" \ t \ t未定義的序列號!請重新輸入!\ n ");/*非法學號!請重新輸入!*/

返回0;

}

else p++;/*指針加1*/

}

if(strlen(stu_num)!=10) /*如果學號長度不是10,返回並重新輸入*/

{ puts(" \ t \ t序列號長度錯誤!\ n ");/*學號長度錯誤*/

返回0;

}

if(getchar()!='\n') /*如果學號後面的字符不是回車符,則學號的長度超過10*/

{ printf(" \ t \ t序列號的長度應該大於10!請重新輸入!\ n ");/*學號長度大於10,請重新輸入*/

do{}while(getchar()!= ' \ n ');/*用getchar接收額外的字符*/

返回0;

}

其他

{

倒帶(FP);/*將文件指針指向文件頭*/

而(!Feof(fp)) /*如果文件指針沒有到達末尾,繼續執行下面的循環,Feof遇到文件終止符會返回非零值,否則返回0*/

{弗雷德(& ampstud,sizeof(struct stuType),1,FP);/*讀取壹定長度的數據*/

If (strcmp (stu _ num,stud.no) = = 0)/*學號的唯壹性*/

{ printf("\t\t重復序號,請重新輸入!\ n ");/*重復的學號!請重新輸入*/

printf(" \ t \ t該學生的記錄:\ n ");/*該學生的成績如下*/

printf(" \ t \ t中文:%.1f\n ",stud。CJ[0]);/*語言*/

printf("\t\tMath:%.1f\n ",stud。CJ[1]);/*數學*/

printf(" \ t \ t英語:%.1f\n ",stud。CJ[2]);/*英語*/

printf(" \ t \ t總計:%.1f\n ",stud。CJ[3]);/*壹般性意見*/

返回0;

}

}

}

返回1;

}

/* - 3 - */

Int JY_NO2(char *stu_num) /*檢驗編號*/

{ int NO

char * p = stu _ num

if(strcmp(stu_num," # " = = 0)返回1;/*如果輸入了“#”,則結束返回真值*/

if(strlen(stu_num)!=10) /*學號長度不是10*/

{ puts(" \ t \ t序列號長度錯誤!\ n ");/*學號長度錯誤*/

返回0;

}

while(*p!='\0') /*學生ID必須是數字。如果它包含字母或其他字符,它將返回壹個false值並重新輸入*/

{ NO =(int)* p;

如果(否& lt48 | |否& gt57)

{ puts(" \ t \ t未定義的序列號!請重新輸入!\ n ");/*非法學號!請重新輸入*/

返回0;

}

else p++;/*指針加1*/

}

if(getchar()!='\n') /*檢查學號的長度是否大於10,去掉多余的字符*/

{ printf(" \ t \ t序列號的長度應該大於10!請重新輸入!\ n ");/*學號長度大於10,請重新輸入*/

do{}while(getchar()!= ' \ n ');

返回0;

}

返回1;

}

/* - 4 - */

Int JY_XM(char *stu_XM) /*檢驗名稱*/

{ int PD

char * p;

p = stu _ XM

while(*p!='\0') /*名稱只能是英文*/

{

PD =(int)* p;

if(PD & lt;0)

{ puts(" \ t \ t名稱應該使用英文,請重新輸入!\ n ");/*姓名只能是英文。請重新輸入*/

返回0;

}

else p++;/*指針加1指向下壹個漢字*/

}

if(getchar()!='\n') /*名稱的長度不得超過5 */

{ printf(" \ t \ t名稱長度超過5,請重新輸入!\ n ");/*名稱超過5個。請重新輸入*/

do{}while(getchar()!= ' \ n ');

返回0;

}

返回1;/*字符串都是中文字符,返回true */

}

/* - 5 - */

Int JY_AGE(float stu_AGE) /*年齡只能在0~100之間*/

{

if(stu _ AGE & lt;0 | | stu _ AGE & gt100)

{ printf(" \ t \ t輸入錯誤!記錄應該在0~100之間!\ n ");/*輸入錯誤,分數只能在0~100之間*/

返回0;

}

返回1;

}

/* - 6 - */

Int JY_CJ(float stu_CJ) /*學生成績只能在0~100之間*/

{

if(stu _ CJ & lt;0 | | stu _ CJ & gt100)

{ printf(" \ t \ t輸入錯誤!記錄應該在0~100之間!\ n ");/*輸入錯誤,分數只能在0~100之間*/

返回0;

}

返回1;

}

/* - 7 - */

Void CreatFile() /*輸入文件*/

{ FILE * fp

struct stuType stu,stu0={ ""," ",};/*沒錯,stu0xianfuzhi*/

fp=fopen("stu.dat "," w b+ ");/*打開或創建二進制文件,打開時刪除原始內容*/

if(fp==NULL)

{ printf(" \ t \ t文件打開錯誤!\ n \ t \ t \按任意鍵返回...");/*文件打開失敗,按任意鍵返回*/

getch();

返回;

}

其他

{ while(1)

{ stu = stu0

do { printf(" \ n \ t \ t請輸入序列號:");/*輸入學號並檢查其正確性*/

scanf("%10s ",stu。否);

}while(!JY不(斯圖。沒有,FP));

if(strcmp(stu。否,“#”= = 0)斷;

do { printf(" \ n \ t \ t請輸入名稱:");/*輸入名稱並檢查其正確性*/

scanf("%10s ",stu。XM);

}while(!JY_XM(斯圖。XM));

do { printf(" \ n \ t \ t請輸入年齡:");/*輸入您的年齡記錄並檢查其正確性*/

scanf("%f ",& amp斯圖。年齡);

}while(!JY時代(斯圖。年齡[0]));

do { printf(" \ n \ t \ t請輸入中文記錄:");/*輸入等級並檢查其正確性*/

scanf("%f ",& amp斯圖。CJ[0]);

}while(!JY CJ(斯圖。CJ[0]));

do { printf(" \ n \ t \ t請輸入數學記錄:");/*同上*/

scanf("%f ",& amp斯圖。CJ[1]);

}while(!JY CJ(斯圖。CJ[1]);

do { printf(" \ n \ t \ t請輸入英文記錄:");

scanf("%f ",& amp斯圖。CJ[2]);

}while(!JY CJ(斯圖。CJ[2]));

do { printf(" \ n \ t \ t請輸入總計記錄:");

scanf("%f ",& amp斯圖。CJ[3]);

}while(!JY CJ(斯圖。CJ[3]));

fwrite(& amp;stu,sizeof(struct stuType),1,FP);/*寫文件*/

}

}

fclose(FP);/*關閉文件*/

}

/* - 8 - */

Void Search_Xuehao() /*按學號查詢*/

{ FILE * fp

int標誌;

struct stuType stu,stud

fp=fopen("stu.dat "," Rb ");

If(fp==NULL) /*如果文件無法打開,則輸出以下信息*/

{ printf(" \ t \ t文件打開錯誤!\ n \ t \ t \按任意鍵返回...");

getch();

返回;

}

其他

{ do { puts(" \ n \ t \ t按\"#\ "或search ");

do { printf(" \ t \ t請輸入您想要的序列號:");

scanf("%10s ",stu。否);

}while(!JY 2號(斯圖。否));

if(strcmp(stu。否,“#”= = 0)斷;/*如果輸入了“#”,則循環結束*/

flag = 0;

倒帶(FP);

while(fread(& amp;Stud,sizeof (struct stutype),1,FP))/*檢查文件結束指針*/

{if (strcmp (stu.no,stud.no) = = 0)/*比較學號*/

{ puts(" \ t \ t該學生的記錄:");

printf("\t\tSN:%s\n ",stud。否);

printf("\t\tName:%s\n ",stud。XM);

printf("\t\tAGE:%.1f\n ",stud。年齡[0]);

printf(" \ t \ t中文:%.1f\n ",stud。CJ[0]);

printf("\t\tMath:%.1f\n ",stud。CJ[1]);

printf(" \ t \ t英語:%.1f\n ",stud。CJ[2]);

printf(" \ t \ t總計:%.1f\n ",stud。CJ[3]);

flag = 1;/*記錄是否找到學號*/

}

}

if(flag = = 0)puts(" \ t \ t未定義的序列號");

}while(strcmp(stu。不,“#”!=0);

}

fclose(FP);/*關閉文件*/

}

/* - 9 - */

Voidsearch _ xing ()/*按名稱搜索*/

{ FILE * fp

int flag = 0;

struct stuType stu,stud

fp=fopen("stu.dat "," Rb ");

if(fp==NULL)

{ printf(" \ t \ t文件打開錯誤!\ n \ t \按任意鍵返回...");

getch();

返回;

}

其他

做{

do { printf(" \ t \ t請輸入您想要的學生姓名:");

scanf("%10s ",stu。XM);

}while(!JY_XM(斯圖。XM));

倒帶(FP);/*文件指針指向文件頭*/

while(fread(& amp;stud,sizeof(struct stuType),1,fp))

{if (strcmp (stu.xm,stud.xm) = = 0)/*比較名稱是否相同*/

{ puts(" \ t \ t該學生的姓名是:");

printf("\t\tSN:%s\n ",stud。否);

printf("\t\tName:%s\n ",stud。XM);

printf("\t\tAGE:%.1f\n ",stud。年齡[0]);

printf(" \ t \ t中文:%.1f\n ",stud。CJ[0]);

printf("\t\tMath:%.1f\n ",stud。CJ[1]);

printf(" \ t \ t英語:%.1f\n ",stud。CJ[2]);

printf(" \ t \ t總計:%.1f\n ",stud。CJ[3]);

flag = 1;/*記錄是否已找到該名稱*/

}

}

if(flag = = 0)puts(" \ n \ t \ t未定義的名稱!");

puts(" \ t \ t繼續嗎?(y - yes,Else鍵返回)?”);

} while(getch()= = ' y ');

}

fclose(FP);

/* puts(" \ t \ t按任意鍵繼續...");*/

/* getch();*/

}

/* - 10 - */

Int ListFile(void) /*輸出文件,列出所有學生的成績*/

{ FILE * fp

int REC = 0;/*記錄學生人數*/

struct stuType stu

fp=fopen("stu.dat "," Rb ");

if(fp==NULL)

{ printf(" \ t \ t文件打開錯誤!\ n \ t \按任意鍵返回...");

getch();

返回1;

}

else { printf(" \ t \ t學生記錄:\ n ");

printf(" \ t \ tSN \ t \ tName \ t Chinese \ t math \ t English \ t total \ n ");

倒帶(FP);

while(fread(& amp;stu,sizeof(struct stuType),1,fp))

{/*輸出*/

printf("\t\t%s ",stu。否);

printf("\t%s ",stu。XM);

printf("\t%.1f ",stu。年齡);

printf("\t%.1f ",stu。CJ[0]);

printf("\t%.1f ",stu。CJ[1]);

printf("\t%.1f ",stu。CJ[2]);

printf("\t%.1f ",stu。CJ[3]);

printf(" \ n ");

rec++;

If(REC%20==0) /*20學生成績,stop */

{ printf(" \ t \ t按任意鍵繼續...\ n ");

getch();

}

}

}

fclose(FP);/*關閉文件*/

printf(" \ t \ t繼續...");

getch();

}

/* - 11 - */

Void Statistics() /*統計合格且優秀的人數*/

{ FILE * fp

int REC=0,unpass[4]={0},good[4]= { 0 };/* rec-記錄數,即人數,unpass -重建人數,good -優秀人數*/

浮動最高[4]={0},得分[4]= { 0 };/*最高-最高分,得分-總分*/

struct stuType stu

fp=fopen("stu.dat "," Rb ");

if(fp==NULL)

{ printf(" \ t \ t文件打開錯誤!\ n \ t \按任意鍵返回...");

getch();

返回;

}

else { rewind(FP);

while(fread(& amp;stu,sizeof(struct stuType),1,fp))

{ rec++;

分數[0]=分數[0]+stu。CJ[0];/*語言*/

如果(斯圖。CJ[0]& lt;= 60)un pass[0]++;

如果(斯圖。CJ[0]& gt;=80)好[0]++;

if(最高[0]& lt;斯圖。CJ[0])最高[0]=stu。CJ[0];

分數[1]=分數[1]+stu。CJ[1];/*數學*/

如果(斯圖。CJ[1]& lt;= 60)un pass[1]++;

如果(斯圖。CJ[1]>=80)好[1]++;

if(最高[1]& lt;斯圖。CJ[1])最高[1]=stu。CJ[1];

分數[2]=分數[2]+stu。CJ[2];/*英語*/

如果(斯圖。CJ[2]& lt;= 60)un pass[2]++;

如果(斯圖。CJ[2]& gt;=80)好[2]++;

if(最高[2]& lt;斯圖。CJ[2])最高[2]=stu。CJ[2];

分數[3]=分數[3]+stu。CJ[3];/*壹般性意見*/

如果(斯圖。CJ[3]& lt;= 60)un pass[3]++;

如果(斯圖。CJ[3]& lt;=80)好[3]++;

if(最高[3]& lt;斯圖。CJ[3])最高[3]=stu。CJ[3];

}

If(REC==0) /*可以防止錄制為0 */時由於REC的劃分而導致的錯誤

{ printf(" \ t \ t沒有輸入名稱!按任意鍵返回...");

getch();

返回;

}

否則{

printf("\t中文\t數學\t英文\t總\ n ");/*輸出統計*/

printf(" % . 1f \ t % . 1f \ t % . 1f \ t \ t % . 1f \ n ",score[0]/REC,score[1]/REC,score[2]/REC,score[3]/REC);

printf(" . 1f \ t % . 1f \ t % . 1f \ t % . \ t % . 1f \ n ",最高[0],最高[1],最高[2],最高[3]);

printf(" \ t好學生數:%d\t\t %d\t %d\t\t %d\n ",好[0],好[1],好[2],好[3]);

printf(" \ t未通過的學生人數:%d\t\t %d\t %d\t\t %d\n ",unpass[0],unpass[1],unpass[2],un pass[3]);

}

}

fclose(FP);

printf(" \ n \ t \ t \ t按任意鍵繼續...");

getch();

}

/* - 12 - */

void HelpMessage()

{ clr SCR();

printf("\n\n\n\n\n遲佟氏老實人所左燁邊知爾成,蓋希同聚友存初學生書居,安學浩,興明查勛,列初學生何佟公能。\n \n石永芳發:西通書路書局侯,江仔黨前木路忠監利壹格stu.dat,永裕寶村書路德書局.薛浩書路智能勇書子書路切薛浩智能師10魏.興明書路福和中國人德興明,智能勇品英,切醉長威5格。\n馳陳旭在Turbo C2.0xia運行郭彤\ n \ n ");

getch();

}

/* - 13 - */

Int GetKey(void) /*這個函數返回壹個鍵的值*/

{ int key

key = BIOS key(0);/*bioskey是調用BIOS的鍵盤接口*/

if(key & lt;& lt8) /*位移*/

{

鑰匙=鑰匙& amp0x 00 ff;

}

回車鍵;/*後退按鈕*/

}

/* - 14 - */

void main()

{ int key

結構日期d;/*定義時間結構*/

getdate(& amp;d);/*讀取系統日期並將其放入結構D */

clr SCR();/*清空屏幕*/

printf(" \ n \ n \ n \ n ");

printf(" \ t = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = n ");/*版本信息*/

printf(" \ n ");

printf("\t\t學生檔案管理系統1.0 \ n ");

printf(" \ n ");

printf(" \ n ");

printf(" \ t \ t Builder:XG 042-WZM YS HYF WQ \ n ");

printf("\t\t教師:宋袁哲\ n ");

printf(" \ t \ t Time:2005 \ \ 7 \ \ 5 \ n ");

printf(" \ n ");

printf(" \ t = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = n ");

printf(" \ t \ t \ t按任意鍵繼續...");

/*while(!kb hit());*/

getch();/*從鍵盤讀取字符,但不要在屏幕上顯示*/

系統(“cls”);/*調用DOS的清屏函數,可以用clrscr代替*/

While(1) /*主菜單*/

{

printf(" \ n \ n \ n \ n ");

printf(" \ t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t * * \ t * * \ n ");

printf(" \ t * * \ TF 1-Help * * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tF2 -數據輸入& amp保存* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tF3 -按序號搜索* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tF4 -按名稱搜索* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tF5 -內容輸入* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tF6 -統計學生人數(通過& amp好)* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf("\t **\tESC -退出系統* * \ n ");

printf(" \ t * * \ t * * \ n ");

printf(" \ t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf("\n\t請選擇...\t\t%d\\%d\\%d\n\n ",d.da_year,d.da_mon,d . da _ day);/*提示信息並顯示當前系統日期*/

key = GetKey();/*調用自定義函數並讀取密鑰*/

開關(鑰匙)

{

case f 1:help message();打破;

案例F2:creat file();打破;

案例F3:Search _ Xuehao();打破;

案例F4:Search _ Xingming();打破;

案例F5:ListFile();打破;

案例F6:統計();打破;

案例ESC:退出(1);打破;

/* default:puts(" \ t \ t \ t錯誤的序列號輸入!");

printf(" \ t \ t \ t按任意鍵返回...");

getch();*/

}

clr SCR();/*執行每個功能後自動清空屏幕*/

}

}

  • 上一篇:什麽是安全預警系統
  • 下一篇:C語言畫圖__並保存我畫的圖片
  • copyright 2024編程學習大全網