#include "stdio.h"
short count = 0;
/* 两个结构,一个用来存放成绩,一个用来表示学生的基本信息*/
typedef struct {
float frist;
float second;
float third;
}result;
typedef struct{
short num;
char name[10];
result cj;
} stu;
/*录入、插入函数*/
void addstu(stu *myStu)
{
short i, num,yn = 1;//i循环变量,num增加的学号(用以判断该号是否已经存在),yn/ch条件
char ch;
while (ch)
{
fflush(stdin);
printf("/t/t请输入学号:");
scanf("%d",&num);
for (i = 0 ; i <= count ; i ++)
{
if (myStu[i].num == num)
{
printf("/t/t有重复的学号,请重新输入./n");
yn = 0;
break;
}
else
yn = 1;
}
if(yn)
{
myStu[count].num = num;
fflush(stdin);
printf("/t/t请输入姓名:");
scanf("%s",myStu[count].name );
printf("/t/t请输入第一门功课的成绩:");
scanf("%f",&myStu[count].cj.frist );
printf("/t/t请输入第二门功课的成绩:");
scanf("%f",&myStu[count].cj.second );
printf("/t/t请输入第三门功课的成绩:");
scanf("%f",&myStu[count].cj.third);
count++;
}
printf("/t/t是否还要输入,要退出按0键,其他继续..");
fflush(stdin);
scanf("%c",&ch);
if(ch == '0')
break;
}
}
/*排序*/
void sort(stu * myStu)
{
short i , j;//循环变量
stu temp;//stu类型的中间变量,用来排序
for (i = 0 ;i <= count ; i++)
{
for (j = i+1; j <= count ;j++)
{
if((myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third ) < (myStu[j].cj .frist +myStu[j].cj.second +myStu[i].cj.third ))
{
temp = myStu[i];
myStu[i] = myStu[j];
myStu[j] = temp;
}
}
}
}
/*打印*/
void display(stu *myStu)
{
short i;//条件变量
printf("/n");
printf("/t/t=========打印===========/n");
printf("/t/t学 号/t姓 名/t平均成绩/n");
for(i = 0 ; i < count ; i++)
{
printf("/t/t %d/t %s/t %1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);
}
}
/*删除*/
void del(stu *myStu)
{
short i ,num ,yn = 0;
printf("/t/t请输入你要删除的学生学号:");
scanf("%d",&num);
for(i = 0 ; i <= count ; i++)
{
if(myStu[i].num != num)
yn = 0;
else
{
yn = 1;
break;
}
}
if (yn)
{
for (i = 0 ; i <= count ; i++)
{
if(myStu[i].num ==num)
break;
}
printf("/t/t你要删除的学生的详细情况是:学号:%d/t姓名:%s/t平均分:%1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);
printf("/t/t确定要删除(1.确定):");
scanf("%d",&yn);
if(yn == 1)
{
for (i ; i < count; i++)
{
myStu[i] = myStu[i+1];
}
count--;
}
else
printf("/t/t没有删除:%d/t%s/t%1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);
}
else
printf("/t/t没有该学生/n");
}
void main()
{
stu myStu[100];
short ch;
while(1)
{
printf("/n/n");
printf("/t/t 1.录 入/n");
printf("/t/t 2.插 入/n");
printf("/t/t 3.删 除/n");
printf("/t/t 4.退 出/n");
printf("/n/t/t请选择你要的操作:");
scanf("%d",&ch);
if((ch <1) || (ch > 4))
continue;
printf("/n/n");
switch(ch)
{
case 1:
case 2:
{
addstu(myStu);
sort(myStu);
display(myStu);
break;
}
case 3:
{
del(myStu);
display(myStu);
break;
}
case 4:
return;
}
}
}