主要是文件的打开和读写方式,较为简单。
基于文件的学生管理系统 •要求:
1)、定义学生结构体,包含学号、姓名、成绩三个属性。
2)、实现功能如下:
添加学生
根据学号删除学生
根据学号修改学生信息
根据学号查询单个学生的信息
显示所有学生的信息
按照成绩从高到低进行重新排序
退出系统
#include
#include
struct Student
{
int id;
char name[20];
float s;
}std[1000];
void tianjia() //添加新的学生
{
FILE *fd;
fd = fopen("1.txt","a+");
printf("请输入学生学号:\n");
scanf("%d",&std[0].id);
printf("请输入学生姓名:\n");
scanf("%s",std[0].name);
printf("请输入学生成绩:\n");
scanf("%f",&std[0].s);
fwrite(&std[0],sizeof(struct Student),1,fd);
fclose(fd);
printf("添加成功!\n");
}
void xianshi() //显示所有的学生数据
{
FILE *fd;
int i ;
fd = fopen("1.txt","r");
for(i = 0; fread(&std[i],sizeof(struct Student),1,fd) == 1;i++)
{
printf("学号:%d\n",std[i].id);
printf("姓名:%s\n",std[i].name);
printf("成绩:%g\n",std[i].s);
printf("*******************************\n");
}
fclose(fd);
}
void shanchu() //删除(以学号)
{
FILE *fd;
int id;
int a;
int i,j;
fd = fopen("1.txt","r");
printf("请输入要删除学生的学号:\n");
scanf("%d",&id);
for(i =0;fread(&std[i],sizeof(struct Student),1,fd) == 1;i++)
{
if(std[i].id == id)
{
printf("删除成功!\n");
printf("删除的学生为:%s\n",std[i].name);
a = i;
}
}
fclose(fd);
fd = fopen("1.txt","w");
for(j=0;j {
if(j!=a)
fwrite(&std[j],sizeof(struct Student),1,fd);
}
fclose(fd);
}
void xiugai() //修改学生数据
{
FILE *fd;
int id;
int n=-1;
int i,j;
fd = fopen("1.txt","r");
printf("请输入要修改学生的学号:\n");
scanf("%d",&id);
for( i = 0;fread(&std[i],sizeof(struct Student),1,fd) == 1;i++)
{
if(std[i].id == id)
{
printf("要修改的学生资料如下:\n");
printf("学号:%d\n",std[i].id);
printf("姓名:%s\n",std[i].name);
printf("成绩:%g\n",std[i].s);
n = i;
}
}
if(n==-1)
{
printf("改学生不存在,请重新选择功能!\n");
return;
}
fclose(fd);
printf("请输入新的学号:\n");
scanf("%d",&std[n].id);
printf("请输入新的姓名:\n");
scanf("%s",std[n].name);
printf("请输入新的成绩:\n");
scanf("%f",&std[n].s);
fd = fopen("1.txt","w");
for(j=0;j fwrite(&std[j],sizeof(struct Student),1,fd);
fclose(fd);
printf("修改后改的资料为:\n");
printf("学号:%d\n",std[n].id);
printf("姓名:%s\n",std[n].name);
printf("成绩:%g\n",std[n].s);
}
void chaxun() //查询数据(以学号)
{
FILE*fd;
int id;
fd = fopen("1.txt","r");
printf("请输入要查询学生的学号:\n");
scanf("%d",&id);
for(int i =0;fread(&std[i],sizeof(struct Student),1,fd) ==1;i++)
{
if(std[i].id == id)
{
printf("学号为%d的学生资料为:\n",id);
printf("学号:%d\n",std[i].id);
printf("姓名:%s\n",std[i].name);
printf("成绩:%g\n",std[i].s);
}
}
fclose(fd);
}
void paixu()//排序从高到低,运用了选择排序
{
FILE *fd;
int i,j,k;
struct Student t;
fd = fopen("1.txt","r");
for(i = 0;fread(&std[i],sizeof(struct Student),1,fd) ==1;i++);
for(j=0;j
if(std[j].s
t = std[j];
std[j] = std[k];
std[k] = t;
}
}
fclose(fd);
fd = fopen("1.txt","w");
for(j=0;j fwrite(&std[j],sizeof(struct Student),1,fd);
fclose(fd);
printf("排序成功!\n");
}
int main()
{
int n;
printf("*******************************\n欢迎进入学生管理系统!\n");
printf("*******************************\n");
while(1)
{
printf("请输入选项进入功能:\n");
printf("1.添加学生\n");
printf("2.删除学生\n");
printf("3.修改学生信息\n");
printf("4.查询学生信息\n");
printf("5.显示所有学生信息\n");
printf("6.排序(按照成绩由高到低)\n");
printf("7.退出系统\n");
printf("*******************************\n");
scanf("%d",&n);
switch(n)
{
case 1:
tianjia();
break;
case 2:
shanchu();
break;
case 3:
xiugai();
break;
case 4:
chaxun();
break;
case 5:
xianshi();
break;
case 6:
paixu();
break;
case 7:
exit(-1);
break;
default:
printf("输入错误!\n");
}
printf("*******************************\n\n\n");
}
return 0;
}