C語言實現學生信息管理系統開發
本文實例為大傢分享瞭C語言實現學生信息管理系統的具體代碼,供大傢參考,具體內容如下
程序介紹
運行程序時,首先進入到菜單部分,菜單部分提供瞭菜單顯示和輸入功能部分。其運行效果如圖所示。在主界面上輸入0——8內的數字,實現相應的功能。
主界面輸入1時,進入錄入學生信息的界面,當沒有存儲記錄時,根據提示對學生的信息進行輸入,運行效果如圖所示。
在存在學生信息的情況下繼續添加學生信息時,會首先顯示存在的學生信息,運行效果如圖所示。
主界面輸入2時,進入查詢學生信息模塊,根據學生學號,對學生信息進行查詢。運行效果如圖所示。
在主界面輸入3時,進入到刪除學生信息模塊,輸入需要刪除的學生學號,即可在文件中將該學號的所有信息刪除,運行效果如圖所示。
當在主界面輸入4時,系統進入到修改學生信息模塊,首先會顯示出所有學生的信息,輸入要修改的學生學號,系統會對輸入的學號進行匹配,若在顯示出來的學生信息中存在,則會提示輸入修改的內容。運行效果如圖所示。
在主界面輸入5時,可以插入學生信息,根據提示輸入想要插入的位置,以及插入的學號等信息。運行效果如圖所示。
在主界面輸入6時,可以根據學生的總成績從高到低進行排序。排序完成後,將排序結果保存,但是排序後的結果並不現實在該界面。運行效果如圖所示。
當在主界面輸入7時,可以對學生的人數進行統計,顯示出統計的人數。運行效果如圖所示。
當在主界面輸入8時,可以對學生的信息進行顯示,運行效果如圖所示。該圖為對成績進行排序後的顯示結果。
代碼
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<dos.h> #include<string.h> #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n" #define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum /** * 結 構 體 */ struct student/*定義學生成績結構體*/ { int num; /*學號*/ char name[15]; /*姓名*/ double elec; /*選修課*/ double expe; /*實驗課*/ double requ; /*必修課*/ double sum; /*總分*/ }; /** * 函數聲明 */ struct student stu[50]; /*定義結構體數組*/ void in(); /*錄入學生成績信息*/ void show(); /*顯示學生信息*/ void order(); /*按總分排序*/ void del(); /*刪除學生成績信息*/ void modify(); /*修改學生成績信息*/ void menu(); /*主菜單*/ void insert(); /*插入學生信息*/ void total(); /*計算總人數*/ void search(); /*查找學生信息*/ void main() /*主函數*/ { system("color f0\n"); //白底黑字 int n; menu(); scanf("%d",&n);/*輸入選擇功能的編號*/ while(n) { switch(n) { case 1: in();break; case 2: search();break; case 3: del();break; case 4: modify();break; case 5: insert();break; case 6: order();break; case 7: total();break; case 8: show();break; default:break; } getch(); menu();/*執行完功能再次顯示菜單界面*/ scanf("%d",&n); } } void in()/*錄入學生信息*/ { int i,m=0;/*m是記錄的條數*/ char ch[2]; FILE *fp;/*定義文件指針*/ if((fp=fopen("data.txt","a+"))==NULL)/*打開指定文件*/ { printf("文件不存在!\n"); return;//直接返回,不在執行 } while(!feof(fp))//判斷是否指向結束符 { if(fread(&stu[m] ,LEN,1,fp)==1) { m++;/*統計當前記錄條數*/ } } fclose(fp); if(m==0) { printf("文件中沒有記錄!\n"); } else { show();/*調用show函數,顯示原有信息*/ } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } printf("輸入學生信息(y/n):"); scanf("%s",ch); while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判斷是否要錄入新信息*/ { printf("number:"); scanf("%d",&stu[m].num);/*輸入學生學號*/ for(i=0;i<m;i++) if(stu[i].num==stu[m].num) { printf("number已經存在瞭,按任意鍵繼續!"); getch(); fclose(fp); return; } printf("name:"); scanf("%s",stu[m].name);/*輸入學生姓名*/ printf("elective:"); scanf("%lf",&stu[m].elec);/*輸入選修課成績*/ printf("experiment:"); scanf("%lf",&stu[m].expe);/*輸入實驗課成績*/ printf("required course:"); scanf("%lf",&stu[m].requ);/*輸入必修課成績*/ stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*計算出總成績*/ if(fwrite(&stu[m],LEN,1,fp)!=1)/*將新錄入的信息寫入指定的磁盤文件*/ { printf("不能保存!"); getch(); } else { printf("%s 被保存!\n",stu[m].name); m++; } printf("繼續?(y/n):");/*詢問是否繼續*/ scanf("%s",ch); } fclose(fp); printf("OK!\n"); } void show() //增加data.txt文件不存在或者文件內容為空時的顯示 { FILE *fp; int i,m=0; fp=fopen("data.txt","rb"); // if((fp=fopen("data.txt","a+"))==NULL)/*打開指定文件*/ // { // printf("文件不存在!\n"); // return; // } // fclose(fp); // if(m==0) // printf("文件中沒有記錄!\n"); // return; while(!feof(fp)) { if(fread(&stu[m] ,LEN,1,fp)==1) m++; } fclose(fp); printf("number name elective experiment required sum\t\n"); for(i=0;i<m;i++) { printf(FORMAT,DATA);/*將信息按指定格式打印*/ } } void menu()/*自定義函數實現菜單功能*/ { system("cls"); printf("\n\n\n\n"); printf("\t\t|---------------學生信息管理系統---------------|\n"); printf("\t\t|\t\t\t\t\t |\n"); printf("\t\t|\t\t 1. 錄入學生信息\t |\n"); printf("\t\t|\t\t 2. 查找學生信息\t |\n"); printf("\t\t|\t\t 3. 刪除學生信息\t |\n"); printf("\t\t|\t\t 4. 修改學生信息\t |\n"); printf("\t\t|\t\t 5. 插入學生信息\t |\n"); printf("\t\t|\t\t 6. 排序\t\t |\n"); printf("\t\t|\t\t 7. 統計學生總數\t |\n"); printf("\t\t|\t\t 8. 顯示所有學生信息\t |\n"); printf("\t\t|\t\t 0. 退出系統\t\t |\n"); printf("\t\t|\t\t\t\t\t |\n"); printf("\t\t|----------------------------------------------|\n\n"); printf("\t\t\t請選擇(0-8):"); } void order()/*自定義排序函數*/ { FILE *fp; struct student t; int i=0,j=0,m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m] ,LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中沒有記錄!\n"); return; } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } for (i = 0; i < m - 1; i++) for (j = i + 1; j < m; j++)/*雙重循環實現成績比較並交換*/ if (stu[i].sum < stu[j].sum) { t=stu[i];stu[i]=stu[j];stu[j]=t; } if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在!\n"); return; } for(i=0;i<m;i++)/*將重新排好序的內容重新寫入指定的磁盤文件中*/ if(fwrite(&stu[i] ,LEN,1,fp)!=1) { printf("%s 不能保存文件!\n"); getch(); } fclose(fp); printf("保存成功\n"); } void del()/*自定義刪除函數*/ /*邏輯:首先判斷data.txt文件是否存在,如果存在,繼續操作,判斷文件是否為空,不為空,則輸入要刪除的學生學號;如果文件不存在 返回“文件不存在”,文件內容為空則返回“文件中沒有記錄” 輸入學號----判斷是否有這個學號。有:詢問是否刪除,y刪除;n不刪除 ,“找到瞭記錄,選擇不刪除!” 沒有:“沒有找到這名學生!” */ { FILE *fp; int snum,i,j,m=0; char ch[2]; if((fp=fopen("data.txt","r+"))==NULL) //data.txt文件不存在 { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中沒有記錄!\n"); //data.txt文件存在,但裡面沒有內容 return; } printf("請輸入學生學號"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num) { printf("找到瞭這條記錄,是否刪除?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判斷是否要進行刪除*/ { for(j=i;j<m;j++) stu[j]=stu[j+1];/*將後一個記錄移到前一個記錄的位置*/ m--;/*記錄的總個數減1*/ if((fp=fopen("data.txt","wb"))==NULL) { printf("文件不存在\n"); return; } for(j=0;j<m;j++)/*將更改後的記錄重新寫入指定的磁盤文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("can not save!\n"); getch(); } fclose(fp); printf("刪除成功!\n"); }else{ printf("找到瞭記錄,選擇不刪除!"); } break; } else { printf("沒有找到這名學生!\n");/*未找到要查找的信息*/ } } void search()/*自定義查找函數*/ //新增:搜索文件中沒有的學號時的情況 { FILE *fp; int snum,i,m=0; if((fp=fopen("data.txt","rb"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件中沒有記錄!\n"); return; } printf("請輸入number:"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*查找輸入的學號是否在記錄中*/ { printf("number name elective experiment required sum\t\n"); printf(FORMAT,DATA);/*將查找出的結果按指定格式輸出*/ break; } if(i==m) printf("沒有找到這名學生!\n");/*未找到要查找的信息*/ } void modify()/*自定義修改函數*/ //修正:要修改文件中沒有記錄的學號時,還是說“找到瞭。。。” { FILE *fp; struct student t; int i=0,j=0,m=0,snum; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m] ,LEN,1,fp)==1) m++; if(m==0) { printf("文件中沒有記錄!\n"); fclose(fp); return; } show(); printf("請輸入要修改的學生number: "); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*檢索記錄中是否有要修改的信息*/ { printf("找到瞭這名學生,可以修改他的信息!\n"); printf("name:"); scanf("%s",stu[i].name);/*輸入名字*/ printf("elective:"); scanf("%lf",&stu[i].elec);/*輸入選修課成績*/ printf("experiment:"); scanf("%lf",&stu[i].expe);/*輸入實驗課成績*/ printf("required course:"); scanf("%lf",&stu[i].requ);/*輸入必修課成績*/ printf("修改成功!"); stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ; if((fp=fopen("data.txt","wb"))==NULL) { printf("can not open\n"); return; } for(j=0;j<m;j++)/*將新修改的信息寫入指定的磁盤文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("can not save!"); getch(); } fclose(fp); break; } if(i==m) printf("沒有找到這名學生!\n");/*未找到要查找的信息*/ } void insert()/*自定義插入函數*/ { FILE *fp; int i,j,k,m=0,snum; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("文件中沒有記錄!\n"); fclose(fp); return; } printf("請輸入要插入的位置(number):\n"); scanf("%d",&snum);/*輸入要插入的位置*/ for (i = 0; i < m; i++)//遍歷 if (snum == stu[i].num)//判斷是否存在 break; for(j=m-1;j>i;j--)//學號下面的內容 stu[j+1]=stu[j];/*從最後一條記錄開始均向後移一位*/ printf("現在請輸入要插入的學生信息.\n"); printf("number:"); scanf("%d",&stu[i+1].num); for(k=0;k<m;k++)//判斷是否存在 if(stu[k].num==stu[m].num) { printf("number已經存在,按任意鍵繼續!"); getch(); fclose(fp); return; } printf("name:"); scanf("%s",stu[i+1].name); printf("elective:"); scanf("%lf",&stu[i+1].elec); printf("experiment:"); scanf("%lf",&stu[i+1].expe); printf("required course:"); scanf("%lf",&stu[i+1].requ); stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ; printf("插入成功!按任意鍵返回主界面!"); if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打開!\n"); return; } for(k=0;k<=m;k++) if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*將修改後的記錄寫入磁盤文件中*/ { printf("不能保存!"); getch(); } fclose(fp); } void total() { FILE *fp; int m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("文件不存在!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; /*統計記錄個數即學生個數*/ if(m==0) {printf("no record!\n");fclose(fp);return;} printf("這個班級一共有 %d 名學生!\n",m);/*將統計的個數輸出*/ fclose(fp); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。