您好,登錄后才能下訂單哦!
今天小編給大家分享一下使用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); }
以上就是“使用C語言代碼實現學生信息管理系統怎么寫”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。