帮改一下。。。谢谢!!!!
问题描述学生信息由学号,姓名,性别,语文成绩,数学成绩,英语成绩,平均分和总分构成。
学号、姓名长度不超过20,学生人数不超过100。
写一个处理学生信息的程序,要求有以下功能
1)插入学生信息,当待插入的学号是从来就没有插入过的,则插入成功;否则插入不成功。
命令格式如下:
INSERT id name sex s1 s2 s3
表示插入一个学生信息。
插入成功显示插入的学生信息,格式如下:
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
如果已经有学号为id的学生信息,则插入不成功,则显示“Failed”
2)显示所有学生信息,命令格式如下:
LIST
按照学号从小到大的顺序显示所有学生信息。每个学生信息一行,格式如下
学号 姓名 性别 语文成绩 数学成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
3)
FIND id
查找学号为id的学生,查找成功就显示学生信息,格式如下
学号 姓名 性别 语文成绩 数学成绩 平均成绩 总成绩
查找不成功,则显示“Failed”
4)退出程序,命令格式如下:
QUIT
输出"Good bye!"后结束程序。
现在给定一个学生学号、姓名和三门课成绩,请输出该生的信息。
输入的最后一条命令总是QUIT
设计一个结构体表示学生信息。
分别设计两个函数,来处理学生信息的插入与输出。
设计一个函数对所有学生信息按学号进行排序。
再设计一个函数输出所有学生信息。在主函数中调用插入学生信息与显示所有学生信息的函数。
输入
输入有多行,每行一条命令,命令格式有:
INSERT id name sex s1 s2 s3
插入一条学生信息
LIST
按照学号从小到大的顺序显示所有学生信息,每个学生信息一行。
FIND id
查找学号为id的学生
QUIT
退出程序
输出
输出有多行,每个输入命令都有对应的输出,格式分别如下:
INSERT id name sex s1 s2 s3
插入后显示插入的学生信息,格式如下:
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
如果已经有学号为id的学生信息,则插入不成功,则显示“Failed”
LIST
按照学号从小到大的顺序显示所有学生信息,每个学生信息一行。每行格式如下:
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
FIND id
查找学号为id的学生,查找成功显示学生信息,格式如下
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
如果不存在学号为id的学生,则查找不成功,显示“Failed”
QUIT
输出"Good bye!"后结束程序。
输入样例
INSERT 09001 zhanghong F 78 82 87.5
INSERT 09003 lisi M 68 62 67.5
INSERT 09001 zhanghong F 78 82 87.5
FIND 09001
INSERT 09002 wangwu M 78 72 77.5
LIST
QUIT
输出样例
09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09003 lisi M 68.00 62.00 67.50 65.83 197.50
Failed
09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09002 wangwu M 78.00 72.00 77.50 75.83 227.50
09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09002 wangwu M 78.00 72.00 77.50 75.83 227.50
09003 lisi M 68.00 62.00 67.50 65.83 197.50
Good bye!
#include<stdio.h>
#include<string.h>
struct student
{
char xuehao[20];
char name [20];
char sex;
double score[3];
double ave;
double sum;
};
struct temp
{
char xuehao[20];
char name [20];
char sex;
double score[3];
double ave;
double sum;
}top;
int Insert(struct student stu[],int m)
{
int i,j,k=0;
scanf("%s %s %c",top.xuehao,top.name, &top.sex);
top.sum=0;
for(i=0; i<3; i++)
{
scanf("%lf", &top.score[i]);
top.sum += top.score[i];
}
top.ave=top.sum/3;
for(i=0;i<m-1;i++)
{
if(strcmp(stu[i].xuehao,top.xuehao)==0 )
{
printf("Failed\n");
k=1;
}
}
if(k==0)
{
strcpy(stu[m].xuehao,top.xuehao);
strcpy(stu[m].name,top.name);
stu[m].sex=top.sex;
for(j=0; j<3; j++)
{
stu[m].score[j]=top.score[j];
}
stu[m].ave=top.ave;
stu[m].sum=top.sum;
}
return k;
}
void Find (struct student stu[],char a[],int n)
{
int j,l=0,i,k;
for (j=0;j<n;j++)
{
if (strcmp(stu[j].xuehao,a)==0)
{
l=1;
k=j;
}
}
if (l==1)
{
printf("%s %s %c ",stu[k].xuehao,stu[k].name,stu[k].sex);
for(i=0; i<3; i++)
{
printf(" %.2f",stu[k].score[i]);
}
printf(" %.2f %.2f\n",stu[k].ave,stu[k].sum);
}
if (l==0)
printf ("Failed\n");
}
void List(struct student stu[], int n)
{
int i,j;
printf("%s %s %c ",stu[0].xuehao,stu[0].name,stu[0].sex);
for(j=0;j<3;j++)
{
printf("%.2f ", stu[0].score[0]);
}
printf("%.2f %.2f\n",stu[0].ave,stu[0].sum);
for(i=1;i<n && i>=1;i++)
{
if(strcmp(stu[i].xuehao,stu[i-1].xuehao)!=0)
{
printf("%s %s %c ",stu[i].xuehao,stu[i].name,stu[i].sex);
for(j=0;j<3;j++)
{
printf("%.2f ", stu[i].score[j]);
}
printf("%.2f %.2f\n",stu[i].ave,stu[i].sum);
}
}
}
void output(struct student stu[],int m)
{
int j;
printf("%s %s %c ", stu[m].xuehao, stu[m].name, stu[m].sex);
for(j=0; j<3; j++)
{
printf("%.2f ", stu[m].score[j]);
}
printf("%.2f %.2f\n", stu[m].ave, stu[m].sum);
}
void selSort(struct student *a, int n)
{
int i, j, k;
struct student t;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
if (strcmp(a[k].xuehao,a[j].xuehao)>0)
k=j;
if(k != i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
int main()
{
struct student stu[100];
char op[101];
char a[20];
int b;
int d=0;
while(scanf("%s", op))
{
switch(op[0])
{
case 'I':
b=Insert(stu,d);
if(b==0)
{
d++;
output(stu,d-1);
}
break;
case 'L':
selSort(stu,d);
List(stu,d);
break;
case 'Q':
printf("Good bye!\n");
return 0;
case 'F':
scanf("%s",a);
Find(stu,a,d);
break;
}
}
return 0;
}