#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
void welcome();
void menu();
void in();
void exit1();
void read();
void add();
void sort();
void count();
void change();
void xh();
void xm();
void maxs();
void aver();
void num();
void du();
#define M 3//课程数
struct student
{
int n;
char name[20];
float score[M];
float average;
}stu[50],stemp;
int main()
{
int i;
welcome();
menu();
scanf("%d",&i);
while(i>=1&&i<=7)//功能选择
{
switch (i)
{
case 1:in();break;
case 2:read();break;
case 3:add();break;
case 4:sort();break;
case 5:change();break;
case 6:count();break;
case 7:exit1();break;
}
system("pause");
system("CLS");//清屏
menu();
scanf("%d",&i);
}
}
void welcome()//欢迎界面
{
printf(" \t\t\t..____.╭╮╭╮.____...\n");
printf(" \t\t\t.._...╭-┴┴★╮_......\n");
printf(" \t\t\t.._...│◎ ︵│_......\n");
printf(" \t\t\t...※※※╰○--○╯※※※....\n");
printf(" \t\t\t.......欢迎使用........\n");
printf(" \t\t\t...................\n");
Sleep(1000);//延时进入
system("CLS");
}
void menu()//菜单
{
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| 班级成绩管理系统 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (1)成绩录入(用文件保存) |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (2)成绩浏览 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (3)成绩添加 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (4)成绩排序 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (5)成绩修改 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (6)成绩统计 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("\t\t| (7)退出系统 |\n");
printf("\t\t|-------------------------------------------|\n");
printf("请输入您要进行的操作(1~7):");
}
void in()//成绩录入case1
{
FILE *fp;
int i,j,n;
if((fp=fopen("message","wb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("请输入需要录入成绩的人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学号:");
scanf("%d",&stu[i].n);
printf("请输入姓名:");
scanf("%s",stu[i].name);
for(j=1;j<=M;j++)
{
printf("请输入课程%d的成绩:",j);
scanf("%f",&stu[i].score[j-1]);
}
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("录入失败!\n");
}
else printf("数据录入成功!\n");
}
fclose(fp);
}
void du()//从文件中读取
{
FILE *fp;
int i;
if((fp=fopen("message","rb"))==NULL)//以二进制读取方式打开
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<=50;i++)//将fp指向的文件读入到stu数组中
{
fread(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
}
void read()//成绩浏览case2
{
du();
int i,j;
printf("录入的数据为:\n");
printf("学号 姓名 ");
for(j=1;j<=M;j++)
{
printf(" 成绩%d",j);
}
printf("\n");
for(i=0;stu[i].n!=0;i++)
{
printf("%-6d%-10s",stu[i].n,stu[i].name);
for(j=1;j<=M;j++)
{
printf("%-5.1f\t",stu[i].score[j-1]);
}
printf("\n");
}
}
void add()//成绩添加case3
{
FILE *fp;
int i,j,x;
printf("请输入要添加数据的个数:");
scanf("%d",&x);
if((fp=fopen("message","ab"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<x;i++)
{
printf("请输入学号:");
scanf("%d",&stu[i].n);
printf("请输入姓名:");
scanf("%s",stu[i].name);
for(j=1;j<=M;j++)
{
printf("请输入课程%d的成绩:",j);
scanf("%f",&stu[i].score[j-1]);
}
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("file write error\n");
}
else printf("添加成功!\n");
}
fclose(fp);
}
void sort()//成绩排序case4
{
du();
int i,j;
for(i=0;stu[i].n!=0;i++)//求平均分
{
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
for(i=0;stu[i].n!=0;i++)//冒泡排序
{
for(j=0;j<50-i;j++)
{
if(stu[j].average<stu[j+1].average)
{
stemp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stemp;
}
}
}
for(i=0;stu[i].n!=0;i++)//输出排序结果
{
printf("按平均分排序的结果为:\n");
printf("排名 学号 姓名 ");
for(j=1;j<=M;j++)
{
printf(" 成绩%d",j);
}
printf(" 平均分");
printf("\n");
for(i=0;stu[i].n!=0;i++)
{
printf("%-6d%-6d%-10s",i+1,stu[i].n,stu[i].name);
for(j=1;j<=M;j++)
{
printf("%-5.1f\t",stu[i].score[j-1]);
}
printf("%-5.1f",stu[i].average);
printf("\n");
}
}
}
void change()//成绩修改case5
{
int c;
printf("请输入查找方式(1学号/2姓名):");
scanf("%d",&c);
switch (c)//查找方式选择(学号/姓名)
{
case 1:xh();break;
case 2:xm();break;
}
}
void xh()//按学号查找
{
FILE *fp;
int i,j;
if((fp=fopen("message","wb+"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<50;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
}
printf("请输入需要修改数据的学号:");
scanf("%d",&j);
for(i=0;stu[i].n!=0;i++)//查找输入学号学生的信息
{
if(stu[i].n==j)//找到
{
printf("要修改的数据为:\n");
printf("学号 姓名 ");
for(j=1;j<=M;j++)
{
printf(" 成绩%d",j);
}
printf("\n");
printf("%-6d%-10s",stu[i].n,stu[i].name);
for(j=1;j<=M;j++)
{
printf("%-5.1f\t",stu[i].score[j-1]);
}
printf("\n");
printf("请输入学号:");
scanf("%d",&stu[i].n);
printf("请输入姓名:");
scanf("%s",stu[i].name);
for(j=1;j<=M;j++)
{
printf("请输入课程%d的成绩:",j);
scanf("%f",&stu[i].score[j-1]);
}
break;
}
else if(stu[i+1].n==0)//未找到
{
printf("查无此人,请检查!\n");
for(i=0;stu[i].n!=0;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
return;
}
else//查找下一个
{
continue;
}
}
for(i=0;stu[i].n!=0;i++)//保存修改的数据
{
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("file write error\n");
}
else if(stu[i+1].n==0)
printf("修改成功!\n");
}
fclose(fp);
}
void xm()//按姓名查找
{
char name1[10];
FILE *fp;
int i,j;
if((fp=fopen("message","wb+"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<50;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
}
printf("请输入需要修改数据的姓名:");
scanf("%s",&name1);
for(i=0;i<50;i++)//查找输入的学生的信息
{
if(strcmp(stu[i].name,name1)==0)//找到
{
printf("要修改的数据为:\n");
printf("学号 姓名 ");
for(j=1;j<=M;j++)
{
printf(" 成绩%d",j);
}
printf("\n");
printf("%-6d%-10s",stu[i].n,stu[i].name);
for(j=1;j<=M;j++)
{
printf("%-5.1f\t",stu[i].score[j-1]);
}
printf("\n");
printf("请输入学号:");
scanf("%d",&stu[i].n);
printf("请输入姓名:");
scanf("%s",stu[i].name);
for(j=1;j<=M;j++)
{
printf("请输入课程%d的成绩:",j);
scanf("%f",&stu[i].score[j-1]);
}
break;
}
else if(stu[i+1].n==0)//未找到
{
printf("查无此人,请检查!\n");
for(i=0;stu[i].n!=0;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
return;
}
else//查找下一个
{
continue;
}
}
for(i=0;stu[i].n!=0;i++)//保存修改后的数据
{
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("file write error\n");
}
else if
评论5