学生成绩管理系统实训报告精篇.docx

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

学生成绩管理系统实训报告精篇.docx

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

学生成绩管理系统实训报告精篇.docx

学生成绩管理系统实训报告精篇

郑州轻工业学院

实训报告

实训名称:

学生成绩管理系统

姓名:

褚超

院(系):

软件学院

专业班级:

网络软件开发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;

}

/*以下是按学生姓

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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