学生成绩标准管理系统实训报告.doc

上传人:牧羊曲112 文档编号:1628115 上传时间:2022-12-12 格式:DOC 页数:54 大小:171KB
返回 下载 相关 举报
学生成绩标准管理系统实训报告.doc_第1页
第1页 / 共54页
学生成绩标准管理系统实训报告.doc_第2页
第2页 / 共54页
学生成绩标准管理系统实训报告.doc_第3页
第3页 / 共54页
学生成绩标准管理系统实训报告.doc_第4页
第4页 / 共54页
学生成绩标准管理系统实训报告.doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《学生成绩标准管理系统实训报告.doc》由会员分享,可在线阅读,更多相关《学生成绩标准管理系统实训报告.doc(54页珍藏版)》请在三一办公上搜索。

1、学生成绩标准管理系统实训报告郑州轻工业学院实 训 报 告实训名称: 学生成绩管理系统 姓 名: 褚超 院 (系):软件学院 专业班级:网络软件开发14-01班 学 号: 指导教师:孙海燕 成 绩: 时间: 2015 年 1 月 5 日 至 2015 年 1 月 9 日目 录实训任务书实训进度日历实训报告 实训感想.实训任务书一、题目“学生成绩管理系统”设计二、学生信息专业 学号 姓名 三、用户需求及约束条件1、用C语言实现 “学生成绩管理系统”。2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。3、“学生成绩管理系统”具有以下功能: 1)系统启动后,弹出一个

2、用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。2)录入学生成绩(信息有:班级、姓名、学号、五门课程成绩);3)计算每门功课的平均成绩和学生五门功课的平均成绩并存档。下面的功能必须是第3)项功能完成以后才能进行。4)输出学生的信息和对应的原始成绩以及平均成绩;5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,

3、增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。8)附加功能:把学生信息和对应的课程成绩和平均成绩存入到文件中。9)附加功能:输出文件中的内容。10)附加功能:试着从文件中导入数据到成绩管理系统中,然后进行管理。四、设计要求、技术参数及设计规格1、原始成绩由老师统一给出,在 Excel表中;2、设计的系统能够运行,提交源程序、目标文件和可执行文件;3、提交实训报告,实训报告中列写:1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案;4)“学生成绩管理系统”设计的思路和整体框架;5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;6)

4、“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。4、程序设计环境为 Visual C+ C+5、所有的设计工作需要同学自己真实地、独立地完成。天/日期任务描述通过标准2015年1月5日上午:熟悉系统功能,完成三项任务(用文档记录):1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。下午:构思“学生成绩管理系统”的思路和整体框架。设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)。设计被系统调用的main函数;实现界面函数;设计各功能子函数的框架;文档通过方案通过数据结构通过设计的函数框架通过要求数据传递接口正常,ma

5、in函数能运行。2015年1月6日上午:实现成绩录入功能;下午:实现计算平均成绩功能;实现输出功能;各子函数调试通过,能被main函数成功调用,其子功能能实现。2015年1月7日上午:实现排序功能;下午: 实现修改功能;实现增补功能(选做);各子函数调试通过,能被main函数成功调用,其子功能能实现。2015年1月8日上午:实现查找功能,按学号查找、按姓名查找;下午: 实现自身特色功能,如登陆、链表操作、文件存储数据;各子函数调试通过。2015年1月8日上午:完善“成绩管理系统的各项功能”。撰写实训报告。实践能力强的同学实现附加功能。下午:继续写实训报告并且验收设计的项目。系统能正确运行,界面

6、友好);各功能能够实现,性能良好操作方便。备注:做得慢的同学选做部分可不做。五、工作量六、考核形式、考核时间、考核指标及成绩评定实训成绩由下面构成:实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。考核形式:1)老师每日对学生的考察、评估和考核;2)最后对实训项目完成的质量进行考核和验收。完 成 期 限:2015年01月09日指导教师签章: 孙海燕 专业负责人签章: 崔建涛 教学院长签章 宋胜利 实训进度日历题目学生成绩管理系统指导教师孙海燕、张玲、陈明学生班级软件学院网络软件14-01网络软件14-02,.net 技14-02学年学期1415学年

7、第1学期天实训任务详细描述教师实训任务的指导(解决方案、实现步骤、技术路线、难点提示)通过标准15年1月5日上午完成:1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。对软件功能进行分类。用户界面操作简单、功能完备,系统启动后先录入数据,再求平均成绩;平均成绩求出后,其他的功能才能实现。数据结构可以采用数组也可以采用链表。文档通过验收下午构思“学生成绩管理系统”的思路和整体框架。设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)设计被系统调用的main函数;设计界面函数;如果采用数组管理数据结构,则数组必须按地址传递,这样数据才能在各个

8、函数间共享。难点1:系统的退出,exit( )函数需要包含stdlib.h难点 2:清屏函数 clrscr( );难点 3:数据的传递设计的函数框架通过调试,要求数据传递接口正常,main函数能运行。15年1月6日上午设计数据录入函数,从键盘读数据到数组中,或者创建链表难点1:数据输入完后,怎样控制结束?用一个什么标志。难点2:结构体数组中的子域又是一个数组时,数据不能直接从键盘读入,需用一个临时变量中转一下。难点3:从键盘录入数据时,要给完全的提示信息,便于操作指导。各子函数调试通过,能被main函数成功调用下午计算平均成绩的函数实现;输出原始成绩;难点4:想一想:在录入数据时数据保存到一数

9、组,那么在算平均值时,怎样能接触到此数组中的数据。输出按照一定的格式,好看。各子函数调试通过,能被main函数成功调用。15年1月7日上午排序功能实现并输出排序后的成绩。按平均成绩排序。排序的算法可以是泡泡法或者选择法等思考1:你还可以分别在每个班中按平均成绩排序吗?思考2:能输出有不及格课程的同学信息和成绩吗?各子函数调试通过,能被main函数成功调用。下午实现查找功能按姓名查找以后,再修改;按学号查找以后,再修改;如果要用对半查找法,需要数据是有序的。各子函数调试通过,能被main函数成功调用。15年1月8日上午能对某一学生信息和成绩进行修改;能增加学生的信息(选做);查找到某一学生,修改

10、某一属性,如果需要重新排序,重新排序,把结构存入文件;难点:怎样从键盘中把成绩存入文件。增加后重新排序,重新输出。难点:怎样从文件中读出数据下午自定义功能实现如:登陆:密码输入显示*;等15年1月9日上午完成实训报告难点:清晰、明确、简单、评价合理、有自己的见解、创新。实训报告内容:任务书、实训进度计划、大纲性的目录、正文、实训感想、附件。实训报告要求装订整齐。系统能正确运行,界面友好);各功能能够实现,性能良好操作方便。下午验收程序讨论系统能正确运行,界面友好);各功能能够实现,性能良好操作方便。制订教师:孙海燕、张玲 实训报告、用C语言编写程序实现 “学生成绩管理系统”。、设计“学生成绩管

11、理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。、系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能);、录入学生成绩(信息有:班级、姓名、学号、五门课程成绩);、计算每门功课的平均成绩和学生五门功课的平均成绩并存档;、输出学生的信息和对应的原始成绩以及平均成绩;、按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩;、对成绩修改,有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩;、增补遗漏的学生以及对应的信息和对应的课

12、程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩;、附加功能:把学生信息和对应的课程成绩和平均成绩存入到文件中;、附加功能:输出文件中的内容;、附加功能:试着从文件中导入数据到成绩管理系统中,然后进行管理。2系统详细设计及实现、系统用户界面尽量居中,体现美观效果;、编写的程序具有人机交互功能;、通过菜单选择软件的功能;、软件只能由菜单退出系统;、操作信息提示(界面友好);、具有拦截一些误操作错误的功能;、按原始成绩格式输出。设计要求:、根据老师给出的数据写入;、设计的系统能够运行,提交源程序、目标文件和可执行文件;、提交实训报告,实训报告中列写;、程序

13、设计环境为 DEV C+;、所有的设计工作需要同学自己真实地、独立地完成。3、对数据的管理方案结构体数组和文件:输入的数据可以保存在文件中,下次重新打开程序,原先已输入的数据还在;(难度中等)以下为该程序的定义部分typedef struct studentchar clas5;char ID5;char name15;double score5;double sum;double avg;STU;在此处,我将学生的班级、学号和姓名都定义为char型,方便整体的使用。特别是后面的部分子函数中用到的字符串比较函数strcmp,方便了排序比较;将学生的成绩定义为双精度实型变量(double),为了

14、使计算的平均分更为精确。讲此定义放在程序的头部,作为整个程序使用。为了使后面的子函数调用方便、简介,我用到typedef struct student定义。以下是该程序的函数声明部分/*以下是该程序的函数声明部分*/void Display(void); /*显示主菜单界面*/ void Load(STU stu, int *n); /*将信息加载到内存中*/void InputOne(STU stu, int i); /*输入指定的学生信息*/void Add(STU stu, int *n); /*添加指定的学生信息*/void Save(STU stu, int n); /*将数组保存到

15、磁盘*/void Output(STU stu, int n); /*输出所有学生信息*/void Print(STU *s); /*输出指定的学生信息*/void Sort(STU stu, int n); /*排序*/ void Find(STU stu, int n); /*查找*/int FindID(STU stu, int n, char clas, char ID); /*按学生学号查找*/void Edit(STU stu, int n); /*修改指定的学生信息*/ void Del(STU stu, int *n); /*删除*/void DeleteAll(STU stu

16、, int *n); /*删除所有学生信息*/void DeleteOne(STU stu, int *n); /*删除指定的学生信息*/以上是该程序的全部声明部分,这些声明函数与下文的各功能函数相互对应,且顺序依次排列,方便查找和修改。在这些声明的函数中,用到了引用数组以及指针,方便了下面各功能函数的使用以及调用。以下是该程序的主函数部分int main()STU stuN;int n;int select;Load(stu, &n);while(1)Display();scanf(%d, &select);switch(select)case 1: /*输入*/ Add(stu, &n);

17、 break; case 2: /*输出*/ Output(stu, n); break; case 3: /*排序*/ Sort(stu, n); break; case 4: /*查找*/ Find(stu, n); break;case 5: /*修改*/ Edit(stu, n); break;case 6: /*删除*/ Del(stu, &n); break;case 7: /*退出*/ return 0; 以上是该函数的函数部分,用到了switch语句,分别针对7种功能分情况列出。在下面的各分函数中,处理完的数据值会根据具体需要返还到主函数中,并且显示在主界面中。方便用户查看。利

18、用switch的好处在于,分情况列出各种需要的可能性,条例清晰,可读性强,并且十分方便。以下是该程序的主界面部分 /*以下为该程序的主界面*/ void Display()system(cls);printf( 郑州轻工业学院考试成绩管理系统n);printf(n);printf( 班级:网络软件开发14-01班n);printf(n);printf( 学号:n);printf(n); printf( 作者:褚超n);printf(*n);printf( 1:输入学生资料n);printf(n);printf( 2:输出学生成绩 3:资料进行排序n);printf(n);printf( 4:查

19、找学生资料 5:修改学生资料n);printf(n);printf( 6:删除学生资料 7:退出管理系统n);printf(n);printf(*n);printf( 欢迎进入成绩管理系统,请选择(你只需输入17中的其中一个数字便可进行下一步操作)n);以上为该程序实际操作的主界面,具有6大基本功能。用户可以根据需要进行相关操作,实现所需要的功能。在此界面中,用到了清屏函数,方便用户更好的体验该程序,不至于界面混乱。void Load(STU stu, int *n)FILE *fp;int i;if(fp=fopen(d:, r+) = NULL) /*以r+打开可读写的文件*/ *n =

20、0;return;for(i=0; fread(&stui,sizeof(STU),1,fp)!=0;i+); /*将信息读取到stu中*/*n = i; /*这里*n的作用为记录文件中当前学生数量*/fclose(fp); /*关闭文件*/ /*/以上是该程序的从文件中读取数据的函数部分。用到了指针,并显示在主界面中。用户可以直接将该文件拷贝到指定文件夹中,当执行一次源代码的编译后,该系统就知道了这些数据所在的文件,当用户执行程序运行时,选择相关的功能时,便可直接在主界面显示,无需再次输入信息。这样以来,该程序就具有了很强的实用性与使用性,方便了用户处理数据。以下是该程序的输入部分/*输入第

21、i个学生信息, 保存到stu数组中*/void InputOne(STU stu, int i)int j;/*输入学生信息*/printf(请输入学生班级、学号、姓名(数据间以空格隔开):);scanf(%s%s%s, &stui.clas, &stui.ID, &stui.name);/*输入五门课程成绩并累加*/printf(请依次输入课程1、2、3、4、5成绩(数据间以空格隔开):);stui.sum = ;for(j=0; j5; j+)scanf(%lf, &stui.scorej);stui.sum += stui.scorej;/*计算五门课程的平均分*/stui.avg =

22、stui.sum / 5;/*调用InputOne函数添加若干学生信息,并把新添加的学生信息依次保存到文件中*/void Add(STU stu, int *n)int i=0;char s = y;while(s = y)InputOne(stu, (*n)+); /*添加第n+1个学生的信息*/printf(是否继续添加(请输入 y or n)n);scanf( %c, &s);Save (stu, *n);void Save(STU stu, int n)FILE *fp;if(fp=fopen(d:, w) = NULL)printf(打开文件失败n);exit(0);fwrite(s

23、tu, n * sizeof(stu0), 1, fp);fclose(fp);/*/以上为该程序的第一个功能函数部分,可实现学生信息的录入功能,。用户可以根据需要输入一个或多个学生信息。只需要在输入一个学生信息完成后,判断是否继续录入学生信息即可。当输入y时,可继续输入一个或多个学生信息,操作与之前相同;当输入其它字母时,输入学生信息结束,程序返回到该程序的原始主界面。可继续选择其它相关操作。方便用户处理数据,解决了单次功能实现后,程序退出的问题。以下是该程序的输出部分/*输出所有学生信息*/void Output(STU stu, int n)int i;/*打印数据表头*/printf(

24、您需要的所有学生成绩如下:n);printf(n);printf(%8s%8s%8s%8s%8s%8s%8s%8s%8s%8s, 班级, 学号, 姓名, 成绩1, 成绩2, 成绩3, 成绩4, 成绩5, 总分, 平均分);for(i=0; iclas, s-ID, s-name);for(i=0; iscorei); printf(%, s-sum, s-avg); printf(n);/*/以上是学生信息输出部分的函数,系统会自动打印出表头信息。相关的学生信息会在其下一行依次展开并与表头对齐。程序实现了信息的读出功能,方便了用户的查看与处理。其中,输出的学生成绩都采用了double型,并保留

25、两位有效数字,使数据更为准确。下面给出输出学生信息时的主界面显示情况以下是该程序的排序部分/*对学生的信息进行排序*/void Sort(STU stu, int n)int select;int ScoreAsc(const void *a, const void *b);int ScoreDes(const void *a, const void *b);int NameAsc(const void *a, const void *b);printf(1:按总成绩升序排列n);printf(n);printf(2:按总成绩降序排列n);printf(n);printf(3:按学生姓名排序n

26、);scanf(%d, &select);switch(select)case 1: qsort(stu, n, sizeof(stu0), ScoreAsc); break;case 2: qsort(stu, n, sizeof(stu0), ScoreDes); break;case 3: qsort(stu, n, sizeof(stu0), NameAsc); break;default: return;Output(stu, n);/*以下是按成绩升序排序的分函数*/int ScoreAsc(const void *a, const void *b)return (STU *)a)

27、-sum (STU *)b)-sum ? 1 : -1;/*以下是按成绩降序排列的分函数*/int ScoreDes(const void *a, const void *b)return (STU *)a)-sum sum ? 1 : -1;/*以下是按学生姓名升序排列的分函数*/int NameAsc(const void *a, const void *b)return strcmp(STU *)a)-name, (STU *)b)-name);/*/以上为该程序的排序函数部分,该函数实现了排序的功能,并且可以分别根据总成绩的高低进行升序以及降序排序,也可以根据学生的姓名进行排序。在这里

28、,为了使三种排序功能方便处理、简洁,我用到了switch语句,根据三种情况分别判断。并根据用户需要,将特定的排序方式信息反馈给用户,用户可以直接在该程序的主界面进行查看,方便用户处理学生信息。下面给出资料进行排序中的按总成绩降序排列主界面显示情况以下是该程序的查找部分/*按学号查找学生信息*/void Find(STU stu, int n)int index;char clas5,ID5;printf(请输入班级和学号(数据间以空格隔开):);scanf(%s%s, clas, ID);index = FindID(stu, n, clas, ID);if(index 0) Print(&s

29、tuindex);else printf(该学生信息不存在!n);system(pause);/*分别对学生班级和学号进行确定*/int FindID(STU stu, int n, char clas, char ID)int i;for(i=0; in; i+) /*一旦找到该学生信息,则会自动返回对应的下标*/if(strcmp(stui.ID, ID)=0 & strcmp(stui.clas, clas) =0) return i;return -1;/*/以上是查找学生信息的功能函数部分。在此,因为有多个班级的信息存在,因此,避免不了学号一致的情况出现。可学号相同的学生,班级肯定不

30、相同,因此为了使查找的学生信息是用户所需要的信息。我在查找函数中,同时查找学生班级与学生学号,这样以来,就可以确定所需要查找的学生信息在主界面反馈给用户时是正确的。因此就需要用到一个if语句,只有在班级和学号都一致的情况下,才将信息返回给用户,否则输出该学生的信息不存在。这样以来,学生信息的查找功能就得以实现了。下面给出查找学生成绩的主界面显示情况以下是该程序的修改部分/*修改指定的学生信息*/void Edit(STU stu, int n)int i, index;char s;char clas5,ID5;printf(请输入班级和学号(数据间以空格隔开):);scanf(%s%s, c

31、las, ID);index = FindID(stu, n, clas, ID);if(index 0)printf(该学生信息不存在!n);return;printf(以下是修改前的学生信息n);Print(&stuindex);/*修改学生成绩*/printf(是否修改成绩?(请输入 y or n)n);scanf( %c, &s);if(s = y)stuindex.sum = 0;printf(请输入五门学科的成绩(数据间以空格隔开):);for(i=0; i5; i+)scanf(%lf, &stuindex.scorei);stuindex.sum += stuindex.sco

32、rei;stuindex.avg = stuindex.sum / 5;Save(stu, n);/*/以上是修改学生信息的函数部分,用户可以通过输入需要查找的学生的班级和学号先找到该学生的具体信息,主界面也会在同一时间将该学生的信息反馈到程序的主界面。用户可以通过判断来确定是否修改学生信息,如用户确定修改该学生的信息,就会显示请输入需要修改的学生的成绩。用户只需要将更新后的成绩再次输入,就可以完成学生信息的修改功能,并且将该次更新的成绩存储到指定的2文件中,覆盖原来的该学生信息。这样以来,学生成绩修改的功能就可以完成了。下面给出修改学生资料主界面显示情况(待修改状态)下面给出修改学生资料主界

33、面显示情况(修改完成状态)以下是该程序的删除部分/*删除*/void Del(STU stu, int *n)int select;printf(1:删除指定的学生信息n);printf(n);printf(2:删除所有的学生信息n);scanf(%d, &select);switch(select)case 1: DeleteOne(stu, n); break;case 2: DeleteAll(stu, n); break;/*从文件中删除全部学生信息*/void DeleteAll(STU stu, int *n)char s;FILE *fp;printf(信息是否全部删除?(请输入

34、 y or n)n);scanf( %c, &s);if(s = y)fp = fopen(d:, w); /*以w方式打开可覆盖原来的文件*/*n = 0; /*内存中的数组stu中元素个数变为0*/printf(删除完成!n);fclose(fp);/*删除指定的学生信息*/void DeleteOne(STU stu, int *n)int i, index;FILE *fp;char clas5,ID5;printf(请输入班级和学号(数据间以空格隔开):);scanf(%s%s, clas, ID);index = FindID(stu, *n, clas, ID);if(index

35、 0)printf(n 该学生信息不存在!n);return; for(i=index; i *n-1; i+) stui = stui+1; (*n)-;if(fp=fopen(d:, w)=NULL) /*以w的方式打开可清除文件*/printf(打开文件失败!n);exit(0);printf(n删除成功n);Save(stu, *n); /*保存到文件*/*/以上是该程序的删除功能函数部分,当用户选择该项功能时。会弹出两个选择项,分别是删除指定的学生信息与删除全部的学生信息。用户可以根据需要进行具体的操作。当确定需要删除学生信息时,同样需要输入需要删除的学生的班级与学号,这样,就可以确

36、定删除的学生信息就是我们需要删除的那个学生的信息。这样以来,删除学生信息的功能,就可以实现了。下面给出删除学生资料主界面显示情况(待删除状态)下面给出删除学生资料主界面显示情况(删除完成状态)实训感想回想,5天的C语言实训经历,让我受益匪浅。从一开始做的时候的各种迷茫(没有思路、对大程序产生恐惧、不知如何下手)到现在的思路清晰,虽然这几天走来实在不易,但我觉得还是非常值得的。这次实训让我对编程有了更深层次的理解,我越来越喜欢C语言了。现在想想,这样的一个程序才算是真正的一个程序,之前的一个个小的题目,一个小的问题,一个小的程序,只是这样一个程序的一部分。当我把那些小程序综合放在一块,进行整体的处理,最终变成一个可读性很高的、整体性很强的大程序时,我明白了小程序就是大程序的分支,只要将小程序处理好,再融入到一个

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号