#include
#include
#include
#define N 3
#define M 4
#define B 2
int k=1;//定义全局变量
struct Student//定义结构体变量
{
int num; //学生编号
char name[15];//学生名字
int score[3];//学生三科成绩
};
int main()
{
void menu();//声明菜单函数
while(k==1)//直到k=0停止循环
{
menu();
}
system("pause");//系统中止
return 0;
}
void menu()//定义菜单函数
{
struct Student stu[3];//结构体数组
void scaf(struct Student stu[]);//声明输入函数
void high(struct Student stu[]);//声明最高函数
void low(struct Student stu[]);//声明最低函数
void average(struct Student stu[]);//声明平均数函数
void ave(struct Student stu[]);//声明最低平均数函数
void aver(struct Student stu[]);//声明最高平均数函数
void increase(struct Student stu[]);//增加一名学生信息
void delet(struct Student stu[]);//删除一名学生信息
void modify(struct Student stu[]);//修改一名学生信息
int num;//定义用户输入变量
printf("\n\n \n\n");
printf("**************************************************************\n");
printf("* 学习管理系统 *\n");
printf("* *\n");
printf("* * * * * * * * * * *系统功能菜单* * * * * * * * * * *\n");
printf("* ------------------------------------------------ *\n");
printf("* 1.输入学生成绩 | 2.求最高总分 *\n");
printf("* 3.求最低总分 | 4.求平均分 *\n");
printf("* 5.最低平均分 | 6.最高平均分 *\n");
printf("* 7.增加一名学生信息 | 8.删除一名学生信息 *\n");
printf("* 9.输入名字修改信息 | 10.退出 *\n");
printf("* ------------------------------------------------ *\n");
printf("**************************************************************\n");
printf("请选择菜单编号(在选择2~9之前,应先选择1):\n");
scanf("%d",&num);
switch(num)//多分支调用各个函数
{
case 1:
scaf(stu);
break;
case 2:
high(stu);
break;
case 3:
low(stu);
break;
case 4:
average(stu);
break;
case 5:
ave(stu);
break;
case 6:
aver(stu);
break;
case 7:
increase(stu);
break;
case 8:
delet(stu);
break;
case 9:
modify(stu);
break;
case 10:
k=0;
break;
default:
printf("请在0~10之间选择!\n");
}
}
void scaf(struct Student stu[])//定义输入函数
{
FILE *fp;//定义文件指针
int i;//定义循环变量
printf("请输入学生信息:\n");
for(i=0;i
scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
/* 打开文件 */
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
}
for(i=0;i
if(fwrite(&stu[i],sizeof(int),1,fp)!=1)//写入学生信息
{
printf("写入错误!\n");
}
}
/* 关闭文件 */
fclose(fp);
/*再次打开文件 */
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
}
for(i=0;i
fread(&stu[i],sizeof(int),1,fp);
printf("%d %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
/*再次关闭文件 */
fclose(fp);
}
void high(struct Student stu[])//定义最高总分函数
{
FILE *fp;//定义文件指针
int max,i,p=1;//定义最大值,循环变量和位置初始值
int b[N];//定义新数组存放总分
for(i=0;i
b[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
max=b[0];//令第一个值为最大值
for(i=1;i
if(b[i]>max)
{
max=b[i];
p=i+1;
}
}
/* 打开文件 */
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
}
if(fwrite(&p,sizeof(int),1,fp)!=1)//写入位置变量
{
printf("写入错误!\n");
}
if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)//写入学生信息
{
printf("写入错误!\n");
}
if(fwrite(&max,sizeof(int),1,fp)!=1)//写入最高总分
{
printf("写入错误!\n");
}
/* 关闭文件 */
fclose(fp);
/* 打开文件 */
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
}
fread(&p,sizeof(int),1,fp);//读出位置变量
fread(&stu[p-1],sizeof(struct Student),1,fp);//读出对应学生信息
fread(&max,sizeof(int),1,fp);//读出最高总分
printf("最高总分是第%d学生\n",p);
printf("这位学生信息是:\n");
printf("%d %s %d %d %d \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
printf("总分是%d\n",max);
/* 关闭文件*/
fclose(fp);
}
void low(struct Student stu[])//定义最低函数
{
FILE *fp;//文件指针
int i,t=1;//定义循环变量和位置初始值
int a[N];//定义新数组存放总分
int min;//定义最低总分
for(i=0;i
a[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
min=a[0];//令第一个总分为最低总分
for(i=1;i
if(a[i]
min=a[i];
t=i+1;
}
}
/*打开文件*/
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
}
if(fwrite(&t,sizeof(int),1,fp)!=1)//写入位置变量
{
printf("写入错误!\n");
}
if(fwrite(&stu[t-1],sizeof(struct Student),1,fp)!=1)//写入对应学生信息
{
printf("写入错误!\n");
}
if(fwrite(&min,sizeof(int),1,fp)!=1)//写入最低总分
{
printf("写入错误!\n");
}
/* 关闭文件 */
fclose(fp);
/* 打开文件 */
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
}
fread(&t,sizeof(int),1,fp);//读出位置变量
fread(&stu[t-1],sizeof(struct Student),1,fp);//读出对应学生的信息
fread(&min,sizeof(int),1,fp);//读出最低总分信息
printf("最低总分是第%d名学生\n",t);
printf("这名学生信息是:%d %s %d %d %d\n",stu[t-1].num,stu[t-1].name,stu[t-1].score[0],stu[t-1].score[1],stu[t-1].score[2]);
printf("最低总分是%d\n",min);
/* 关闭文件*/
fclose(fp);
}
void average(struct Student stu[])//定义平均分函数
{
FILE *fp;//定义文件指针
int i;//定义循环变量
int average[3];//定义存放平均分数组
for(i=0;i
average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
/*打开文件*/
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
for(i=0;i
if(fwrite(&average[i],sizeof(struct Student),1,fp)!=1)//写入平均分信息
{
printf("写入错误!\n");
}
}
/*关闭文件*/
fclose(fp);
/*打开文件*/
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
for(i=0;i
fread(&average[i],sizeof(struct Student),1,fp);//读出平均分信息
printf("第%d位同学的平均分是:\n",i+1);
printf("%d\n",average[i]);
}
fclose(fp);
}
void ave(struct Student stu[])//定义最低平均分函数
{
FILE *fp;//定义文件指针
int i,p=1;//定义循环变量和位置初始值
int average[3];//定义存放平均分数组
int min;//定义最低平均分变量
for(i=0;i
average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
min=average[0];//令第一个平均分为最低平均分
for(i=1;i
if(min>average[i])
{
min=average[i];
p=i+1;
}
}
/*打开文件*/
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
if(fwrite(&p,sizeof(int),1,fp)!=1)//写入位置变量
{
printf("写入错误!\n");
}
if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)//写入对应学生信息
{
printf("写入错误!\n");
}
if(fwrite(&min,sizeof(int),1,fp)!=1)//写入最低平均分
{
printf("写入错误!\n");
}
/*关闭文件*/
fclose(fp);
/*打开文件*/
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
fread(&p,sizeof(int),1,fp);//读出位置信息
fread(&stu[p-1],sizeof(struct Student),1,fp);//读出对应学生信息
fread(&min,sizeof(int),1,fp);//读出对应最低平均分
printf("平均分最低的同学是第%d位:\n",p);
printf("这位同学的信息是:%d %s %d %d %d \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
printf("平均分最低是:%d\n",min);
/*关闭文件*/
fclose(fp);
}
void aver(struct Student stu[])//定义最高平均分
{
FILE *fp;
int i,p=1;
int average[3];
int max;
for(i=0;i
average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
max=average[0];
for(i=1;i
if(max
max=average[i];
p=i+1;
}
}
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
if(fwrite(&p,sizeof(int),1,fp)!=1)
{
printf("写入错误!\n");
}
if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)
{
printf("写入错误!\n");
}
if(fwrite(&max,sizeof(int),1,fp)!=1)
{
printf("写入错误!\n");
}
fclose(fp);
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
fread(&p,sizeof(int),1,fp);
fread(&stu[p-1],sizeof(struct Student),1,fp);
fread(&max,sizeof(int),1,fp);
printf("平均分最高的同学是第%d位:\n",p);
printf("这位同学的信息是:%d %s %d %d %d \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
printf("平均分最高是:%d\n",max);
fclose(fp);
}
void increase(struct Student stu[])//定义增加一个学生信息函数
{
FILE *fp;//文件指针
int i;//定义循环变量
struct Student stu1[M];//定义新数组
for(i=0;i
stu1[i]=stu[i];
}
printf("请输入新的同学信息:\n");
scanf("%d %s %d %d %d",&stu1[3].num,stu1[3].name,&stu1[3].score[0],&stu1[3].score[1],&stu1[3].score[2]);
if((fp=fopen("student","w"))==NULL)
{
printf("打开文件出错!\n");
exit(0);
}
for(i=0;i
if(fwrite(&stu1[i],sizeof(struct Student),1,fp)!=1)
{
printf("写入错误!\n");
}
}
fclose(fp);
rewind(fp);
if((fp=fopen("student","r"))==NULL)
{
printf("打开文件出错!\n");
exit(0);
}
for(i=0;i
fread(&stu1[i],sizeof(struct Student),1,fp);
printf("第%d位同学的信息是:\n",i+1);
printf("%d %s %d %d %d \n",stu1[i].num,stu1[i].name,stu1[i].score[0],stu1[i].score[1],stu1[i].score[2]);
}
fclose(fp);
}
void delet(struct Student stu[])//定义删除一名学生信息函数
{
FILE *fp;
int i,p;
char name[15];
struct Student stu2[B];
printf("请输入您要删除对象的名字:\n");
scanf("%s",name);
for(i=0;i
if(strcmp(name,stu[i].name)==0)
{
p=i;
}
}
if(p==0)
{
for(i=1;i
stu2[i-1]=stu[i];
}
}
if(p==2)
{
for(i=0;i
stu2[i]=stu[i];
}
}
if(p==1)
{
stu2[0]=stu[0];
stu2[1]=stu[2];
}
if((fp=fopen("student","w"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
for(i=0;i {
if(fwrite(&stu2[i],sizeof(struct Student),1,fp)!=1)
{
printf("写入错误!\n");
}
}
fclose(fp);
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
for(i=0;i {
fread(&stu2[i],sizeof(struct Student),1,fp);
printf("%d %s %d %d %d",stu2[i].num,stu2[i].name,stu2[i].score[0],stu2[i].score[1],stu2[i].score[2]);
}
fclose(fp);
}
void modify(struct Student stu[])//修改一名学生信息
{
FILE *fp;//定义文件指针
int i;//定义循环变量i
char name[15];//定义姓名数组
int p;//定义位置变量
struct Student stu3[N];
printf("输入请修改的学生姓名:\n");
scanf("%s",name);
for(i=0;i
if(strcmp(name,stu[i].name)==1)
{
p=i;
}
}
if(p==0)
{
for(i=1;i
stu3[i]=stu[i];
}
printf("请输入修改学生的信息:\n");
scanf("%d %s %d %d %d\n",&stu3[0].num,stu3[0].name,&stu3[0].score[0],&stu3[0].score[1],&stu3[0].score[2]);
}
if(p==1)
{
stu3[0]=stu[0];
stu3[2]=stu[2];
printf("请输入修改学生的信息:\n");
scanf("%d %s %d %d %d\n",&stu3[1].num,stu3[1].name,&stu3[1].score[0],&stu3[1].score[1],&stu3[1].score[2]);
}
if(p==2)
{
for(i=0;i<(N-1);i++)
{
stu3[i]=stu[i];
}
printf("请输入修改学生的信息:\n");
scanf("%d %s %d %d %d\n",&stu3[2].num,stu3[2].name,&stu3[2].score[0],&stu3[2].score[1],&stu3[2].score[2]);
}
if((fp=fopen("student","w"))==NULL)
{
printf("打开文件错误!\n");
exit(0);
}
for(i=0;i
if(fwrite(&stu3[i],sizeof(struct Student),1,fp)!=1)
{
printf("写入错误!\n");
}
}
fclose(fp);
if((fp=fopen("student","r"))==NULL)
{
printf("打开错误!\n");
exit(0);
}
for(i=0;i
fread(&stu3[i],sizeof(struct Student),1,fp);
}
printf("重新修改后的学生信息:");
for(i=0;i
printf("%d %s %d %d %d\n",stu3[i].num,stu3[i].name,stu3[i].score[0],stu3[i].score[1],stu3[i].score[2]);
}
fclose(fp);
}