实现对数据录入、查询、增加、删除、修改、排序、统计的功能
#include <stdio.h>
#define SIZE 10
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct student
{
int num;
char name[10];
int Yuwen;
int Maths;
int En;
int CScore;
int Sum;
double Avarage;
}
stu[SIZE];
/*1查看数据(向文件fp中录入信息)*/
void ck()
{
FILE *fp;
fp=fopen("data.dat","wb");
if(fp==NULL)
{
printf(" cannot open file data.dat\n");
exit(0);
}
printf("输入要录入的学生数目:");
int N;
scanf("%d", &N);
printf("学号 姓名 语文 英语 数学 C语言\n");
for (int i = 0; i < N; i++)
{
scanf("%d%s%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);
stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;
stu[i].Avarage = stu[i].Sum / 4.0;
}
for (int i = 0; i < N; i++)
if (fwrite(&stu[i], sizeof(struct student),1,fp)!=1)
printf("file write error!\n");
fclose(fp);
}
/*
/*2输出文件fp中的数据*/
void flist()
{
FILE *fp;
int i;
fp=fopen("data.dat","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言成绩 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)//for(i=0;fread(&stu[i],6,1,fp)==1;i++)
{
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
/*3查找数据*/
void fsearch()
{
FILE *fp;
int num;
fp=fopen("data.dat","rb");
printf("请输入要查找的学号:");
scanf("%d",&num);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
if(stu[i].num==num)
{
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
fclose(fp);
}
/*4增加文件fp中的数据*/
void fadden()
{
FILE *fp;
fp=fopen("data.dat","ab+");
// rewind(fp);
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++);
int N;
printf("请输入要添加学生信息数目:");
scanf("%d", &N);
for(int i = 0; i < N; i++)
{
printf("请输入要增加的学号,姓名,语文成绩,数学成绩,英语成绩 c语言成绩:\n");
scanf("%d%s%d%d%d%d",&stu[i].num, stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);
stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;
stu[i].Avarage = stu[i].Sum / 4.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
return;
}
/*5修改文件fp中的数据*/
void fchange()
{
FILE *fp;
fp=fopen("data.dat","rb");
int i,num,n;
int flag=0;
printf("请输入要修改学生的学号:");
scanf("%d",&num);
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
if(stu[i].num==num)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
n=i;
flag=1;
}fclose(fp);
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("data.dat","rb+");
fseek(fp,n*sizeof(struct student),0);
printf("请输入新的学号,姓名,语文成绩,数学成绩,英语成绩,c语言成绩:");
scanf("%d%s%d%d%d%d",&stu[i].num,stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);
stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;
stu[i].Avarage = stu[i].Sum / 4.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("data.dat","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
/*6成绩排序*/
void ftaxis()
{
int i,j,n;
FILE *fp;
struct student t;
fp=fopen("data.dat","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].Sum<stu[j].Sum)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("data.dat","wb");
printf("\n\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表 \n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 语文 数学 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
printf("%d%6s%6d%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
/*7删除*/
void delet()
{
FILE *fp;
fp=fopen("data.dat","r+");
printf("请输入要删除的学生学号:");
int i, num;
scanf("%d", &num);
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)
{
}
fp=fopen("data.dat","w+");
for(int j=0;j<i;j++)
{
if (num != stu[j].num)
{
fwrite(&stu[j],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/*8统计*/
void tongji2()
{
int x,k;
printf("********************输入统计选项**********************\n"); /*选择功能菜单*/
printf("统计语文成绩不及格率请按:1\n");
printf("统计数学成绩不及格率请按:2\n");
printf("统计英语成绩不及格率请按:3\n");
scanf("%d",&x);/*用户选择变量 */
FILE *fp;
fp=fopen("data.dat","rb");
if(x==1)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)/*统计语文成绩不及格率*/
{
if(stu[i].Yuwen<60)
k++,
printf("不及格的分数为%d\n",stu[i].Yuwen);
}
printf("共%d人语文未及格\n",k);
printf(" **********************************************************");
}
if(x==2)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)/*统计数学成绩不及格率*/
{
if(stu[i].Maths<60)
k++,
printf("不及格的分数为%d\n",stu[i].Maths);
}
printf("共%d人数学未及格\n",k);
printf(" **********************************************************");
}
if(x==3)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].En<60)
k++,
printf("不及格的分数为%d\n",stu[i].En);
}
printf("共%d人英语不及格\n",k);
printf(" **********************************************************");
}
if(x==4)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].CScore<60)
k++,
printf("不及格的分数为%d\n",stu[i].CScore);
}
printf("共%d人C语言成绩不及格\n",k);
printf(" **********************************************************");
}
}
/*主函数*/
int main()
{
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 欢迎来到学生信息管理系统 ※\n");
printf("※ ※\n");
printf("※ 系部:建筑环境工程学院 专业:建筑电气与智能化 ※\n");
printf("※ 姓名: 学号: ※\n");
printf("※ 序号: 指导老师: ※\n");
printf("※ ※\n");
printf("※ 主菜单 ※\n");
printf("※ ※\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("※ ▲9.退出系统▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("请输入选择项(1-9):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<9)
{
switch(n)
{
case 1:ck();break;
case 2:flist();break;
case 3:fsearch();break;
case 4:fadden();break;
case 5:fchange();break;
case 6:ftaxis();break;
case 7:delet();break;
case 8:tongji2();break;
case 9:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 谢谢使用! ※\n");
printf("※ 再见! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 输入错误! ※\n");
printf("※ 请退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
return 0;
}
/*
2013 hu 32 54 87 54
2014 rt 35 54 87 98
2015 ko 96 54 87 22
2016 lo 65 84 78 45
*/
举一个例子
查询: