各位大神,怎样把一科成绩改成五科成绩啊
#include <stdio.h>#include <stdlib.h>
#include <string.h>
struct student
{
char name[60];
char ID[7];
int score;
};
int dq(struct student st[]);
void xianshi();
void bc(struct student st[]);
void add();
void select();
void search();
void student_number_search();
void name_search();
void del();
void name_del();
void student_number_del();
void tongji();
void sort();
void bjg();
void change();
void student_number_change();
void name_change();
void save();
void back();
struct student st[300]; //这个数组用来保存所有的学生信息 和文件里面的一致
int Number=0; //记录总的学生人数 也就是数组/文件里面的学生人数
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("C://student.dat","rb"))==NULL)
{
printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{
//这里仅为了建立文件
fp=fopen("C://student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st); //要是文件只能够已经有数据 将数据初始化到数组中
}
system("cls");
while(1)
{
xianshi();
printf("\t====>请选择:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);
//退出
break;
case 1: add();
back();//增加学生成绩
break;
case 2: select();
back();//查看学生成绩
break;
case 3: search();
back();// 查找
break;
case 4: del();
back();//删除
break;
case 5: tongji();
back();//统计
break;
case 6: sort();
back();//排序
break;
case 7: bjg();
back();//输出不及格
break;
case 8: change();
back();//修改
break;
case 9:save();
back();//保存
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
void save()
{
printf("\t=====程序在运行时已自动保存.....\n");
}
void back()
{
printf("\t===>按Enter键返回主菜单\n");
}
void change() //修改学生信息
{
int way=0;
printf("请选择修改查找方式\n");
printf("1 按姓名查找修改\n");
printf("2 按学号查找修改\n");
scanf("%d",&way);
switch(way)
{
case 1: name_change();
break;
case 2: student_number_change();
break;
default: printf("输入有误,结束!\n");
break;
}
}
//按姓名修改
void name_change()
{
FILE *fp=NULL;
char name[60];
int i=0;
int changeIndex=0;
int index=0;
printf("请输入要修改的学生姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name))
{
changeIndex=i; //保存要修改的人的下标
}
break;
}
printf("\t姓名\t学号\t成绩\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("请重新输入该学生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("学号:");
scanf("%s",st[changeIndex].ID);
printf("成绩:");
scanf("%d",&st[changeIndex].score);
//信息修改后重新更新文件里面的数据 以保持数据一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
}
void student_number_change()//按学号修改
{
FILE *fp=NULL;
char id[60];
int i=0;
int changeIndex=0;
int index=0;
printf("请输入要修改的学生学号:");
scanf("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID))
{
changeIndex=i; //保存要修改的人的下标
}
break;
}
printf("\t姓名\t学号\t成绩\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("请重新输入该学生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("学号:");
scanf("%s",st[changeIndex].ID);
printf("成绩:");
scanf("%d",&st[changeIndex].score);
//信息修改后重新更新文件里面的数据 以保持数据一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}
void bjg() //输出不及格人数
{
int i=0;
printf("以下是不及格:\n");
printf("\t姓名\t学号\t成绩\n");
for (i=0;i<Number;i++)
{
if (st[i].score<60)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void sort()//排序
{
struct student temp;
int wantNUmber=0;
int i=0;
int j=0;
for(i=0;i<Number-1;i++)
{
for(j=i;j<Number-1;j++)
{
if(st[j].score>st[j+1].score)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("你想输出前几名的成绩:");
scanf("%d",&wantNUmber);
if (wantNUmber>Number)
{
wantNUmber=Number;
}
printf("\t姓名\t学号\t成绩\n");
for(i=0;i<wantNUmber;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void tongji()//统计
{
int i=0;
double sum=0.0;
for(i=0;i<Number;i++)
{
sum+=st[i].score;
}
printf("全班总分为:%f\n",sum);
printf("平均分为:%f\n",sum/Number);
}
void del()//删除
{
int n=0;
printf("1 按姓名删除\n");
printf("2 按学号删除\n");
scanf("%d",&n);
switch(n)
{
case 1: name_del();
break;
case 2: student_number_del();
break;
}
}
void name_del()//按姓名删除
{
FILE *fp=NULL;
char name[60];
int i=0;
int j=0;
printf("请输入要删除的学生姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0) //如果查找到就删除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}
//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
void student_number_del()//按学号删除
{
FILE *fp=NULL;
char id[60];
int i=0;
int j=0;
printf("请输入要删除的学生学号:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0) //如果查找到就删除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}
//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
void search()//查找学生
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按学号查找\n");
scanf("%d",&n);
switch(n)
{
case 1: name_search();
break;
case 2: student_number_search();
break;
default: printf("输入有误,结束!\n");
break;
}
}
void student_number_search()//按学号查找
{
char id[7];
int i=0;
printf("请输入要查找学生学号:");
scanf("%s",id);
system("cls");
printf("\t姓名\t学号\t成绩\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void name_search()//按姓名查找
{
char name[7];
int i=0;
printf("请输入要查找学生姓名:");
scanf("%s",name);
system("cls");
printf("\t姓名\t学号\t成绩\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void select()//查看学生
{
int i=0;
printf("以下是全部学生成绩\n");
printf("\t姓名\t学号\t成绩\n");
for(i=0;i<Number;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void add()//增加学生
{
int numberTemp=0;
int i=0;
struct student temp; //临时保存信息
printf("请输入要增加学生成绩个数:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("输入第%d个同学信息\n",i+1);
printf("姓名:");
scanf("%s",temp.name);
printf("学号:");
scanf("%s",temp.ID);
printf("成绩:");
scanf("%d",&temp.score);
st[Number++]=temp; //将刚添加的写入到数组
bc(&temp); //将刚添加的写入到文件
}
printf("添加成功\n");
}
void bc(struct student *st)
{
FILE *fp=NULL;
fp=fopen("C://student.dat","ab+");
fwrite(st,sizeof(struct student),1,fp);
fclose(fp);
}
int dq(struct student st[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C://student.dat","rb");
while(fread(&st[i],sizeof(struct student),1,fp))
i++;
fclose(fp);
return i;
}
void xianshi()
{
printf("\n\t 欢迎使用学生成绩管理系统 \n");
printf("\t================================================================\n");
printf("\t 1. 增加学生成绩 2. 查看学生成绩 \n");
printf("\t 3. 查找学生成绩 4. 删除学生成绩 \n");
printf("\t 5. 统计(总成绩和平均分) 6. 输出前N名学生成绩 \n");
printf("\t 7. 输出不及格人数 8. 修改学生信息 \n");
printf("\t 9. 保存数据 0.退出系统\n");
printf("\t=================================================================\n");
}