学生成绩管理系统实训报告Word格式.docx
- 文档编号:22966181
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:34
- 大小:99.29KB
学生成绩管理系统实训报告Word格式.docx
《学生成绩管理系统实训报告Word格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统实训报告Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
试着从文件中导入数据到成绩管理系统中,然后进行管理。
四、设计要求、技术参数及设计规格
1、原始成绩由老师统一给出,在Excel表中;
2、设计的系统能够运行,提交源程序、目标文件和可执行文件;
3、提交实训报告,实训报告中列写:
1)软件需求分析;
2)软件规格说明和设计要求;
3)对数据的管理方案;
4)“学生成绩管理系统”设计的思路和整体框架;
5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;
6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。
4、程序设计环境为VisualC++6.0或DEVC++
5、所有的设计工作需要同学自己真实地、独立地完成。
天/日期
任务描述
通过标准
2015年1月5日
上午:
熟悉系统功能,
完成三项任务(用文档记录):
3)对数据的管理方案。
下午:
构思“学生成绩管理系统”的思路和整体框架。
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)。
设计被系统调用的main函数;
实现界面函数;
设计各功能子函数的框架;
文档通过
方案通过
数据结构通过
设计的函数框架通过
要求数据传递接口正常,main函数能运行。
2015年1月6日
实现成绩录入功能;
实现计算平均成绩功能;
实现输出功能;
各子函数调试通过,能被main函数成功调用,其子功能能实现。
2015年1月7日
实现排序功能;
下午:
实现修改功能;
实现增补功能(选做);
2015年1月8日
实现查找功能,按学号查找、按姓名查找;
实现自身特色功能,如登陆、链表操作、文件存储数据;
各子函数调试通过。
完善“成绩管理系统的各项功能”。
撰写实训报告。
实践能力强的同学实现附加功能。
继续写实训报告并且验收设计的项目。
系统能正确运行,界面友好);
各功能能够实现,性能良好操作方便。
备注:
做得慢的同学选做部分可不做。
五、工作量
六、考核形式、考核时间、考核指标及成绩评定
实训成绩由下面构成:
实训纪律、实训态度和平时表现占20%;
实训结果占30%;
实训报告占30%;
实践操作能力占20%。
考核形式:
1)老师每日对学生的考察、评估和考核;
2)最后对实训项目完成的质量进行考核和验收。
完成期限:
2015年01月09日
指导教师签章:
孙海燕
专业负责人签章:
崔建涛
教学院长签章宋胜利
实训进度日历
题目
学生成绩管理系统
指导教师
孙海燕、张玲、陈明
学生班级
软件学院网络软件14-01
网络软件14-02,.net技14-02
学年学期
14—15学年
第1学期
天
实训任务详细描述
教师实训任务的指导(解决方案、实现步骤、技术路线、难点提示)
15年1月5日
上午
完成:
对软件功能进行分类。
用户界面操作简单、功能完备,系统启动后先录入数据,再求平均成绩;
平均成绩求出后,其他的功能才能实现。
数据结构可以采用数组也可以采用链表。
文档通过验收
下午
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)
设计界面函数;
如果采用数组管理数据结构,则数组必须按地址传递,这样数据才能在各个函数间共享。
难点1:
系统的退出,exit()函数需要包含stdlib.h
难点2:
清屏函数clrscr();
难点3:
数据的传递
设计的函数框架通过调试,
15年1月6日
设计数据录入函数,从键盘读数据到数组中,或者创建链表
数据输入完后,怎样控制结束?
用一个什么标志。
难点2:
结构体数组中的子域又是一个数组时,数据不能直接从键盘读入,需用一个临时变量中转一下。
难点3:
从键盘录入数据时,要给完全的提示信息,便于操作指导。
各子函数调试通过,能被main函数成功调用
计算平均成绩的函数实现;
输出原始成绩;
难点4:
想一想:
在录入数据时数据保存到一数组,那么在算平均值时,怎样能接触到此数组中的数据。
输出按照一定的格式,好看。
各子函数调试通过,能被main函数成功调用。
15年1月7日
排序功能实现并输出排序后的成绩。
按平均成绩排序。
排序的算法可以是泡泡法或者选择法等
思考1:
你还可以分别在每个班中按平均成绩排序吗?
思考2:
能输出有不及格课程的同学信息和成绩吗?
实现查找功能
按姓名查找以后,再修改;
按学号查找以后,再修改;
如果要用对半查找法,需要数据是有序的。
15年1月8日
能对某一学生信息和成绩进行修改;
能增加学生的信息(选做);
查找到某一学生,修改某一属性,如果需要重新排序,重新排序,把结构存入文件;
难点:
怎样从键盘中把成绩存入文件。
增加后重新排序,重新输出。
怎样从文件中读出数据
自定义功能实现
如:
登陆:
密码输入显示*;
等~
15年1月9日
完成实训报告
清晰、明确、简单、评价合理、有自己的见解、创新。
实训报告内容:
任务书、实训进度计划、大纲性的目录、正文、实训感想、附件。
实训报告要求装订整齐。
验收程序
讨论
制订教师:
孙海燕、张玲
实训报告
1.软件需求分析
1.1、用C语言编写程序实现“学生成绩管理系统”。
1.2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。
1.3、系统启动后,弹出一个用户界面,能实现人机交互的功能。
而且只能通过界面菜单命令实现各种功能(包括系统退出功能);
1.4、录入学生成绩(信息有:
1.5、计算每门功课的平均成绩和学生五门功课的平均成绩并存档;
1.6、输出学生的信息和对应的原始成绩以及平均成绩;
1.7、按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩;
1.8、对成绩修改,有两种模式,一种是按学号查找后进行修改;
修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩;
1.9、增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩;
1.10、附加功能:
把学生信息和对应的课程成绩和平均成绩存入到文件中;
1.11、附加功能:
输出文件中的内容;
1.12、附加功能:
2.系统详细设计及实现
2.1、系统用户界面尽量居中,体现美观效果;
2.2、编写的程序具有人机交互功能;
2.3、通过菜单选择软件的功能;
2.4、软件只能由菜单退出系统;
2.5、操作信息提示(界面友好);
2.6、具有拦截一些误操作错误的功能;
2.7、按原始成绩格式输出。
设计要求:
2.1、根据老师给出的数据写入;
2.2、设计的系统能够运行,提交源程序、目标文件和可执行文件;
2.3、提交实训报告,实训报告中列写;
2.4、程序设计环境为DEVC++;
2.5、所有的设计工作需要同学自己真实地、独立地完成。
3、对数据的管理方案
结构体数组和文件:
输入的数据可以保存在文件中,下次重新打开程序,原先已输入的数据还在;
(难度中等)
以下为该程序的定义部分
typedefstructstudent
{
charclas[5];
charID[5];
charname[15];
doublescore[5];
doublesum;
doubleavg;
}STU;
在此处,我将学生的班级、学号和姓名都定义为char型,方便整体的使用。
特别是后面的部分子函数中用到的字符串比较函数strcmp,方便了排序比较;
将学生的成绩定义为双精度实型变量(double),为了使计算的平均分更为精确。
讲此定义放在程序的头部,作为整个程序使用。
为了使后面的子函数调用方便、简介,我用到typedefstructstudent定义。
以下是该程序的函数声明部分
/*以下是该程序的函数声明部分*/
voidDisplay(void);
/*显示主菜单界面*/
voidLoad(STUstu[],int*n);
/*将信息加载到内存中*/
voidInputOne(STUstu[],inti);
/*输入指定的学生信息*/
voidAdd(STUstu[],int*n);
/*添加指定的学生信息*/
voidSave(STUstu[],intn);
/*将数组保存到磁盘*/
voidOutput(STUstu[],intn);
/*输出所有学生信息*/
voidPrint(STU*s);
/*输出指定的学生信息*/
voidSort(STUstu[],intn);
/*排序*/
voidFind(STUstu[],intn);
/*查找*/
intFindID(STUstu[],intn,charclas[],charID[]);
/*按学生学号查找*/
voidEdit(STUstu[],intn);
/*修改指定的学生信息*/
voidDel(STUstu[],int*n);
/*删除*/
voidDeleteAll(STUstu[],int*n);
/*删除所有学生信息*/
voidDeleteOne(STUstu[],int*n);
/*删除指定的学生信息*/
以上是该程序的全部声明部分,这些声明函数与下文的各功能函数相互对应,且顺序依次排列,方便查找和修改。
在这些声明的函数中,用到了引用数组以及指针,方便了下面各功能函数的使用以及调用。
以下是该程序的主函数部分
intmain()
STUstu[N];
intn;
intselect;
Load(stu,&
n);
while
(1)
{
Display();
scanf("
%d"
&
select);
switch(select)
{
case1:
/*输入*/
Add(stu,&
break;
case2:
/*输出*/
Output(stu,n);
case3:
/*排序*/
Sort(stu,n);
case4:
/*查找*/
Find(stu,n);
case5:
/*修改*/
Edit(stu,n);
case6:
/*删除*/
Del(stu,&
case7:
/*退出*/
return0;
}
}
}
以上是该函数的函数部分,用到了switch语句,分别针对7种功能分情况列出。
在下面的各分函数中,处理完的数据值会根据具体需要返还到主函数中,并且显示在主界面中。
方便用户查看。
利用switch的好处在于,分情况列出各种需要的可能性,条例清晰,可读性强,并且十分方便。
以下是该程序的主界面部分
/*以下为该程序的主界面*/
voidDisplay()
system("
cls"
);
printf("
郑州轻工业学院考试成绩管理系统\n"
\n"
班级:
网络软件开发14-01班\n"
学号:
621413560103\n"
作者:
褚超\n"
***************************************************************\n"
1:
输入学生资料\n"
2:
输出学生成绩3:
资料进行排序\n"
4:
查找学生资料5:
修改学生资料\n"
6:
删除学生资料7:
退出管理系统\n"
****************************************************************\n"
欢迎进入成绩管理系统,请选择(你只需输入1~7中的其中一个数字便可进行下一步操作)\n"
以上为该程序实际操作的主界面,具有6大基本功能。
用户可以根据需要进行相关操作,实现所需要的功能。
在此界面中,用到了清屏函数,方便用户更好的体验该程序,不至于界面混乱。
voidLoad(STUstu[],int*n)
FILE*fp;
inti;
if((fp=fopen("
d:
\\student.dat"
"
r+"
))==NULL)/*以'
r+'
打开可读写的文件*/
*n=0;
return;
for(i=0;
fread(&
stu[i],sizeof(STU),1,fp)!
=0;
i++);
/*将信息读取到stu中*/
*n=i;
/*这里*n的作用为记录文件中当前学生数量*/
fclose(fp);
/*关闭文件*/
}
/*****************************************************************************/
以上是该程序的从文件中读取数据的函数部分。
用到了指针,从所指定的文件student.dat读取到输入后保存在该文件中的信息,并显示在主界面中。
用户可以直接将该文件拷贝到指定文件夹中,当执行一次源代码的编译后,该系统就知道了这些数据所在的文件,当用户执行程序运行时,选择相关的功能时,便可直接在主界面显示,无需再次输入信息。
这样以来,该程序就具有了很强的实用性与使用性,方便了用户处理数据。
以下是该程序的输入部分
/*输入第i个学生信息,保存到stu数组中*/
voidInputOne(STUstu[],inti)
intj;
/*输入学生信息*/
请输入学生班级、学号、姓名(数据间以空格隔开):
"
scanf("
%s%s%s"
stu[i].clas,&
stu[i].ID,&
stu[i].name);
/*输入五门课程成绩并累加*/
请依次输入课程1、2、3、4、5成绩(数据间以空格隔开):
stu[i].sum=0.0;
for(j=0;
j<
5;
j++)
%lf"
stu[i].score[j]);
stu[i].sum+=stu[i].score[j];
/*计算五门课程的平均分*/
stu[i].avg=stu[i].sum/5;
/*调用InputOne函数添加若干学生信息,并把新添加的学生信息依次保存到文件中*/
voidAdd(STUstu[],int*n)
inti=0;
chars='
y'
;
while(s=='
)
InputOne(stu,(*n)++);
/*添加第n+1个学生的信息*/
printf("
是否继续添加(请输入yorn)\n"
%c"
s);
Save(stu,*n);
voidSave(STUstu[],intn)
w"
))==NULL)
打开文件失败\n"
exit(0);
fwrite(stu,n*sizeof(stu[0]),1,fp);
以上为该程序的第一个功能函数部分,可实现学生信息的录入功能,所录入的文件即student.dat。
用户可以根据需要输入一个或多个学生信息。
只需要在输入一个学生信息完成后,判断是否继续录入学生信息即可。
当输入y时,可继续输入一个或多个学生信息,操作与之前相同;
当输入其它字母时,输入学生信息结束,程序返回到该程序的原始主界面。
可继续选择其它相关操作。
方便用户处理数据,解决了单次功能实现后,程序退出的问题。
以下是该程序的输出部分
/*输出所有学生信息*/
voidOutput(STUstu[],intn)
/*打印数据表头*/
您需要的所有学生成绩如下:
%8s%8s%8s%8s%8s%8s%8s%8s%8s%8s"
班级"
学号"
姓名"
成绩1"
成绩2"
成绩3"
成绩4"
成绩5"
总分"
平均分"
i<
n;
i++)
Print(&
stu[i]);
pause"
voidPrint(STU*s)
/*打印所有学生的信息*/
%8s%8s%8s"
s->
clas,s->
ID,s->
name);
%8.2f"
score[i]);
%8.2f%8.2f"
sum,s->
avg);
以上是学生信息输出部分的函数,系统会自动打印出表头信息。
相关的学生信息会在其下一行依次展开并与表头对齐。
程序实现了信息的读出功能,方便了用户的查看与处理。
其中,输出的学生成绩都采用了double型,并保留两位有效数字,使数据更为准确。
下面给出输出学生信息时的主界面显示情况
以下是该程序的排序部分
/*对学生的信息进行排序*/
voidSort(STUstu[],intn)
intScoreAsc(constvoid*a,constvoid*b);
intScoreDes(constvoid*a,constvoid*b);
intNameAsc(constvoid*a,constvoid*b);
1:
按总成绩升序排列\n"
2:
按总成绩降序排列\n"
3:
按学生姓名排序\n"
switch(select)
case1:
qsort(stu,n,sizeof(stu[0]),ScoreAsc);
case2:
qsort(stu,n,sizeof(stu[0]),ScoreDes);
case3:
qsort(stu,n,sizeof(stu[0]),NameAsc);
default:
return;
Output(stu,n);
/*以下是按成绩升序排序的分函数*/
intScoreAsc(constvoid*a,constvoid*b)
return((STU*)a)->
sum>
((STU*)b)->
sum?
1:
-1;
/*以下是按成绩降序排列的分函数*/
intScor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 报告