第1个回答 2007-12-02
前段时间正好做了这个题目,还在U盘上呢,拷给你吧,不过你给的分太低了,加点给我哦.(大致的给你吧,可以进行输入,排序,插入,删除,不足的自己去改了.很容易
---------------------------------------------------
#include<stdio.h>
struct StuInfo
{
int StuID;
char name[20];
float score1;
float score2;
float score3;
float avg_score;
}Stu[50];
struct StuInfo input_StuInfo()
{
struct StuInfo Student,*p;
p=&Student;
printf("学号: ");
scanf("%d",&p->StuID);
printf("姓名: ");
fflush(stdin);
gets(p->name);
printf("第一门课程的成绩: ");
scanf("%f",&p->score1);
printf("第二门课程的成绩: ");
scanf("%f",&p->score2);
printf("第三门课程的成绩: ");
scanf("%f",&p->score3);
p->avg_score=(p->score1+p->score2+p->score3)/3;
return *p;
}
void display(int z,struct StuInfo Stu[])
{
int i;
struct StuInfo *p;
p=Stu;
printf("学号:\t\t姓名: \t\t平均成绩: \t\t\n");
for(i=0;i<z;i++)
printf("%d \t\t%s \t\t%.2f \t\t\n",(p+i)->StuID,&(p+i)->name,(p+i)->avg_score);
}
void order(int y,struct StuInfo Stu[])
{
int i,j;
struct StuInfo temp,*p;
p=Stu;
for(i=0;i<y;i++)
{
for(j=0;j<y-1;j++)
{
if((p+j)->avg_score<(p+j+1)->avg_score)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
return;
}
void main()
{
struct StuInfo *d;
int i,j,StuNum,del_StuID;
char ans='Y';
d=Stu;
printf("\t\t\t学员信息管理系统\n");
printf("请输入学生总人数: ");
scanf("%d" ,&StuNum);
for(i=0;i<StuNum;i++)
{
Stu[i]=input_StuInfo();
}
printf("\n\n\n排序前的学员信息为: \n");
display(StuNum,Stu);
order(StuNum,Stu);
printf("\n\n\n排序后的学员信息为: \n");
display(StuNum,Stu);
while(ans=='y'||ans=='Y')
{
printf("是否插入新学员?(Y/N)\n");
fflush(stdin);
ans=getchar();
if(ans=='y'||ans=='Y')
{
Stu[StuNum]=input_StuInfo();
printf("\n\n\n插入新学员后的学员信息如下: \n");
order(StuNum+1,Stu);
display(StuNum+1,Stu);
StuNum=StuNum+1;
}
}
for(ans='y';(ans=='y'||ans=='Y');)
{
printf("是否删除某个学员?(Y/N)\n");
fflush(stdin);
ans=getchar();
if(ans=='y'||ans=='Y')
{
printf("请输入要删除的学员的学号: ");
scanf("%d",&del_StuID);
for(i=0;i<StuNum;i++)
{
if(Stu[i].StuID==del_StuID)
break;
}
for(j=i;j<StuNum-1;j++)
{
Stu[j]=Stu[j+1];
}
printf("\n\n\n删除后的学员信息为: \n");
display(StuNum-1,Stu);
}
}
}