1、高校水电费管理青岛理工大学C+面向对象课程设计报告院(系): 计算机工程学院 专业: 软件工程 学生姓名: 班级 软件133 学号: 题目: 高校水电费管理系统设计 起迄日期: 2015.6.292015.7.10 设计地点: 计算机学院机房 指 导 教 师: 完成日期: 2015 年7月 10 日任务书题目9 “高校水电费管理系统设计”1、问题描述住宿学生信息包括:学号、姓名、性别、年龄、班级、用电量、用水量等信息。教工信息包括职工号、姓名、性别、年龄、工作部门、用电量、用水量等信息。能计算出学生和教工每月所要交的电费和水费。定义一个人员类,实现学生和教工共同的信息和行为。2、功能要求(1)
2、添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的学生或教工记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数
3、进行统计。能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。3、问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统
4、的应用模块;(7)功能调试;(8)完成系统总结报告。课程设计报告内容一、需求分析1.选做此课题或项的目的 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次;要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。(3)在系统的设计中,要有清晰的界面设计,同时采用文件进行读写操作。2.
5、程序所实现的功能(1)添加功能:程序能够添加职工的记录和工作量,可提供选择界面供用户选择所要添加的类别,要求职工的编号要唯一,如果添加了重复职工号的职工记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据职工号、姓名等信息对已添加的职工记录进行查询。还可以按职工号对工作量进行查询。如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能:可显示当前系统中所有职工记录和工作量统计信息,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的人员记录进行删除和工作量进行删除。如果当前系统中没有相应
6、的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存在。(6)统计功能:对职工可按工作量进行统计,并排名次。(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。二、内容设计1.根据所选题目,给出模块图 图2.1 高校水电费管理系统模块图2.画出主程序及其主要模块的流程图 图2.2 main()函数 图2.3 添加函数 图2.4
7、 菜单函数 图2.5 查找函数 图2.6 修改函数 图2.7 显示函数图2.8 删除函数3.编写程序关键代码void Add()/添加信息 Student s; cout输入新添人员信息endl; s.Input(); for(int i=0;iamount;i+) if(s.num=stui.num) cout该编号的用户已存在!endl; return; stuamount=s; cout添加成功!endl; ofstream out_file(学生.txt,ios:app); /将添加记录更新到文件 if(!out_file) cout打开失败!endl; return; out_fil
8、estuamount.num stuamount.name stuamount.sex stuamount.old stuamount.classrome stuamount.water stuamount.watermoney stuamount.power stuamount.powermoney stuamount.flagchioce; switch(chioce) case 1: string name; cinname; int k=0; for(int i=0;iamount;i+) if(stui.name=name) coutstui.numstui.name)stui.se
9、x stui.oldstui.classromestui.waterstui.watermoney stui.powerstui.powermoneystui.flagnendl; k=1; if(k=0) cout查无此人!waters; int k=0; for(int i=0;iamount;i+) if(stui.water=waters) coutstui.numstui.name)stui.sex stui.oldstui.classromestui.waterstui.watermoney stui.powerstui.powermoneystui.flagnendl; k=1;
10、 if(k=0) cout查无此用水量!powers; int k=0; for(int i=0;iamount;i+) if(stui.power=powers) coutstui.numstui.name)stui.sex stui.oldstui.classromestui.waterstui.watermoney stui.powerstui.powermoneystui.flagnendl; k=1; if(k=0) cout查无此用电量!endl; break; default:cout无此选项!请重试!endl; break; void Show() /显示信息coutstui.
11、numstui.name)stui.sexstui.oldstui.classromestui.waterstui.watermoney stui.powerstui.powermoneystui.flagnnums; int k=0; for(int i=0;iamount;i+) if(stui.num=nums) Student s; s.Inputs(); for(int t=0;tamount;t+) if(s.num=stut.num) if(t=i) continue; cout该编号的用户已存在!修改不成功!endl; return; stui=s;coutstui.numst
12、ui.name)stui.sexstui.oldstui.classromestui.waterstui.watermoneystui.powerstui.powermoneystui.flagendl; cout修改成功!endl; k=1; if(k=0) cout查无此人!chioce; switch(chioce) case 1: string nums; cinnums; int k=0; for(int i=0;ichoice; switch(choice) case 1: for(int j=i;jamount-1;j+) stuj=stuj+1; amount-; k=1; b
13、reak; case 0:k=2;break; default:cout无此项!endl;break; if(k=1) cout删除成功!endl; else if(k=2) cout查找到此学号,但未删除!endl; else cout查无此学号!endl; break; case 2: cout请输入姓名:names; int k=0; for(int i=0;ichoice; switch(choice) case 0: k=2;break; case 1: for(int j=i;jamount-1;j+) stuj=stuj+1; amount-; k=1; break; defau
14、lt:cout无此项!endl;break; if(k=1) cout删除成功!endl; else if(k=2) cout查找到此学号,但未删除!endl; if(k=1) cout查无此学号!endl; break; default: cout无此项!endl;break; void Total() /统计信息 int t=0; for(int i=0;iamount;i+) if(stui.flag=否) coutstui.numstui.name)stui.sexstui.oldstui.classromestui.waterstui.watermoneystui.powerstui
15、.powermoneystui.flagendl; t=1; if(t=0) cout无未缴费人员!endl;void Read() /读取信息 ifstream in_file(学生.txt,ios:in); if(!in_file) cout打开失败!stui.numstui.namestui.sexstui.oldstui.classrome stui.waterstui.watermoneystui.powerstui.powermoneystui.flag) coutstui.numstui.name)stui.sexstui.oldstui.classromestui.waters
16、tui.watermoneystui.powerstui.powermoneystui.flagendl; i+; in_file.close();三、调试分析1.实际完成的情况说明(完成的功能,支持的数据类型等)完成的功能:(1)添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据
17、一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的学生或教工记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。 支持类型:编号、年龄支持int型,姓名、性别、工作部门、班级
18、、交费情况支持string型,用电量、用水量、电费、水费支持double型。2.程序的性能分析 程序主要使在类中操作,将所有记录存入对象数组和文件,采用顺序存储结构对数组进行操作,从而实现需要的操作。3.上机过程中出现的问题及其解决方案1.对类的数据成员进行定义时,起初定义为私有数据,结果继承类不能访问,这是类的访问权限出了问题,于是将其改成了公有数据成员,继承类能够对其进行访问了。2.继承类对基类的访问出现了错误。由于Student类和Teacher类都是从Person类继承的,会出现二义性,因此将其改成虚基类,这样就不会出现二义性飞的问题。3.由于要输入多组数据,因此要定义对象数组,而且要
19、定义为全局变量,否则不会得到有效的修改。4.当系统关闭以后,再打开系统进行操作,若是添加文件中已经存在的编号,还是会添加到文件中去,这是因为文件的更新和当前系统的更新不一直,因此在最开始打开系统是就应该将文件中的记录读取到当前系统中。4.程序中可以改进的地方说明1.程序应该可以实现输入信息的正确性,例如输入性别的时候,如果不是男或女,可以输出提示信息等。2.对于学生所在班级、性别,老师工作部门、性别等操作可以采用选择的模式,将信息录入文件中,这样可以使输入更方便。3.对于每一次信息的操作应该输出相应的原有信息和现有信息,以防信息出错。4.对于存在多个相同数据的记录,在删除和修改时应注意是否每个
20、都修改。5.程序中可以扩充的功能及设计实现构想功能:可以添加一个人的12月份的用水用电情况。构想:可以在类中再定义相应的对象数组,在进行操作时,除了对当前数组进行操作,还要对每个人的对象数组进行操作,然后写入文件。四、用户手册 图4.1 打开操作系统2.选择相应操作:图4.2 选0,退出系统 图4.3 选1,教师水电费管理系统 图4.4 选2,学生水电费管理系统3.教师水电费管理系统: 图4.5 选0,返回上层系统图4.6 选1,添加教师信息图4.7 选2,查询教师信息 图3.8 选3,修改教师信息 图3.9 选4,删除教师信息 图3.10 选5,显示教师信息 图3.11 选6,读取教师信息
21、图2.12 选7,统计教师信息4.学生水电费管理系统: 操作同教师水电费管理系统。五、设计总结(可谈一谈本次课程设计的经验和体会)课程设计,对于我们现在只学了些基础的知识的人来说确实是一个不小的挑战!我想对每个人都一样别人能做到的,我也能做到!从一个函数到很多函数的有机集合到多个类的使用,其中也经历了不少困惑与不知。但至少我现在做到了,终于战胜了自己对课程设计的恐惧,也收获了程序运行成功的喜悦,有付出,就有收获 通过这学期对C+的学习总结,要把知识运用于这次的课程设计,发现还是有点不足,有点困难,学到用时方恨少,自己学的还不够精,不够深。对于一门技术来说,浅尝辄止是远远不够的。还好通过去网上搜
22、索、去图书馆查找资料、请教老师同学等各种方式克服了一个又一个的困难。多样化的处理问题,才是成功之道,终于把设计给完成了! 学习的心态很关键,不懂了就要学着去用不同的方式去获取,补足自己,通过各种各样的方式,学着去请教别人和别人交流,做到不懂就问。相对来说,我的程序更简易,代码相对来说比较少,但却实现了大多数功能。简单易懂可行才是程序设计的本质,不是吗?把所学的运用于生活中,收获了那种成就感不言而喻的高兴。 至今我感慨颇多的应当是一些难以查出的错误,编译时查不出的错误,其被发现时很可能只是位置的错误,仅隔数行,这些微小的信息却极大地影响了整体的效果。这不仅存在于一个程序之中,因而我对于生活中的细
23、节也有了改观,对于整体和局部的观念也有了更多的见解。 通过这次实践,我对编程有了新的理解,编程并不是像大多数人说的那样充满单调,乏味。一件东西的乐趣在于你能去接触去理解。我接触了,我理解了。让所学的运用于生活中,做到灵活运用,学有所成的兴奋是难得的宝贵。我在其中感悟到乐趣了,相信这是我编程高手之路的一个重要转折点。六、参考文献1 李兰, 任凤华. C+面向对象程序设计. 西安: 西安电子科技大学出版社, 20102 李兰, 任凤华. C+面向对象程序设计实验指导及习题解析. 西安: 西安电子科技大学出版社, 20103 郑莉, 董渊. C+程序设计基础教程. 北京: 清华大学出版社, 2010
24、4 郑莉. C+程序设计基础教程学生用书. 北京: 清华大学出版社, 2010七、附录#include #include #include #include #include #define MAX 100using namespace std;class Personpublic: string num; /编号 string name; /姓名 string sex; /性别 int old; /年龄 double power; /用电量 double water; /用水量 double watermoney; /水费 double powermoney; /电费 string flag
25、;/缴费标志public: Person(string n=,string nm=,string s=,int d=0,double p=0,double w=0,double wm=0,double pm=0,string f=否) /构造函数 num=n; name=nm; sex=s; old=d; power=p; water=w; watermoney=wm; powermoney=pm; flag=f; ;int amount; /记录当前记录的个数class Student:virtual public Personpublic: string classrome; /班级pub
26、lic: Student(string n=,string nm=,string s=,int d=0,double p=0,double w=0,string cr=,double wm=0,double pm=0,string f=否) :Person(n,nm,s,d,p,w,wm,pm,f) /构造函数 classrome=cr; void Input(); void Inputs(); void Output(); void Add(); /添加信息 void Search(); /查询信息 void Show(); /显示信息 void Compile(); /修改信息 void Delete(); /删除信息 void Total(); /数据统计 void Save(); /保存信
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1