学生成绩管理系统实训报告精篇.docx
- 文档编号:8461578
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:25
- 大小:58.68KB
学生成绩管理系统实训报告精篇.docx
《学生成绩管理系统实训报告精篇.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统实训报告精篇.docx(25页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统实训报告精篇
郑州轻工业学院
实训报告
实训名称:
学生成绩管理系统
姓名:
褚超
院(系):
软件学院
专业班级:
网络软件开发14-01班
学号:
指导教师:
孙海燕
成绩:
时间:
2015年1月5日至2015年1月9日
目录
实训任务书………………………………………………………
实训进度日历……………………………………………………
实训报告…………………………………………………………
实训感想………………………………………………………….
实训任务书
一、题目
“学生成绩管理系统”设计
二、学生信息
专业学号姓名
三、用户需求及约束条件
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)最后对实训项目完成的质量进行考核和验收。
完成期限:
2015年01月09日
指导教师签章:
孙海燕
专业负责人签章:
崔建涛
教学院长签章宋胜利
实训进度日历
题目
学生成绩管理系统
指导教师
孙海燕、张玲、陈明
学生班级
软件学院网络软件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.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,&n);break;
case2:
/*输出*/
Output(stu,n);break;
case3:
/*排序*/
Sort(stu,n);break;
case4:
/*查找*/
Find(stu,n);break;
case5:
/*修改*/
Edit(stu,n);break;
case6:
/*删除*/
Del(stu,&n);break;
case7:
/*退出*/
return0;
}
}
}
以上是该函数的函数部分,用到了switch语句,分别针对7种功能分情况列出。
在下面的各分函数中,处理完的数据值会根据具体需要返还到主函数中,并且显示在主界面中。
方便用户查看。
利用switch的好处在于,分情况列出各种需要的可能性,条例清晰,可读性强,并且十分方便。
以下是该程序的主界面部分
/*以下为该程序的主界面*/
voidDisplay()
{
system("cls");
printf("郑州轻工业学院考试成绩管理系统\n");
printf("\n");
printf("班级:
网络软件开发14-01班\n");
printf("\n");
printf("\n");
printf("作者:
褚超\n");
printf("***************************************************************\n");
printf("1:
输入学生资料\n");
printf("\n");
printf("2:
输出学生成绩3:
资料进行排序\n");
printf("\n");
printf("4:
查找学生资料5:
修改学生资料\n");
printf("\n");
printf("6:
删除学生资料7:
退出管理系统\n");
printf("\n");
printf("****************************************************************\n");
printf("欢迎进入成绩管理系统,请选择(你只需输入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;
/*输入学生信息*/
printf("请输入学生班级、学号、姓名(数据间以空格隔开):
");
scanf("%s%s%s",&stu[i].clas,&stu[i].ID,&stu[i].name);
/*输入五门课程成绩并累加*/
printf("请依次输入课程1、2、3、4、5成绩(数据间以空格隔开):
");
stu[i].sum=0.0;
for(j=0;j<5;j++)
{
scanf("%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=='y')
{
InputOne(stu,(*n)++);/*添加第n+1个学生的信息*/
printf("是否继续添加(请输入yorn)\n");
scanf("%c",&s);
}
Save(stu,*n);
}
voidSave(STUstu[],intn)
{
FILE*fp;
if((fp=fopen("d:
\\student.dat","w"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
fwrite(stu,n*sizeof(stu[0]),1,fp);
fclose(fp);
}
/*****************************************************************************/
以上为该程序的第一个功能函数部分,可实现学生信息的录入功能,所录入的文件即student.dat。
用户可以根据需要输入一个或多个学生信息。
只需要在输入一个学生信息完成后,判断是否继续录入学生信息即可。
当输入y时,可继续输入一个或多个学生信息,操作与之前相同;当输入其它字母时,输入学生信息结束,程序返回到该程序的原始主界面。
可继续选择其它相关操作。
方便用户处理数据,解决了单次功能实现后,程序退出的问题。
以下是该程序的输出部分
/*输出所有学生信息*/
voidOutput(STUstu[],intn)
{
inti;
/*打印数据表头*/
printf("您需要的所有学生成绩如下:
\n");
printf("\n");
printf("%8s%8s%8s%8s%8s%8s%8s%8s%8s%8s","班级","学号","姓名","成绩1","成绩2","成绩3","成绩4","成绩5","总分","平均分");
for(i=0;i Print(&stu[i]); system("pause"); } voidPrint(STU*s) { inti; /*打印所有学生的信息*/ printf("%8s%8s%8s",s->clas,s->ID,s->name); for(i=0;i<5;i++) printf("%8.2f",s->score[i]); printf("%8.2f%8.2f",s->sum,s->avg); printf("\n"); } /*****************************************************************************/ 以上是学生信息输出部分的函数,系统会自动打印出表头信息。 相关的学生信息会在其下一行依次展开并与表头对齐。 程序实现了信息的读出功能,方便了用户的查看与处理。 其中,输出的学生成绩都采用了double型,并保留两位有效数字,使数据更为准确。 下面给出输出学生信息时的主界面显示情况 以下是该程序的排序部分 /*对学生的信息进行排序*/ voidSort(STUstu[],intn) { intselect; intScoreAsc(constvoid*a,constvoid*b); intScoreDes(constvoid*a,constvoid*b); intNameAsc(constvoid*a,constvoid*b); printf("1: 按总成绩升序排列\n"); printf("\n"); printf("2: 按总成绩降序排列\n"); printf("\n"); printf("3: 按学生姓名排序\n"); scanf("%d",&select); switch(select) { case1: qsort(stu,n,sizeof(stu[0]),ScoreAsc);break; case2: qsort(stu,n,sizeof(stu[0]),ScoreDes);break; case3: qsort(stu,n,sizeof(stu[0]),NameAsc);break; default: return; } Output(stu,n); } /*以下是按成绩升序排序的分函数*/ intScoreAsc(constvoid*a,constvoid*b) { return((STU*)a)->sum>((STU*)b)->sum? 1: -1; } /*以下是按成绩降序排列的分函数*/ intScoreDes(constvoid*a,constvoid*b) { return((STU*)a)->sum<((STU*)b)->sum? 1: -1; } /*以下是按学生姓
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 报告