课程设计报告4019566.docx
《课程设计报告4019566.docx》由会员分享,可在线阅读,更多相关《课程设计报告4019566.docx(28页珍藏版)》请在冰豆网上搜索。
课程设计报告4019566
(此文档为word格式,下载后您可任意编辑修改!
)
仲恺农业工程学院
课程设计报告
(居民水电费用管理系统)
课程面向对象课程设计
姓名袁家富
院(系)计算机科学与工程学院
专业年级计算机科学与技术083班
学号
指导教师陈勇
日期2010年8月30日-2010年9月12日
仲恺农业工程学院教务处制
目录
1、需求与功能分析1
2、系统总体框架XX
3、模块设计与分析XX
4、类的设计与分析XX
5、特色算法分析XX
6、功能测试XX
7、存在的不足与对策XX
8、程序源代码XX
9、使用说明XX
10、参考文献XX
1、需求与功能分析
1.1需求分析
水电管理系统为水电收费管理人员日常工作的抄表,报表生成,费用计算等提供充足的信息和快捷的查询手段。
利用VisualC++6.0软件及其提供的各种面向对象的开发工具,开发出功能完备,易使用的应用程序。
经过调试、编译与实现,该程序界面友好、程序设计风格朴素,使用起来美观大方、方便易用。
尤其是系统的“报表生成模块”的功能极大的减轻工作人员的工作量,并以快速、准确等优点取代人工操作,提高了水电管理工作效率。
1.2功能分析
本系统是面向普通的输人人员,所以系统使用必须尽可能简单。
根据对水电管理的具体要求及需要本软件实现的功能,将本软件分为7个大的模块,分别是:
第一部分:
住户信息录入;第二部分:
修改住户信息;第三部分:
删除住户信息;第四部分:
修改水电费用单价;第五部分:
住户水电费情况查询;第六部分:
报表生成程序;第七部分:
退出系统。
2、系统总体框架
3、模块设计与分析
1.住户信息录入
系统:
居民水电费用管理系统
模块:
住户信息录入
输入:
住户基本信息
输出:
提示信息
设计与分析:
1.进入系统时要设定住户数量。
2.然后进入此功能模块时,系统提示你输入你设定数量的住户的信息。
3.按提示输入住户的基本信息,包括姓名,编号,本月水用量和本月点用量。
4.全部信息输入后,退出模块,返回主菜单。
备注:
1.操作应简单。
2.按提示输入,否则可能会产生错误。
2.修改住户信息
系统:
居民水电费用管理系统
模块:
修改住户信息
输入:
住户的编号和修改后的信息
输出:
提示信息
设计与分析:
1.进入此功能模块时,系统提示你输入你想修改住户的编号。
2.然后系统会查找该住户。
3.如果找到该住户,按系统提示,修改住户的信息。
4.如果没有该住户,系统会提示“没有该住户的信息”。
3.执行完后,系统提示你是否继续修改。
4.输入Y继续进行修改操作。
5.按任意键,退出模块,返回主菜单。
备注:
1.操作应简单。
2.按提示输入,否则可能会产生错误。
3.删除住户信息
系统:
居民水电费用管理系统
模块:
删除住户信息
输入:
住户的编号
输出:
提示信息
设计与分析:
1.进入此功能模块时,系统提示你输入你想删除住户的编号。
2.如果删除成功,系统会提示“删除成功”。
3.如果没有该住户的信息,系统会提示“没有该住户的信息”。
4.执行完后,系统提示你是否继续修改。
5.输入Y继续进行删除操作。
6.按任意键,退出模块,返回主菜单。
备注:
1.操作应简单。
2.按提示输入,否则可能会产生错误。
4.修改水电费用单价
系统:
居民水电费用管理系统
模块:
修改水电费用单价
输入:
更改后的水电费单价
输出:
原来的水电费单价以及提示信息
设计与分析:
1.进入此功能模块时,系统提示你原来的水电费单价。
2.按照提示,修改水电费单价。
3.修改成功后,退出模块,返回主菜单。
备注:
1.操作应简单。
2.按提示输入,否则可能会产生错误。
5.住户水电费情况查询
系统:
居民水电费用管理系统
模块:
住户水电费情况查询
输入:
住户的编号
输出:
该住户水电费情况
设计与分析:
1.进入此功能模块时,系统提示你输入你想查询住户的编号。
2.若查找到该住户,系统会输出该用户的基本信息和水电费用情况。
3.如果没有该住户的信息,系统会提示“没有该住户的信息”。
4.执行完以后,系统会提示你是否继续查询。
5.输入Y继续进行查询操作。
6.按任意键,退出模块,返回主菜单。
备注:
1.操作应简单。
2.按提示输入,否则可能会产生错误。
6.报表生成
系统:
居民水电费用管理系统
模块:
报表生成
输入:
无
输出:
列出全部住户水电费情况
设计与分析:
1.进入此功能模块后,系统会输出所有住户的基本信息和水电费用情况。
2.退出模块,返回主菜单。
备注:
1.操作应简单。
7.退出系统
系统:
居民水电费用管理系统
模块:
退出系统
输入:
按提示输入
输出:
设计者信息以及提示信息
设计与分析:
1.进入此功能模块后,系统会输出设计者的信息。
2.系统提示信息,输入Y则退出系统;按任意键,退出模块,返回主菜单。
备注:
1.操作应简单。
4、类的设计与分析
1.Date类
classDate//日期
{
public:
voidSetvalue(inty,intm,intd)//初始化
{
year=y;
month=m;
date=d;
}
voidDisplay()//输出日期
{
cout<}
private:
intyear;//年
intmonth;//月
intdate;//日
};
表1Date类说明表
名称
属性
说明
year
数据成员
记录日期对象的年份
month
数据成员
记录日期对象的月份
date
数据成员
记录日期对象的日期
Setvalue
成员函数
对日期对象初始化
Display
成员函数
输出日期
2.information类
classinformation
{
public:
information();
~information();
voidinput();
intgetid();
voidprice();
voidchangeprice(doublew,doublee);
voidaccount();
voidinput_time(inty,intm,intd);
voidoutput_time();
voiddisplay();
protected:
stringname;//姓名
intid;//编号
doublewater;//用水量
doubleelec;//用电量
doublew_1;//水费单价
doublee_1;//电费单价
Datetime;//日期
};
表2information类说明表
名称
属性
说明
name
数据成员
记录住户的姓名
id
数据成员
记录住户的编号
water
数据成员
记录住户的本月用水量
elec
数据成员
记录住户的本月用电量
w_1
数据成员
记录当前水费单价
e_1
数据成员
记录当前电费单价
time
数据成员
记录日期
information
成员函数
构造函数
~information
成员函数
析构函数
input
成员函数
输入住户的信息
getid
成员函数
返回住户的编号
price
成员函数
输出当前水电费单价
changeprice
成员函数
改变水电费单价
account
成员函数
计算住户水电费用
input_time
成员函数
初始化日期
output_time
成员函数
输出日期
display
成员函数
输出用户水电费情况
5、特色算法分析
功能:
1.进入住户水电费情况查询选项后,首先执行“清屏”,然后在显示提示信息,按提示信息输入要查询的住户的编号。
然后逐个查找,当找到该编号的住户时,输出该住户的水电费情况的信息;若找不到该编号的住户,系统会输出提示语言:
“没有该住户信息”。
2.查找完成后(找到或找不到),系统会提示你是否继续查找,若选择继续,则重复1的步骤;若选择退出,则返回上一层菜单。
算法思路:
1.要实现查找功能,用For语句,从第一个对象开始查找,用if语句来判断当前的对象是否为要查找的对象。
当找到该对象,输出该对象的内容;若找不到该对象,测输出提示信息,表明没有该对象的信息。
2.要实现多次查找,用do循环语句,算法一开始时,先进行一次查找,然后查找完成后,判断终止条件,终止条件由用户输入,若不满足终止条件,则继续执行循环体的内容,即继续进行查找;若满足终止条件,则退出循环体,然后进行其他相应的操作,最后返回主菜单。
代码:
do
{
system("cls");
cout<<"|**************住户水电费情况查询***************|"<cout<<"请输入要查询的住户的编号:
";
enternum(c);
for(m=0;m{
if(c==p[m].getid())
{
menu6(p[m]);
p[m].display();
cout<}
elseif(p[m].getid()==0)
cout<<"没有该住户信息"<}
}
while(jixu());
system("pause");
system("cls");
break;
流程图:
6、功能测试
图6-1住户基本信息录入功能测试图
图6-2报表生成功能测试图
图6-3修改住户信息功能测试图
图6-4住户水电费情况查询功能测试图
图6-5删除住户信息功能测试图
7、存在的不足与对策
由于设计者水平有限以及时间等方面的原因,本系统的功能比较简单,基本实现住户信息录入、修改、删除、查询等功能。
由于进入系统的时候已经设定好住户的数量,所以不能添加住户,到目前为止,还没找到合适的方法来解决迟问题。
此外,系统的查错能力也不强,对于一些不正确的输入可能会造成一些难以预料的结果,因此要按照系统提示信息输入数据,不要故意输入错误的信息。
还有的就是由于《数据库原理》的课程还没学完,对数据库的开发及应用还没有掌握好,因此,本系统没有用到数据库来管理系统的数据,导致本系统很多的功能不能实现。
在今后的学习当中,本人会更多地学习各种的编程技巧和扩充知识面,并且加强对数据库开发方面的学习,从而开发出功能更强大,更完善的数据管理系统。
8、程序源代码
/***********************"head.h"***********************/
#include
#include
#include
#include
usingnamespacestd;
/***********************Date.h***********************/
#if!
defined(DATE)
#defineDATE
#include"head.h"
classDate//日期
{
public:
voidSetvalue(inty,intm,intd)//初始化
{
year=y;
month=m;
date=d;
}
voidDisplay()//输出日期
{
cout<}
private:
intyear;//年
intmonth;//月
intdate;//日
};
#endif
/***********************"information.h"***********************/
#if!
defined(INFORMATION)
#defineINFORMATION
#include"Date.h"
//信息类的定义
classinformation
{
public:
information();
~information();
voidinput();
voidoutput();
intgetid();
voidprice();
voidchangeprice(doublew,doublee);
voidaccount();
voidinput_time(inty,intm,intd);
voidoutput_time();
voiddisplay();
protected:
stringname;//姓名
intid;//编号
doublewater;//用水量
doubleelec;//用电量
doublew_1;//水费单价
doublee_1;//电费单价
Datetime;//日期
};
#endif
/***********************"information.cpp"***********************/
#include"information.h"
//成员函数的实现
information:
:
information()//构造函数
{
name="\0";
id=0;
water=0;
elec=0;
w_1=1.32;
e_1=0.75;
}
information:
:
~information()//析构函数
{
name="\0";
id=0;
water=0;
elec=0;
}
voidinformation:
:
input()//输入住户信息
{
cin>>name;
cin>>id;
cin>>water;
cin>>elec;
}
voidinformation:
:
output()//输出住户信息
{
cout<<""<}
intinformation:
:
getid()//返回住户编号
{
returnid;
}
voidinformation:
:
price()//输出当前水电费单价
{
cout<<""<<"水费单价:
"<cout<<"电费单价:
"<}
voidinformation:
:
changeprice(doublew,doublee)//改变水电费单价
{
w_1=w;
e_1=e;
}
voidinformation:
:
account()//计算水电费用
{
doublew,e,we;
w=water*w_1;
e=elec*e_1;
we=w+e;
cout<<""<}
voidinformation:
:
display()//输出住户水电费情况
{
cout<<""<account();
}
voidinformation:
:
input_time(inty,intm,intd)//输入日期
{
time.Setvalue(y,m,d);
}
voidinformation:
:
output_time()//输出日期
{
time.Display();
}
/***********************"main.cpp"***********************/
#include"information.h"
voidenternum(int&num)//清除流的错误
{
charstr[80];
cin>>num;
while(!
cin)
{
cin.clear();
cin.getline(str,80);
cout<<"你的输入有误,请重新输入:
";
cin>>num;
}
}
intjixu()//继续则返回1.退出返回0
{
charc;
cout<<"继续请按Y,退出请按任意键:
";
cin>>c;
if(c=='Y'||c=='y')
return1;
else
return0;
}
intconfirm()//确定则返回1,取消返回0
{
charc;
cout<<"确定请按Y,取消请按任意键:
";
cin>>c;
if(c=='Y'||c=='y')
return1;
else
return0;
}
voidmenu4()
{
cout<<"|--|"<cout<<"|姓名|编号|本月用水量|本月用电量|"<cout<<"|--|"<}
voidmenu1(intn)
{
cout<<"|-|"<cout<<"|****************住户基本信息录入*****************|"<cout<<"|---输入"<----|"<cout<<"|请按以下方式输入住户信息,不同数据之间以空格分割|"<cout<<"|-|"<menu4();
}
voidmenu2()
{
cout<<"|----修改住户信息如下:
----|"<cout<<"|-|"<cout<<"|请按以下方式输入住户信息,不同数据之间以空格分割|"<cout<<"|-|"<menu4();
}
voidmenu6(informationp)
{
cout<<"日期:
";
p.output_time();
cout<<"||"<cout<<"|姓名|编号|本月用水量|本月用电量|水费金额|电费金额|总金额|"<cout<<"||"<}
voidmenu0()
{
cout<<"|------|"<cout<<"|*****************面向对象课程设计******************|"<cout<<"|------|"<cout<<"|班级:
计机083姓名:
袁家富学号:
|"<cout<<"|------|"<cout<<"|题目:
居民水电费用管理系统|"<cout<<"|------|"<cout<<"|确定退出请按Y|返回系统请按任意键|"<cout<<"|------|"<}
intmenu()
{
inti;
cout<<"|------|"<cout<<"|**************居民水电费用管理系统**************|"<cout<<"|------|"<cout<<"|||"<cout<<"|1住户信息录入|2修改住户信息|"<cout<<"|||"<cout<<"|3删除住户信息|4修改水电费用单价|"<cout<<"|||"<cout<<"|5住户水电费情况查询|6报表生成|"<cout<<"|||"<cout<<"|------|"<cout<<"|**************0退出系统**************|"<cout<<"|------|"<cout<<"请输入序号:
";
enternum(i);
while(i>6)
{
cout<<"你的输入有误,请重新输入:
";
cin>>i;
}
returni;
}
/*主函数*/
intmain()
{
intn,m,k;
doublew,e;
chari;
inta,b,c;
intY,M,D;
information*p;
cout<<"|------|"<cout<<"|**********欢迎进入居民水电费用管理系统**********|"<cout<<"|------|"<cout<<"请输入住户数量:
";
enternum(n);
p=newinformation[n];
cout<<"设置日期:
"<cout<<"年:
";
cin>>Y;
cout<<"月:
";
cin>>M;
cout<<"日:
";
cin>>D;
for(k=0;k{
p[k].input_time(Y,M,D);
}
system("cls");
for(;;)
{
switch(menu())
{
case1:
system("cls");
menu1(n);
for(m=0;mp[m].input();
system("pause");
system("cls");
break;
case2:
do
{
system("cls");
cout<<"|*****************修改住户信息*******************|"<cout<<"请输入要修改的住户的编号:
";
enternum(a);
for(m=0;m{
if(a==p[m].getid())
{