废话不多说,直接上code
/*
Desc:学生信息管理系统
Thinking:利用文件IO改变文件数据实现
Coding实现如下:
*/
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
/*
desc:
定义学生信息结构体student
学号
班级
性别
JAVA成绩
C成绩
总成绩
平均成绩
*/
struct student
{
int num;
char name[20];
char clas[20];
char sex[5];
float Java_score;
float C_score;
float total;
float aver;
};
struct student stu[50];
int main()
{
//主菜单
void menu();
//插入
void in();
//删除
void delet();
//更新
void updet();
//查找
void select();
//显示所有
void print();
//排序
void sort();
//最好成绩
void max();
//分组查询
void cut();
//清屏
void clea();
//主菜单初始化
menu();
int n;
printf("请选择菜单(1-9):");
printf("\n");
scanf("%d",&n);
while(n)
{
if(n>=1&&n<=9)
{
switch(n)
{
//插入数据
case 1:
in();
break;
//删除数据
case 2:
delet();
break;
//更新数据
case 3:
updet();
break;
//选择数据
case 4:
select();
break;
//显示数据
case 5:
print();
break;
//数据排序
case 6:
sort();
break;
//显示最高成绩学生
case 7:
max();
break;
//数据按总成绩分段
case 8:
cut();
break;
//清屏
case 9:
clea();
break;
}
if(n==9)
{
menu();
}
printf("\n");
printf("请选择菜单(1-9):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("输入有误,请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
/*
操作目录
*/
void menu()
{
printf("\n\n\n");
printf("\t\t-------------------------------------------------\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||**************学生信息管理系统***************||\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||******************系统菜单*******************||\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t|| ||\n");
printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
printf("\t\t|| ||\n");
printf("\t\t||*********************************************||\n");
printf("\t\t-------------------------------------------------\n");
}
/*
输入学生信息
*/
void in()
{
void print();
FILE *fp;
int i;
int m=0;
char ch[2];
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
}
else
{
print();
}
if((fp=fopen("学生信息.txt","ab+"))==NULL)
{
printf("文件打开失败\n");
return;
}
printf("输入学生信息(y/n);\n");
scanf("%s",ch);
while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
printf("number:\n");
scanf("%3d",&stu[m].num);
for(i=0;i<m;i++)
{
if(stu[i].num==stu[m].num)
{
printf("您的信息已存在\n");
fclose(fp);
getchar();
return;
}
}
printf("name:\n");
scanf("%s",stu[m].name);
printf("class:\n");
scanf("%s",stu[m].clas);
printf("sex:\n");
scanf("%s",stu[i].sex);
printf("Java_score:\n");
scanf("%f",&stu[m].Java_score);
printf("C_score:\n");
scanf("%f",&stu[m].C_score);
stu[i].total=
stu[i].C_score+stu[i].Java_score;
stu[i].aver=
(stu[i].C_score+stu[i].Java_score)/2;
if(fwrite(&stu[m],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
else
{
printf("信息保存成功\n");
m++;
}
printf("是否继续录入学生信息(y/n):");
scanf("%s",ch);
}
fclose(fp);
}
/*
删除学生信息
*/
void delet()
{
void print();
FILE *fp;
int num;
int m=0;
int i;
int j;
int flag=0;
char ch[2];
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要删除学生信息的学号:");
scanf("%d",&num);
}
for(i=0;i<m;i++)
{
if(stu[i].num==num)
{
printf("该学生已找到,是否删除(y/n):");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
for(j=i;j<m;j++)
{
stu[j]=stu[j+1];
}
m--;
flag=1;
if((fp=fopen("学生信息.txt","wb"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(j=0;j<m;j++)
{
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
}
fclose(fp);
printf("删除成功!\n");break;
}
else
{
printf("学生信息存在,不需要删除。");
break;
}
}
}
if(m==i&&flag==0)
{
printf("未找到该学生");
}
}
/*
修改学生信息
*/
void updet()
{
void print();
int num;
char name[10];
char clas[20];
char sex[5];
float Java_score;
float C_score;
FILE *fp;
int m=0;
int a;
int i;
int j;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要修改学生信息的学号:");
scanf("%d",&num);
}
for(i=0;i<m;i++)
{
if(num==stu[i].num)
{
printf("1:学号,");
printf("2:姓名,");
printf("3:班级,");
printf("4:性别,");
printf("5:JAVA成绩,");
printf("6:C语言成绩\n");
printf("该学生已被找到,");
printf("请选择需要修改的内容(1-5):");
scanf("%d",&a);
while(a)
{
switch (a)
{
case 1:
printf("将%d学生的学号修改为:",num);
scanf("%d",&num);
stu[i].num=num;
for(j=i+1;j<m;j++)
{
if(stu[j].num==num)
{
printf("您修改的学号已存在\n");
getchar();
return;
}
}
break;
case 2:
printf("将%d学生的姓名修改为:",num);
scanf("%s",name);
strcpy(stu[i].name,name);
break;
case 3:
printf("将%d学生的班级修改为:",num);
scanf("%s",clas);
strcpy(stu[i].clas,clas);
break;
case 4:
printf("将%d学生的性别修改为:",num);
scanf("%s",sex);
strcpy(stu[i].sex,sex);
break;
case 5:
printf("将%d学生的JAVA成绩修改为:",num);
scanf("%f",&Java_score);
stu[i].Java_score=Java_score;
stu[i].total=stu[i].C_score+stu[i].Java_score;
stu[i].aver=(stu[i].C_score+stu[i].Java_score)/2;
break;
case 6:
printf("将%d学生的C语言成绩修改为:",num);
scanf("%f",&C_score);
stu[i].C_score=C_score;
stu[i].total=stu[i].C_score+stu[i].Java_score;
stu[i].aver=(stu[i].C_score+stu[i].Java_score)/2;
break;
default:
printf("选择错误,请重新选择需要修改的内容:");
scanf("%d",&a);
break;
}
printf("请选择需要修改的内容(如果已修改完成请按0):");
scanf("%d",&a);
}
if((fp=fopen("学生信息.txt","wb"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(j=0;j<m;j++)
{
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
}
fclose(fp);
printf("修改成功!\n");
break;
}
}
if(m==i)
{
printf("未找到该学生\n");
}
}
/*
控制台清屏
*/
void clea()
{
system("cls");
}
/*
查询学生信息
*/
void select()
{
int num;
int m=0;
int i;
FILE *fp;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
return;
}
printf("请输入学生学号进行查询:");
scanf("%d",&num);
for(i=0;i<m;i++)
{
if(num==stu[i].num)
{
printf("\n");
printf("该学生信息已被查找到;\n");
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[i].num,
stu[i].name,
stu[i].clas,
stu[i].sex,
stu[i].Java_score,
stu[i].C_score,
stu[i].total,
stu[i].aver);
break;
}
}
if(m==i)
{
printf("该学生信息不存在\n");
return;
}
}
/*
显示学生信息
*/
void print()
{
int i;
int m=0;
FILE *fp;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
for(i=0;i<m;i++)
{
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[i].num,
stu[i].name,
stu[i].clas,
stu[i].sex,
stu[i].Java_score,
stu[i].C_score,
stu[i].total,
stu[i].aver);
}
}
/*
排序
*/
void sort()
{
int i;
int j;
int m=0;
int ch;
FILE *fp;
struct student temp;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("1:学号升序,");
printf("2:JAVA成绩升序,");
printf("3:C语言升序,");
printf("4:总成绩升序,");
printf("5:平均成绩升序\n");
printf("请选择显示形式:");
scanf("%d",&ch);
switch (ch)
{
case 1:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].num>stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 2:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].Java_score>stu[j].Java_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 3:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].C_score>stu[j].C_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 4:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].total>stu[j].total)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 5:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].aver>stu[j].aver)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
}
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
for(i=0;i<m;i++)
{
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[i].num,
stu[i].name,
stu[i].clas,
stu[i].sex,
stu[i].Java_score,
stu[i].C_score,
stu[i].total,
stu[i].aver);
}
}
/*
最大值
*/
void max()
{
int i;
int j=0;
FILE *fp;
int m=0;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
for(i=0;i<m;i++)
{
if(stu[i].total>stu[j].total)
j=i;
}
printf("总成绩成绩最高的同学是:\n");
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[j].num,
stu[j].name,
stu[j].clas,
stu[j].sex,
stu[j].Java_score,
stu[j].C_score,
stu[j].total,
stu[j].aver);
}
/*
分组统计
*/
void cut()
{
int i;
int j;
float n;
FILE *fp;
int m=0;
int a=0;
int b=0;
int c=0;
a++;
b++;
c++;
int d= a+b+c;
if((fp=fopen("学生信息.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("说明:");
printf("按成绩分组,");
printf("大于等于总成绩的分为一组,");
printf("小于的分为一组\n");
printf("请输入按总成绩分组的值:");
scanf("%f",&n);
//判断如果输入的不是数字,要给与失败提示。
//但是正常情况无需判断
//TODO
printf("总成绩大于%.2f的同学有:\n",n);
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
for(i=0;i<m;i++)
{
if(stu[i].total>=n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[i].num,
stu[i].name,
stu[i].clas,
stu[i].sex,
stu[i].Java_score,
stu[i].C_score,
stu[i].total,
stu[i].aver);
}
printf("总成绩小于%.2f的同学有:\n",n);
printf("学号\t");
printf("姓名\t");
printf("班级\t");
printf("性别\t");
printf("JAVA成绩\t");
printf("C语言成绩\t");
printf("总成绩\t");
printf("平均成绩\n");
for(j=0;j<m;j++)
{
if(stu[j].total<n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",
stu[j].num,
stu[j].name,
stu[j].clas,
stu[j].sex,
stu[j].Java_score,
stu[j].C_score,
stu[j].total,
stu[j].aver);
}
}