C语言学生成绩管理系统实训报告.docx
- 文档编号:4352090
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:27
- 大小:48.11KB
C语言学生成绩管理系统实训报告.docx
《C语言学生成绩管理系统实训报告.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统实训报告.docx(27页珍藏版)》请在冰豆网上搜索。
C语言学生成绩管理系统实训报告
郑州大学
实训报告
实训名称:
“学生成绩管理系统”设计
姓名:
院(系):
软件学院
专业班级:
学号:
指导教师:
成绩:
时间:
年2月日至年月31日
目录
实训任务书………………………………………………………I
实训进度日历……………………………………………………IV
实训报告…………………………………………………………1
1.软件需求分析………………………………………………1
2.软件规格说明………………………………………………1
3.系统框架和思路……………………………………………1
4.流程图………………………………………………………2
实训感想………………………………………………………….3
附录……………………………………………………………….4
郑州大学软件学院
学生实训任务书
一、题目
“学生成绩管理系统”设计
二、学生信息
专业
学号
姓名
三、用户需求及约束条件
1、用C语言实现基于Dos操作系统的“学生成绩管理系统”。
2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。
3、“学生成绩管理系统”具有以下功能:
1)系统启动后,弹出一个用户界面,能实现人机交互的功能。
而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。
2)录入学生成绩(信息有:
班级、姓名、学号、五门课程成绩);
3)计算学生五门功课的平均成绩并存档。
下面的功能必须是第3)项功能完成以后才能进行。
4)输出学生的信息和对应的原始成绩以及平均成绩;
5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。
6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。
7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。
8)附加功能:
把学生信息和对应的课程成绩和平均成绩存入到文件中。
9)附加功能:
输出文件中的内容。
10)附加功能:
试着从文件中导入数据到成绩管理系统中,然后进行管理。
四、设计要求、技术参数及设计规格
1、设计的系统能够运行,基本功能实现;
2、撰写实训报告,实训报告中的内容包括:
1)软件需求分析;
2)软件规格说明和设计要求;
3)对数据的管理方案;
4)“学生成绩管理系统”设计的思路和整体框架;
5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;
6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。
3、程序设计环境为TurboC++3.0或VisualC++6.0。
4、实训结束前提交纸质实训报告及其word文档、系统的源程序文件和可执行文件,将这三个文件压缩后以“学号后两位姓名”的形式命名,上传到FTP上自己所在班级对应的文件夹里。
FTP地址:
实训报告要求按以下顺序装订:
●封面
●简单目录
●任务书
●实训进度日历
●实训报告正文
●实训感想
●[附件]
6、所有的设计工作需要同学自己真实地、独立地完成。
五、工作量
天/日期
任务描述
通过标准
2010年12月27日
上午熟悉系统功能,
完成三项任务(用文档记录):
1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。
下午构思“学生成绩管理系统”的思路和整体框架。
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)
文档通过
方案通过
数据结构通过
设计的函数框架通过
2010年12月28日
设计被系统调用的main函数;设计界面函数;设计各功能子函数的框架;
要求数据传递接口正常,main函数能运行。
2010年12月29日
实现成绩录入功能;
实现计算平均成绩功能;
实现输出功能;
实现排序功能;
各子函数调试通过,能被main函数成功调用,其子功能能实现。
2010年12月30日
实现修改功能;
实现增补功能;
各子函数调试通过,能被main函数成功调用,其子功能能实现。
2010年12月31日
上午完善“成绩管理系统的各项功能”。
撰写实训报告。
实践能力强的同学实现附加功能:
输出系统中的成绩到文件中保存;打印输出文件中的内容;从文件中导入数据到成绩管理系统中;
下午:
继续写实训报告并且验收设计的项目。
系统能正确运行,界面友好);
各功能能够实现,性能良好操作方便。
备注:
做得慢的同学可以少实现一部分功能。
六、考核形式、考核时间、考核指标及成绩评定
实训成绩由下面构成:
实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。
考核形式:
1)老师每日对学生的考察、评估和考核;
2)最后对实训项目完成的质量进行考核和验收。
完成期限:
年12月31日
指导教师签章:
专业负责人签章:
教学院长签章
年12月10日
实训进度日历
题目
学生成绩管理系统
指导教师
学生班级
软件学院级所有专业班级
学年学期
学年
第1学期
天
上午/下午
实训任务详细描述
教师实训任务的指导(解决方案、实现步骤、技术路线、难点提示)
通过标准
年12月27日
上午
完成:
1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。
对软件功能进行分类。
用户界面操作简单、功能完备,系统启动后先录入数据,再求平均成绩;平均成绩求出后,其他的功能才能实现。
数据结构可以采用数组也可以采用链表。
文档通过验收
下午
构思“学生成绩管理系统”的思路和整体框架。
设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)
设计被系统调用的main函数;设计界面函数;
如果采用数组管理数据结构,则数组必须按地址传递,这样数据才能在各个函数间共享。
难点1:
系统的退出,exit()函数需要包含stdlib.h
难点2:
清屏函数clrscr();
难点3:
数据的传递
设计的函数框架通过调试,
要求数据传递接口正常,main函数能运行。
年12月28日
上午
设计数据录入函数,从键盘读数据到数组中,或者创建链表
难点1:
数据输入完后,怎样控制结束?
用一个什么标志。
难点2:
结构体数组中的子域又是一个数组时,数据不能直接从键盘读入,需用一个临时变量中转一下。
难点3:
从键盘录入数据时,要给完全的提示信息,便于操作指导。
各子函数调试通过,能被main函数成功调用
下午
计算平均成绩的函数实现
难点4:
想一想:
在录入数据时数据保存到一数组,那么在算平均值时,怎样能接触到此数组中的数据。
各子函数调试通过,能被main函数成功调用。
年12月29日
上午
输出原始成绩;
输出按照一定的格式,好看。
各子函数调试通过,能被main函数成功调用。
下午
排序功能实现并输出排序后的成绩。
按平均成绩排序。
排序的算法可以是泡泡法或者选择法等
思考1:
你还可以分别在每个班中按平均成绩排序吗?
思考2:
能输出有不及格课程的同学信息和成绩吗?
各子函数调试通过,能被main函数成功调用。
年12月30日
上午
能对某一学生信息和成绩进行修改;
可做附加功能1。
按姓名查找以后,再修改;
按学号查找以后,再修改;
如果要用对半查找法,需要数据是有序的。
难点:
怎样从键盘中把成绩存入文件。
各子函数调试通过,能被main函数成功调用。
下午
能增加学生的信息;
可做附加功能2。
增加后重新排序,重新输出。
难点:
怎样从文件中读出数据
各子函数调试通过,能被main函数成功调用。
年12月31日
上午
完成实训报告
难点:
清晰、明确、简单、评价合理、有自己的见解、创新。
实训报告要求装订整齐。
下午
验收程序
讨论
实训报告
1.软件需求分析
(1)、成绩录入功能(信息有:
班级、姓名、学号、五门课程成绩)
(2)、求解学生个人平均成绩并存档
(3)、输出学生的信息和对应的原始成绩以及平均成绩
(4)、按平均成绩对学生信息进行排序,排序后重新输出
(5)、对成绩修改,分别有两种模式,一种是按学号查找和修改;另一种是按姓名查找和修改;修改后重新排序,并输出学生信息和成绩。
(6)、增补信息(个人信息和课程成绩)功能,并重新排序和输出。
(7)、附加功能,用文件对信息进行管理。
(8)、每次输入口令,系统接收时都要接收到“enter”,为保证程序正常运行每次输入后都要对键盘进行清空。
2.软件规格说明
(1)、系统用户界面尽量居中、美观,所有的命令简单有效。
(2)、具有人机交互功能;
(3)、通过菜单选择功能;
(4)、只能由菜单退出系统;
(5)、操作信息提示(界面友好);
(6)、拦截一些误操作错误;
(7)、按原始成绩格式输出。
3、系统框架和思路
(1)、功能分类,把一个问题分解为多个子问题。
(2)、考虑数据结构:
结构体数组;结构体链表;文件;数据库文件。
(3)、功能逐步细化,自顶向下设计,最小的模块用函数实现。
(4)、先搭框架,用空函数实现。
(5)、计算平均成绩及最大最小,用到排序法,冒泡排序法适用于数组排序法。
(6)、运用switch语句,这样可以为用户提供具有选择性的多功能循环操作。
(7)、使用if()else语句实现一些选择操作
(8)、使用结构体表变量:
将不同类型的数据结合成一个有机整体
4、流程图
实训感想
总结:
通过这次实际操作,从开始的迷茫无知到现在的清晰思路,真正明白了它的用途,虽然还有很多不足之处,但是却感受到了不一样的思想方式,增加了我学习软件技术的兴趣,认识到了自己必须“路漫漫其修远兮,吾将上下而求索”。
这次实训是老师给了范例程序,经过自己的改写,基本实现了要求,感谢老师您对我们的指导及对您的无比的负责任表示深深的敬佩,谢谢您,老师!
在实际操作过程中对犯的一些错误还会有意外的收获,也渐渐的明白了C语言的真正用途。
在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,特别是对数组和循环有了深刻的理解,有一种收获良多的喜悦,而这一切都是老师您对我们的谆谆教诲,再次感谢您,老师!
附录
#include
#include
#include
structstudent
{
charname[100];
charnum[3];
floatchinese;
floatc_program;
floatenglish;
floatmath;
floatsum;
floataverage;
};
structstudents[300];
intNumber=0;
intdq(structstudents[])
{
FILE*fp=NULL;
inti=0;
fp=fopen("C:
student.dat","rb");
while(fread(&s[i],sizeof(structstudent),1,fp))
i++;
fclose(fp);
returni;
}
voidmenu()
{
printf("\t*****************************************************************\n");
printf("\t*\t\t\t\t\t\t\t\t*\n");
printf("\t*\t\t\t欢迎使用学生成绩管理系统\t\t\t*\n");
printf("\t*\t\t\t\t\t\t\t\t*\n");
printf("\t*********************************\n");
printf("\t*[1]增加学生信息\t\t[2]查看学生信息\t\t*\n");
printf("\t*********************************\n");
printf("\t*[3]查找学生成绩\t\t[4]删除学生信息\t\t*\n");
printf("\t*********************************\n");
printf("\t*[5]修改学生成绩\t\t[6]成绩排序\t\t*\n");
printf("\t*********************************\n");
printf("\t*[7]输出挂科人数及成绩\t[0]退出系统\t\t*\n");
printf("\t*********************************\n");
printf("\t*\t\t\t*\n");
printf("\t*********************************\n");
printf("\t*\t\t\t*\n");
printf("\t*****************************************************************\n");
}
voidbc(structstudent*s)
{
FILE*fp=NULL;
fp=fopen("C:
student.dat","ab+");
fwrite(s,sizeof(structstudent),1,fp);
fclose(fp);
}
voidadd()
{
intn=0;
inti=0,j=0,k=0;
structstudentS;
printf("\t请输入要增加学生成绩个数:
");
scanf("%d",&n);
for(i=0;i { k=0; printf("\t输入第%d个同学信息\n",i+1); printf("\t请输入学生的姓名: "); scanf("%s",&S.name); printf("\t学号: "); scanf("%s",&S.num); for(j=0;j { if(strcmp(S.num,s[i].num)==0) { k=1; } } if(k! =0) { printf("\t添加失败,学号重复! \n"); } else { printf("\t[语文]成绩: "); scanf("%f",&S.chinese); printf("\t[数学]成绩: "); scanf("%f",&S.math); printf("\t[英语]成绩: "); scanf("%f",&S.english); printf("\t[C语言设计]成绩: "); scanf("%f",&S.c_program); S.sum=S.chinese+S.math+S.english+S.c_program; S.average=S.sum/4; } } if(k==0) { s[Number++]=S; bc(&S); printf("\t\t\t\t==>添加成功<==\n\n"); } } voidselect() { inti=0,j=0; for(i=0;i { j++; } printf("\t以下是全部%d名学生的成绩: \n",j); printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); for(i=0;i { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average); } } voidxhxg() { FILE*fp=NULL; charid[3]; inti=0,j=0,k=0; intXH=-1; printf("\t请输入要修改的学生学号: "); scanf("%s",id); for(i=0;i { if(strcmp(id,s[i].num)==0) { XH=i; } } if(XH==-1) { printf("\t不存在该学生信息! \n"); } else { printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n",s[XH].name,s[XH].num,s[XH].chinese,s[XH].math,s[XH].english,s[XH].c_program,s[XH].sum,s[XH].average); printf("\t请重新输入该学生信息: \n"); printf("\t姓名: "); scanf("%s",s[XH].name); printf("\t学号: "); scanf("%s",s[XH].num); for(j=0;j { if(strcmp(s[XH].num,s[j].num)==0&&XH! =j) { k=1; } } if(k! =0) { printf("\t修改失败,学号重复! \n"); } else { printf("\t[语文]成绩: "); scanf("%f",&s[XH].chinese); printf("\t[数学]成绩: "); scanf("%f",&s[XH].math); printf("\t[英语]成绩: "); scanf("%f",&s[XH].english); printf("\t[C语言设计]成绩: "); scanf("%f",&s[XH].c_program); s[XH].sum=s[XH].chinese+s[XH].math+s[XH].english+s[XH].c_program; s[XH].average=s[XH].sum/4; for(i=0;i { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); printf("\t\t\t\t==>修改成功<==\n"); } } } voidxmxg() { FILE*fp=NULL; charname[60]; inti=0,j=0,k=0; intXM=-1; printf("\t请输入要修改的学生姓名: "); scanf("%s",name); for(i=0;i { if(strcmp(name,s[i].name)==0) { XM=i; } } if(XM==-1) { printf("\t不存在该学生信息! \n"); } else { printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n\n",s[XM].name,s[XM].num,s[XM].chinese,s[XM].math,s[XM].english,s[XM].c_program,s[XM].sum,s[XM].average); printf("\t请重新输入该学生信息: \n"); printf("\t姓名: "); scanf("%s",s[XM].name); printf("\t学号: "); scanf("%s",s[XM].num); for(j=0;j { if(strcmp(s[XM].num,s[j].num)==0&&XM! =j) { k=1; } } if(k! =0) { printf("\t修改失败,学号重复! \n"); } else { printf("\t[语文]成绩: "); scanf("%f",&s[XM].chinese); printf("\t[数学]成绩: "); scanf("%f",&s[XM].math); printf("\t[英语]成绩: "); scanf("%f",&s[XM].english); printf("\t[C语言设计]成绩: "); scanf("%f",&s[XM].c_program); fp=fopen("C: student.dat","wb"); s[XM].sum=s[XM].chinese+s[XM].math+s[XM].english+s[XM].c_program; s[XM].average=s[XM].sum/4; for(i=0;i { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); printf("\t\t\t\t==>修改成功<=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩管理系统 报告