C語言課程設計之學生資訊管理系統,學生管理系統c語言
#include"stdio.h" //標準的輸入輸出函數檔案頭部說明#include"math.h" // 數學函數頭部說明#include"string.h"#include"stdlib.h" //通過該函數頭部裡的函數,改變控制台的背景和顏色#include"windows.h" //標頭檔聲明,下文用到了改變控制台的寬度和高度#define M 100 //宏定義說明struct student{ //結構體定義並聲明 char name[25]; //姓名 char num[25]; //學號 char credit[20]; //社會安全號碼 char native[35]; //籍貫 char tel[25]; //手機號 int special; //專業 int banji; //班級 int math,yy,wl,cyy,pe; //數學、英語、物理、C語言、體育 double ave;}; //平均分//****************************************函數的聲明********************************************void input(struct student stu[M]); //輸入函數void output(struct student stu[M]); //各類使用者自訂函數的聲明void lookfor(struct student stu[M]); //查詢函數void modify(struct student stu[M]); //修改函數void order(struct student stu[M]); //排序函數void delete_student(struct student stu[M]); //刪除函數void xuehao(struct student stu[M]); void xingming(struct student stu[M]);void fileread(struct student stu[M]);void filewrite(struct student stu[M]);void yanshi(char *p); //延時函數說明//**********************************************************************************************int count=0;struct student t;int main() {int choice,sum;struct student stu[M]; system("mode con:cols=400 lines=30000"); //調節控制台的寬度和高度 system("color 0b"); //調節控制台的背景和字型顏色point1: sum=0;yanshi("\t\t\t\t\t\t\t\t\3\3\3\3\3\3\3\3\3\3\3\3\3歡迎你使用學生資訊管理系統\3\3\3\3\3\3\3\3\3\3\n");do {printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n");printf("\t\t\t\t\t\t\t\t+學生資訊管理系統+\n");printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n");printf("\t\t\t\t\t\t\t\t\t\t ***************\n");printf("\t\t\t\t\t\t\t\t\t\t 1、新增學生資訊\n");printf("\t\t\t\t\t\t\t\t\t\t 2、瀏覽學生資訊\n");printf("\t\t\t\t\t\t\t\t\t\t 3、查詢學生資訊\n");printf("\t\t\t\t\t\t\t\t\t\t 4、修改學生資訊\n");printf("\t\t\t\t\t\t\t\t\t\t 5、刪除學生資訊\n");printf("\t\t\t\t\t\t\t\t\t\t 6、排列學生資訊\n"); printf("\t\t\t\t\t\t\t\t\t\t 7、讀取檔案學生\n");//從檔案讀取printf("\t\t\t\t\t\t\t\t\t\t 8、儲存到檔案\n"); //儲存到檔案printf("\t\t\t\t\t\t\t\t\t\t 9、退出系統\n"); printf("\t\t\t\t\t\t\t\t\t\t ***************\n"); printf("請輸入你的選擇\n");scanf("%d",&choice);fflush(stdin); //清除輸入緩衝區if (choice>9||choice<=0){sum++;if (sum>=5){printf("輸入錯誤次數過多,程式將重新開始\n");system("pause"); //程式暫停system("cls"); //清屏語句goto point1;}}switch (choice) //根據選擇,調用不同的函數來完成不同的任務{case 1:input(stu);break; case 2:output(stu);break;case 3:lookfor(stu);break;case 4:modify(stu);break;case 5:delete_student(stu);break;case 6:order(stu);break;case 7:fileread(stu);break;case 8:filewrite(stu);;break;case 9:printf("感謝你使用學生資訊管理系統,請關掉程式!!!\n");system("pause");break;default:printf("無效的選擇!!!請重新輸入!!!\n");break;}}while (choice!=9);printf("the program is over!!!\n"); return 0;}void input(struct student stu[M]) //自訂輸入函數{int len,size;system("cls");printf("請添加要輸入學生的資訊\n");do {printf("請輸入由11位元字組成的學生學號\n"); //do-while迴圈應用,提示輸入位元為一確定數scanf("%s",&stu[count].num);len=strlen(stu[count].num);}while(len!=11);printf("請輸入同學的姓名\n");scanf("%s",stu[count].name);do {printf("請輸入由18位元字組成的學生社會安全號碼\n"); //同上scanf("%s",&stu[count].credit);size=strlen(stu[count].credit);}while(size!=18);printf("請輸入學生的籍貫\n");scanf("%s",&stu[count].native);printf("請輸入學生的手機號碼\n");scanf("%s",&stu[count].tel);printf("請輸入所需要的專業代號:1、電腦科學 2、通訊工程 3、網路工程\n"); //採用如此方法解決了專業輸入難問題scanf("%d",&stu[count].special);printf("請輸入對應的學生班級號碼:1、1301 2、1302 \n");scanf("%d",&stu[count].banji);do {printf("請依次輸入不大於100的學生各科成績\n");scanf("%d%d%d%d%d",&stu[count].math,&stu[count].yy,&stu[count].wl,&stu[count].cyy,&stu[count].pe);}while(stu[count].math>100||stu[count].yy>100||stu[count].wl>100||stu[count].cyy>100||stu[count].pe>100); //同上同上stu[count].ave=(stu[count].math+stu[count].yy+stu[count].wl+stu[count].cyy+stu[count].pe)/5.0; //求出平均值count++;}void output(struct student stu[M]) //自訂輸出函數{int j;system("cls");if (count==0){printf("當前已存學生資訊為0個\n");return;}for (j=0;j<count;j++){printf("學號\t\t 姓名\t\t社會安全號碼\t籍貫\t手機號\t\t專業\t\t班級\t數學\t英語\t物理\tC語言\t體育\t平均分\n");for (j=0;j<count;j++){ //for迴圈控制輸出的個數printf("%s\t",stu[j].num);printf("%s\t",stu[j].name);printf("%s\t",stu[j].credit);printf("%s\t",stu[j].native);printf("%s\t",stu[j].tel);if (stu[j].special==1)printf("電腦科學\t");else if (stu[j].special==2) printf("通訊工程\t"); else printf("網路工程\t"); printf("%d\t",stu[j].banji);printf("%d\t",stu[j].math);printf("%d\t",stu[j].yy);printf("%d\t",stu[j].wl);printf("%d\t",stu[j].cyy);printf("%d\t",stu[j].pe);printf("%.1lf\t\n",stu[j].ave);}}}void lookfor(struct student stu[M]) //自訂查詢學生資訊函數{int j,flag=0;char xh[25];system("cls");if (count==0){printf("當前已存學生資訊為0個,無法查詢!!!\n");return;}else{printf("請輸入你想要查看的同學學號\n");scanf("%s",&xh);fflush(stdin);for (j=0;j<count;j++){if (strcmp(stu[j].num,xh)==0) //通過字元函數對已存入的學生資訊進行比較,找出要查看的學生{printf("學號\t\t姓名\t\t社會安全號碼\t籍貫\t手機號\t\t專業\t\t班級\t數學\t英語\t物理\tC語言\t體育\t平均分\n");printf("%s\t",stu[j].num);printf("%s\t",stu[j].name);printf("%s\t",stu[j].credit);printf("%s\t",stu[j].native);printf("%s\t",stu[j].tel);if (stu[j].special==1)printf("電腦科學\t");else if (stu[j].special==2)printf("通訊工程\t"); else printf("網路工程\t");printf("%d\t",stu[j].banji); //考慮一個對齊的因數printf("%d\t",stu[j].math);printf("%d\t",stu[j].yy);printf("%d\t",stu[j].wl);printf("%d\t",stu[j].cyy);printf("%d\t",stu[j].pe);printf("%.1lf\t",stu[j].ave);}}if (j==count)printf("很抱歉,沒有你所需要的學生資訊\n");}}void modify(struct student stu[M]) //自訂修改函數{int j,flag=0,course;char xh[25];system("cls");if (count==0){printf("當前已存學生資訊為0個,無法修改!!!\n");return;}else{printf("請輸入你想要修改的同學學號\n");scanf("%s",&xh);fflush(stdin);for (j=0;j<count;j++)if (strcmp(stu[j].num,xh)==0) //同上{printf("你確定要修改學生的資訊嗎???如果不確定的話,請關掉本程式吧!!!\n");printf("選擇課程: 1、數學 2、英語 3、物理 4、C語言 5、體育\n");scanf("%d",&course);printf("請輸入你想要修改後的學產生績\n");switch(course){case 1:scanf("%d",&stu[j].math);break;case 2:scanf("%d",&stu[j].yy);break; //switch控制語句case 3:scanf("%d",&stu[j].wl);break;case 4:scanf("%d",&stu[j].cyy);break;case 5:scanf("%d",&stu[j].pe);break;default:printf("無效的選擇!!!請重新輸入!!!\n");break;} }}}void delete_student(struct student stu[M]) //自訂刪除函數{int choice;system("cls");if (count==0){printf("當前已存學生資訊為0個,無法刪除!!!\n");return;}else{printf("請選擇你所要刪除的方式:1、學號 2、姓名(如果你的姓名是中文,那麼無法刪除,請選擇學號刪除) 3、取消\n");scanf("%d",&choice);switch(choice) //switch語句對使用者要刪除的方式進行選擇{case 3:return;break;case 2:xingming(stu);break; //使用者自訂函數之間的套用case 1:xuehao(stu);break;default:printf("無效的選擇!!!請重新輸入!!!\n");break;}}}void order(struct student stu[M]) //排序函數的定義{int j,k,choice,index;system("cls");printf("請輸入你想要進行排序的方式(所有排序的方式均是降序)!!!\n");printf("1、數學 2、英語 3、物理 4、C語言 5、體育 6、平均分\n");scanf("%d",&choice);switch (choice){case 1:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].math>stu[index].math) {t=stu[k];stu[k]=stu[index];stu[index]=t;} };break;case 2:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].yy>stu[index].yy) {stu[k]=stu[index];}//整個為排序部分,採用了所謂的選擇排序的方法 };break;case 3:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].wl>stu[index].wl) {t=stu[k];stu[k]=stu[index];stu[index]=t;} };break;case 4:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].cyy>stu[index].cyy) {t=stu[k];stu[k]=stu[index];stu[index]=t;} };break;case 5:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].pe>stu[index].pe) {t=stu[k];stu[k]=stu[index];stu[index]=t;} };break;case 6:for (j=0;j<count;j++) { index=j; for (k=j+1;k<count;k++) if (stu[k].ave>stu[index].ave) {t=stu[k];stu[k]=stu[index];stu[index]=t;} //強制類型轉換符號只能用於有運算元,根據賦值運算中的類型轉換問題可知 };break;default:printf("無效的選擇!!!請重新輸入!!!\n");break;}}void xuehao(struct student stu[M]) //自訂通過學號方式刪除學生資訊函數{int j,index=0,k=count;char xh[25];system("cls");printf("請輸入你想要刪除的同學學號\n");scanf("%s",xh);fflush(stdin);for (j=0;j<count;j++){ if (strcmp(stu[j].num,xh)==0){for (j=index;j<count;j++)stu[j]=stu[j+1];count--;if (count<k)printf("你已經刪除成功\n");}index++;}if (j==count)printf("抱歉!!!沒有你所需要刪除的學生資訊!*_*!\n");}void xingming(struct student stu[M]) //自訂通過姓名方式刪除學生資訊函數{int flag=0,j,k=count;char xm[25];system("cls");printf("請輸入你想要刪除的同學姓名\n");scanf("%s",xm);fflush(stdin);for (j=0;j<count;j++){if (strcmp(stu[j].num,xm)==0){for (j=flag-1;j<count;j++) stu[j]=stu[j+1];count--;if (count<k)printf("你已經刪除成功\n");}flag++;}if (j==count)printf("抱歉!!!沒有你所需要刪除的學生資訊!*_*!\n");}void yanshi(char *p) //延時函數的定義{while (1){if (*p!=0)printf("%c",*p++);elsebreak;Sleep(100); //延時控制間斷語句}}void filewrite(struct student stu[M])//寫入檔案函數定義{int j=0;char c;FILE *fp;printf("請選擇是否要存入已輸入的學生資訊:'y'還是'n'???\n");scanf("%c",&c);fflush(stdin);while(c!='y'&&c!='n'){if (c!='y'&&c!='n')printf("輸入錯誤,請重新輸入\n");printf("以下操作將會覆蓋已儲存的資料,確定請輸入'y'或'n'???\n");scanf("%c",&c);fflush(stdin);}if (c=='y'){if((fp=fopen("d:\\stu.dat","wb"))==NULL){printf("檔案開啟錯誤,程式無法進行\n");exit(0);}for(j=0;j<count;j++) {fwrite(&stu[j],sizeof(struct student),1,fp);}fclose(fp);if(count==0)printf("沒有檔案,無法儲存\n");elseprintf("資料存放區完畢\n");system("pause");}elsereturn;}void fileread(struct student stu[M])//讀取檔案資訊函數定義{int j=0;char c;FILE *fp;system("cls");printf("請選擇是否要存入已輸入的學生資訊:'y'還是'n'???\n");scanf("%c",&c);fflush(stdin);while(c!='y'&&c!='n'){if (c!='y'&&c!='n')printf("輸入錯誤,請重新輸入\n");printf("以下操作將會覆蓋已儲存的資料,確定請輸入'y'或'n'???\n");scanf("%c",&c);fflush(stdin);}if (c=='y'){if((fp=fopen("d:\\stu.dat","rb"))==NULL){printf("檔案開啟錯誤,程式無法進行\n");exit(0);}fread(&stu[j],sizeof(struct student),1,fp); count=0;count++;j++;while(fread(&stu[j],sizeof(struct student),1,fp)){j++;count++;}fclose(fp);printf("資料讀取完畢!!!\n");system("pause");}elsereturn;}