学生管理系统

学生管理系统 [转]

 

 

#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();
}
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值