#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//函数声明
int number=4;
void menu();
void show(struct student a[]);
void Delete(struct student a[],char xuehao[20]);
void add(struct student a[]);
void pingjun(struct student a[]);
void search(struct student a[],char string[20]);
void rank(struct student a[]);
//结构体数组
struct student
{
char name[20];
char xuehao[20];
int yuwen;
int yingyu;
int shuxue;
}student1[100];
/*={"李定国","晋王",78,99,100,
"刘裕","高祖" , 100 , 100 , 100,
"刘义隆" ,"太祖" , 89, 74 , 23,
"刘秀", "世祖" , 100, 100 , 100};*/
void save(struct student a[])
{
FILE *fp;
int i;
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0;i<number;i++)
{
if(fwrite(&a[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
}
fclose(fp);
}
void read(struct student a[])
{
FILE *fp;
int i;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0;i<number;i++)
{
fread(&a[i],sizeof(struct student),1,fp);
printf("%-7s",a[i].name);
printf("%-6s",a[i].xuehao);
printf("%-6d",a[i].yuwen);
printf("%-6d",a[i].yingyu);
printf("%-5d",a[i].shuxue);
printf("\n");
}
fclose(fp);
}
//主函数
int main()
{
FILE *fp;
int i;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("cannot open file\n");
}
for(i=0;i<number;i++)
fread(&student1[i],sizeof(struct student),1,fp);//先把文件里面的东西读到结构体数组中
menu();
return 0;
}
//完整函数
void menu()
{
int i;char string[20];
printf("请输入选项:\n");
printf("1:显示学生所有信息\n");
printf("2:按学号删除学生\n");
printf("3:添加学生\n");
printf("4:求各科平均分\n");
printf("5:按学号查询学生信息\n");
printf("6:按语文成绩排序\n");
scanf("%d",&i);
switch(i)
{
case 1:show(student1);break;
case 2:Delete(student1,string);break;
case 3:add(student1);break;
case 4:pingjun(student1);break;
case 5:search(student1,string);break;
case 6:rank(student1);break;
}
}
void show(struct student a[])
{
int q;
printf("姓名 学号 语文 英语 数学\n");
read(a);
printf("输入0返回菜单");
scanf("%d",&q);
if(q==0)
{
system("cls") ;//清屏函数
menu();
}
}
void Delete(struct student a[],char string[20])
{
int q;
scanf("%s",string);
for(int i=0;i<number;i++)
{
if(strcmp(string,a[i].xuehao)==0)
{
for(int j=i;j<=number;j++)
{
a[j]=a[j+1];
}
}
}
save(a);
number--;
printf("删除成功");
printf("\n");
printf("输入0返回菜单");
scanf("%d",&q);
if(q==0)
{
system("cls") ;//清屏函数
menu();
}
}
void add(struct student a[])
{
int q;
scanf("%s",a[number].name);
scanf("%s",a[number].xuehao);
scanf("%d",&a[number].yuwen);
scanf("%d",&a[number].yingyu);
scanf("%d",&a[number].shuxue);
save(a);
number++;
printf("添加完成");
printf("\n");
printf("输入0返回菜单");
scanf("%d",&q);
if(q==0)
{
system("cls") ;//清屏函数
menu();
}
}
void pingjun(struct student a[])
{
int q;
float yuwen1=0,shuxue1=0,yingyu1=0;
for(int i=0;i<number;i++)
{
yuwen1+=a[i].yuwen;
shuxue1+=a[i].shuxue;
yingyu1+=a[i].yingyu;
}
printf("语文平均分为:%f\n",yuwen1/number);
printf("英语平均分为:%f\n",yingyu1/number);
printf("数学平均分为:%f\n",shuxue1/number);
printf("输入0返回菜单");
scanf("%d",&q);
if(q==0)
{
system("cls") ;//清屏函数
menu();
}
}
void search(struct student a[],char string[20])
{
int q;
scanf("%s",string);
for(int i=0;i<number;i++)
{
if(strcmp(string,a[i].xuehao)==0)
{
printf("姓名 学号 语文 英语 数学\n");
printf("%-7s",a[i].name);
printf("%-6s",a[i].xuehao);
printf("%-6d",a[i].yuwen);
printf("%-6d",a[i].yingyu);
printf("%-5d",a[i].shuxue);
printf("\n");
}
}
printf("输入0返回菜单");
scanf("%d",&q);
if(q==0)
{
system("cls") ;//清屏函数
menu();
}
}
void rank(struct student a[])
{
struct student temp;
for(int i=0;i<number-1;i++)
{
for(int j=0;j<number-1-i;j++)
{
if(a[j].yuwen>a[j+1].yuwen)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
save(a);
show(a);
}