“数据结构与算法”课程设计报告设计题目学生成绩管理系统姓名学号专业计算机科学与技术班级12-01班完成日期2014.06.27(一)需求和规格说明主要功能是对批量学生的各门成绩进行录入、修改、查询、统计等,要求方便快速。
记录学生的学号、姓名、班级、性别、联系电话以及课程和成绩;可以对学生的成绩按学号和姓名进行查寻;输出显示学生成绩;并实现排序、统计及格率和优秀率功能。
编程任务:(1)界面基本要求:****************************学生成绩管理系统****************************************************************** F1 --帮助 **** F2 --输入数据并存入文件 **** F3 --根据学号查询成绩 **** F4 --根据姓名查询成绩 **** F5 --输出文件内容 **** F6 –成绩排序 **** F7 --统计及格和优秀人数 **** ESC--退出系统 **************************************另:提倡用MFC的对话框做简单的输入输出交互界面。
(2)功能要求:1)帮助:系统使用方法的相关信息。
2)输入数据并存入文件:输入相关信息,并实现文件流的读写操作。
3)根据学号查询成绩:输入学号,查询学生的各门成绩4)根据姓名查询成绩:输入姓名,查询学生的各门成绩5)输出文件内容:屏幕输出显示所有学生的成绩6) 成绩排序:对某门成绩或总分进行快速排序,显示、保存7)统计及格和优秀人数:统计及格和优秀率。
8)退出(二)设计主要内容如下:1. 关键类的设计,继承层次关系,代码:(编译器 C-Free 5.0)首先,创建了一个student类.在student类的共有部分声明程序所需函数;然后就是student类的函数实现部分,其中定义student类的带参数及不带参数构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函数文件。
属性和方法定义(三)用户手册程序运行时,进入主界面选择”0”,读取帮助信息帮助信息系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。
按照界面说明进行程序的各个子程序调用,最终完成工作后便可退出。
@2014 Anpengfei. All rights reserved. (四)调试及测试在调试过程中也出现了多处错误,逐一修改,坦然漏洞还是有的。
由于系统每增加一个学生信息,无论他(她)是的情况如何,其学号和其他信息都是自定义的,但是当出现相同学号时,系统能返回上级菜单,让用户重新输入。
对于班级、性别、电话号码都是后输入系统的,没有进行限制,此系统只有保存和调用数据的功能,并不能对数据进行判断,查验是否为合法班级。
合法电话号码等等。
但是编程过程中对数学和微机的成绩输入是有限制的,输入数据必须满足0<=输入值<=100,否则将返回上级菜单重新输入。
(五)运行实例:以两组数据为例:学号姓名班级性别电话数学成绩微机成绩01 qq 01 b 666666 88 5902 ww 02 g 888888 79 80运行各功能函数如图所示:(六)进一步改进(1)、并未实现文件流的读取,目前程序只能逐条进行输入,不能实现批量读入,以后会做改进。
(2)、没有实现结果的输出保存功能,信息只能在系统中调用,当系统关闭后没有保存想要的数值等功能,以后要加强。
(3)、没有进行MFC的优化设计,程序只是单纯的存在编译器当中,不过利用C-Free 5.0 倒是能生成”函数.exe”文件,能单独拿出来在windows 操作系统下使用。
(4)、对于信息的修改,用删除重新输入的方式来完成,并未构建直接修改函数。
(七)心得体会由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。
在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。
解决的这个问题的办法是调整。
一个系统的菜单和提示信息非常重要。
如果没有这些用户根本不知道怎么用这个成绩管理系统。
在设计的调试过程中也无法顺利的完成调试工作。
有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
回顾此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。
学到了设计一个简单的系统。
要注意哪些方面。
也使我知道自己哪些方面做得还不够。
这不仅是程序设计,更是锻炼处理问题的能力,同时编写程序是件细心活,稍不留神就会出错,这就必须要求我对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。
但我总结出了一点点的经验如下:1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
(八)对课程设计的建议1、可以多做一些技术上的指导,多讲讲算法。
针对每个人的题目,有一些建设性的指导,比如我的题目中要求MFC设计,可以简单得培训一下,或许效果会更好。
2、课程设计,每个人的题目都不一样,相互之间交流还是很少的,我建议今后可以出一些相对难一点儿题目,分组进行设计,这样在过程中每个人都能得到锻炼,还能培养合作意识和团队精神,这对即将成为程序员的我们是很重要的。
(九)附录 源程序#include<iostream>#include<string>#include<stdio.h>#include<fstream>#include<iomanip>using namespace std;class student{private:string number;string name;string clas;char gender;string phone;double computer;double math;double sum;student *head;student *curnode;student *next;float jige_num;float youshen_num;float jige;float youxiu;float jigelv;float youshenglv;float jigel;float youxiul;int count;public:student();//不带参数的构造函数//带数据域参数的构造函数,用来动态建立节点---------------------------------student(string ,string ,string ,char ,string ,double ,double ,double=0.0);void help();//用于描述帮助信息void sum_score();//总分函数void cin_app();//用于输入void app_score(string,string,string,char,string,double,double); //动态的建立节点void del_score(); //删除全部节点void displist(); //输出节点中的全部数据void lookup(int ,string ); //查找函数void del_score(int ,string ); //删除函数void compositor(int); //排序函数void tongji();//统计及格率和优秀率};//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////student类的实现void err_char();//输入错误字符检测函数void score_err();//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入student::student():next(NULL)//不带参数的构造函数{head=curnode=this;}//带参数的构造函数student::student(string Number,string Name,string Clas,char Gender,string Phone,double Computer,double Math,double Sum):next(NULL){number=Number;name=Name;clas=Clas;gender=Gender;phone=Phone;computer=Computer;math=Math;sum=Sum;}//////////////////////////////////统计及格率和优秀率??????????????????????????void student::tongji(){int count;int jige_num=0,youshen_num=0,jige=0,youxiu=0;//分别算计算机和数学成绩的率人数和率float jigelv,youshenlv,jigel,youxiul;//jigelv stand for computer;jigel stand for mathint m=count;for(int i=0;i<=m;i++){if(computer>=60){jige_num=jige_num+1;}if(computer>=85){youshen_num=youshen_num+1;}if(math>=60){jige=jige+1;}if(math>=85){youxiu=youxiu+1;}}jigelv=jige_num/m;youshenlv=youshen_num/m;jigel=jige/m;youxiul=youxiu/m;cout<<"计算机及格率: "<<jigelv*100.0<<"% 计算机优秀率: "<<youshenlv*100.0<<"%"<<endl;cout<<"数学及格率: "<<jigel*100.0<<"% 数学优胜率: "<<youxiu*100.0<<"%"<<endl;jige_num=0;youshen_num=0;jigelv=0;youshenlv=0;}////////////////////////////////帮助信息//////////////////////////void student::help(){cout<<" 帮助信息"<<endl;cout<<"系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能"<<endl;cout<<"可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。