C語言實現(xiàn)學籍信息管理系統(tǒng)
更新時間:2022年07月22日 11:09:57 作者:活捉一只xiaozhu
這篇文章主要為大家詳細介紹了C語言實現(xiàn)學籍信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)學籍信息管理系統(tǒng)的具體代碼,供大家參考,具體內容如下
- 系統(tǒng)功能:錄入、修改、添加、刪除、查找、讀取、刪除數(shù)據(jù)
- 系統(tǒng)主要技術:基本就是函數(shù)的調用,只用到結構體,與文件的讀寫
所有的數(shù)據(jù)改動都會及時保存到文件
student.txt文件用來儲存所有信息
shuju.txt文件用來儲存信息數(shù)據(jù)
代碼如下
/* ?? ??? ??? ?學籍信息管理系統(tǒng) 系統(tǒng)功能:錄入、修改、添加、刪除、查找、讀取、刪除數(shù)據(jù) 系統(tǒng)主要技術:基本就是函數(shù)的調用,還有結構體,與文件的讀寫? */ #include<stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int n = 0;//變動的學生個數(shù)? int i=0;//用來儲存總共的學生人數(shù) 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];//學生專業(yè) ? ? char bj[30];//學生班級 } aa[100]; //定義一個學生基本學籍信息的結構體,可容納100人; //申明各函數(shù)! void init();//初始化界面? void help();//系統(tǒng)幫助 void chazhao();//查找 void xiugai();//修改函數(shù) void caidan();//主菜單 void shuru();//輸入函數(shù) void tianjia();//添加函數(shù) void shanchu();//刪除函數(shù) void shuchu();//輸出函數(shù) void baocun();//保存函數(shù) void duqu();//讀取函數(shù) void del();//清空文件數(shù)據(jù)? void luru();//全部信息錄入文件? /* 主函數(shù)? */ int main() { ?? ?init();? ?? ?system("pause"); ?? ?system("cls"); ?? ? ?? ?duqu(); ?? ? ? ? caidan(); ? ? return 0; } /* 系統(tǒng)初始化界面 */? void init() { ?? ?printf("————————————————————————————————————————————————————————————\n\n"); ? ? printf("\t\t\t\t*********************************************************\n\n"); ? ? printf("\t\t\t\t*****************歡迎使用學生學籍管理系統(tǒng)****************\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"); } /* 幫助函數(shù) 顯示完成后再顯示菜單 */ void help() { ? ? printf("\n0.歡迎使用系統(tǒng)幫助!\n"); ? ? printf("\n1.初次進入系統(tǒng)后,請先選擇錄入學生學籍;\n"); ? ? printf("\n2.按照菜單提示鍵入數(shù)字代號;\n"); ? ? printf("\n3.錄入或刪除學生學籍信息后,切記保存;\n"); ? ? printf("\n4.謝謝您的使用!\n"); ? ? caidan(); } /* 主菜單函數(shù) 用戶輸入0-8的數(shù)字并顯示其功能 */ void caidan() { ? ? printf("—————————————————————————————————————————————————————————\n"); ? ? printf("*********************************************************\n"); ? ? printf("*****************歡迎使用學生學籍管理系統(tǒng)****************\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”結束系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?***\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; ? ? } } /* 錄入學籍信息函數(shù)? */ void shuru() { ?? ?int l,m,p; ? ? printf("請輸入要錄入的學生人數(shù):\n"); ? ? scanf("%d",&n); ? ? p = n; ? ? for(m = i+1; m <= (i+n); m ++)//循環(huán)輸入學生信息 ? ? { ?? ?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("請輸入專業(yè):"); ? ? ? ? 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(); } /* 修改函數(shù) 通過學號查找來修改學生信息 */ 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("請輸入專業(yè):"); ? ? scanf("%s",aa[j].zy); ? ? printf("請輸入班級:"); ? ? scanf("%s",aa[j].bj); ? ? luru(); ? ? caidan(); } /* 查找函數(shù) 通過學號來查找學生信息 */ 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專業(yè):%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是否繼續(xù)查找(是輸入1、否輸入0):"); ?? ?scanf("%d",&z); ?? ?switch(z) ?? ?{ ?? ??? ?case 1: ?? ??? ??? ?chazhao(); ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?system("cls"); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?system("cls"); ?? ??? ??? ?break; ?? ?} ? ? caidan(); } /* 添加信息函數(shù) */ void tianjia() { ? ? FILE*fp; ? ? int counts=0;//表示添加學生的數(shù)量 ? ? int k; ? ? printf("\n 原來的學生信息:\n"); ?? ?shuchu(); ? ? printf("請輸入想增加的學生數(shù):\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("請輸入專業(yè): ?"); ? ? ? ? scanf("%s",aa[k].zy); ? ? ? ? getchar(); ? ? ? ? printf("請輸入班級: ?"); ? ? ? ? scanf("%s",aa[k].bj); ? ? ? ? printf("\n"); ? ? ? ? counts=counts+1; ? ? ? ? printf("已增加的人數(shù):\n"); ? ? ? ? printf("%d\n",counts); ? ? } ? ? printf("\n添加完畢!\n"); ? ? i=i+n; ? ? printf("\n瀏覽增加后的所有學生信息:\n"); ? ? printf("\n"); ? ? baocun(); ? ? shuchu(); ? ? ? ? caidan(); } /* 刪除函數(shù) */ 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專業(yè):%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("繼續(xù)刪除請按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循環(huán)? ?? ?讀取文件中的數(shù)據(jù)? ?? ?*/ ?? ?char a[100]; ?? ?while(fgets(a,100,fp)) ?? ?{ ?? ??? ? ?? ??? ?printf("%s",a); ?? ?} ?? ?fclose(fp); ?? ?getchar(); } /* 保存函數(shù) 學生信息每次添加后以 追加 的方式保存到文件中? */ 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專業(yè):%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; } /* 當儲存過的學生信息變動時重新往文件中錄入數(shù)據(jù)? 將所有學生信息全部以 寫 的方式錄入文件? */ 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專業(yè):%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); } /* 讀取函數(shù) 讀取文件中儲存的數(shù)據(jù),賦值到student結構體數(shù)組中? */ 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); } /* 清空文件中的數(shù)據(jù)? */ 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); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C語言用fun函數(shù)實現(xiàn)兩個數(shù)的交換方式
這篇文章主要介紹了C語言用fun函數(shù)實現(xiàn)兩個數(shù)的交換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12