学生成绩管理系统.docx
- 文档编号:30191153
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:30
- 大小:70.69KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
郑州轻工业学院
实训报告
实训名称:
学生成绩管理系统
目录
实训任务书………………………………………………………1
实训进度日历……………………………………………………
实训报告………………………………………………………
1.软件需求分析…
1.1
1.2
……
2.系统详细设计及实现
2.1
2.2
……
3.
4.
……
实训感想……………………………………………………….
附录……………………………………………………………..
实训任务书
一、题目
“学生成绩管理系统”设计
二、学生信息
专业学号姓名
三、用户需求及约束条件
1、用C语言实现“学生成绩管理系统”。
2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。
3、“学生成绩管理系统”具有以下功能:
1)系统启动后,弹出一个用户界面,能实现人机交互的功能。
而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。
2)录入学生成绩(信息有:
班级、姓名、学号、五门课程成绩);
3)计算每门功课的平均成绩和学生五门功课的平均成绩并存档。
下面的功能必须是第3)项功能完成以后才能进行。
4)输出学生的信息和对应的原始成绩以及平均成绩;
5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。
6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。
7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。
8)附加功能:
把学生信息和对应的课程成绩和平均成绩存入到文件中。
9)附加功能:
输出文件中的内容。
10)附加功能:
试着从文件中导入数据到成绩管理系统中,然后进行管理。
四、设计要求、技术参数及设计规格
1、原始成绩由老师统一给出,在Excel表中;
2、设计的系统能够运行,提交源程序、目标文件和可执行文件;
3、提交实训报告,实训报告中列写:
1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案;4)“学生成绩管理系统”设计的思路和整体框架;5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。
4、程序设计环境为VisualC++6.0或DEVC++
5、所有的设计工作需要同学自己真实地、独立地完成。
天/日期
任务描述
通过标准
2015年1月5日
上午:
熟悉系统功能,
完成三项任务(用文档记录):
1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。
下午:
构思“学生成绩管理系统”的思路和整体框架。
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)。
设计被系统调用的main函数;实现界面函数;设计各功能子函数的框架;
文档通过
方案通过
数据结构通过
设计的函数框架通过
要求数据传递接口正常,main函数能运行。
2015年1月6日
上午:
实现成绩录入功能;
下午:
实现计算平均成绩功能;实现输出功能;
各子函数调试通过,能被main函数成功调用,其子功能能实现。
2015年1月7日
上午:
实现排序功能;
下午:
实现修改功能;实现增补功能(选做);
各子函数调试通过,能被main函数成功调用,其子功能能实现。
2015年1月8日
上午:
实现查找功能,按学号查找、按姓名查找;
下午:
实现自身特色功能,如登陆、链表操作、文件存储数据;
各子函数调试通过。
2015年1月8日
上午:
完善“成绩管理系统的各项功能”。
撰写实训报告。
实践能力强的同学实现附加功能。
下午:
继续写实训报告并且验收设计的项目。
系统能正确运行,界面友好);
各功能能够实现,性能良好操作方便。
备注:
做得慢的同学选做部分可不做。
五、工作量
六、考核形式、考核时间、考核指标及成绩评定
实训成绩由下面构成:
实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。
考核形式:
1)老师每日对学生的考察、评估和考核;2)最后对实训项目完成的质量进行考核和验收。
完成期限:
年01月09日
指导教师签章:
专业负责人签章:
教学院长签章
2014年12月30日
实训进度日历
题目
学生成绩管理系统
指导教师
孙海燕、张玲、陈明
学生班级
软件学院网络软件14-01
网络软件14-02,.net技14-02
学年学期
14—15学年
第1学期
天
实训任务详细描述
教师实训任务的指导(解决方案、实现步骤、技术路线、难点提示)
通过标准
15年1月5日
上午
完成:
1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。
对软件功能进行分类。
用户界面操作简单、功能完备,系统启动后先录入数据,再求平均成绩;平均成绩求出后,其他的功能才能实现。
数据结构可以采用数组也可以采用链表。
文档通过验收
下午
构思“学生成绩管理系统”的思路和整体框架。
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)
设计被系统调用的main函数;设计界面函数;
如果采用数组管理数据结构,则数组必须按地址传递,这样数据才能在各个函数间共享。
难点1:
系统的退出,exit()函数需要包含stdlib.h
难点2:
清屏函数clrscr();
难点3:
数据的传递
设计的函数框架通过调试,
要求数据传递接口正常,main函数能运行。
15年1月6日
上午
设计数据录入函数,从键盘读数据到数组中,或者创建链表
难点1:
数据输入完后,怎样控制结束?
用一个什么标志。
难点2:
结构体数组中的子域又是一个数组时,数据不能直接从键盘读入,需用一个临时变量中转一下。
难点3:
从键盘录入数据时,要给完全的提示信息,便于操作指导。
各子函数调试通过,能被main函数成功调用
下午
计算平均成绩的函数实现;
输出原始成绩;
难点4:
想一想:
在录入数据时数据保存到一数组,那么在算平均值时,怎样能接触到此数组中的数据。
输出按照一定的格式,好看。
各子函数调试通过,能被main函数成功调用。
15年1月7日
上午
排序功能实现并输出排序后的成绩。
按平均成绩排序。
排序的算法可以是泡泡法或者选择法等
思考1:
你还可以分别在每个班中按平均成绩排序吗?
思考2:
能输出有不及格课程的同学信息和成绩吗?
各子函数调试通过,能被main函数成功调用。
下午
实现查找功能
按姓名查找以后,再修改;
按学号查找以后,再修改;
如果要用对半查找法,需要数据是有序的。
各子函数调试通过,能被main函数成功调用。
15年1月8日
上午
能对某一学生信息和成绩进行修改;
能增加学生的信息(选做);
查找到某一学生,修改某一属性,如果需要重新排序,重新排序,把结构存入文件;
难点:
怎样从键盘中把成绩存入文件。
增加后重新排序,重新输出。
难点:
怎样从文件中读出数据
下午
自定义功能实现
如:
登陆:
密码输入显示*;等~
15年1月9日
上午
完成实训报告
难点:
清晰、明确、简单、评价合理、有自己的见解、创新。
实训报告内容:
任务书、实训进度计划、大纲性的目录、正文、实训感想、附件。
实训报告要求装订整齐。
系统能正确运行,界面友好);
各功能能够实现,性能良好操作方便。
下午
验收程序
讨论
系统能正确运行,界面友好);
各功能能够实现,性能良好操作方便。
制订教师:
孙海燕、张玲
实训报告
1.软件需求分析
软件功能:
1.管理文件档案、统计和查询学生成绩信息
2.能够输入学生班级、学号、姓名、五门课程成绩
3.计算每门功课的平均成绩和学生五门功课的平均成绩并存档
4.输出学生的信息和对应的原始成绩以及平均成绩;
5.按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。
6.对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。
7.增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。
学生成绩管理系统作为一个学校管理学生成绩的系统,必须拥有实用性和增添、删改的能力,并且拥有强大的查询功能,每一条记录包括一个学生的学号、姓名、5门成绩、总分、平均成绩,并且可以一次完成无数条记录的输入,在显示方面,可以完全显示全部学生的成绩记录以及相关的学生信息,在查找方面,可以按姓名和学号查找学生记录,并精简的显示给使用者看,方便查找。
在排序方面,按学生平均成绩进行排序,当输入相关指令选项时,系统将自动进行排序功能,之后会在显示屏上提示使用者排序已成功,在增添学生成绩功能方面,按平均成绩高低插入一条学生记录,这对于使用者也是一种新的操作体验,提高输入的效率性。
在保存数据方面,是学生成绩管理系统的最强大的功能,将学生记录保存在任何自定义的文件中,使用者可以随意保存随意命名相关数据文件,方便使用者下次使用和查找文件,下次使用时就会用到学生成绩管理系统的读取功能,在我看来,存入功能和读取功能体现了系统的实用性和方便性。
以下是学生成绩管理系统的相关操作演示效果:
开始界面:
主菜单界面:
输入学生成绩信息界面:
查看学生成绩信息界面:
(以下为演示界面)
查询学生成绩信息界面:
核心代码:
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(STUDENT)
structstu
{charnum[6];
charname[5];
intscore[5];
intsum;
floataverage;
intorder;
structstu*next;
};
typedefstructstuSTUDENT;
STUDENT*init();
intmenu_select();
STUDENT*create();
voidprint(STUDENT*head);
voidsearch(STUDENT*head);
STUDENT*delete(STUDENT*head);
STUDENT*sort(STUDENT*head);
STUDENT*insert(STUDENT*head,STUDENT*new);
voidsave(STUDENT*head);
STUDENT*load();
main()
{STUDENT*head,new;
head=init();
for(;;)
{switch(menu_select())
{
case1:
head=create();break;
case2:
print(head);break;
case3:
search(head);break;
case4:
head=delete(head);break;
case5:
head=sort(head);break;
case6:
head=insert(head,&new);break;
case7:
save(head);break;
case8:
head=load();break;
case9:
exit(0);
}
}
}
STUDENT*init()
{
returnNULL;
}
menu_select()
{intn;
//structdated;
//getdate(&d);
printf("按任意键进入主菜单");
getch();
system("cls");
printf("*********************************************************************\n");
printf("\t\t欢迎进入\n");
printf("\n\t\t学生成绩管理系统\n");
printf("*****************************菜单************************************\n");
printf("\t\t\t1.输入学生成绩\n");
printf("\t\t\t2.显示学生成绩\n");
printf("\t\t\t3.查找学生成绩\n");
printf("\t\t\t4.删除学生成绩\n");
printf("\t\t\t5.排序学生成绩\n");
printf("\t\t\t6.追加学生成绩\n");
printf("\t\t\t7.保存学生成绩\n");
printf("\t\t\t8.读取学生成绩\n");
printf("\t\t\t9.退出系统程序\n");
printf("\n\t\t郑州轻工业学院2014届网络开发-02班杨轩舟\n");
printf("*********************************************************************\n");
//printf("\t\t\t\t%d\\%d\\%d\n",dda_mon,d.da_day,d.da_year);
do{
printf("\n\t\t\t输入以下九个选择中的一项:
");
scanf("%d",&n);
}while(n<1||n>9);/*如果选择项不在1~9之间则重输*/
return(n);/*返回选择项,主函数根据该数调用相应的函数*/
}
STUDENT*create()
{
inti,s;
STUDENT*head=NULL,*p;/*定义函数,此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{p=(STUDENT*)malloc(LEN);/*开辟一个新的单元*/
if(!
p)/*如果指针p为空*/
{printf("\nOutofmemory.");/*输出内存溢出*/
return(head);/*返回头指针*/
}
printf("输入你的学号:
");
scanf("%s",p->num);
if(p->num[0]=='0')break;/*如果学号首字符为0则结束输入*/
printf("输入你的昵称:
");
scanf("%s",p->name);
printf("请输入成绩:
\n",5);/*提示开始输入成绩*/
s=0;/*计算每个学生的总分,初值为0*/
for(i=0;i<5;i++)/*5门课程循环5次*/
{
do{
printf("score%d:
",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0||p->score[i]>100)/*确保成绩在0~100之间*/
printf("输入错误,请再次输入.\n");
}while(p->score[i]<0||p->score[i]>100);
s=s+p->score[i];/*累加各门成绩*/
}
p->sum=s;/*将总分保存*/
p->average=(float)s/5;/*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0;/*未排序前此值为0*/
p->next=head;/*将头结点作为新输入结点的后继结点*/
head=p;/*新输入结点为新的头结点*/
}
return(head);
}
以下函数是显示输入学生全部信息记录的函数,通过统计记录条数来进行输入,初值为头指针,显示出来更清晰地使使用者查看所有输入的学生信息。
从这里开始,可以显示出,其用到频率最多的是system(“cls”)函数,称为清屏函数,在每次输入后都将使用到清屏函数,因为整个程序都用到移动指针,所以可以将程序简洁化,并且使用的语句会更见简练。
/*显示全部记录函数*/
voidprint(STUDENT*head)
{
inti=0;/*统计记录条数*/
STUDENT*p;/*移动指针*/
system("cls");
p=head;/*初值为头指针*/
printf("\n******************************STUDENT*********************\n");
printf("------------------------------------------------------------\n");
printf("|Rec|Num|Name|Sc1|Sc2|Sc3|Sc4|Sc5|Sum|Ave|Order|\n");
printf("------------------------------------------------------------\n");
while(p!
=NULL)
{
i++;
printf("|%4d|%4s|%5s|%4d|%4d|%4d|%4d|%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];/*存放姓名用的字符数组*/
system("cls");
printf("Pleaseenternameforsearching.\n");
scanf("%s",s);
p=head;/*将头指针赋给p*/
while(strcmp(p->name,s)&&p!
=NULL)/*当记录的姓名不是要找的,或指针不为空时*/
p=p->next;/*移动指针,指向下一结点*/
if(p!
=NULL)/*如果指针不为空*/
{
printf("\n********************************FOUND*******************************************\n");
printf("----------------------------------------------------------------------------------\n");
printf("|Num|Name|sc1|sc2|sc3|sc4|sc5|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->score[3],p->score[4],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------------\n");
printf("***************************************END*******************************************\n");
}
else
printf("\nThereisnonum%sstudentonthelist.\n",s);/*显示没有该学生*/
}
以下用到的是删除记录函数,用到了函数delete,在head指向的单向链表中,p1为查找到要删除的结点指针,p2为其前驱指针,如果找到需要删除的信息,则可以将其删除,在使用删除记录功能时,使用者可以根据是否删除选项进行删除信息功能,使得操作更加人性化,当记录的学号不是要找的学生信息时,还可以进行返回菜单界面的选择。
当删除后还会提示不要忘记保存,提示使用者在删除信息后要记得保存为文件,以达到删除后的效果和所需留下的学生信息。
/*删除记录函数*/
STUDENT*delete(STUDENT*head)
{intn;
STUDENT*p1,*p2;/*p1为查找到要删除的结点指针,p2为其前驱指针*/
charc,s[6];/*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("Pleaseenterthedeletednum:
");
scanf("%s",s);
p1=p2=head;/*给p1和p2赋初值头指针*/
while(strcmp(p1->num,s)&&p1!
=NULL)/*当记录的学号不是要找的,或指针不为空时*/
{p2=p1;/*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1->next;/*将p1指针指向下一跳记录*/
}
if(strcmp(p1->num,s)==0)/*学号找到了*/
{printf("***************************************FOUND********************************\n");
printf("-----------------------------------------------------------------------------\n");
printf("|%6d|%6s|%6s|%6d|%6d|%6d|%6d|%6f|%6d|\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统