|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//用链表完成学生成绩管理系统,用菜单提示操作
#include<stdio.h>
#include<stdlib.h>
#define null 0
//定义学生的数据类型(学生的相关信息有学号、姓名、英语、数据库、C语言、总分、平均分)
struct student
{
int num;//学号
char name[10];//姓名
float yy;//英语
float sjk;//数据库
float cyy;//c语言
float sun;//合
float avg;//平均分
};
//定义链表的结点类型
typedef struct lb
{
student data;
struct lb *next;
}linklist;
//学生信息的录入操作
linklist *creat()
{
linklist *h1,*r,*s;//分别表示头结点,动态节点,动态节点的前一个节点
r=(linklist*)malloc(sizeof(linklist));
r->next=null;
h1=s=r;
int t;
while(1)
{
printf("您想录入数据吗(-1 no): ");
scanf("%d",&t);
if(t==-1)
break;
else
{
printf("请输入学生的学号,姓名,英语,数据库,C语言\n");
r=(linklist*)malloc(sizeof(linklist));
r->next=null;
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
r->data.sun=r->data.yy+r->data.sjk+r->data.cyy;
r->data.avg=r->data.sun/3;
s->next=r;
s=r;
}
}
return h1;
}
//显示所有学生信息
void out(linklist *h1)//显示数据
{
linklist *r;
r=h1;
printf("学号 姓名 英语 数据库 C语言 合 平均分\n");
while(r->next!=null)
{
r=r->next;
printf("%3d%8s%9.2f%9.2f%11.2f%9.2f%9.2f\n",r->data.num,r->data.name,r->data.yy,r->data.sjk,r->data.cyy,r->data.sun,r->data.avg);
}
}
//首头插入学生信息
linklist *fistins(linklist *h1)
{
linklist *h2,*s,*r;
h2=s=h1;
r=(linklist*)malloc(sizeof(linklist));
r->next=null;
printf("请输入学生信息(学号、姓名、英语、数据库、C语言)\n");
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
r->next=s->next;
s->next=r;
r->data.sun=r->data.yy+r->data.sjk+r->data.cyy;
r->data.avg=r->data.sun/3;
return h2;
}
//中部插入学生信息
linklist *bettenins(linklist *h1,int xh1)
{
linklist *h2,*s,*r,*t;
h2=t=h1;
s=h2->next;
r=(linklist*)malloc(sizeof(linklist));
r->next=null;
printf("请输入插入学生的相关信息(学号、姓名、数据库、C语言)\n");
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
while(s!=null && s->data.num!=xh1)
{
t=s;
s=s->next;
}
if(s==null)
{
t->next=r;
r->next=null;
}
else
{
t->next=r;
r->next=s;
}
r->data.sun=r->data.yy+r->data.sjk+r->data.cyy;
r->data.avg=r->data.sun/3;
return h2;
}
//尾部插入学生信息
linklist *append(linklist *h1)
{
linklist *h2,*s,*r;
h2=s=h1;
r=(linklist*)malloc(sizeof(linklist));
r->next=null;
printf("请输入学生信息(学号、姓名、英语、数据库、C语言)\n");
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
while(s->next!=null)
{
s=s->next;
}
s->next=r;
r->data.sun=r->data.yy+r->data.sjk+r->data.cyy;
r->data.avg=r->data.sun/3;
return h2;
}
//学号修改信息操作
void xiugai(linklist *h1)
{
linklist *r;
r=h1;
int i,j=0;
printf("请输入要修改信息的学生的学号:");
scanf("%d",&i);
while(r->next&&j<i)
{
r=r->next;
j++;
}
printf("请输入新的学生信息(学号、姓名、英语、数据库、C语言)\n");
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
r->data.num;
printf("修改成功!\n");
}
//姓名修改信息操作
void xingming(linklist *h1)
{
linklist *r;
r=h1;
char xm[10],j=0;
printf("请输入要修改信息的学生的姓名:");
scanf("%s",&xm);
while(r->next&&j<j)
{
r=r->next;
j++;
}
printf("请输入新的学生信息(学号、姓名、英语、数据库、C语言)\n");
scanf("%d%s%f%f%f",&r->data.num,&r->data.name,&r->data.yy,&r->data.sjk,&r->data.cyy);
r->data.name;
printf("修改成功!\n");
}
//按学号删除信息操作
linklist *delet(linklist *h1)
{
linklist *head,*r,*s,*q;
int xh;
printf("请输入要删除的记录(输入学号进行删除)\n");
scanf("%d",&xh);
head=s=h1;
r=h1->next;
while(r!=null)
{
if(r->data.num==xh)
{
q=r;
s->next=r->next;
}
s=r;
r=r->next;
}
free(q);
return head;
}
//按姓名删除信息操作
linklist *anxuehaosc(linklist *h1)
{
linklist *head,*r,*s,*q;
char xm[10];
printf("请输入要删除的记录(输入姓名进行删除)\n");
scanf("%s",&xm);
head=s=h1;
r=h1->next;
while(r!=null)
{
if(r->data.name==xm)
{
q=r;
s->next=r->next;
}
s=r;
r=r->next;
}
free(q);
return head;
}
//安学号查找操作
void find(linklist *h1)//查找数据
{
linklist *r=h1->next;
int j;
printf("请输入要查找的学号:");
scanf("%d",&j);
while(r!=null)
{
if(r->data.num==j)
{
printf("学号 姓名 英语 数据库 C语言\n");
printf("%3d%8s%9.2f%9.2f%11.2f\n",r->data.num,r->data.name,r->data.yy,r->data.sjk,r->data.cyy);
}
r=r->next;
}
}
//安姓名查找操作
void xingmingcha(linklist *h1)
{
linklist *r=h1->next;
char xmcz[10];
printf("请输入要查找的姓名:");
scanf("%s",&xmcz);
while(r!=null)
{
if(r->data.name==xmcz)
{
printf("学号 姓名 英语 数据库 C语言\n");
printf("%3d%8s%9.2f%9.2f%11.2f\n",r->data.num,r->data.name,r->data.yy,r->data.sjk,r->data.cyy);
}
r=r->next;
}
}
//主函数
void main()
{
linklist *h;
int k;
do
{
printf("====学生成绩管理系统(链表)====\n");
printf(" 1.学生信息录入\n");
printf(" 2.显示所有信息\n");
printf(" 3.学生信息插入\n");
printf(" 4.学生信息统计\n");
printf(" 5.退出管理系统\n");
printf("=============================\n");
printf("请输入选择(1--5): ");
scanf("%d",&k);
if(k==5)
{
printf("按任意键退出系统\n");
break;
}
else
{
switch(k)
{
case 1:
h=creat();
break;
case 2:
out(h);
break;
case 3:
int e;
do
{
printf("=====学生信息的插入菜单======\n");
printf(" 1.首部插入学生信息\n");
printf(" 2.中部插入学生信息\n");
printf(" 3.尾部插入学生信息\n");
printf(" 4.显示插入学生信息\n");
printf(" 5.返回主菜单\n");
printf("===================================\n");
printf("请输入选择(1---5) ");
scanf("%d",&e);
if(e==5)
{
break;
}
else
{
switch(e)
{
case 1:
h=fistins(h);
break;
case 2:
int m;
printf("请输入要插入的位置学号: ");
scanf("%d",&m);
h=bettenins(h,m);
break;
case 3:
h=append(h);
break;
case 4:
out(h);
break;
default:
printf("输入选择有误,请重新输入!\n");
break;
}
}
}while(1);
break;
case 4:
int l;
do
{
printf("=====学生信息统计菜单=====\n");
printf(" 1.修改学生信息\n");
printf(" 2.删除学生信息\n");
printf(" 3.查找学生信息\n");
printf(" 4.显示统计信息\n");
printf(" 5.返回主菜单\n");
printf("==========================\n");
printf("请输入选择(1--5) ");
scanf("%d",&l);
if(l==5)
{
break;
}
else
{
switch(l)
{
case 1:
int t;
do{
printf("=====修改学生信息菜单=====\n");
printf(" 1.按学号修改\n");
printf(" 2.按姓名修改\n");
printf(" 3.返回上一级菜单\n");
printf("==========================\n");
printf("请输入选择(1--3) ");
scanf("%d",&t);
if(t==3)
{
break;
}
else
{
switch(t)
{
case 1:
xiugai(h);
break;
case 2:
xingming(h);
break;
default:
printf("输入选择有误,请重新输入!\n");
break;
}
}
}while(1);
break;
case 2:
int g;
do{
printf("=====删除学生信息菜单=====\n");
printf(" 1.按学号删除\n");
printf(" 2.安姓名删除\n");
printf(" 3.返回上一级菜单\n");
printf("==========================\n");
printf("请输入选择(1--3) ");
scanf("%d",&g);
if(g==3)
{
break;
}
else
{
switch(g)
{
case 1:
h=delet(h);
break;
case 2:
h=anxuehaosc(h);
break;
default:
printf("输入选择有误,请重新输入!\n");
}
}
}while(1);
break;
case 3:
int j;
do{
printf("=====查找学生信息菜单=====\n");
printf(" 1.查找英语最高分\n");
printf(" 2.查找英语最低分\n");
printf(" 3.查找数据库最高\n");
printf(" 4.查找数据库最低\n");
printf(" 5.查找C语言最高分\n");
printf(" 6.查找c语言最低分\n");
printf(" 7.任意查找学生信息\n");
printf(" 8.返回上一级菜单\n");
printf("==========================\n");
printf("请输入选择(1--8) ");
scanf("%d",&j);
if(j==8)
{
break;
}
else
{
switch(j)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
int k;
do{
printf("=====任意查找学生信息菜单=====\n");
printf(" 1.按学号查找\n");
printf(" 2.安姓名查找\n");
printf(" 3.返回上一级菜单\n");
printf("==========================\n");
printf("请输入选择(1--3) ");
scanf("%d",&k);
if(k==3)
{
break;
}
else
{
switch(k)
{
case 1:
find(h);
break;
case 2:
xingmingcha(h);
break;
default:
printf("输入选择有误,请重新输入!\n");
break;
}
}
}while(1);
break;
default:
printf("输入选择有误,请重新输入!\n");
}
}
}while(1);
break;
case 4:
out(h);
break;
default:
printf("输入选择有误,请重新输入!\n");
break;
}
}
}while(1);
break;
default:
printf("输入选择有误,请重新输入!\n");
break;
}
}
}while(1);
}
|
|