学籍信息管理系统
.
系统功能:录入、修改、添加、删除、查找、读取、删除数据
系统主要技术:基本就是函数的调用,只用到结构体,与文件的读写
.
所有的数据改动都会及时保存到文件
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);
}