学生成绩管理

/*  
* Copyright (c)2015,烟台大学计算机与控制工程学院  
* All rights reserved.  
* 文件名称:学生成绩管理
* 作    者:李竹雅  
* 完成日期:2015年12月24日  
*修改记录:N次
* 版 本 号:v1.0  
  
* 问题描述:验证直接选择排序  
  
* 输入描述:无  
* 程序输出:测试数据  
*/    


 

<pre class="cpp" name="code">#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int Shu;
typedef struct student  //定义一个结构体
{
      int num;
      char name[40];
      float mgar,cgar,egar;                      //数学 语文 英语
       float zong,ping;                           //班级总成绩 平均成绩
}stu;

typedef struct LNode                             //典型链表模式
{
      stu xue;                                   //结构体   每一个结构体xue都包含一个结点stu
      struct LNode *next;
} LNode,*LinkList;

LinkList InitLinkList()
{
      LinkList L;
      L=(LinkList)malloc(sizeof(LNode));
      L->next=NULL;
      return L;
}                                                //典型链表模式

LinkList CreateTail()                            //尾插带结点   链表创建
{
      LinkList L;
      LNode *s,*r;
      int i,x;
	  char name[40];//建立基础输入学生成绩信息链表
      float m,c,e;
      L=InitLinkList();
      r=L;
      x=0;
      printf(" ▂▂▂▂▂▂\n");
      printf("▏输入信息数:▏\n");
      printf("▏▃▃▃▃▃ ▏\n");
      scanf("%d",&Shu);
      printf(" ▂▂▂▂▂▂▂▂▂▂▂▂   \n");
      printf("▏学号 名字 数 语文 英语  ▏\n");
      printf("▏▃▃▃▃▃▃▃▃▃▃▃  ▏\n");
      while(x<Shu)
{
      s=(LNode *)malloc(sizeof(LNode));
      scanf("%d",&i);
      s->xue.num=i;
	  scanf("%s",&name);
      strcpy(s->xue.name,name);
      scanf("%f",&m);
      s->xue.mgar=m;
      scanf("%f",&c);
      s->xue.cgar=c;
      scanf("%f",&e);
      s->xue.egar=e;
      s->xue.zong=m+c+e;
      s->xue.ping=(m+c+e)/3;
      s->next=NULL;
      r->next=s;
      r=s;
      x++;
}

return (L);
}
void prn(LinkList L)                                                  //构造一个新函数 case步骤中prn(L)运用 包含学生信息 科目成绩以及平均成绩总成绩
{
      LNode *p;
      p=L->next;
      printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n");
      printf("  ▏号 ▏姓名 | 数 ▏语文 ▏英语 ▏平均成绩 ▏总绩 ▏\n");
      printf("    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏\n");
while (p!=NULL)
{
      printf("%d %s %0.2f %0.2f %0.2f %0.2f %0.2f\n",p->xue.num,p->xue.name,p->xue.mgar,p->xue.cgar,p->xue.egar,p->xue.ping,p->xue.zong);
      p=p->next;
}
      printf("\n");
}
void prn1(LinkList L)                                                 //构造新函数   查询并打印某个学生的信息及成绩
{
    LNode *p;
    int x,y;
    p=L->next;
    printf("▁▁▁▁▁▁▁▁\n");
    printf("▏请输入要查询号▏\n");
    printf("▏▂▂▂▂▂▂▂▏\n");
    scanf("%d",&x);
    while(p)
{
    if(x==p->xue.num )
{
    y=1;
    printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n");
    printf("\n▏号 ▏姓名| 数 ▏语文 ▏英语 ▏平均成绩 ▏总绩 ▏\n");
    printf("  ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏\n");
    printf("%d %s %0.2f %0.2f %0.2f %0.2f %0.2f\n",p->xue.num,p->xue.name,p->xue.mgar,p->xue.cgar,p->xue.egar,p->xue.ping,p->xue.zong);   //讲计算结果进行输出
}
p=p->next;
}
    if(y!=1)
    printf("存\n");
}

void xs(LinkList L)                                                   //先输入一个范围,打印这个范围内的学生的信息,比如数学成绩在70到80的人
{
    LNode *p;

    p=L->next;
    float x,y;
    printf("▁▁▁▁▁▁▁▁▁▁\n");
    printf("▏输入要查询数绩范围▏\n");
    printf("▏▂▂▂▂▂▂▂▂▂▏\n");
    scanf("%f",&x);
    scanf("%f",&y);
    while(p)
{
if(p->xue.mgar>=x && p->xue.mgar<=y)
{
    printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n");
    printf("  ▏号 ▏姓名| 数 ▏语文 ▏英语 ▏平均成绩 ▏总绩 ▏\n");
    printf("  ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏\n");
    printf("%d %s %0.2f %0.2f %0.2f %0.2f %0.2f\n",p->xue.num,p->xue.name,p->xue.mgar,p->xue.cgar,p->xue.egar,p->xue.ping,p->xue.zong);
}
p=p->next;
}
}
void ren(LinkList L)                                               //新函数 计算班级的每一科的平均成绩,最后分别打印语文,数学,外语的平均成绩,还有三科加起来的总平均分
{
    LNode *p;
    float m,c,e,j;
	char name[30];
    int i=0;
    m=0;c=0;e=0;j=0;
    p=L->next;
    while(p)
	{  strcpy(p->xue.name,name);
    m=m+p->xue.mgar;
    c=c+p->xue.cgar;
    e=e+p->xue.egar;
    j=j+p->xue.ping;
    p=p->next;
    i++;
}
    printf("▁▁▁▁▁▁▁▁\n");
    printf("▏班级平均绩    ▏\n");
    printf("▏▂▂▂▂▂▂  ▏\n");
    printf("▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n");
    printf("▏姓名 数  语文 英语 总平均绩 总数▏\n");
    printf("▏▂▂▂▂▂▂▂▂▂▂▂▂  ▏");
    printf("%s %0.2f  %0.2f %0.2f %0.2f %d",name,m/i,c/i,e/i,j/i,i);     //分别对框图中成绩计算的结果进行输出
}
void del(LinkList L)                                            //构造删除学生信息函数
{
    int x;
    LNode *p,*q;
    p=L->next;
    q=L;
    printf("▁▁▁▁▁▁▁▁\n");
    printf("▏请输入要删除号▏\n");
    printf("▏▂▂▂▂▂▂  ▏\n");
    scanf("%d",&x);
    while(p)
{
if(p->xue.num==x)
{
    q->next=p->next;
    break;
}
else
{
    p=p->next;
    q=q->next;
}
}
    Shu--;
}
LinkList add(LinkList L)                                        //构造添加学生信息函数
{
    LNode *s;
    int n,i,x;
    float m,c,e;
	char name[30];
    i=0;
    printf("▁▁▁▁▁▁▁▁▁▁\n");
    printf("▏请输入要添加信息数▏\n");
    printf("▏▂▂▂▂▂▂▂▂  ▏\n");
    scanf("%d",&x);
    printf("\n号 姓名 数 语文 英语 \n");
    while(i<x)
{
    s=(LinkList)malloc(sizeof(LNode));
    scanf("%d",&n);
    s->xue.num=n;
	scanf("%s",&name);
      strcpy(s->xue.name,name);
    scanf("%f",&m);
    s->xue.mgar=m;
    scanf("%f",&c);
    s->xue.cgar=c;
    scanf("%f",&e);
    s->xue.egar=e;
    s->xue.zong=m+c+e;
    s->xue.ping=(m+c+e)/3;
    s->next=L->next;
    L->next=s;
    i++;
    Shu++;
}
return L;
}
LinkList pxm(LinkList L)                                            //新链表按照学生总成绩进行排名
{
    printf("▁▁▁▁▁▁▁▁▁\n");
    printf("▏按数据总成绩排名▏\n");
    printf("▏▂▂▂▂▂▂▂  ▏\n");
    int i;
    LNode *p,*q,*a;

for(i=0;i<Shu;i++)
{
    p=L->next;
    q=p->next;
    while(q)
{
if(p->xue.mgar<=q->xue.mgar)                                        //排序算法
{
    p->next=q->next;
    q->next=L->next;
    L->next=q;
    a=p;
    p=q;
    q=a;
}
    p=p->next;
    q=q->next;
}
}
prn(L);
return 0;
}
void cd()                                                          //构造函数 进入学生成绩系统基本框架
{
    printf("            ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁    \n");
    printf("           ▏                       1、输入信息                                              ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       2、查询号信息                                            ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       3、查询成绩信息                                          ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       4、班级平均成绩                                          ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       5、删除学生信息及成绩                                    ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       6、增加学生信息及成绩                                    ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏                       7、学生信息成绩进行排序                                  ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏             请先进行操作1再按数字8显示全部信息再进行其操作                     ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
    printf("           ▏             请输入选项:                                                       ▏ \n");
    printf("           ▏▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ▏ \n");
}
int main()                                //主函数
{
    int i;
   system("color 1f");
   system("mode con: cols=140 lines=130");
    LinkList L;
    do
{
    cd();
    scanf("%d",&i);
    switch(i)                             //选择分支结构,输入1到7进行选择
{
case 1:                                   //以下运用case语句,分别表示具有某个条件时运行步骤下的函数程序
{
    system("cls");                        //清屏函数
    L=CreateTail();
    prn(L);
    break;
}
case 2:
{
    system("cls");
    prn1(L);
    break;
}
case 3:
{
    system("cls");
    xs(L);
    break;
}
case 4:
{
    system("cls");
    ren(L);
    break;
}
case 5:
{
    system("cls");
    del(L);
    break;
}
case 6:
{
    system("cls");
    add(L);
    prn(L);
    break;
}
case 7:
{
    system("cls");
    pxm(L);
    break;
}
case 8:
{
    prn(L);
    break;
}
 }
}
while(i<=8 && i>=1);
}

 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值