#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
struct Student
{
char name[20];
char id;
union
{
double score;
char subject[10];
};
};
struct Class
{
struct Student s[MAX];
int count;
};
double input(struct Class *c)
{
double sum_score=0;
while(1)
{
printf("请输入%d个学生的姓名:",c->count+1);
scanf("%s",c->s[c->count].name);
printf("请输入%d个学生的id:",c->count+1);
getchar();
scanf("%c",&c->s[c->count].id);
if(c->s[c->count].id=='s'||c->s[c->count].id=='S')
{
printf("请输入%d个学生的分数",c->count+1);
scanf("%lf",&c->s[c->count].score);
sum_score+=c->s[c->count].score;
}
else if(c->s[c->count].id=='t'||c->s[c->count].id=='T')
{
printf("请输入%d个老师的课程:",c->count+1);
scanf("%s",c->s[c->count].subject);
}
c->count++;
char judge[10];
printf("是否继续录入学生信息");
scanf("%s",judge);
if(strcmp(judge,"yes")==0)
{
if(c->count==MAX)
{
printf("班级人数已满,无法继续录入");
break;
}
}
else if(strcmp(judge,"no")==0)
{ break;}
}
return sum_score;
}
void output(struct Class *c)
{
printf("班级人员信息如下:\n");
for(int i=0;i<c->count;i++)
{
printf("%s\t%c\t",c->s[i].name,c->s[i].id);
if(c->s[i].id=='s'||c->s[i].id=='S')
{
printf("%.2lf\n",c->s[i].score);
}
else
{
printf("%s\n",c->s[i].subject);
}
}
}
void insert(struct Class *c)
{
int num,i;
printf("请输入要插入的位置:\n");
scanf("%d",&num);
if(num>c->count||num<1)
{
printf("输入的数据不合法");
}
else
{
while(1)
{
for(i=c->count-1;i>=num-1;i--)
{
c->s[i+1]=c->s[i];
}
printf("请输插入学生的姓名");
scanf("%s",c->s[num-1].name);
printf("请输插入学生的id:");
getchar();
scanf("%c",&c->s[num-1].id);
if(c->s[num-1].id=='s'||c->s[num-1].id=='S')
{
printf("请输入插入学生的分数");
scanf("%lf",&c->s[num-1].score);
}
else if(c->s[num-1].id=='t'||c->s[num-1].id=='T')
{
printf("请输入插入老师的课程:");
scanf("%s",c->s[num-1].subject);
}
c->count++;
printf("是否继续录入学生信息");
char judge[10];
scanf("%s",judge);
if(strcmp(judge,"yes")==0)
{
if(c->count==MAX)
{
printf("班级人数已满,无法继续录入");
break;
}
}
else if(strcmp(judge,"no")==0)
{break;}
}
}
}
void delete(struct Class *c)
{
int num,i;
printf("请输入要删除的位置:\n");
scanf("%d",&num);
if(num>c->count||num<1)
{
printf("输入的数据不合法");
}
else
{
for(int i=num;i<c->count;i++)
{
c->s[i]=c->s[i+1];
}
c->count--;
}
}
int main(int argc, const char *argv[])
{
struct Class *c=(struct Class*)malloc(sizeof(struct Class));
if(c==NULL)
{
printf("创建班级失败\n");
return -1;
}
c->count=0;
double sum_score=input(c);
output(c);
printf("学生总成绩为:%.2lf\n",sum_score);
insert(c);
output(c);
delete(c);
output(c);
free(c);
c=NULL;
return 0;
}