C语言实现学籍信息管理系统
作者:活捉一只xiaozhu
这篇文章主要为大家详细介绍了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); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。