业余小白编写了一个学生成绩管理系统,想完善一下功能,求大神帮忙完善一下
业余小白编写了一个学生成绩管理系统,想完善一下功能,求大神帮忙完善一下,添加一个筛选补考学生显示功能,实在写不下去了#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;
}
}