标题:业余小白编写了一个学生成绩管理系统,想完善一下功能,求大神帮忙完善一下
只看楼主
bjbuvgu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-12-11
 问题点数:0 回复次数:0 
业余小白编写了一个学生成绩管理系统,想完善一下功能,求大神帮忙完善一下
业余小白编写了一个学生成绩管理系统,想完善一下功能,求大神帮忙完善一下,添加一个筛选补考学生显示功能,实在写不下去了
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
#include<process.h>
typedef struct student
{
 char Number[10];                              //学号
 char name[20];                                //姓名
 char great[20];                               //成绩
 char yuwen[10];                               //语文
 char shuxue[10];                              //数学
 char yingyu[10];                              //英语
 struct student *next;
}student;
student *headLink;                             //链表表头指针
void DesplayMenu();                            //以下是函数声明
void CreateHeadLink();
student *MallocNode();
void GetInformation(student *t);
void OutputInformation();
void DesplayInfoByNumber();
void ChangeInfoByNumber();
void DesplayOneNode(student *t);
void InsertOneNode(student *t);
void rangebyNumber();
void greatrank();
void DeleteNodeByNumber();
void DesplayInfoByName();
int  choose,choose5;                                  //用于接受用户的选择

void main()                                    //主函数
{
 CreateHeadLink();
 DesplayMenu();
}

void DesplayMenu()                            //显示菜单,根据用户的输入完成相应的功能
{
 student *p;
 printf("n---------请选择要进行的操作---------nn");
 printf("*************菜单栏***************n*                                *n");
 printf("*  1---显示所有学生信息          *n");
 printf("*  2---增加一条学生信息          *n");
 printf("*  3---删除一条学生信息          *n");
 printf("*  4---根据学号修改学生的信息    *n");
 printf("*  5---根据学号查找学生的信息    *n");
 printf("*  6---选择排序方式              *n");
 printf("*  7---退出                      *n*                                *n");
 printf("**********************************n");
 printf("请输入序号:n");
 scanf("%d",&choose);                         //获得用户将要进行的操作
 switch(choose)
 {
 case 1:
  OutputInformation();
  break;
 case 2:
  p=MallocNode();                             //先申请一个新结点
  GetInformation(p);                          //要求用户输入信息到新结点中
  InsertOneNode(p);                           //将新结点加到链表中
  break;
 case 3:
  DeleteNodeByNumber();
  break;
 case 4:
  ChangeInfoByNumber();
  break;
 case 5:
  DesplayInfoByNumber();
  break;
 case 6:
     printf("1.按学号 2.按成绩:n");
     scanf("%d",&choose5);                         //取得用户的选择
     switch(choose5)
     {
     case 1:
     rangebyNumber();
     OutputInformation();
     break;
     case 2:
     greatrank();
     OutputInformation();
     break;
     default:
     break;
     }
     DesplayMenu();
 case 7:
  free(headLink);                            //先释放内存空间
  exit(1);
  break;
 default:
  break;
 }
DesplayMenu();                               //递归调用
}

void CreateHeadLink()                       //建立链表表头
{
 student *p;
 p=(student*)malloc(sizeof(student));
 headLink=p;
 p->next=NULL;
}
student *MallocNode()                       //申请一个新结点,并将其初始化
{
 student *p;
 int i;
 p=(student*)malloc(sizeof(student));
 if(p==NULL)
  return NULL;
 for(i=0;i<10;i++)
  p->Number[i]='�';
 for(i=0;i<20;i++)
  p->name[i]='�';
 for(i=0;i<10;i++)
  p->shuxue[i]='�';
 for(i=0;i<10;i++)
  p->yuwen[i]='�';
 for(i=0;i<10;i++)
  p->yingyu[i]='�';
 for(i=0;i<20;i++)
  p->next=NULL;
  return p;
}

void GetInformation(student *t)            //添加学生信息

{
 printf("请输入学号:n");
 scanf("%s",t->Number);
 printf("请输入姓名:n");
 scanf("%s",t->name);
 printf("请输入成绩:n");
 printf("语文:t");
 scanf("%s",t->yuwen);
 printf("数学:t");
 scanf("%s",t->shuxue);
 printf("英语:t");
 scanf("%s",t->yingyu);
 printf("总分:t");
 scanf("%s",t->great);

}

void InsertOneNode(student *t)            //在链表的结尾处增加一个结点           
{
 student *p;
 p=headLink;
 while(p->next)
 {
  p=p->next;
 }
 p->next=t;

}

void DesplayInfoByNumber()               //根据学号显示该学号学生的信息
{
 student *p;
 char good[10];
 char flag=0;
 p=headLink->next;
 if(p==NULL)
 {
  printf("对不起,现在没有学生信息!n");
  return;
 }
 printf("请输入序号:n");
 scanf("%s",good);
 printf("学号t姓名t语文t数学t英语t总分tn");
 while(p)
 {
  if(strcmp(p->Number,good)==0)
  {
 void DesplayOneNode();
   flag=1;
   break;
  }
  p=p->next;
 }
 if(!flag)
  printf("对不起,不存在学号为 %s 的学生n",good);
}

void DesplayOneNode(student *t)          //输出一个学生结点的信息
{
 printf("%st",t->Number);
 printf("%st",t->name);
 printf("%st",t->yuwen);
 printf("%st",t->shuxue);
 printf("%st",t->yingyu);
 printf("%stn",t->great);
}

void ChangeInfoByNumber()                //根据学号修改该学生信息
{
 char good[10];
 student *p,*q;
 char flag=0;
 printf("请输入要修改的学生学号:");
 scanf("%s",good);
 p=headLink;
 q=headLink->next;
 while(q)
 {
  if(strcmp(q->Number,good)==0)
  {
   GetInformation(q);
  }
  p=p->next;
  q=q->next;
 }
 if(!flag)
  printf("不存在这学生n");
}

void DeleteNodeByNumber()                //根据学号删除该学生信息
{
 char good[10];
 student *p,*q;
 char flag=0;
 printf("请输入要删除的学生学号:");
 scanf("%s",good);
 p=headLink;
 q=headLink->next;
 while(q)
 {
  if(strcmp(q->Number,good)==0)
  {
   p->next=q->next;
   free(q);
   flag=1;
   break;
  }
  p=p->next;
  q=q->next;
 }
 if(!flag)
  printf("不存在这学生n");
}

void OutputInformation()                //显示所有学生的信息
{
 student *p;
 p=headLink->next;
 if(p==NULL)
 {
  printf("现在没有任何信息,请先输入学生信息nn");
  return;
 }
 printf("学号t姓名t语文t数学t英语t总分tn");
 while(p)
 {
  DesplayOneNode(p);
  p=p->next;
 }
}

void rangebyNumber()                    //根据输入的学号,按低到高排序
{
 char Number[10];
 student exchange,*r,*p,*q;
 r=headLink->next;
 if(r==NULL)
 {
  printf("现在还没任何信息,请先输入学生信息n");
  return;
 }
 while(r)                               //两层while循环实现排序
 {
  p=r;
  q=r->next;
  while(q)
  {
   if((strcmp(p->Number,q->Number)>0))  //学号大时才交换
   {
    strcpy(exchange.Number,q->Number);  //先复制q结点信息到exchange
    strcpy(exchange.name,q->name);
    strcpy(exchange.shuxue,q->shuxue);
    strcpy(exchange.yingyu,q->yingyu);
    strcpy(exchange.yuwen,q->yuwen);
    strcpy(exchange.great,q->great);
    strcpy(q->Number,p->Number);        //再复制p结点信息到q
    strcpy(q->name,p->name);
    strcpy(q->shuxue,p->shuxue);
    strcpy(q->yingyu,p->yingyu);
    strcpy(q->yuwen,p->yuwen);
    strcpy(q->great,p->great);
    strcpy(p->Number,exchange.Number);  //最后复制exchange结点信息到p
    strcpy(p->name,exchange.name);
    strcpy(p->shuxue,exchange.shuxue);
    strcpy(p->yingyu,exchange.yingyu);
    strcpy(p->yuwen,exchange.yuwen);
    strcpy(p->great,exchange.great);
   }
   q=q->next;
  }
  r=r->next;
 }
}

void greatrank()                    //根据输入的成绩,按低到高排序
{
 char great[10];
 student exchange,*r,*p,*q;
 r=headLink->next;
 if(r==NULL)
 {
  printf("现在还没任何信息,请先输入学生信息n");
  return;
 }
 while(r)                               //两层while循环实现排序
 {
  p=r;
  q=r->next;
  while(q)
  {
   if((strcmp(p->great,q->great)<0))  //成绩大时才交换
   {
    strcpy(exchange.Number,q->Number);  //先复制q结点信息到exchange
    strcpy(exchange.name,q->name);
    strcpy(exchange.shuxue,q->shuxue);
    strcpy(exchange.yingyu,q->yingyu);
    strcpy(exchange.yuwen,q->yuwen);
    strcpy(exchange.great,q->great);
    strcpy(q->Number,p->Number);        //再复制p结点信息到q
    strcpy(q->name,p->name);
    strcpy(q->shuxue,p->shuxue);
    strcpy(q->yingyu,p->yingyu);
    strcpy(q->yuwen,p->yuwen);
    strcpy(q->great,p->great);
    strcpy(p->Number,exchange.Number);  //最后复制exchange结点信息到p
    strcpy(p->name,exchange.name);
    strcpy(p->shuxue,exchange.shuxue);
    strcpy(p->yingyu,exchange.yingyu);
    strcpy(p->yuwen,exchange.yuwen);
    strcpy(p->great,exchange.great);
   }
   q=q->next;
  }
  r=r->next;
 }
}
搜索更多相关主题的帖子: student next printf exchange strcpy 
2018-12-11 09:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491950-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.149466 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved