学生成绩管理系统.docx
- 文档编号:2384037
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:22
- 大小:19.52KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(22页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统
#include
#include
#include
#include
#defineNULL0
#defineLENsizeof(structstudent)
structdate/*结构体日期*/
{
intyear;
intmonth;
intday;
};
structxueke/*结构体学科*/
{
intpingshi;
intshiyan;
intkaoshi;
floatzchji;
};
structstudent/*学生结构体*/
{
intnum;
charname[10];
charsex;
structdatebirthday;
structxuekexk[2];
structstudent*next;/*指针域next的类型是指向本结构体类型的指针类型*/
};
typedefstructstudentscore;/*用score来代替类型structstudent*/
intn,k;/*n,k为全局变量,n表示结点个数,k表示人数*/
score*r=NULL;/*定义一个全局变量指针*/
score*stu;
/***************************************菜单*****************************************************/
intcaidan(k)
{
inti;
printf("\n\n\n\t\t\t\t考试成绩管理系统\n");
printf("\t\t\t\t\t作者:
刘振亚\n");
for(i=1;i<79;i++)
printf("*");
printf("\n");/*屏幕设计,分割线*/
printf("\t\t\t\t1.输入学生资料\t\t\t\t\n");
printf("\t\t\t\t2.输出学生资料\t\t\t\t\n");
printf("\t\t\t\t3.删除学生资料\t\t\t\t\n");
printf("\t\t\t\t4.查询学生资料\t\t\t\t\n");
printf("\t\t\t\t5.排序学生资料\t\t\t\t\n");
printf("\t\t\t\t6.插入学生资料\t\t\t\t\n");
printf("\t\t\t\t7.更新学生资料\t\t\t\t\n");
printf("\t\t\t\t8.保存学生资料\t\t\t\t\n");
printf("\t\t\t\t0.退出!
\t\t\t\t\n");
for(i=1;i<80;i++)
printf("*");
printf("\n");
printf("请输入你所要操作的选项:
");
scanf("%d",&k);
printf("\n");
getchar();
return(k);
}
save(score*head)/*将单链表的信息保存到指定的磁盘文件*/
{
score*q=head;
FILE*fp;/*调用fopen()函数打开磁盘文件*/
charwjlj[90];
printf("请输入文件的路径:
");
scanf("%s",wjlj);/*文件路径*/
fp=fopen(wjlj,"w");
if(fp==NULL)
{printf("不能打开此文件,按任意键退出!
");
getch();
exit
(1);
}
fprintf(fp,"*****************************************************************************\n");
fprintf(fp,"学号姓名性别生日");
fprintf(fp,"C语言(平时.实验.考试.综合)|");
fprintf(fp,"通信原理(平时.实验.考试.综合)\n");
fprintf(fp,"*****************************************************************************\n");
while(q!
=NULL)
{
fprintf(fp,"|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthday.year,q->birthday.month,q->birthday.day);
fprintf(fp,"%5d|%5d|%5d|%.1f|",q->xk[0].pingshi,q->xk[0].shiyan,q->xk[0].kaoshi,q->xk[0].zchji);
fprintf(fp,"%5d|%5d|%5d|%.1f\n",q->xk[1].pingshi,q->xk[1].shiyan,q->xk[1].kaoshi,q->xk[1].zchji);
q=q->next;
}
fclose(fp);/*关闭文件指针fP指向的文件,在程序中,一个文件使用完毕后,若采用读取模式打开文件,可以不必做关闭文件的操作;若采用写入模式,一定要使用fclose()函关闭文件*/
printf("文件已保存\n");
return(0);
}
/*******************************************输入模块**************************************/
score*creat(void)/*创建带头结点的单链表*/
{
score*head,*p1,*p2;/*定义一个头指针和两个工作点*/
inti;
n=0;/*全局变量,结点数置零*/
head=p1=(structstudent*)malloc(LEN);/*用P1开辟一个新单元*/
printf("1.请输入学生资料(输0退出):
\n");
printf("1)请输入学生学号:
");
scanf("%d",&p1->num);
while(p1->num<0)/*输入错误提示*/
{
printf("学号不能为负数,请重新输入!
:
");
scanf("%d",&p1->num);
}
while(p1->num!
=0)
{
printf("2)请输入学生的姓名:
");
scanf("%s",p1->name);
printf("请输入学生的性别(M/W):
");
scanf("%c",&p1->sex);
while(p1->sex!
='M'&&p1->sex!
='W')
{
printf("性别只能输入'M'或者'W':
");
scanf("%c",&p1->sex);
}
printf("3)请输入学生的出生日期(年月日):
");
scanf("%d%d%d",&p1->birthday.year,&p1->birthday.month,&p1->birthday.day);
printf("4)请输入学生的成绩\n");
printf("a)请输入C语言成绩(平时实验考试):
");
scanf("%d%d%d",&p1->xk[0].pingshi,&p1->xk[0].shiyan,&p1->xk[0].kaoshi);
p1->xk[0].zchji=p1->xk[0].pingshi*0.1+p1->xk[0].shiyan*0.2+p1->xk[0].kaoshi*0.7;/*计算总成绩,其中,平时成绩占一成,实验成绩占两成,考试成绩占七成*/
printf("b)请输入通信原理成绩(平时实验考试):
");
scanf("%d%d%d",&p1->xk[1].pingshi,&p1->xk[1].shiyan,&p1->xk[1].kaoshi);
p1->xk[1].zchji=p1->xk[1].pingshi*0.1+p1->xk[1].shiyan*0.2+p1->xk[1].kaoshi*0.7;
n=n+1;/*结点个数加一*/
if(n==1)
head=p2=p1;/*若为首结点,则头指针指向p2结点*/
else
p2->next=p1;
p2=p1;/*若不是首结点则把p2结点链接到尾部*/
p1=(structstudent*)malloc(LEN);/*p1申请空间*/
printf("********************************\n");
printf("1.请输入学生资料(输0退出):
\n");
printf("1)请输入学生的学号:
");
scanf("%d",&p1->num);
flushall();
while(p1->num<0)/*判断输入的学号是否小于0*/
{
printf("学号不能为负数,请重新输入:
");
scanf("%d",&p1->num);
}
}
p2->next=NULL;/*最后结点不指向任何地址,即链表结束*/
free(p1);/*释放结点占用空间*/
return(head);
}
/*****************************************输出模块***************************************/
voidprint(score*head)
{
score*q=head;
printf("*****************************************************************************\n");
printf("学号姓名性别生日||");
printf("C(平时.实验.考试.综合)");
printf("通信原理(平时.实验.考试.综合)\n");
printf("*****************************************************************************\n");
if(head==NULL)
{
printf("\n没有任何学生的资料!
\n");
return;
}
while(q!
=NULL)
{
printf("%6d%8s%4c%4d-%2d-%2d||",q->num,q->name,q->sex,q->birthday.year,q->birthday.month,q->birthday.day);
printf("(%4d|%4d|%4d|%4.1f)|",q->xk[0].pingshi,q->xk[0].shiyan,q->xk[0].kaoshi,q->xk[0].zchji);
printf("(%4d|%4d|%4d|%4.1f)\n",q->xk[1].pingshi,q->xk[1].shiyan,q->xk[1].kaoshi,q->xk[1].zchji);
q=q->next;/*q指针依次向后查询*/
}
printf("\n***************************************************************************\n");
}
/*********************************************查询模块*************************************/
voidchaxun(score*head)/*按学号查询学生信息*/
{
score*q=head;
intnum,flag=0;
printf("请输入学号:
");
scanf("%d",&num);
while(q!
=NULL)
{
if(num==q->num)
{
printf("*****************************************************************************\n");
printf("学号姓名性别生日||");
printf("C(平时.实验.考试.综合)");
printf("通信原理(平时.实验.考试.综合)\n");
printf("*****************************************************************************\n");
printf("%6d%8s%4c%4d-%2d-%2d||",q->num,q->name,q->sex,q->birthday.year,q->birthday.month,q->birthday.day);
printf("(%5d|%5d|%5d|%.1f)|",q->xk[0].pingshi,q->xk[0].shiyan,q->xk[0].kaoshi,q->xk[0].zchji);
printf("(%5d|%5d|%5d|%.1f)\n",q->xk[1].pingshi,q->xk[1].shiyan,q->xk[1].kaoshi,q->xk[1].zchji);
printf("*****************************************************************************\n");
flag=1;/*消息树机制:
定义变量不等于初始值则退出循环体*/
}
q=q->next;
}
if(flag==0)
printf("对不起,没有这个学生的资料!
\n\n");
}
/***************************************删除模块**********************************************/
score*del(score*head)/*按学号删除*/
{
score*p1,*p2;
intnum;
printf("请输入要删除学生的学号:
");
scanf("%d",&num);
if(head==NULL)
{
printf("没有任何学生的资料!
\n\n");
return(head);
}
p2=p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;/*"尾插法"遍历链表*/
}
if(num==p1->num)
{
if(head==p1)
head=head->next;/*找到了,且为head所指向的变量,另head之后的结点为head结点,即删除这个结点*/
else
p2->next=p1->next;
free(p1);
p1=p2;/*通过释放p1结点达到跳跃该结点的目的,即删除这个结点*/
printf("第%d学生的资料已删除完毕!
\n\n",num);
}
else
printf("没有这个学生的资料!
\n\n");
print(r);
return(head);
}
/*****************************************排序模块****************************************/
score*paixu1(score*head)/*按C语言成绩由低到高排序*/
{
score*p1,*p2,*k,h;
inti;
if(head==NULL)
{
printf("没有任何学生的资料!
");
return(head);
}
p1=head;
p2=head->next;
k=p1;
for(i=0;i { while(p2! =NULL) { if(k->xk[0].zchji>p2->xk[0].zchji) k=p2; p2=p2->next; } if(k! =p1) { h=*k; *k=*p1; *p1=h; h.next=k->next; k->next=p1->next; p1->next=h.next; } p1=p1->next; p2=p1->next; k=p1; } printf("排序成功! \n\n"); return(head); } score*paixu2(score*head)/*按学号排序*/ { score*p1,*p2,*k,h; inti; if(head==NULL) { printf("没有任何学生的资料! "); return(head); } p1=head; p2=head->next; k=p1; for(i=0;i { while(p2! =NULL) { if(k->num>p2->num) k=p2;/*由小到大,遇到大的即跳开,找最小的学号所对应的结点*/ p2=p2->next; } if(k! =p1) { h=*k; *k=*p1; *p1=h; h.next=k->next; k->next=p1->next;/*k.p1所有信息交换*/ p1->next=h.next;/*使得最小的学号所对应的结点插到第一个结点位置*/ } p1=p1->next; p2=p1->next; k=p1;/*初始化k.p2,p1,使得返回循环,继续找最小的学号所对应的结点*/ } printf("排序成功! \n\n"); return(head); } /******************排序菜单******************/ voidpaixu_cd() { intm=0,i; while(m==0) { printf("排序: \n\t\t1.按C语言成绩排序\n\t\t2.按学号排序\n"); printf("请选择你所要操作的选项(按0退出): "); scanf("%d",&i); switch(i) { case1: r=paixu1(r);break; case2: r=paixu2(r);break; case0: m=1;break; default: printf("错误,重新选择: ");break; } } print(r); } /*******************************************插入模块*****************************************/ score*charu(score*head,score*stu)/*按学号插入*/ { score*p1,*p2; inti=0; p1=head; r=paixu2(r);/*调用排序函数*/ stu=(score*)malloc(LEN);/*用stu申请一个新单元,用于保存要插入的信息*/ printf("请输入要增加的学生资料: \n"); printf("请输入要增加的学生学号: "); scanf("%d",&stu->num); while(stu->num<0) { printf("学号不能为负数,请重新输入! : "); scanf("%d",&stu->num); } printf("请输入要增加的学生姓名: "); scanf("%s",stu->name); printf("请输入要增加的学生性别(M/W): "); scanf("%c",&stu->sex); while(stu->sex! ='M'&&stu->sex! ='W') { printf("请重新输入性别: "); scanf("%c",&stu->sex); } printf("请输入要增加的学生生日(年月日): "); scanf("%d%d%d",&stu->birthday.year,&stu->birthday.month,&stu->birthday.day); printf("请输入要增加的学生的成绩! \n"); printf("1)请输入要增加的学生C语言成绩(平时实验考试): "); scanf("%d%d%d",&stu->xk[0].pingshi,&stu->xk[0].shiyan,&stu->xk[0].kaoshi); stu->xk[0].zchji=stu->xk[0].pingshi*0.1+stu->xk[0].shiyan*0.2+stu->xk[0].kaoshi*0.7; printf("2)请输入要增加的学生通信原理的成绩(平时实验考试): "); scanf("%d%d%d",&stu->xk[1].pingshi,&stu->xk[1].shiyan,&stu->xk[1].kaoshi); stu->xk[1].zchji=stu->xk[1].pingshi*0.1+stu->xk[1].shiyan*0.2+stu->xk[1].kaoshi*0.7; if(head==NULL)/*判断头指针是否为空*/ { head=stu; stu->next=NULL; n++; return(head); } while(p1->num =NULL)/*根据学号确定要插入的位置*/ { p2=p1; p1=p1->next;/*继续向后查找插入位置*/ } if(stu->num<=p1->num) { if(p1==head) { head=stu; stu->next=p1; n++; } else { stu->next=p2->next; p2->next=stu; n++; } } else { p1->next=stu; stu->next=NULL; n++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统