学生成绩管理系统实训报告精篇Word文档格式.docx

上传人:b****6 文档编号:17466803 上传时间:2022-12-01 格式:DOCX 页数:25 大小:58.68KB
下载 相关 举报
学生成绩管理系统实训报告精篇Word文档格式.docx_第1页
第1页 / 共25页
学生成绩管理系统实训报告精篇Word文档格式.docx_第2页
第2页 / 共25页
学生成绩管理系统实训报告精篇Word文档格式.docx_第3页
第3页 / 共25页
学生成绩管理系统实训报告精篇Word文档格式.docx_第4页
第4页 / 共25页
学生成绩管理系统实训报告精篇Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统实训报告精篇Word文档格式.docx

《学生成绩管理系统实训报告精篇Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统实训报告精篇Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统实训报告精篇Word文档格式.docx

四、设计要求、技术参数及设计规格

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"

作者:

褚超\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;

/*以下是按成绩降序排列的分函数*/

intScoreDes(constvoid*a,constvoid*b)

sum<

/*以下是按学生姓

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1