学生管理系统 [转]
#include <stdio.h>
#include<stdlib.h>
struct student
{
int num;//学号
char name[30];//名字
float result[3];// 成绩
float average;//平均成绩
};
struct student stu[50],stu0;//学员信息,中间结构变量
void input();//输入学员信息
void display();//显示学员信息
void insert();//插入学员信息
void del();//删除学员信息
void compositor();//排序学员信息
void aver();//求平均成绩
static int K,H;//统计输入学员成绩的个数,第一次输入学员信息后,不能在输入
void main()
{
int in,t;//输入的菜单,控制循环
do
{
system("cls");
printf("1.输入学员信息 2.显示学员信息 3.插入学员信息 4.删除学员信息 5.退出学员系统/n");
scanf("%d",&in);
switch(in)
{
case 1:
if (H)//判断是否是第一次输入学员信息
{
printf("对不起,已经输入了学员信息,请选择插入学员信息。/n/n/n");
}
else
{
input();
}
break;
case 2:
display();
break;
case 3:
insert();
break;
case 4:
del();
break;
case 5:
printf("谢谢光临!/n");
t=0;
break;
}
}while(t);
}
/*
输入学员信息
无返回值
*/
void input()
{
int i,j;//循环变量
char c;
c='y';
for(i=0;i<50 && c=='y';i++)
{
printf("学号:");
fflush(stdin);
scanf("%d",&stu[i].num);
printf("姓名:");
fflush(stdin);
gets(stu[i].name);
printf("三门成绩:/n");
for(j=0;j<3;j++)//输入3门成绩
{
printf("成绩%d:",j+1);
scanf("%f",&stu[i].result[j]);
printf("/n");
}
printf("是否继续(y/n)");
fflush(stdin);
c=getchar();
if(c=='n'&&c=='N')//判断是否继续
{
break;
}
K++;//增加一个学员
}
H=1;//判断是否是第一次输入学员信息
aver();
compositor();
}
/*
显示学员信息
无返回值
*/
void display()
{
int i;
printf("显示学员信息/n");
printf("学号/t姓名/t平均成绩/t/n");
for(i=0;i<K;i++)
{
printf("%d/t%s/t%3.1f/t/n",stu[i].num,stu[i].name,stu[i].average);
}
compositor();
printf("/n");
}
/*
平均成绩排序
无返回值
*/
void compositor()
{
int i,j;
for(i=0;i<K;i++)
{
for(j=0;j<K-i-1;j++)
{
if(stu[j].average<stu[j+1].average)//交换结构中的成员,以达到排序的目的
{
stu0=stu[j+1];
stu[j+1]=stu[j];
stu[j]=stu0;
}
}
}
}
/*
平均成绩
无返回值
*/
void aver()
{
int i,j=0;
float t;
for(i=0;i<K;i++)
{
for(j=0,t=stu[i].result[j];j<2;j++)
{
t=t+stu[i].result[j];//求三门成绩之和
}
stu[i].average=t/3;//求平均成绩
}
}
/*
删除学员信息函数
无返回值
*/
void del()
{
int i,t,j=0;//循环变量,要删除学员的学号,判断是否找到要删除的学员
printf("输入删除的学员号:");
scanf("%d",&t);
for(i=0;i<K-1;i++)//少循环一次,使得删除后,最后一个学员信息不显示
{
if(t==stu[i].num)
{
stu[i].num=stu[i+1].num;//复制要删除后一个学员的信息
j=1;//找到了要删除的学员
}
}
if(j)//判断是否找到要删除的学员
{
K--;//少一个学员
printf("恭喜你,删除操作成功!/n删除后的学员信息如下:/n");
display();
}
else
{
printf("找不到要删除的学员号,请确认后再次操作!/n/n/n");
}
}
/*
插入学员信息函数
无返回值
*/
void insert()
{
int j;//循环变量
printf("输入要插入学员的信息:/n");
printf("学号:");
fflush(stdin);
scanf("%d",&stu[K].num);
printf("姓名:");
fflush(stdin);
gets(stu[K].name);
printf("三门成绩:/n");
for(j=0;j<3;j++)//输入3门成绩
{
printf("成绩%d:",j+1);
scanf("%f",&stu[K].result[j]);
printf("/n");
}
K++;//增加一个学员的信息
printf("插入成功!/n");
aver();
compositor();
printf("插入后的学员信息如下:");
display();
}
#include<stdlib.h>
struct student
{
int num;//学号
char name[30];//名字
float result[3];// 成绩
float average;//平均成绩
};
struct student stu[50],stu0;//学员信息,中间结构变量
void input();//输入学员信息
void display();//显示学员信息
void insert();//插入学员信息
void del();//删除学员信息
void compositor();//排序学员信息
void aver();//求平均成绩
static int K,H;//统计输入学员成绩的个数,第一次输入学员信息后,不能在输入
void main()
{
int in,t;//输入的菜单,控制循环
do
{
system("cls");
printf("1.输入学员信息 2.显示学员信息 3.插入学员信息 4.删除学员信息 5.退出学员系统/n");
scanf("%d",&in);
switch(in)
{
case 1:
if (H)//判断是否是第一次输入学员信息
{
printf("对不起,已经输入了学员信息,请选择插入学员信息。/n/n/n");
}
else
{
input();
}
break;
case 2:
display();
break;
case 3:
insert();
break;
case 4:
del();
break;
case 5:
printf("谢谢光临!/n");
t=0;
break;
}
}while(t);
}
/*
输入学员信息
无返回值
*/
void input()
{
int i,j;//循环变量
char c;
c='y';
for(i=0;i<50 && c=='y';i++)
{
printf("学号:");
fflush(stdin);
scanf("%d",&stu[i].num);
printf("姓名:");
fflush(stdin);
gets(stu[i].name);
printf("三门成绩:/n");
for(j=0;j<3;j++)//输入3门成绩
{
printf("成绩%d:",j+1);
scanf("%f",&stu[i].result[j]);
printf("/n");
}
printf("是否继续(y/n)");
fflush(stdin);
c=getchar();
if(c=='n'&&c=='N')//判断是否继续
{
break;
}
K++;//增加一个学员
}
H=1;//判断是否是第一次输入学员信息
aver();
compositor();
}
/*
显示学员信息
无返回值
*/
void display()
{
int i;
printf("显示学员信息/n");
printf("学号/t姓名/t平均成绩/t/n");
for(i=0;i<K;i++)
{
printf("%d/t%s/t%3.1f/t/n",stu[i].num,stu[i].name,stu[i].average);
}
compositor();
printf("/n");
}
/*
平均成绩排序
无返回值
*/
void compositor()
{
int i,j;
for(i=0;i<K;i++)
{
for(j=0;j<K-i-1;j++)
{
if(stu[j].average<stu[j+1].average)//交换结构中的成员,以达到排序的目的
{
stu0=stu[j+1];
stu[j+1]=stu[j];
stu[j]=stu0;
}
}
}
}
/*
平均成绩
无返回值
*/
void aver()
{
int i,j=0;
float t;
for(i=0;i<K;i++)
{
for(j=0,t=stu[i].result[j];j<2;j++)
{
t=t+stu[i].result[j];//求三门成绩之和
}
stu[i].average=t/3;//求平均成绩
}
}
/*
删除学员信息函数
无返回值
*/
void del()
{
int i,t,j=0;//循环变量,要删除学员的学号,判断是否找到要删除的学员
printf("输入删除的学员号:");
scanf("%d",&t);
for(i=0;i<K-1;i++)//少循环一次,使得删除后,最后一个学员信息不显示
{
if(t==stu[i].num)
{
stu[i].num=stu[i+1].num;//复制要删除后一个学员的信息
j=1;//找到了要删除的学员
}
}
if(j)//判断是否找到要删除的学员
{
K--;//少一个学员
printf("恭喜你,删除操作成功!/n删除后的学员信息如下:/n");
display();
}
else
{
printf("找不到要删除的学员号,请确认后再次操作!/n/n/n");
}
}
/*
插入学员信息函数
无返回值
*/
void insert()
{
int j;//循环变量
printf("输入要插入学员的信息:/n");
printf("学号:");
fflush(stdin);
scanf("%d",&stu[K].num);
printf("姓名:");
fflush(stdin);
gets(stu[K].name);
printf("三门成绩:/n");
for(j=0;j<3;j++)//输入3门成绩
{
printf("成绩%d:",j+1);
scanf("%f",&stu[K].result[j]);
printf("/n");
}
K++;//增加一个学员的信息
printf("插入成功!/n");
aver();
compositor();
printf("插入后的学员信息如下:");
display();
}