C語言實現學籍信息管理系統
本文實例為大傢分享瞭C語言實現學籍信息管理系統的具體代碼,供大傢參考,具體內容如下
- 系統功能:錄入、修改、添加、刪除、查找、讀取、刪除數據
- 系統主要技術:基本就是函數的調用,隻用到結構體,與文件的讀寫
所有的數據改動都會及時保存到文件
student.txt文件用來儲存所有信息
shuju.txt文件用來儲存信息數據
代碼如下
/* 學籍信息管理系統 系統功能:錄入、修改、添加、刪除、查找、讀取、刪除數據 系統主要技術:基本就是函數的調用,還有結構體,與文件的讀寫 */ #include<stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int n = 0;//變動的學生個數 int i=0;//用來儲存總共的學生人數 struct student { char xh[20];//學生學號 char xm[10];//學生姓名 int nl;//年齡 char xb1[4];//學生性別 char jg[100];//籍貫 char tele[20];//學生電話 char xb[40];//系別 char zy[36];//學生專業 char bj[30];//學生班級 } aa[100]; //定義一個學生基本學籍信息的結構體,可容納100人; //申明各函數! void init();//初始化界面 void help();//系統幫助 void chazhao();//查找 void xiugai();//修改函數 void caidan();//主菜單 void shuru();//輸入函數 void tianjia();//添加函數 void shanchu();//刪除函數 void shuchu();//輸出函數 void baocun();//保存函數 void duqu();//讀取函數 void del();//清空文件數據 void luru();//全部信息錄入文件 /* 主函數 */ int main() { init(); system("pause"); system("cls"); duqu(); caidan(); return 0; } /* 系統初始化界面 */ void init() { printf("————————————————————————————————————————————————————————————\n\n"); printf("\t\t\t\t*********************************************************\n\n"); printf("\t\t\t\t*****************歡迎使用學生學籍管理系統****************\n\n"); printf("\t\t\t\t——————————學院:胡編亂造學院——————————\n\n"); printf("\t\t\t\t——————————班級:胡編1班————————————\n\n"); printf("\t\t\t\t——————————姓名:xiaozhu06———————————\n\n"); printf("\t\t\t\t*********************************************************\n\n"); } /* 幫助函數 顯示完成後再顯示菜單 */ void help() { printf("\n0.歡迎使用系統幫助!\n"); printf("\n1.初次進入系統後,請先選擇錄入學生學籍;\n"); printf("\n2.按照菜單提示鍵入數字代號;\n"); printf("\n3.錄入或刪除學生學籍信息後,切記保存;\n"); printf("\n4.謝謝您的使用!\n"); caidan(); } /* 主菜單函數 用戶輸入0-8的數字並顯示其功能 */ void caidan() { printf("—————————————————————————————————————————————————————————\n"); printf("*********************************************************\n"); printf("*****************歡迎使用學生學籍管理系統****************\n"); printf("***輸入“0”小白幫助 ***\n"); printf("***輸入“1”可錄入學籍信息 ***\n"); printf("***輸入“2”可修改學籍信息 ***\n"); printf("***輸入“3”可添加學籍信息 ***\n"); printf("***輸入“4”可以刪除學籍的信息 ***\n"); printf("***輸入“5”可以查找學生學籍的信息 ***\n"); printf("***輸入“6”可以輸出學籍表 ***\n"); printf("***輸入“7”清空文件中儲存的學生信息 ***\n"); printf("***輸入“8”結束系統 ***\n"); printf("*********************************************************\n\n"); printf("請輸入編號:(1 —8)"); int x; scanf("%d",&x); switch(x) { case 0: system("cls"); help(); break; case 1: system("cls"); shuru(); break; case 2 : system("cls"); xiugai(); break; case 3: system("cls"); tianjia(); break; case 4: system("cls"); shanchu(); break; case 5: system("cls"); chazhao(); break; case 6: system("cls"); shuchu(); caidan(); break; case 7: system("cls"); del(); caidan(); break; case 8: system("cls"); break; } } /* 錄入學籍信息函數 */ void shuru() { int l,m,p; printf("請輸入要錄入的學生人數:\n"); scanf("%d",&n); p = n; for(m = i+1; m <= (i+n); m ++)//循環輸入學生信息 { bb: int flage = 0; printf("請輸入學號:"); scanf("%s",aa[m].xh); for(l = 1; l < m; l ++) { if(strcmp(aa[m].xh,aa[l].xh) == 0) { flage = 1; break; } } if(flage == 1) { printf("學號重復,請重新輸入:\n"); goto bb; } p --; printf("請輸入姓名:"); scanf("%s",aa[m].xm); printf("請輸入年齡:"); scanf("%d",&aa[m].nl); printf("請輸入性別:"); scanf("%s",aa[m].xb1); printf("請輸入籍貫:"); scanf("%s",aa[m].jg); printf("請輸入電話:"); scanf("%s",aa[m].tele); printf("請輸入系別:"); scanf("%s",aa[m].xb); printf("請輸入專業:"); scanf("%s",aa[m].zy); printf("請輸入班級:"); scanf("%s",aa[m].bj); printf("\n"); printf("已錄入 %d 個學生信息\n",n-p); printf("\n"); if(p == 0) printf("本次錄入完成\n"); } i = i + n; baocun(); caidan(); } /* 修改函數 通過學號查找來修改學生信息 */ void xiugai() { int j; char k[100]; printf("請輸入需要修改的學生學籍的學號:"); scanf("%s",k); for(j=1; j<=i; j++) { if(strcmp(aa[j].xh,k) == 0) { strcpy(aa[j].xh,k); break; } } printf("請輸入姓名:"); scanf("%s",aa[j].xm); printf("請輸入年齡:"); scanf("%d",&aa[j].nl); printf("請輸入性別:"); scanf("%s",aa[j].xb1); printf("請輸入籍貫:"); scanf("%s",aa[j].jg); printf("請輸入電話:"); scanf("%s",aa[j].tele); printf("請輸入系別:"); scanf("%s",aa[j].xb); printf("請輸入專業:"); scanf("%s",aa[j].zy); printf("請輸入班級:"); scanf("%s",aa[j].bj); luru(); caidan(); } /* 查找函數 通過學號來查找學生信息 */ void chazhao() { int j,flage,z; char p[100]; flage = 0; printf("\n請輸入你所要查找學生的學號:"); scanf("%s",p); for(j=1; j<=i; j++) { if(strcmp(aa[j].xh,p) == 0) { flage = 1; break; } } if(flage == 1) { printf("\n已查到此人,信息為:\n\n"); printf("學號:%s\n姓名:%s\n年齡: %d\n性別:%s\n籍貫:%s\n電話:%s\n系別:%s\n專業:%s\n班級:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj); } if(flage == 0) printf("\n查無此人\n"); printf("\n是否繼續查找(是輸入1、否輸入0):"); scanf("%d",&z); switch(z) { case 1: chazhao(); break; case 0: system("cls"); break; default: system("cls"); break; } caidan(); } /* 添加信息函數 */ void tianjia() { FILE*fp; int counts=0;//表示添加學生的數量 int k; printf("\n 原來的學生信息:\n"); shuchu(); printf("請輸入想增加的學生數:\n"); scanf("%d",&n); for (k=i+1; k<=(i+n); k++) { aa: int flage; flage = 0; printf("\n 請輸入新增加學生的信息:\n"); printf("請輸入學號: "); scanf("%s",aa[k].xh); int q; for(q = 1; q < k; q ++) { if(strcmp(aa[k].xh,aa[q].xh) == 0) { flage = 1; break; } } if(flage == 1) { printf("學號重復,請重新輸入\n"); goto aa; } getchar(); printf("請輸入姓名: "); scanf("%s",aa[k].xm); getchar(); printf("請輸入性別: "); scanf("%c",aa[k].xb1); getchar(); printf("請輸入年齡: "); scanf("%d",&aa[k].nl); getchar(); printf("請輸入籍貫: "); scanf("%s",aa[k].jg); getchar(); printf("請輸入電話: "); scanf("%s",aa[k].tele); printf("請輸入系別: "); scanf("%s",aa[k].xb); getchar(); printf("請輸入專業: "); scanf("%s",aa[k].zy); getchar(); printf("請輸入班級: "); scanf("%s",aa[k].bj); printf("\n"); counts=counts+1; printf("已增加的人數:\n"); printf("%d\n",counts); } printf("\n添加完畢!\n"); i=i+n; printf("\n瀏覽增加後的所有學生信息:\n"); printf("\n"); baocun(); shuchu(); caidan(); } /* 刪除函數 */ void shanchu() { int k,j,t,flage,numb; char xh[100]; printf("請輸入要刪除的學生學籍的學號:\n"); scanf("%s",xh); flage=0; for(k=1; k<=i; k++) { if(strcmp(aa[k].xh,xh) == 0) { flage = 1; break; } } if(flage == 1) { printf("\n已找到此人,原始記錄為:\n"); printf("學號:%s\n姓名:%s\n年齡: %d\n性別:%s\n籍貫:%s\n電話:%s\n系別:%s\n專業:%s\n班級:%s\n",aa[k].xh,aa[k].xm,aa[k].nl,aa[k].xb1,aa[k].jg,aa[k].tele,aa[k].xb,aa[k].zy,aa[k].bj); printf("\n確實要刪除此人信息請按1,不刪除請按0\n"); scanf("%d",&numb); if(numb==1) { for(j=k; j<=i-1; j++) { strcpy(aa[j].xh,aa[j+1].xh); strcpy(aa[j].xm,aa[j+1].xm); aa[j].nl=aa[j+1].nl; strcpy(aa[j].xb1,aa[j+1].xb1); strcpy(aa[j].jg,aa[j+1].jg); strcpy(aa[j].tele,aa[j+1].tele); strcpy(aa[j].xb,aa[j+1].xb); strcpy(aa[j].zy,aa[j+1].zy); strcpy(aa[j].bj,aa[j+1].bj); } i --; } else; } if(numb == 1) luru(); if(flage == 0) { printf("\n對不起,查無此人!\n\n"); } printf("繼續刪除請按1,不再刪除請按0\n"); scanf("%d",&t); switch(t) { case 1: shanchu(); break; case 0: system("cls"); caidan(); break; default : system("cls"); break; } } /* 全部學生信息輸出 */ void shuchu() { FILE*fp; // fp=fopen("student.txt","r"); if((fp = fopen("student.txt","r")) == NULL) { printf("打開文件失敗\n"); exit(EXIT_FAILURE); } /*- while循環 讀取文件中的數據 */ char a[100]; while(fgets(a,100,fp)) { printf("%s",a); } fclose(fp); getchar(); } /* 保存函數 學生信息每次添加後以 追加 的方式保存到文件中 */ void baocun() { FILE*fp; fp=fopen("student.txt","ab+"); int j; for(j=i-n+1; j<=i; j++) { fprintf(fp,"學號:%s\n姓名:%s\n年齡: %d\n性別:%s\n籍貫:%s\n電話:%s\n系別:%s\n專業:%s\n班級:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj); fprintf(fp,"\n"); } printf("\n"); fclose(fp); FILE *fp1; if((fp1 = fopen("shuju.txt","ab+")) == NULL) { exit(EXIT_FAILURE); } for(j=i-n+1; j<=i; j++) { fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj); fprintf(fp,"\n"); } fclose(fp1); n = 0; } /* 當儲存過的學生信息變動時重新往文件中錄入數據 將所有學生信息全部以 寫 的方式錄入文件 */ void luru() { FILE*fp; fp=fopen("student.txt","wb"); int j; for(j=1; j<=i; j++) { fprintf(fp,"學號:%s\n姓名:%s\n年齡: %d\n性別:%s\n籍貫:%s\n電話:%s\n系別:%s\n專業:%s\n班級:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj); fprintf(fp,"\n"); } printf("\n"); fclose(fp); FILE *fp1; if((fp1 = fopen("shuju.txt","wb")) == NULL) { exit(EXIT_FAILURE); } for(j=1; j<=i; j++) { fprintf(fp,"\n"); fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj); } fprintf(fp,"\n"); fclose(fp1); } /* 讀取函數 讀取文件中儲存的數據,賦值到student結構體數組中 */ void duqu() { FILE *fp1; if((fp1 = fopen("shuju.txt","r")) == NULL) { exit(EXIT_FAILURE); } int stnum = 0,num = 0,l; char c[100],shuju[100]; while(!feof(fp1)) { num ++; if(num % 10 == 1) { stnum ++; } fgets(shuju,100,fp1); int j; j = 0; while(shuju[j] != '\n') { c[j] = shuju[j]; j ++; } c[j] = '\0'; if(num % 10 == 2) strcpy(aa[stnum].xh,c); if(num % 10 == 3) strcpy(aa[stnum].xm,c); if(num % 10 == 4) aa[stnum].nl = atoi(c); if(num % 10 == 5) strcpy(aa[stnum].xb1,c); if(num % 10 == 6) strcpy(aa[stnum].jg,c); if(num % 10 == 7) strcpy(aa[stnum].tele,c); if(num % 10 == 8) strcpy(aa[stnum].xb,c); if(num % 10 == 9) strcpy(aa[stnum].zy,c); if(num % 10 == 0) strcpy(aa[stnum].bj,c); if(feof(fp1)) { num ++; break; } } fclose(fp1); i = num / 10; printf("\n文件中有%d個學生信息\n\n",i); } /* 清空文件中的數據 */ void del() { FILE *fp; fp = fopen("student.txt","w"); ftruncate(fileno(fp), 0); fclose(fp); i = 0; FILE *fp1; fp1 = fopen("shuju.txt","w"); ftruncate(fileno(fp1), 0); fputs("\n",fp1); fclose(fp1); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。