一个学生成绩管理系统,编译没错,可运行起来错误很多
收入3门成绩,用平均成绩排序,实现插入新学生和删除老学生
插入和删除后保持有序并输出。。
我写的这个可以一直删除,插入后不能排序等等的问题。。
哪位大大帮我看下啊!!!
#include<stdio.h>
struct student//结构数组
{
int num;
char name[20];
float c;
float java;
float dreamweare;
float avg;
}std1[50],std2;
//函数块
void display();//显示函数
void record();//录入新学员函数
void insert();//插入新学员函数
void del();//删除
void sort();//排序
void sortinsert(int);//插入后排序
void sortdel(int);//删除后排序
void Getavg();//平均成绩
void Getavg1(int);//插入后平均成绩
static int count = 0;
void main()
{
int in;
char ans;
printf("*=====================================*\n");
printf("* 欢迎使用! *\n");
printf("* 学生管理系统 *\n");
printf("*=====================================*\n");
printf(" 请添加学员.\n");
record();
display();
do
{
printf("*================================*\n");
printf("* 1.插入新学员. *\n");
printf("* 2.删除学员. *\n");
printf("* 3.退出. *\n");
printf("*================================*\n");
printf(" 请选择:");
scanf("%d",&in);
switch(in)
{
case 1:
insert();
break;
case 2:
del();
break;
case 3:
break;
default:
printf("您输入错误!");
break;
}
if(in == 3)
{
printf("*=======================*\n");
printf("* 谢谢对本软件的支持! *\n");
printf("*=======================*\n");
break;
}
printf("继续插入或者删除服务?(y/n)");
fflush(stdin);
ans = getchar();
if(ans == 'n')
{
printf("*=======================*\n");
printf("* 谢谢对本软件的支持! *\n");
printf("*=======================*\n");
}
}while(ans == 'y');
}
void display()
{
int i;
printf("学号\t姓名\tc成绩\tjava成绩\t网页编程成绩\t平均成绩\n");
for(i=0;i<count;i++)
{
printf("%d\t",std1[i].num);
printf("%s\t",std1[i].name);
printf("%.2f\t",std1[i].c);
printf("%.2f\t",std1[i].java);
printf(" %.2f\t",std1[i].dreamweare);
printf(" %.2f\t",std1[i].avg );
putchar('\n');
}
}
void record()
{
char ans;
printf("*=====================*\n");
printf("* 录入学员信息 *\n");
printf("*=====================*\n");
if(count<50)
{
do
{
printf("请输入学号:\n");
fflush(stdin);
scanf("%d",&std1[count].num);
printf("请输入姓名:\n");
fflush(stdin);
gets(std1[count].name);
printf("请输入c成绩:\n");
scanf("%f",&std1[count].c);
printf("请输入java成绩:\n");
scanf("%f",&std1[count].java);
printf("请输入网页编程成绩:\n");
scanf("%f",&std1[count].dreamweare);
count++;
printf("继续添加?(y/n)");
fflush(stdin);
ans = getchar();
}while(ans == 'y');
}
else
{
printf("超过了50个学员,退出!");
}
printf("添加后学员按成绩平均值排序为:\n");
Getavg();
sort();
}
void insert()
{
char ans;
printf("*=====================*\n");
printf("* 插入学员信息 *\n");
printf("*=====================*\n");
if(count<50)
{
do
{
printf("请输入学号:\n");
fflush(stdin);
scanf("%d",&std1[count].num);
printf("请输入姓名:\n");
fflush(stdin);
gets(std1[count].name);
printf("请输入c成绩:\n");
scanf("%f",&std1[count].c);
printf("请输入java成绩:\n");
scanf("%f",&std1[count].java);
printf("请输入网页编程成绩:\n");
scanf("%f",&std1[count].dreamweare);
Getavg1(count);
sortinsert(count);
count++;
printf("继续插入?(y/n)");
fflush(stdin);
ans = getchar();
}while(ans == 'y');
}
else
{
printf("超过50个学员,退出!");
}
printf("插入后学员按成绩平均值排序为:\n");
display();
}
void del() //这里可以一直删除,不论有没有这个人
{
int in;
int i=0,flag = 0;
char ans;
printf("*=====================*\n");
printf("* 删除学员信息 *\n");
printf("*=====================*\n");
do
{
printf("\n请输入您要删除学员的学号:");
scanf("%d",&in);
for(i=0;i<count;i++)
{
if(std1[i].num == in)
{
flag = 1;
break;
}
}
if(flag)
{
printf("删除成功!删除后学员按平均成绩排序为:\n");
sortdel(i);
display();
}
else
{
printf("输入错误或者无此学号学员!\n");
display();
}
printf("继续删除?(y/n)");
fflush(stdin);
ans = getchar();
}while(ans == 'y');
}
void sort()
{
int i,j;
for(i=0;i<count-1;i++)
{
for(j=count-1;j>=i+1;j--)
{
if(std1[j].avg>std1[j-1].avg)
{
std2 = std1[j];
std1[j] = std1[j-1];
std1[j-1] = std2;
}
}
}
}
void sortinsert(int i) //这里排序不对了。。。
{
int j,k;
for(j=0;j<=count;j++)
{
if(std1[i].avg>std1[j].avg)
{
break;
}
}
for(k=count+1;k>=j+1;k--)
{
std1[k] = std1[k-1];
}
std1[j] = std1[i];
}
void sortdel(int i)
{
for(;i<count-1;i++)
{
std1[i] = std1[i+1];
}
count--;
}
void Getavg()
{
int i;
float sum;
for(i=0;i<count;i++)
{
sum = std1[i].c + std1[i].java + std1[i].dreamweare;
std1[i].avg = sum / 3;
}
}
void Getavg1(int i)
{
float sum;
sum = std1[i].c + std1[i].java + std1[i].dreamweare;
std1[i].avg = sum / 3;
}