C语言学生成绩管理系统实训报告.docx

上传人:b****6 文档编号:4352090 上传时间:2022-11-30 格式:DOCX 页数:27 大小:48.11KB
下载 相关 举报
C语言学生成绩管理系统实训报告.docx_第1页
第1页 / 共27页
C语言学生成绩管理系统实训报告.docx_第2页
第2页 / 共27页
C语言学生成绩管理系统实训报告.docx_第3页
第3页 / 共27页
C语言学生成绩管理系统实训报告.docx_第4页
第4页 / 共27页
C语言学生成绩管理系统实训报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言学生成绩管理系统实训报告.docx

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

C语言学生成绩管理系统实训报告.docx

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==>修改成功<=

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

当前位置:首页 > 高中教育 > 初中教育

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

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