作为一个物业管理系统应该具用的功能特点分析如下.docx
《作为一个物业管理系统应该具用的功能特点分析如下.docx》由会员分享,可在线阅读,更多相关《作为一个物业管理系统应该具用的功能特点分析如下.docx(14页珍藏版)》请在冰点文库上搜索。
作为一个物业管理系统应该具用的功能特点分析如下
一、分析
作为一个物业管理系统,应该具用的功能特点分析如下。
1、高效、清晰的业务流程,真正实现企业管理的可视性和可控性。
清晰的业务流程明确各岗位职责,规范的业务操作提高各个业务环节的工作效率——软件系统的实施能最大限度的减少管理漏洞,减少人为因素的干预,并提高企业运营和管理效率,支持企业商业目标的实现,从而从根本上提高企业的行业竞争性。
2、快速查询功能。
物业管理中房产资料、业主资料、住户资料以及文件档案的数量庞大,手工整理、统计汇总工作量非常大,而且繁琐,查询某房产或业主资料往往需要较长的时间。
通过计算机辅助管理,可以随时快速地查询用户信息,减少大量重复工作,大大提高工作效率。
3、各项费用自动计算,减少人工差错与负担。
物业管理中一项重要的工作是各项费用的计算、统计、汇总,然而由于费用项目较多、计算方法繁琐,手工除了操作差错率较高,而且工作负担繁重。
计算机管理利用了计算机运算速度快、准确率高的特点。
使得各项费用的计算、统计、汇总工作既简单、方便,又能轻松自如。
4、灵活、准确的收费,提高财务工作效率。
管理面积越大、户数越多,财务工作越繁重,大量水电费、管理费等其他费用收费不但繁杂,而且容易产生差错。
用计算机管理收费,灵活性、准确性大大提高,。
客户不但可以分项付款,还可以预付各项费用,大大降低财务收费人员的劳动强度和工作。
5、全面的统计分析,提高决策依据
在物业管理的市场竟争中,计算机快速、自动、强大的统计汇总功能和丰富的报表打印系统,使各项数据的统计汇总、分析表格一应俱全,物业公司领导可以随时查阅最新的详细情况,并依次快速、准确地做出决策,提高物业公司的管理水平与竞争力。
6、加强企业内部信息沟通,提高工作效率。
网络化的物业管理系统,能够实现系统内部信息及数据资源的共享,以加强企业内部的信息沟通,提高整个企业的团队协同工作能力和工作效率,构建企业扁平化管理架构。
7、系统功能增减灵活自如,支持客户定制。
模块化结构设计,支持用户自定义功能,界面风格、业务流程、功能模块均可自定义,预留多种数据接口(财务、楼宇自控、门禁、三表远传),使系统功能增减灵活自如。
8、安全的权限管理—数据安全高枕无忧。
按用户角色划分用户权限级别,角色业务范围内业务通行无阻,共享范围内资源共享;角色业务范围外从根本上不配置应用功能程序,彻底保证系统各用户角色模式下业务数据权限安全。
9、独特实用的操作日志。
软件的操作日志功能全面跟踪记录每天的软件操作使用情况,对物业管理软件使用情况进行监控,对所有使用此软件的物业员工的使用情况进行监控。
基于以上功能,应制作相应的程序模块。
但由于本人初学VC,对数据库的链接毫无理解。
加于时间方面的问题。
为完成作业需要。
在能力范围内,只有减少程序相应的功能模块。
完成此物业管理系统。
由于功能很少,应此称作小型物业管理系统。
请老师体量!
!
!
二、设计
物业管理系统是基于数据库的系统。
如果功能强大的系统应该选择SQL数据库,但本人制作的小型物业管理系统,功能小,MicrosoftOfficeAccess已经能实现所有功能。
因此本人选择MicrosoftOfficeAccess2003作为此系统的数据库。
开发环境为WindowsXP下的VisualC++。
本系统要实现的功能有:
1,记录住户的基本资料信息。
包括,住户名、住户所住的房号、住户联系电话等信息。
2,记录住户一个月所用的水费,电费,管理费,同杂费的信息,还自动计算出本月要交的费用。
3,要有登陆功能,使只有是系统管理员才能对数据进行修改,普通用户只能对自己的信息进行查询。
4,有查询功能,按住户名查询。
查询本年内所有月份的费用数据。
5,有查询显示月份数据功能,一运行系统,就会自动根据系统时间,自动选择显示当前月分的数据。
6,管理员有增加用户,增加记录,对记录进行修改,删除记录等功能。
数据库设计。
数据库中只有users这个表,用来记录所有用户的信息,users的字段和记录信息如下:
id数据库记录序号.数据类型为自动编号。
name记录住户名称。
数据类弄为文本型。
mon记录月份。
数据类型为数字型。
num记录住户房号。
数据类弄为文本型。
tele记录住户联系电话。
数据类弄为文本型。
water记录住户的水费。
数据类弄为文本型。
ele记录住户的电费。
数据类弄为文本型。
manage记录住户管理费。
数据类弄为文本型。
elsel记录住户杂费。
数据类弄为文本型。
money记录住户总费用。
数据类弄为文本型。
之所以把水费、电费、管理费、杂费、总费用设为文本型,是为了VC对数据读取和写入比软容易实现。
在自动计算总费用时,只需要将其转成数字整型进行计算就可以了。
数据表设计如下图:
用户界面设计。
由于功能实现小,对话框就能实现。
应此选用对话框程序模式。
主界面图如下:
这样界面清晰,功能可见。
操作简单。
登陆界面。
由于小型系统。
不须对密码过于保密,应此不设专用的数据表记录密码。
也就是说密码在设计程序时内定。
密码默认为admin
这样就减少系统设计和数据库设计的复杂性。
登陆界面如下图:
其它界面设计图如下:
增加用户界面。
修改用户信息界面。
增加用户记录界面由于要用户的全新资料。
包括房号,联系电话。
这与增加记录的界面有所区别。
因为增加记录,只要增加本月的水费、电费、管理费、杂费。
而房号同联系电话是不变的。
因此,增加记录的界面就减少了不必要的填写项。
系统会自动读取最后一个月的用户记录信息。
当点击选中相应记录时,按下修改按钮,就会出现修改界面。
系统将自动读取选中的资料,只要修改其中项,按提交即能实现修改功能。
增加记录界面。
三、程序实现
本程序链接数据库用ADO链接方式。
因为ADO不需要设置数据源。
对用户简单易用。
ADO(ActiveXDataObject)是Microsoft数据库应用程序开发的新接口,是建立在
OLEDB之上的高层数据库访问技术。
ADO建立数据库程序的基本流程如下。
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
建立数据库链接操作如下。
(本程序命名为work)
在stdafx.h中加入如下语句:
#import"c:
\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
在这里,要看msado15.dll的路径而定。
初始化COM库。
BOOLCWorkApp:
:
InitInstance()
{
AfxOleInit();
......
创建Connection对象并连接数据库
BOOLCWorkDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
HRESULThr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=2006.mdb","","",adModeUnknown);///连接数据库
}
}
catch(_com_errore)///捕捉异常
{
CStringerrormessage;
errormessage.Format("连接数据库失败!
\r\n错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
同时要在work.h中定义两个ADO智能指针类。
classCWorkDlg:
publicCDialog
{
//Construction
public:
voidsuaxin(CStringm);
CWorkDlg(CWnd*pParent=NULL);//standardconstructor
_RecordsetPtrm_pRecordset;
_ConnectionPtrm_pConnection;
。
。
。
。
。
。
。
。
。
。
读取数据库操作.
intnItem;
SYSTEMTIMEst;//读取系统当前月份.
CStringstrmonth;
GetLocalTime(&st);
strmonth.Format("%2d",st.wMonth);
intn=atoi(strmonth.GetBuffer(0));//类型转换.
CStringSQL;
SQL.Format("SELECT*FROMuserswheremon=%d",n);//按月份读取数据.
_variant_tsql2=SQL;
_variant_tvname,vnum,vID,vtele,vwater,vele,vmanage,velsel,vmoney,vmon;
try
{//用m_pRecordset读取数据.
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open(sql2,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
m_bSuccess=TRUE;
while(!
m_pRecordset->adoEOF)
{vID=m_pRecordset->GetCollect("id");
vmon=m_pRecordset->GetCollect("mon");
vname=m_pRecordset->GetCollect("name");
vnum=m_pRecordset->GetCollect("num");
vtele=m_pRecordset->GetCollect("tele");
vwater=m_pRecordset->GetCollect("water");
vele=m_pRecordset->GetCollect("ele");
vmanage=m_pRecordset->GetCollect("manage");
velsel=m_pRecordset->GetCollect("elsel");
vmoney=m_pRecordset->GetCollect("money");
nItem=m_ctrlperson.InsertItem(0xffff,(_bstr_t)vID);//把数据放进列表控件.m_ctrlperson列表控件的指针.
m_ctrlperson.SetItem(nItem,1,1,(_bstr_t)vname,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,2,1,(_bstr_t)vmon,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,3,1,(_bstr_t)vnum,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,4,1,(_bstr_t)vtele,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,5,1,(_bstr_t)vwater,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,6,1,(_bstr_t)vele,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,7,1,(_bstr_t)vmanage,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,8,1,(_bstr_t)velsel,NULL,0,0,0);
m_ctrlperson.SetItem(nItem,9,1,(_bstr_t)vmoney,NULL,0,0,0);
m_pRecordset->MoveNext();
}
}
catch(_com_errore)///捕捉异常
{
AfxMessageBox("读取数据库失败!
");///显示错误信息
}
使用完毕后关闭连接释放对象
在work.app下建一个函数名为ExitInstance()的函数.用于关闭连接释放对象.
voidCWorkApp:
:
ExitInstance()
{
if(m_pConnection->State)
m_pConnection->Close();///如果已经打开了连接则关闭它
returnCWinApp:
:
ExitInstance();
}
修改数据代码如下.
try
{CStringSQL;
SQL.Format("SELECT*FROMuserswhereid=%d",newid);//按id找到数据.
_variant_tsql2=SQL;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open(sql2,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
floattele=atof(m_water.GetBuffer(0));//类型转换.用于修改后,floatele=atof(m_ele.GetBuffer(0));//重新计算总费用的.
floatmanage=atof(m_manage.GetBuffer(0));
floatelsel=atof(m_elsel.GetBuffer(0));
m_pRecordset->PutCollect("name",_variant_t(m_name));
m_pRecordset->PutCollect("num",_variant_t(m_num));
m_pRecordset->PutCollect("tele",_variant_t(m_tele));
m_pRecordset->PutCollect("water",_variant_t(m_water));
m_pRecordset->PutCollect("ele",_variant_t(m_ele));
m_pRecordset->PutCollect("manage",_variant_t(m_manage));
m_pRecordset->PutCollect("elsel",_variant_t(m_elsel));
m_pRecordset->PutCollect("money",_variant_t(tele+ele+manage+elsel));
m_pRecordset->PutCollect("mon",_variant_t(m));
m_pRecordset->Update();
CDialog:
:
OnOK();
}
增加新记录操作.
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT*FROMusers",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
floattele=atof(m_water.GetBuffer(0));
floatele=atof(m_ele.GetBuffer(0));
floatmanage=atof(m_manage.GetBuffer(0));
floatelsel=atof(m_elsel.GetBuffer(0));
m_pRecordset->AddNew();///添加新记录
m_pRecordset->PutCollect("name",_variant_t(cname));
m_pRecordset->PutCollect("num",vnum);
m_pRecordset->PutCollect("tele",vtele);
m_pRecordset->PutCollect("water",_variant_t(m_water));
m_pRecordset->PutCollect("ele",_variant_t(m_ele));
m_pRecordset->PutCollect("manage",_variant_t(m_manage));
m_pRecordset->PutCollect("elsel",_variant_t(m_elsel));
m_pRecordset->PutCollect("money",_variant_t(tele+ele+manage+elsel));
m_pRecordset->PutCollect("mon",_variant_t(m));
m_pRecordset->Update();
CDialog:
:
OnOK();
}
catch(_com_errore)///捕捉异常
{
AfxMessageBox("读取数据库失败!
");///显示错误信息
}
以上列出了对数据库的基本操作.祥细代码看源文件.
根据上面的操作.系统基本已实现.
四、制作感想。
经过两个多星期的学习与制作。
能够完成这样的系统。
我感到有点成就感。
虽然实现功能很少,而且程序较乱。
但在以往未曾接触过VC++的情况下。
只花两个多星期,能完成这里。
我已经感到满足。
经过学习完成这个系统,使我对VC++有一定的了解。
在学习过程中,难点在于数据库的链接问题。
曾经试过很多次失败,有时在书上抄了一大堆程序,但运行后出错。
经几次检查后还没有查出错误。
花了很大努力却没有收获,这样试了几次,有时几呼要放弃了。
想另做过一项。
因为我一直以来,我主要学习方向在网页设计和FLASH学习上。
我对FLASH有很深的了解,能够熟练地运用flash的肢本语言Actionscript.对ASP也有很深认识。
想另做一个是这方面的。
做这个系统是揪中的,没有办法。
选中了就选中吧。
于是又继续做下去。
。
。
。
。
网络真系帮助我不少。
很多问题都能帮我解决。
例如在VC中编程实现按钮的启用(enable)和禁用(disable)、列表控件CListCtrl使用等,都是在网上学习的。
有时出现错误,也能在网上找出愿因。
只有一个数据库链接出错时,在网上找不到答案。
问题很多人问了。
但没有人能回答。
应此在这提出一下。
这个问题就是在数据库链接过程中出现runingtime错误,有时出现没有提示的错误。
。
在这方面,我现在也不明白。
在写这个系统的过程中,出现了很多次这种错误。
然而出错原因却了一个数据表名。
在开始时,我的数据表名为user但这样去出现runingtime错误。
怎样改也不能修复。
在巧合过程中,我改了成users,这样错误就解决了。
。
我想,这也是我能否完成这个系统的关键了。
后来我想想。
这是不是系统关键字的问题?
?
但不可能呀。
因为在ASP中,有很多是有user作表名的。
这个问题以后我会跟进。
一定要找出真正原因。
在整个过程中,感到VC++有点难学,太多函数的类要记忆了。
难度真要全都记住不成?
现在,我感到没有这个必要了。
因为在练习多次后,我发觉这些类我已经能很熟练地掌握了。
在这里我要感谢老师给我做这个课程设计的机会,因为有压力才有动力。
要是自己学,我想不会这么快学会。
就是因为要交作业,于是在拼命学,遇到困难也没有放弃。
就是为了完成了能交。
现在感到这些已经不重要了。
因为自己能学到东西才是最重要了。
在这里,很感谢老师给我上了一节这样好的VC++入门课。
比我自己学半年的效果还要好。
在此至谢。
。
。
。
五、程序运行注意
本程序的管理密码是admin,刚运行时,系统会自动选择当前月份的记录。
选择相应的月份,系统就会显示相应的记录。
在添加记录时,系统会自己选择下一个月的记录。
由于本系统只识别月份,没有年的记录。
因此只适合一年内用。
如果到新的一年,只要增加一个新数据库,修改数据库链接名称就可以了。
。
第一次用VC++只能做到这里。
请体量。
以后,我会努力学习的。