学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/1/1f0257b8-272f-45a6-a4f2-c97a2f1aa112/1f0257b8-272f-45a6-a4f2-c97a2f1aa1121.gif)
学生成绩管理系统
一、课程设计题目
《学生成绩管理系统》的设计与实现
二、要求
1、整个系统均用C语言实现;
2、利用指针、链表来实现学生成绩的数据结构设计;
3、系统具有输入、显示、查询、排序的基本功能;
4、系统的各个功能模块都用函数的形式来实现;
三、内容
1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
2、输入功能:
可以一次完成无数条记录的输入。
3、显示功能:
完成全部学生记录的显示。
4、查找功能:
完成按姓名查找学生记录,并显示。
5、排序功能:
按学生平均成绩进行排序。
6、有一个清晰美观界面来调用各个功能
四、各功能模块的算法处理流程及相关说明
整个系统除了主函数外,另外还有7个函数,实现八大功能:
输入功能、显示功能、查找功能、排序功能。
各个函数的详细设计说明分别如下:
1、主函数main()
利用无限次循环for(;;)和switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、初始化函数STUDENT*init()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
比如:
没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
3、菜单选择函数intmenu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4、输入记录函数STUDENT*create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。
算法:
先声明一个首节点head,并将head->next设为NULL。
每输入一个数据就声明一个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。
N-S流程图如下:
5、显示记录函数voidprint(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向NULL为止。
N-S流程图如下:
6、查找记录函数voidsearch(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。
算法:
采用线性查找法往下一个节点查找。
输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s)&&p!
=NULL时,使p后移一个结点,如果p!
=NULL,输出p所指的结点。
N-S流程图如下:
7、排序函数STUDENT*sort(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
N-S流程图:
五、调试分析
(1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!
加入初始化函数后,这种现象也随之消失。
(2)刚开始执行输入函数,按学号顺序输入十个学生的成绩,输完后执行显示功能,学生成绩记录是按学号的反顺序显示的,试着在其中增加一些语句,希望能把学号按正常顺序显示,但暂时没有成功,所以在输入成绩时只能按学号反顺序输入,最后就按学号正常顺序输出了。
(3)在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,当学号为0的时候则停止输入,并返回菜单。
(4)输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。
(5)在没有输入任何信息的情况下,去执行排序功能,最后显示有一个记录,学号、姓名为空白,成绩都为0,名次为1。
(6)在输入选项时不能输入字母,否则会死循环,建议不要乱输字母。
(7)程序在调试运行的时候发现益处问题不能解决,所以当输入的变量不合法或益处时程序出现错误多为死循环的结果
六、调用关系
七、心得体会
通过这次自主设计软件的机会,我们有幸通过自己的努力和老师的帮助第一次独立完成一个程序虽然程序本身并不好但重要的是过程,如:
设计算法,之前一直认为编程最重要的是语法但现在才了解算法才是一个程序的灵魂。
另外,在写程序的过程中发现了好多书上和老师都没有讲过的命令和函数,而这些又是一个程序所必要的组成部分所以加强自我学习和进步应该成为我们以后的目标而不是之跟着老师和书本走。
这是我的第一个150行以上的程序,可以说写的相当一般但我还是很满意,我相信我会以此为基石一步一个脚印做的越来越好!
!
!
八、源程序
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(STUDENT)
typedefstructstu
{charnum[9];
charname[20];
intscore[3];
intsum;
floataverage;
intorder;
structstu*next;
}STUDENT;
STUDENT*init();
intmenu_select();
STUDENT*create();
voidprint(STUDENT*head);
voidsearch(STUDENT*head);
STUDENT*sort(STUDENT*head);
main()
{STUDENT*head,new;
head=init();
for(;;)
{switch(menu_select())
{
case1:
head=create();break;
case2:
print(head);break;
case3:
search(head);break;
case4:
head=sort(head);break;
case5:
exit(0);
}
}
}
STUDENT*init()
{
returnNULL;
}
menu_select()
{intn;
structdated;
getdate(&d);
printf("welcometousemysystem@_@!
pressanykeytocontinue^_^");
getch();
clrscr();
printf("********************************************************************************\n");
printf("\t\t~~Welcometo~~\n");
printf("\n\t\tThestudentscoremanagesystem\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1.Entertherecord\n");
printf("\t\t\t2.Printtherecord\n");
printf("\t\t\t3.Searchrecordonname\n");
printf("\t\t\t4.Sorttomakenewafile\n");
printf("\t\t\t5.Quit\n");
printf("\n\t\tMadebyender.\n");
printf("\n\tliaoninggongchengjishudaxueJIHR0606ban\n");
printf("********************************************************************************\n");
printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day);
do{
printf("\n\t\t\tEnteryourchoice(1~5):
");
scanf("%d",&n);
}while(n<1||n>5);
return(n);
}
STUDENT*create()
{inti,s;
STUDENT*head=NULL,*p;
clrscr();
for(;;)
{p=(STUDENT*)malloc(LEN);
if(!
p)
{printf("\nOutofmemory.");
return(head);
}
printf("Enterthenum(enterotogoback):
");
scanf("%s",p->num);
if(p->num[0]=='0')break;
printf("Enterthename:
");
scanf("%s",p->name);
printf("Pleaseenterthe%dscores\n",3);
s=0;
for(i=0;i<3;i++)
{
do{
printf("score%d:
",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0||p->score[i]>100)
printf("Dataerror,pleaseenteragain.\n");
}while(p->score[i]<0||p->score[i]>100);
s=s+p->score[i];
}
p->sum=s;
p->average=(float)s/3;
p->order=0;
p->next=head;
head=p;
}
return(head);
}
voidprint(STUDENT*head)
{inti=0;
STUDENT*p;
clrscr();
p=head;
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Rec|Num|Name|english|chinese|math|Sum|Ave|Order|\n");
printf("-------------------------------------------------------------------------------\n");
while(p!
=NULL)
{
i++;
printf("|%3d|%4s|%-4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n",
i,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
voidsearch(STUDENT*head)
{STUDENT*p;
chars[5];
clrscr();
printf("Pleaseenternameforsearching.\n");
scanf("%s",s);
p=head;
while(strcmp(p->name,s)&&p!
=NULL)
p=p->next;
if(p!
=NULL)
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Num|Name|english|chinese|math|Sum|Ave|Order|\n");
printf("-------------------------------------------------------------------------------\n");
printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\nThereisnonum%sstudentonthelist.\n",s);
}
STUDENT*sort(STUDENT*head)
{inti=0;
STUDENT*p1,*p2,*t,*temp;
temp=head->next;
head->next=NULL;
while(temp!
=NULL)
{
t=temp;
temp=temp->next;
p1=head;
p2=head;
while(t->averageaverage&&p1!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1==p2)
{
t->next=p1;
head=t;
}
else
{
t->next=p1;
p2->next=t;
}
}
p1=head;
while(p1!
=NULL)
{
i++;
p1->order=i;
p1=p1->next;
}
printf("Sortingissucessful.\n");
return(head);
}
九、参考文献
《c程序设计》,《c程序设计题解与上机指导》,《c和c++程序设计教程》
教师指导,网络资源。