高校水电费管理.docx
《高校水电费管理.docx》由会员分享,可在线阅读,更多相关《高校水电费管理.docx(55页珍藏版)》请在冰豆网上搜索。
高校水电费管理
青岛理工大学
C++面向对象课程设计报告
院(系):
计算机工程学院
专业:
软件工程
学生姓名:
班级软件133学号:
题目:
高校水电费管理系统设计_______
起迄日期:
_2015.6.29~2015.7.10
设计地点:
计算机学院机房
指导教师:
完成日期:
2015年7月10日
任务书
题目9“高校水电费管理系统设计”
1、问题描述
住宿学生信息包括:
学号、姓名、性别、年龄、班级、用电量、用水量等信息。
教工信息包括职工号、姓名、性别、年龄、工作部门、用电量、用水量等信息。
能计算出学生和教工每月所要交的电费和水费。
定义一个人员类,实现学生和教工共同的信息和行为。
2、功能要求
(1)添加功能:
程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:
可显示当前系统中所有学生和教工的记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的学生或教工记录进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!
”并返回操作。
(6)统计功能:
能根据多种参数进行统计。
能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。
(7)保存功能:
可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(9)计算电费和水费。
学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
课程设计报告内容
一、需求分析
1.选做此课题或项的目的
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。
(3)在系统的设计中,要有清晰的界面设计,同时采用文件进行读写操作。
2.程序所实现的功能
(1)添加功能:
程序能够添加职工的记录和工作量,可提供选择界面供用户选择所要添加的类别,要求职工的编号要唯一,如果添加了重复职工号的职工记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据职工号、姓名等信息对已添加的职工记录进行查询。
还可以按职工号对工作量进行查询。
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:
可显示当前系统中所有职工记录和工作量统计信息,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的人员记录进行删除和工作量进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作;否则,输入要删除的人员的编号,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存在。
(6)统计功能:
对职工可按工作量进行统计,并排名次。
(7)保存功能:
可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。
(9)计算电费和水费。
学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。
二、内容设计
1.根据所选题目,给出模块图
图2.1高校水电费管理系统模块图
2.画出主程序及其主要模块的流程图
图2.2main()函数
图2.3添加函数
图2.4菜单函数
图2.5查找函数
图2.6修改函数
图2.7显示函数
图2.8删除函数
3.编写程序关键代码
voidAdd()//添加信息
{
Students;
cout<<"输入新添人员信息"<s.Input();
for(inti=0;iif(s.num==stu[i].num)
{
cout<<"该编号的用户已存在!
"<return;
}
stu[amount]=s;
cout<<"添加成功!
"<ofstreamout_file("学生.txt",ios:
:
app);//将添加记录更新到文件
if(!
out_file)
{
cout<<"打开失败!
"<return;
}
out_file<out_file.close();
amount++;
}
voidSearch()//查询信息
{
intchioce;
cin>>chioce;
switch(chioce)
{
case1:
{
stringname;
cin>>name;
intk=0;
for(inti=0;i{
if(stu[i].name==name)
{
cout<k=1;
}
}
if(k==0)
cout<<"查无此人!
"<}break;
case2:
{
doublewaters;
cin>>waters;
intk=0;
for(inti=0;iif(stu[i].water==waters)
{
cout<k=1;
}
if(k==0)
cout<<"查无此用水量!
"<}break;
case3:
{
doublepowers;
cin>>powers;
intk=0;
for(inti=0;iif(stu[i].power==powers)
{
cout<k=1;
}
if(k==0)
cout<<"查无此用电量!
"<}break;
default:
cout<<"无此选项!
请重试!
"<break;
}
}
voidShow()//显示信息
{
cout<}
voidStudent:
:
Compile()//修改学生信息
{
stringnums;
cin>>nums;
intk=0;
for(inti=0;iif(stu[i].num==nums)
{
Students;
s.Inputs();
for(intt=0;tif(s.num==stu[t].num)
{
if(t==i)continue;
cout<<"该编号的用户已存在!
修改不成功!
"<return;
}
stu[i]=s;
cout<cout<<"修改成功!
"<k=1;
}
if(k==0)
cout<<"查无此人!
"<}
VoidDelete()//删除信息
{
intchioce;
cin>>chioce;
switch(chioce)
{
case1:
{
stringnums;
cin>>nums;
intk=0;
for(inti=0;iif(stu[i].num==nums)
{
intchoice=2;
cin>>choice;
switch(choice)
{
case1:
for(intj=i;jstu[j]=stu[j+1];
amount--;
k=1;
break;
case0:
k=2;break;
default:
cout<<"无此项!
"<}
}
if(k==1)
cout<<"删除成功!
"<elseif(k==2)
cout<<"查找到此学号,但未删除!
"<else
cout<<"查无此学号!
"<}break;
case2:
{
cout<<"请输入姓名:
"<stringnames;
cin>>names;
intk=0;
for(inti=0;iif(stu[i].name==names)
{
intchoice=2;
cin>>choice;
switch(choice)
{
case0:
k=2;break;
case1:
for(intj=i;jstu[j]=stu[j+1];
amount--;
k=1;
break;
default:
cout<<"无此项!
"<}
if(k==1)
cout<<"删除成功!
"<elseif(k==2)
cout<<"查找到此学号,但未删除!
"<}
if(k==1)
cout<<"查无此学号!
"<}break;
default:
cout<<"无此项!
"<}
}
voidTotal()//统计信息
{
intt=0;
for(inti=0;iif(stu[i].flag=="否")
{
cout<t=1;
}
if(t==0)
cout<<"无未缴费人员!
"<}
voidRead()//读取信息
{
ifstreamin_file("学生.txt",ios:
:
in);
if(!
in_file)
{
cout<<"打开失败!
"<return;
}
inti=0;
while(in_file>>stu[i].num>>stu[i].name>>stu[i].sex>>stu[i].old>>stu[i].classrome
>>stu[i].water>>stu[i].watermoney>>stu[i].power>>stu[i].powermoney>>stu[i].flag)
{
cout<i++;
}
in_file.close();
}
三、调试分析
1.实际完成的情况说明(完成的功能,支持的数据类型等)
完成的功能:
(1)添加功能:
程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:
可显示当前系统中所有学生和教工的记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的学生或教工记录进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!
”并返回操作。
(6)统计功能:
能根据多种参数进行统计。
能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。
(7)保存功能:
可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(9)计算电费和水费。
学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。
支持类型:
编号、年龄支持int型,姓名、性别、工作部门、班级、交费情况支持string型,用电量、用水量、电费、水费支持double型。
2.程序的性能分析
程序主要使在类中操作,将所有记录存入对象数组和文件,采用顺序存储结构对数组进行操作,从而实现需要的操作。
3.上机过程中出现的问题及其解决方案
1.对类的数据成员进行定义时,起初定义为私有数据,结果继承类不能访问,这是类的访问权限出了问题,于是将其改成了公有数据成员,继承类能够对其进行访问了。
2.继承类对基类的访问出现了错误。
由于Student类和Teacher类都是从Person类继承的,会出现二义性,因此将其改成虚基类,这样就不会出现二义性飞的问题。
3.由于要输入多组数据,因此要定义对象数组,而且要定义为全局变量,否则不会得到有效的修改。
4.当系统关闭以后,再打开系统进行操作,若是添加文件中已经存在的编号,还是会添加到文件中去,这是因为文件的更新和当前系统的更新不一直,因此在最开始打开系统是就应该将文件中的记录读取到当前系统中。
4.程序中可以改进的地方说明
1.程序应该可以实现输入信息的正确性,例如输入性别的时候,如果不是男或女,可以输出提示信息等。
2.对于学生所在班级、性别,老师工作部门、性别等操作可以采用选择的模式,将信息录入文件中,这样可以使输入更方便。
3.对于每一次信息的操作应该输出相应的原有信息和现有信息,以防信息出错。
4.对于存在多个相同数据的记录,在删除和修改时应注意是否每个都修改。
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,读取教师信息
图2.12选7,统计教师信息
4.学生水电费管理系统:
操作同教师水电费管理系统。
五、设计总结(可谈一谈本次课程设计的经验和体会)
课程设计,对于我们现在只学了些基础的知识的人来说确实是一个不小的挑战!
我想对每个人都一样别人能做到的,我也能做到!
从一个函数到很多函数的有机集合到多个类的使用,其中也经历了不少困惑与不知。
但至少我现在做到了,终于战胜了自己对课程设计的恐惧,也收获了程序运行成功的喜悦,有付出,就有收获
通过这学期对C++的学习总结,要把知识运用于这次的课程设计,发现还是有点不足,有点困难,学到用时方恨少,自己学的还不够精,不够深。
对于一门技术来说,浅尝辄止是远远不够的。
还好通过去网上搜索、去图书馆查找资料、请教老师同学等各种方式克服了一个又一个的困难。
多样化的处理问题,才是成功之道,终于把设计给完成了!
学习的心态很关键,不懂了就要学着去用不同的方式去获取,补足自己,通过各种各样的方式,学着去请教别人和别人交流,做到不懂就问。
相对来说,我的程序更简易,代码相对来说比较少,但却实现了大多数功能。
简单易懂可行才是程序设计的本质,不是吗?
把所学的运用于生活中,收获了那种成就感不言而喻的高兴。
至今我感慨颇多的应当是一些难以查出的错误,编译时查不出的错误,其被发现时很可能只是位置的错误,仅隔数行,这些微小的信息却极大地影响了整体的效果。
这不仅存在于一个程序之中,因而我对于生活中的细节也有了改观,对于整体和局部的观念也有了更多的见解。
通过这次实践,我对编程有了新的理解,编程并不是像大多数人说的那样充满单调,乏味。
一件东西的乐趣在于你能去接触去理解。
我接触了,我理解了。
让所学的运用于生活中,做到灵活运用,学有所成的兴奋是难得的宝贵。
我在其中感悟到乐趣了,相信这是我编程高手之路的一个重要转折点。
六、参考文献
[1]李兰,任凤华.C++面向对象程序设计.西安:
西安电子科技大学出版社,2010
[2]李兰,任凤华.《C++面向对象程序设计》实验指导及习题解析.西安:
西安电子科技大学出版社,2010
[3]郑莉,董渊.C++程序设计基础教程.北京:
清华大学出版社,2010
[4]郑莉.C++程序设计基础教程学生用书.北京:
清华大学出版社,2010
七、附录
#include
#include
#include
#include
#include
#defineMAX100
usingnamespacestd;
classPerson
{
public:
stringnum;//编号
stringname;//姓名
stringsex;//性别
intold;//年龄
doublepower;//用电量
doublewater;//用水量
doublewatermoney;//水费
doublepowermoney;//电费
stringflag;//缴费标志
public:
Person(stringn="",stringnm="",strings="",intd=0,doublep=0,doublew=0,doublewm=0,doublepm=0,stringf="否")//构造函数
{
num=n;
name=nm;
sex=s;
old=d;
power=p;
water=w;
watermoney=wm;
powermoney=pm;
flag=f;
}
};
intamount;//记录当前记录的个数
classStudent:
virtualpublicPerson
{
public:
stringclassrome;//班级
public:
Student(stringn="",stringnm="",strings="",intd=0,doublep=0,doublew=0,stringcr="",doublewm=0,doublepm=0,stringf="否")
:
Person(n,nm,s,d,p,w,wm,pm,f)//构造函数
{
classrome=cr;
}
voidInput();
voidInputs();
voidOutput();
voidAdd();//添加信息
voidSearch();//查询信息
voidShow();//显示信息
voidCompile();//修改信息
voidDelete();//删除信息
voidTotal();//数据统计
voidSave();//保存信