网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

Delphi小区能源管理系统

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
Delphi小区能源管理系统论文摘要随着科技的不断发展,居民小区智能化管理已经慢慢得到普及。本题目是锦州某智能小区的能源(水、电、煤气)管理系统。此系统在设计时本着,容易操作、界面友好、系统稳定,功能完备的设计理念。其中提供了数据库备份、恢复功能,使系统具备较高稳定性和安全性。采用功能强大的模糊查询和联合查询使原本复杂繁琐的工作变得快速简单。该项目预期采用C/S设计模式。前台程序采用Delphi7.0作为开发工具。后台数据库采用Microsoft公司的SQL Server 2000。论文整体分为八章。第一章,前言,简单介绍了系统的需求分析内容、系统最终要达成的目的、开发此系统的背景。第二章到第六章按照软件工程思想中的整体设计周期顺序分别介绍了开发小区能源收费系统信息采集、信息入库、信息检索、抄表收费子系统的各个阶段的任务、设计过程和设计方法,包括可行性研究、需求分析、总体设计、详细设计、程序编码、系统调试等。第七、八章主要介绍了系统的性能分析和通篇总结。论文最后的部分附录了外文文献和部分源代码。关键字:小区能源管理;安装表;C/S结构 AbstractWith the continuous development of science and technology, residential quarters intelligent management has slowly gaining ground. This topic is a smart residential Jinzhou energy (water, electricity, gas) management system. With this system in the design, easy to operate, friendly interface, system stability, functions design concepts. Which provides database backup and restore functions, allowing the system to have higher stability and security. Using powerful vague enquiries and joint enquiries to the original work has become complicated and cumbersome rapid simple. The project is expected to adopt C/S design model. Delphi7.0 prospects procedures used as a development tool. Background database using Microsoft SQL Server 2000 companies.The paper whole divides into eight chapters. First chapter, the foreword, simply introduced the system demand analysis content, the system finally must achieve the goal, develops this system the background. Separately introduced second chapter to the sixth chapter according to the software engineering thought in overall design cycle order develops plot energy charge system information gathering, the information goes into storage, the information retrieval, copies the table charge subsystem each stage duty, the design process and the design method, including feasibility study, demand analysis, system design, detailed design, procedure code, system debugging and so on. Seventh, eight chapters mainly introduced the system performance analysis and passes a summary. Paper final partial appendices foreign language literature and partial sources code
Key words: Plot Energy Management; InstallmentTable; C/S Structure 目 录第1章 前言 11.1 毕业设计题目的背景分析 11.2 社会需求情况及设计的意义 11.3 系统基本达到的目标及结论 2第2章 可行性分析 32.1 可行性研究 32.1.1 技术可行性 32.1.2 经济可行性 32.1.3 操作可行性 32.1.4 法律可行性: 42.2 软、硬件配置及结构 42.2.1 硬件配置 42.2.2 软件配置 42.3 设计方法 62.4 系统结构 72.4.1 C/S模式简介 72.4.2 C/S模式的优点 7第3章 需求分析 93.1 工作需求 93.2 数据流图 103.2.1 小区能源管理系统的数据流图 103.2.2 信息录入数据流图 113.3 数据字典 11第4章 数据库设计 134.1概念设计 134.2逻辑设计 144.3物理设计 17第5章 程序设计与实现 185.1 功能设计 185.2 模块设计 185.3 系统的详细设计 215.3.1 数据模块与ini文件的引入(DM.pas、confige.ini) 序号 215.3.2 欢迎窗口的实现(Ufrmfirst.pas) 215.3.3 用户登录窗体的的实现(UFlogin.pas) 225.3.4 主窗体的实现(Ufrmmain.pas) 245.3.5 业主信息录入(Ufrmaddyz.pas) 255.3.6 安装表(UFrmAZB.pas) 295.3.7 抄表员抄表(UfrmcbyCB.pas) 325.3.8 操作员管理、权限设置(Ufrmaddczy.pas) 365.3.9 备份恢复数据库(UFrmshujkHuiFu、UFrmShuJuBeiFen) 385.3.10 系统计本信息配置(UfrmLXsz.pas) 405.3.11 清除历史数据(UFrmQCSJ.pas) 455.3.12 修改密码(UFrmChangepwd.pas) 465.3.13 锁定当前用户(UFrmLockuser.pas) 495.3.14 更换背景图片(Ufrmmain.pas) 495.3.15 数据库连接配置程序(DBconfiger.exe) 505.3.16 更换用户(Login.pas) 51第6章 调试及测试 526.1 功能调试 526.1.1 链接调试 526.1.2 数据库调试 526.1.3 系统性能调整 536.1.4 安全性测试 536.2 功能测试 53第7章 性能分析 54第8章 总结 55参考文献 56致 谢 57附 录1 58附 录461
 
Delphi小区能源管理系统1.1 毕业设计题目的背景分析当今时代是计算机技术飞速发展的时代。在各行各业中离不开信息处理,这正是信息管理系统应运而生的前提条件。利用计算机实现信息处理的最大好处在于便捷、高效、准确、安全。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提条件。本系统是专为智能小区实现智能管理而设计。居民小区作为人们生活当中不可缺少的场所,其中的物业管理涉及的内容复杂繁多,而这些内容中能源管理更是物业管理的重中之重,急切需要引入计算机技术协助管理。据了解,现今很多的居民小区都是初步开始使用,或尚未使用计算机进行信息管理。根据调研,以前对能源信息管理的主要依赖于自来水公司、供电公司、煤气公司提供的原始手段进行维护管理,方式效率低,不灵活。这对小区实现整体智能化无外乎是一个不利的因素,(例如:业主想查询近期三种能源(水、电、煤气)的使用情况,需要去三家公司逐个查询。缴费时也要去三家公司,无形当中浪费了宝贵的时间)本系统的引入可以实现小区三种能源统一管理,统一收费,为业主提供方便快捷的用量查询和缴费查询,这就是此管理信息系统开发的背景。1.2 社会需求情况及设计的意义进入21世纪,随着世界信息产业的迅猛发展,行政办公自动化成为人们最基本的追求目标。它已经被应用于诸多领域,计算机可以代替人工进行许多繁杂的劳动,节省许多资源,大大的提高人们的工作效率,使敏感文档更加安全等等。为了更好的实现小区智能化、信息化建设,应用计算机进行管理就显得尤为重要。于是非常有必要引入小区能源管理系统。同时小区物业竞争激烈,这就更加有必要引入此系统提高的相应的竞争力。本系统能帮小区物业工作人员利用计算机快速方便的对小区能源水、电、煤气的使用情况进行记录和收费。使复杂的工作变得简单。具体体现在:抄表、收费管理方面,记录了每个业主的水、电、煤气表的信息情况和缴费情况,并且纪录相应得收费日志,使得用量信息直观明了,操作可靠性安全性高;在信息检索方面:避免了信息不集中,检索效率低的缺点,只需要鼠标点选便可以快速的找到您要找的信息,其中模糊查询的功能能够帮助你查询到几乎忘记的事情(例如:姓名模糊查询);在业主欠费催缴方面:可以智能快捷的检索并打印欠费信息,以单元为单位输出报表,可以方便的通知到欠费的业主,及时提醒交费;对于系统维护方面:提供了完备的数据库备份和恢复机制,同时也提供了老数据的清理手段。极大的提高了系统的可用性和易于维护性。此外,本软件的各种操作都简单易行,只需要简单的按键操作、鼠标点击就可以完成各项功能。1.3 系统基本达到的目标及结论本系统是实现小区智能化管理重要组成部分,为了实现物业管理者对小区能源水、电、煤气统一管理,统一收费,统一查询。并可以满足业主的各项信息查询需求。通过,调研和论证此项目可以满足以上功能需求。 第2章 可行性分析2.1 可行性研究可行性研究时项目实施的基石,如果没有准确合理的可行性研究结果的指引,即使项目完成了,多半不会得到最终的认可,因此这项工程就是一个失败的工程,所以进行可行性分析是非常必要的。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能解决。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。并不是所有问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模之内解决,如果问题没有可行的解,那么花费在这项开发工程上的任何时间、资源、人力和经费都是无谓的浪费。而可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。其最根本任务就是对以后的行动方针提出建议。一般来说,至少应该从下述三方面研究每种解法的可行性。2.1.1 技术可行性首先信息管理系统在国内外的各行各业的大中小型企业,事业单位都已经到了广泛的应用,而且类型繁多,这就是我在开发这套系统时有很多可以参考的依据和经验。其次,就我所选用的开发工具:Delphi和SQL Server 2000均是非常成熟的开发工具,而且都有着非常好的应用,非常适合本套系统的开发。最后就开发人员来说,虽然是第一次进行数据库实际开发,但是渴望汲取知识,有创造力,勤奋的学习,加上导师的指导,技术方面已经可以满足本次系统开发的需要。2.1.2 经济可行性本系统虽然需要有良好的整体规划,而且还需要专业人员进行系统的运行阶段的维护与管理,所以系统开发需要一定的先期投入,但是今后系统的使用会给用户带来很大的方便。从提高工作效率而避免各种直接或间接的经济损失角度来看,软件实际能够起到的作用会远远大于投入的开发费用。故从经济上是完全可行的。2.1.3 操作可行性运行及操作可行性:系统对运行环境的要求不苛刻。硬件上,满足要求的计算机的配置不用很高;软件上,采用Windows系列操作系统,对员工稍做培训即可掌握,运行及操作上是可行的。2.1.4 法律可行性:本人事管理系统一经应用,在数量上必然会减少企业原来人事管理所用人数,但从政治和社会的角度上来看是可以接受的,因此法律上是可行的。2.2 软、硬件配置及结构2.2.1 硬件配置实现本系统的硬件条件很简单,只需拥有一台装有操作系统的个人PC即可,而且学校机房提供计算机,其基本配置:   CPU:p4 1.6           硬盘:30G 以上 100M剩余空间            内存:256M。2.2.2 软件配置2.2.2.1 Delphi 7.0介绍作为一种快速应用程序开发工具,Delphi得到了广大程序员的青睐,其使用范围非常广泛。Delphi 7是Borland公司在2001年推出的基于对象Pascal语言的RAD工具。作为一种Windows系统下的可视化开发工具,Delphi 7以其良好的可视化应用程序开发环境,以其强大的可扩展数据库功能而倍受瞩目。利用Delphi 7提供的强大的VCL进行编程,可以快速、高效地开发基于Windows环境的各类应用程序。尤其在数据库和网络方面,Delphi更是一个十分理想的软件开发平台。1. 强大的可视化编程环境进入Delphi 7后,可以看到Delphi 7的集成开发环境设计的非常简洁、明快,整个屏幕的各种窗口经过精心的安排,分布紧凑合理。Delphi 7的可视化开发环境由三个部分组成:编译器,调试器和窗体设计器。Delphi 7能够将当前整个开发环境的界面情况保存为桌面设置,这样可以启动一个符合自己风格的桌面环境。Delphi 7具有非常优秀的窗体设计器。Delphi 7的窗体设计器与众不同之处在于Delphi 是建立在一个真正面向对象的框架结构基础之上的。这样,对基类所做的改变都将会传递给所有的派生类。在窗体设计器工作时,Delphi 7在后台自动为正在窗体中操纵的组件生成代码。还可以在编辑器中加入代码来定义应用程序
 
Delphi小区能源管理系统Delphi 的编辑器和其他工具的编辑器基本功能相差不多,但其Code Insight 技术却省去了许多输入工作的麻烦,避免了记忆每一组件种类繁多的方法和属性。而切通过Code Insight技术,系统能够自动对用户输入的函数或过程的参数列表给出提示。这一技术是建立在编译器信息之上的,因此应用范围更广泛。2. 高效的编译器开发软件经常需要进行修改源代码、重新编译、测试、再修改、再编译、再测试等操作,这些操作形成一个开发循环,所以快速的编译器可以大大降低开发周期。Delphi是针对Windows系统的最快的高级语言本地代码编译器。此外Delphi应用程序生成代码的效率和运行速度也很快。3. 丰富的VCLDelphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。2.2.2.2 SQL Server 2000介绍Microsoft SQL Server 2000 是一种功能强大的关系型数据库管理系统。下面将对 Microsoft SQL Server 2000 的特点和性能进行介绍:Microsoft SQL Server 2000 是下一代的数据库和数据分离系统,可以帮助用户建立他们的 Internet 商务体系。Microsoft SQL Server 2000 已经在性能和可扩展性方面确立了世界领先的地位,是一套完全的数据库和数据分析解决方案,使用户可以快速创建下一代的可扩展电子商务和数据仓库解决方案。Microsoft SQL Server 2000 具有高度的扩展性和高可靠性。Microsoft SQL Server 2000使用了工业界最先进的数据结构,能够为要求最苛刻的企业应用提供高度的可扩展性和高可靠性。Microsoft SQL Server 2000在许多工业基准测试中的性能都创立了新的世界纪录,包括事务处理性能委员会的 TPC-C 基准,它击败了运行于任何硬件或操作系统环境下的同类数据库产品。Microsoft SQL Server 2000 的性能还在 Windows 平台下为 SAP R/3 Sales and Distribution(SD) 标准应用程序据基准创立了新的世界纪录。虽然 Microsoft SQL Server 2000 被设计用来充分利用最近和将来的高端对称多处理器(SMP)技术,它还是可以把数据库的工作负荷分布到普通的服务器集群上。这样可以实现高度的可扩展性,即只需要向数据库集群中增加新的普通服务器即可,而不用把老系统替换为更大、更昂贵的新机器。Microsoft SQL Server 2000 引入了一个新的特性,被称为分布式数据库分区视图(Distributed Partitioned Views)它可以把工作负荷划分到多个独立的SQL Server 服务器上去,从而为实施电子商务的客户提供了无限制的可扩展性。Microsoft SQL Server 2000 直接支持最新的、高速的系统区域网络(SAN)技术。Microsoft SQL Server 2000 在它的管理控制台和安装向导中紧密集成了4节点故障恢复技术,从而保证了高度的系统可用性。Microsoft SQL Server 2000 还引用了索引视图技术,运用该技术可以为关系型数据库设计出功能的报表应用程序。Microsoft SQL Server 2000 可以进行最快速的应用程序开发。微软提供了许多技术和工具,作为数据库系统的标准集成组件。而且通过巧妙的设计以及自动调整、自动管理特性, Microsoft SQL Server 2000 是客户可以更快、更容易的享受所有这些最先进的分析技术所带来的好处,能够快书提交应用,从而赢得竞争上的优势。微软在开发数据库服务器自动调整和自动管理技术方面一直在工业界处于领先地位。这种技术使客户可以集中精力处理商业战略上的问题,而不是去细微调整数据库服务器的各项参数。Microsoft SQL Server 2000 可以为最新的硬件进行优化,包括大内存、超高速磁盘子系统以及 SAN 等,从而扩展了这项功能。 Microsoft SQL Server 2000 与 Windows 2000 的活动目录服务的紧密集成允许集中管理功能。 Microsoft SQL Server 2000 和其他企业资源,从而极大地简化了大型组织中的体统管理任务。2.3 设计方法采用C/S模型。前端采用Delphi7.0作为应用开发工具。后台采用Microsoft公司的SQL Server 2000。SQL Server 2000是一种典型关系型数据库管理系统,该系统具有数据一致性好,完整性强,安全性高的优点,而且Delphi7.0也可以很好的与SQL Server 2000组合开发应用系统,系统采用快速的原型化开发方法,本着用户至上的原则。快速的原型化开发方法(Rapid Prototyping)。首先以少量代价快速地构造一个可执行的软件系统模型(只包括一些系统的重要功能及接口),通过这个模型,使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的补充和修改,将系统应具备的功能和特性逐渐增加上去,直到所有的功能和特性全部满足。此时模块也就发展成为最终产品了。                     (用户反馈)图2—1 快速原型开发模型 2.4 系统结构2.4.1 C/S模式简介本系统采用C/S模式。客户/服务器模式(Client/Server)模式简称为C/S模式。在90年代已风靡全世界,不论是信息处理系统,还是LAN OS、企业网OS,以及Internet所提供的多种服务,都是基于客户/服务器的模式。自从70年代末微处理器问世以来,微处理器的性能在不断提高,其字长从开始时的8位增至16位,到80年代中期时,已增至32位;而微机的价格却又不断的下降,已与传统终端的价格相当。由于微机已具有一定的处理能力,因而足步取代了终端。利用微机的处理能力,已可直接完成许多终端型作业,相应的,此时的主机便由处理各类终端型作业转向为以请求/响应方式为各联机微机提供更高层次的服务,这样便形成了客户/服务器模式。2.4.2 C/S模式的优点1. 数据的分布存储。由于客户机通常都具有一定容量的磁盘,且随着微机的发展其容量也越来越大。这样便可以做到数据的分布存储,从而摆脱了由于把一切数据都存放在主机中而造成的既不可靠又容易产生瓶颈现象的困难局面。2. 数据的分布处理由于客户机已具有相当强的处理和存储能力,可进行本地处理和数据操纵,它较之集中模式有效的减少了服务器和客户之间的交互,这不仅提高了对用户命令的影响速度,而且也显著地减少了网上信息交流。3. 灵活性和可扩充性C/S模式非常灵活、及易扩充。理论上,客户机和服务器的数量不受限制,而实际上只是受网络OS功能的限制。目前所允许的客户机数,大体上可达到数百个至上千个,服务器的数量可有数十至几百个。其灵活性还表现在可以配置多种类型的客户机和服务器。4. 友好的用户界面通常,不同的客户机提供给不同的用户使用,他们所要求的界面往往不同;再者,客户机本身也具有相当的处理能力,因而在客户机上较容易做出适合于各种客户的用户界面,特别是在屏幕上能显示出极为友好的图形化信息来帮助用户。5. 易于改变应用软件在集中模式中,软件统统放在主机中,而要修改主机上的软件是十分困难的,并且也不允许一般客户去修改。而在客户/服务器模式中,对于客户机程序的修改和增删就容易的多,必要时也允许由客户进行修改。
 
Delphi小区能源管理系统章 需求分析3.1 工作需求无论是软件开发还是硬件建设,需求分析是个非常重要的过程。严格来说,需求分析需要系统分析员、系统管理员、用户这三方面人员的通力合作,以确定系统的功能要求、系统的性能要求、运行要求以及将来可能提出的各种新的要求。可行性研究的阶段产生的文档,特别是数据流图是需求分析的出发点。数据流图中以划分出系统必须完成的基本功能,在需求分析阶段系统分析员将仔细研究这些功能并进一步具体化。需求分析的结果是系统开发的基础,是整个项目的起点,关系到工程的成败的和软件产品的质量。因此,必须用行之有效的方法对软件需求进行严格的审查验证。小区能源水、电、煤气系统需要满足来自三方面的需求,这三个方面分别是系统得操作员、系统开发人员和业主。操作员对小区能源管理系统登陆,身份认证,权限控制,信息查询;操作员对业主的录入,为业主安装表,抄表人员对表读数录入,收费人员针对表读数的情况进行收费操作,并会输出收费收据;业主欠费时,系统提供催费功能;业主对水、电、煤气用量查询,费用查询和相应得报表输出;系统安全保障备份、还原数据库;在有修改操作的时候纪录操作日志,包括才作时间、操作人。 操作员可以根据名称和密码登陆到系统,此时系统会获得操作员预先赋予的权限,针对相应得权限可以控制操作员是否有可以使用相应的功能;针对密码采用了加密机制,存入数据库后是加密的字符串,在登陆认证时将加密字符串解密后进行比较,所以不但可以满足操作员登陆时的认证要求,还保护了操作员的个人隐私。操作员根据权限配置的不同,可以具有安装表,抄表,收费,费用查询的功能可以得到详细的分工,安装表时,表编号时唯一标记一块表的id,由系统动态生成,无重复,安装表时候还需要录入表的原始底数。抄表时,根据原始底数和目前表的读数,根据系统中事先设置好的收费类型(个人和公司),核算用户应该交费的金额,并将此表标记为未交费状态。收费时,根据实现核算好的金额收取费用,并输出收据。将此表的状态设置为已经缴费,直到下次抄表。当业主在抄表之后一直没有缴费,这个时候系统可以将未交费的表信息罗列出来,并可以按照小区的单元号来产生相应的催缴报表。可以为业主提供近期用量和收费的信息,纪录何时交费,缴费金额等相关信息并可以输出报表。安全策略方面,系统提供了备份和恢复数据库的功能,并在执行修改操作的时候纪录相应得日志,极大地保证了系统得稳定性和安全性。3.2 数据流图数据流图描绘系统的逻辑模型,图中没有任何物理元素,描绘的是信息在系统中流动和处理情况,表达简洁明了,即使不是专业的计算机技术人员也容易理解,所以是极好的信息传递工具。此外设计数据流图只需要考虑系统必须完成的基本逻辑功能,完全不需要考虑如何具体地实现这些功能。画数据流图的基本目的是利用它作为交流信息的工具。分析员把他对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认。由于在数据流图中通常仅仅使用四种基本符号,而且不包括任何有关物理实现的细节,因此,绝大多数用户都可以理解和评价它。从数据流图的基本目标出发,可以考虑在一张数据流图中包括多少个元素合适的问题。一些调查表明,如果一张数据流图包含的处理多于9个,人们就难于领会它的含义了。因此数据流图应该分层,并且把功能及数据流图细化后得到的处理超过9个时,应采用划分图的方法,也就是把每个主要功能都细化一张数据流分图,而原有的功能级数据流图用来描绘系统的整理逻辑概貌。3.2.1 小区能源管理系统的数据流图
3.2.2 信息录入数据流图 图 3—2信息录入数据流图3.3 数据字典数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素定义的集合。任何数据字典最主要的用途都是为系统的功能实现而服务,数据字典的作用也正是在软件分析和设计过程中给人提供关于数据的描述信息。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严谨,然而没有数据流图数据字典也难于发挥作用。只有数据流图和对数据流图精确的定义的数据字典放在一起,才能共同构成系统的规格说明。 由于数据元素繁多只对其中主要的元素定义加以说明。数据字典的主要用途是作为分子阶段的主要工具。在数据字典中建立一组严密一致的定义很有助于改进分析员和用户之间的信息交流,因此将消除很多可能的误解。数据字典包含的每个数据元素的控制信息是很有价值的。因为列出了使用一个给定的数据元素所有程序,很容易估计改变一个元素将产生的影响,并且能对所有受影响的程序或模块做出相应改进。以下是数据流图中主要元素的数据字典卡片:
 
Delphi小区能源管理系统第4章 数据库设计4.1概念设计在概念设计阶段中,设计人员从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式。然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制。利用ER方法进行数据库的概念设计,可分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局模式,最后对全局ER模式进行优化,得到最终的模式,即概念模式。ER模型中包括“实体”、“联系”和“属性”等三个基本成分,下面分别介绍这三个基本成分:1. 实体实体是客观世界中存在的且可相互区分的事物。实体可以是人也可以是物,可以是具体事物,也可以是抽象概念。例如,职工、学生、课程、老师等都是实体。2. 联系客观世界中的事物彼此间往往是有联系的。例如,教师与课程间存在“教”这种联系,而学生与课程间则存在“学”这种联系。联系可分为三种,分别是一对一联系、一对多联系和多对多联系。3. 属性属性是实体或联系所具有的性质,通常一个实体有若干个实体属性来刻画。联系也可能有属性。ER模型的“联系”用于刻画实体之间的关联。一种完整的方式是对局部结构中任意两个实体类型,依据需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系。若有联系,进一步确定是1:N,M:N,还是1:1等。还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等。
本系统的ER模型如下:图4—1 ER模型4.2逻辑设计通过对本系统各方面功能特点的研究和讨论、对SQL Server 2000数据库的特点及性能的分析,最终选用SQL Server 2000数据库管理系统进行数据库的设计,另外本系统是基于C/S 模式下的管理系统。此小区能源管理系统的数据库中包含有7个表,他们分别为:czyinfo、yzxx、bxx、cbsfxx、BAKcbsfxx、SFLX、LogTabczyinfo:记录操作员的信息,用于用户登录。Bxx:存储表的基本信息,安装时间,底数。yzxx:记录业主的基本信息,包括小区名和具体房间。cbsfxx:记录抄表信息和收费信息。BAKcbsfxx:记录业主的缴费历史纪录。SFLX:记录表针对表类型和业主类型的收费。LogTab:记录操作员的操作日志。下面分别介绍:czyinfo(ID、姓名、密码、权限) 图4—2  操作员信息表Bxx(编号、类型、所属业主、代码、表名称、表底数、单价金额、安装日期) 图4—3 表信息表yzxx(业主代码、业主名称、电话、入住时间、小区、楼、单元、房间、备注、抵押金) 图4—4  业主信息表cbsfxx(ID、小区、楼、单元、房间、业主姓名、单价、表类型、单位、表名称、表代码、原始表数、目前表数、实际用量、金额、抄表日期、缴费日期、抄表人、签收人) 图4—5抄表缴费信息表SFLX(业主类型、标类型、类型单价金额) 图4—6 收费类型表LogTab(登录时间、操作时间、操作员、操作信息) 图4—7 日志表
 
Delphi小区能源管理系统物理设计数据库在物理设备上的存储结构、存储方法和存取方法等称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据库模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。在物理设计过程中主要涉及系统的设计方案。数据库的物理设计通常分为两步:1. 确定数据库的物理结构,在关系数据库中主要指存储方法和存储结构;2. 对物理结构进行评价,评价的重点是时间和空间效率。我将数据分为两个盘存储,D盘主要存储该系统经常使用的数据,E盘则存储一些不是经常使用的数据,和这个数据库的备份。
第5章 程序设计与实现5.1 功能设计经过需求分析阶段的工作,系统得组成已经很清楚了,现将系统根据前期的需求分析划成功能模块,进行总体设计,其中一项重要任务是设计软件的逻辑结构,也就是要确定系统中每个功能模块是由哪些功能子模块组成,以及这些模块相互间的关系。总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。然后分析员从这些供选择的方案中选取若干个合理的方案,然后为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素。在进行软件结构设计时应该遵循的主要原理是模块独立性原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成。总体设计中的模块的划分根据软件工程的原则要符合高内聚合低耦合。模块粒可以小到函数、事件,大到窗口、程序模块划分完后,就可以开始设计了。总体设计的原则:全面性:考虑到不同用户的不同需求,力争满足所有用户的操作习惯,使系统适合用户需求。规范性:本系统遵循软件设计思想进行设计,遵循数据库的原理进行数据库开发。科学性:既有先进技术,又要考虑到今后的可扩容性,留有可以扩充的空间又选择相对成熟的技术。实用性:根据实际情况,考虑用户的需求,设计友好且易于操作的界面。安全性:在设计数据库的时候,充分利用操作系统和数据库的安全性,使之与应用系统的安全有机的结合起来,从而确保整个系统的安全性。5.2 模块设计1. 操作员登记功能用途:记录操作员个人信息记。操作权归属:系统管理员。主要数据:ID、姓名、密码、权限等内容。基本操作:添加、删除、更新记录、设置权限。
图5—1 能源管理系统功能图 所在位置:添加操作员窗体。其它说明: ID是操作员的唯一标示,姓名和密码用作操作员登陆系统时的身份验证依据。权限管理实完成在操作员登录时,为当前操作员分配相应得权限。2. 系统登陆功能用途:进入系统之前的身份验证。操作权归属:已经登记的操作人员。主要数据:管理员ID、密码。返回数据:权限。内部操作数据:停用状态。基本操作:数据输入、确定和取消。所在位置:启动系统过程中的登陆对话框。其它说明:系统登陆的过程也就是对系统的人员进行的身份验证的过程,由此可以防止非法用户进入系统。3. 业主信息功能用途:记录业主相关信息,可以删除和修改。操作权归属:具有该操作权限的操作员。主要数据:业主代码、名称。基本操作:添加、删除、更改记录(剩下最后一个操作员时不允许被删除)。所在位置:业主添加和业主查询修改。其它说明:业主代码,具有唯一性。(可以通过代码区分业主类型)。4. 表信息功能用途:记录已经登记的业主所拥有的表信息。操作权归属:具有该权限的操作员。主要数据:表代码,表类型,所属业主,表底数,安装时间。基本操作:安装表,修改表,查询表状态。所在位置:安装表、表信息查询窗口。其它说明:表编码,具有唯一性,表编码可以区分表的类型(水、电、煤气)在表欠费状态下无法被删除。5. 抄表信息功能用途:记录用户阶段能源用量。操作权归属:具有该权限的操作员。主要数据:id,表代码,抄表日期,抄表人,表底数,目前底数,单价,金额。基本操作:抄表,修改抄表,删除抄表记录。所在位置:在操作员抄表窗口。其它说明:id为自动生成编号,具有唯一性。6. 业主欠费催缴功能用途:打印抄表之后存在欠费的表信息。操作权归属:具有该权限的操作员。主要数据:业主名,表编号,抄表日期,用量,单价,应缴费金额。基本操作:定义打印标题,警示语,发通知单位,产生报表,打印。所在位置:缴费通知窗口。其它说明:当没有缴费通知的时候无法生成报表。 7. 数据库信息功能用途:备份、恢复数据库的内容、删除历史数据。操作权归属:具有该权限的操作员。
 
Delphi小区能源管理系统主要数据:选择备份、恢复路径。经过身份验证后清理数据,均进行计费。基本操作:选择路径,完成备份、恢复。清除数据。所在位置:系统维护窗口。5.3 系统的详细设计详细设计阶段的根本目的是根据之前的整体设计,采用工具具体的实现目标系统,也就是说这个阶段的设计工作 ,应该得出目标系统的精确描述,从而字编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。在详细设计过程中将结合具体Delphi开发工具,实现之前规划好的各个功能模块。5.3.1 数据模块与ini文件的引入(DM.pas、confige.ini) 序号为了提高系统的可维护性,系统性,以及代码实现的易用性。此系统,将连接数据库,相应功能模块的数据集合统一创建一个数据模块(DataModule)上,同时系统的公共函数也同时写道这个单元中。连接数据库主要使用ADOc(ADOConnection)通过读取confige.ini文件中的配置信息完成连接;对于具体表操作采用ADODs(ADODataSet),没有返回结果集的操作使用ADOqry1(ADOQuery),执行一条Sql语句的话使用ADOcmd(ADOCommand)。Ini文件中存储着系统相关配置项目:其中dbpwd中为加密之后的字符串,登录时解密之后完成在使用其进行数据库连接。5.3.2 欢迎窗口的实现(Ufrmfirst.pas)欢迎窗口会让用户留下系统的第一印象,尽量美观,在开始窗体中加入了Image、Time、ProgressBar、Label组件。 图5—2 欢迎窗口5.3.3 用户登录窗体的的实现(UFlogin.pas)实现用户登录认证,在此窗体创建的时候,将已经注册的操作员全部添加到操作员Combobox中,注册过的操作员只要通过鼠标点选就可以实现输入,敲击回车可以将焦点移动到密码输入框,再敲击回车可以快捷登录。并且跟据用户名检查czyinfo表中的“权限”字段,按照权限的描述赋予该操作员相应得使用权限。具体实现思想:当用户确定了身份和密码,确定登录的时候,系统会将输入的密码加密之后与czyinfo表中的记录进行比较,如果有此条记录认为登录成功,返回相应得权限。 图5—3 系统登陆
此外次登录窗口对登录次数作了控制,如果三次登录失败就会自动退出系统,防止恶意破解。如果认证通过将本身释放(action:=cafree),主窗口显示。当输入用户名和密码电击确定onclick事件中代码:procedure TFlogin.BitBtn1Click(Sender: TObject);//登陆按钮电击事件儿。var sqltmp:string;begin   with dm.ADOqry1 do//使用dm上的ADOqry1控件完成登陆操作。   begin      Close;      SQL.Clear;      sqltmp:= 'select * from czyinfo where name='+''''+ComboBox1.Text+''' and  pwd='+''''+dm.Decrypt(edit1.text,'love')+'''';      sql.Add(sqltmp) ;      Open;   end;   if not(dm.ADOqry1.RecordCount >0) then    begin      showmessage('用户名or密码错误');      i:=i+1;      if i>2 then//失败登陆三次,系统自动退出。        begin               showmessage('登陆次数超出允许值!');               Application.Terminate;        end;      end   else     begin系统流程图如下: 图5—4登陆系统流程图//为系统全局变量user、purview、pwd赋值操作。dm.Guser:=ComboBox1.Text;//dm.ADOqry1.FieldByName('name').AsString;      dm.Gpurview:=dm.ADOqry1.FieldByName('purview').AsString;      dm.Gpwd:=edit1.Text;     //初始化statusBar。     frmmain.initstatusBar;//调用了frmmain单元的一个公共方法:initstatusBar。     self.close;//关闭自己     end;
 
Delphi小区能源管理系统5.3.4 主窗体的实现(Ufrmmain.pas)    本窗体是各个功能模块的入口,界面美观,操作方便快捷尤为重要。本系统提供更换背景图片的功能。针对常用的菜单项目提供了热键设置功能。 图5—5  小区能源管理系统主窗体
本窗体包含系统的几大模块:基本录入,查询修改,抄表收费,系统维护,帮助。主要代码是实现权限的认证和调用窗体的创建显示工作。代码介绍:procedure Tfrmmain.N31Click(Sender: TObject);begin  if frmaddczy.getTorF(22,DM.Gpurview) then//认证时候否具有这个窗体的使//用权限   begin    //Do SomeThing here ......    Application.CreateForm(TfrmSFJS, frmSFJS);//如果有使用权限,创建此窗//体。    frmSFJS.ShowModal;//以独占的方式显示此窗体。   end else   begin    showmessage('您好,您无权使用此功能!');//如果没有使用的权限提示。   end;实现登陆认证权限的函数代码://根据字符数组中一个字符位来返回true or false,1-true 0-false;function Tfrmaddczy.getTorF(i_charr:integer;Oorl:string):boolean;begin  //利用字符串截取函数,如果此为为'1',返回true。  if (copy(Oorl,i_charr,1)='1') then     begin       result:= true;     end  else     begin       result:=false;     end;end; 5.3.5 业主信息录入(Ufrmaddyz.pas)实现小区业主登记功能。其中AUTO代码只需要选择业主类型,系统自动生成。这项操作是安装表,抄表收费的前提条件。业主姓名、等信息需要手工添加,在小区名称处只要输入一次后,在下次显示这个窗体的时候就会动态刷新到这个combobox中,通过鼠标选择即可实现录入。 图5—6  业主信息录入分类窗体
其中点击[录入]按钮的代码:procedure Tfrmaddyz.BitBtn1Click(Sender: TObject); var i:integer;begin//确认添加按钮按下的时候做下面的事情。//首先,获取这个房间的信息,是不是已经被其他业主占用,如果没有被占//用,则继续。if GetRoomStatus(ComboBox4.Text,ComboBox1.text,ComboBox2.text,ComboBox3.text) then begin//再,判断信息输入框是否为空,如果不为空则继续。 if ((datetostr(DateTimePicker1.Date)<>'') and (LabeledEdit1.text<>'') and (LabeledEdit3.Text<>'') and(LabeledEdit2.Text<>'') and (ComboBox4.Text<>'') and (ComboBox5.Text<>'') and (ComboBox1.Text<>'') and (ComboBox2.Text<>'') and (ComboBox3.Text<>'')) then   begin    try     begin//采用dataset的append……..post方法,向yzxx表中插入一条数//据。      dm.ADODs2.Active :=false;      dm.ADODs2.CommandText :='select * from yzxx';      dm.ADODs2.Active :=true;      dm.ADODs2.Append;      dm.ADODs2.FieldByName('yzdm').Value:=LabeledEdit1.text;      dm.ADODs2.FieldByName('yzmc').Value:=LabeledEdit3.Text;      dm.ADODs2.FieldByName('yzdh').Value:=LabeledEdit2.Text;      dm.ADODs2.FieldByName('yzrzsj').Value:=datetostr(DateTimePicker1.Date);      dm.ADODs2.FieldByName('yzxqh').Value:=ComboBox4.Text;      dm.ADODs2.FieldByName('yzlh').Value:=ComboBox1.Text;      dm.ADODs2.FieldByName('yzdyh').Value:=ComboBox2.Text;      dm.ADODs2.FieldByName('yzfjh').Value:=ComboBox3.Text;      dm.ADODs2.FieldByName('yzyff').Value:=ComboBox5.Text;      dm.ADODs2.FieldByName('bz').Value:=Memo1.Text;      dm.ADODs2.post;      dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'添加业主成功->'+LabeledEdit3.Text);//插入成功,向logtab表中写入一条记录。      //清楚comb中的信息      ComboBox4.Clear;      //重新读取小区名。       FormShow(nil);      end    except      showmessage('数据库操作失败');      abort;    end;     end  else
 
Delphi小区能源管理系统业主信息录入流程图
  begin      showmessage('信息不能为空,''*''号标记为必添项');//当有输入框为空状态的时候,提//示此信息      abort;    end; for i:=1 to 100 do     begin      ProgressBar1.Position:=i;     end;     showmessage('业主信息添加成功');//控制progressbar状态,让系统更加人性化。     ProgressBar1.Position:=0;     LabeledEdit1.text:='';     LabeledEdit3.Text:='';     LabeledEdit2.Text:='';     ComboBox4.Text:='';     ComboBox5.Text:='';     Memo1.Text:='';   end    else     begin       showmessage('此房间已经分配,请核实房间号');     end;end;5.3.6 安装表(UFrmAZB.pas)
通过上面步骤注册一个业主之后,根据业主的需求可以为之安装水表、电表、煤气表。此功能窗体实现思路:选择表类型的时候表编号系统自动生成(E、W、G开头分别代表电水煤气)(dm.CreateStreamyNo产生不重复id),一个表确定之后,选择这个表的所有者,通过鼠标选择就可以获得已经注册的任意一个业主,此时系统自动查找到相应得信息,如:具体住处等。表底数必须手工录入,默认情况为0。同时提供修改删除功能,标在欠费状态无法被删除。
 图5—8  安装表窗体
点击[确定添加表]按钮完成一条表信息的录入,其代码为:procedure TFrmAZB.Button1Click(Sender: TObject);//点击确认添加表的时候通过判断三个//radirbutton的状态为不可用的情况,把三个按钮状态再设置成可用状态,设置为不可用是//避免在添加信息之后操作员修改了信息,录入时会产生不同的表编码,导致信息不准确。begin  inherited; if ((RadioButton1.Enabled=false) and (RadioButton2.Enabled=false) and (RadioButton3.Enabled=false)) then   begin    RadioButton1.Enabled:=true;    RadioButton2.Enabled:=true;    RadioButton3.Enabled:=true;    edit2.Text :='';   end else   begin    appendToBXX;//如果三个radiobutton状态为可用状态,则根据信息添加表。   end;end;procedure TFrmAZB.Button2Click(Sender: TObject);begin  inherited;self.close;//关闭窗体本身。end;点击修改信息按钮完成针对一条信息的修改工作具体情况使用adodataset的edit和post方法实现,点击[修改信息]按钮代码实现:procedure TFrmAZB.EditToBXX; var i:integer;tmpbh:string;begin if ((edit1.text<>'') and(getblxForsfdj<>'') and (ComboBox1.text<>'') and (ComboBox3.text<>'') and (edit4.text<>'') and (edit2.Text<>'') and (ComboBox2.Text<>'') ) then   begin //getAnddisplaybxx; ComboBox2.Clear; dm.AddComboBoxItems('select * from sflx where yzlx='''+getyzlxForsfdj+''' and blx= '''+getblxForsfdj+'''','lxdjje',ComboBox2); try  begin   with dm.ADODs4 do    begin       edit;//select bbh as 表编号,blx as 表类型,yzmc as 业主名称,yzdm as 业主代//码,bmc as 表名称,bds as 表底数,djje as 单价金额,scjfrq as 安装时间 from //bxx';       tmpbh:=FieldByName('表编号').Value;       FieldByName('表类型').Value :=getblxForsfdj;       FieldByName('业主名称').Value :=ComboBox1.text;       FieldByName('业主代码').Value :=ComboBox3.text;       FieldByName('表名称').Value :=edit4.text;       FieldByName('表底数').Value :=edit2.Text;       FieldByName('单价金额').Value :=ComboBox2.Text;       FieldByName('安装时间').Value :=datetimeToStr(now);    for i:=1 to 100 do     begin      ProgressBar1.Position:=i;     end;     post;    end;  dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'修改表成功->'+tmpbh);  edit1.text:='';  edit4.Text:='';  showmessage('修改成功');  ProgressBar1.Position:=0;  end;  except   begin     ShowMessage('数据库操作失败操作失败');   end;   end;   end
 
Delphi小区能源管理系统5.3.7 抄表员抄表(UfrmcbyCB.pas)通过前两个步骤地操作,业主具备相应得能源表,此模块完成,对表读数的录入,可以快捷的从水表、电表、煤气表的超标界面进行切换。设计思想:首先,确定要抄的表的代码,同样可以通过三种方式:表位置、拥有表的业主、安装时间。根据这个代码检索原始表数,如果是第一次超表,原始表数为安装表时候的表底数,如果不是第一次抄表,将上次抄表的目前表数作为本次抄表的原始表数,目前表数需要手工添加进去,系统会根据表类型、业主类型检索到相应得单价金额,根据目前表数和原始表数确认用量,最后计算出应该缴费金额。电击[确定]实现抄表的提交,同时提供删除功能。 图5—9  抄表员抄表窗体
确定按钮点击实现代码如下:procedure TfrmcbyCB.BitBtn6Click(Sender: TObject);//bibtn6、4、8分辨完成三种能源的抄表。var djjetmp:string;begin  inherited;//首先判断各个输入窗口是否为空,如果为空提示无法抄表  if ((combobox13.text<>'') and (combobox14.text<>'') and (combobox15.text<>'') and (combobox16.text<>'') and (combobox17.text<>'') and (combobox18.text<>'') and (edit9.text<>'') and (edit10.text<>'') and (edit11.text<>'') and (edit12.text<>'')) thenbegin//判断时候否为第一次抄表,     if not GetYNfirst(combobox18.text,'W') then     begin //如果是第一次抄表,采用向此表中添加一条数据的策略。      try        begin       with dm.ADODs2 do         begin//'select bmc as 表名称,yzxm as 所属业主,dj as 单价,blx as 表类型,dw as 单位,ysbs as 原始表数,mqbs as 目前表数,sjyl as 实际用量,je as 金额,cbrq as 抄表日期,jfrq as 缴费日期,'+//'cbr as 抄表人,qsr as 签收人,xqh as 所在小区名,lh as 楼号,dyh as 单元号,fjh as 房间号,bdm as 表代码 from cbsfxx where blx=''水''';           append;//采用append方式插入           FieldByName('表名称').Value:=bbhgetbmc(combobox18,djjetmp);           FieldByName('所属业主').Value:=combobox17.Text;           FieldByName('单价').Value:=djjetmp;           FieldByName('表类型').Value:='水';           FieldByName('单位').Value:='吨';//安装表单元中有个函数可以返回。           FieldByName('原始表数').Value:=edit9.text;           FieldByName('目前表数').Value:=edit10.text;           FieldByName('实际用量').Value:=edit11.text;           FieldByName('金额').Value:=edit12.text;           FieldByName('抄表日期').Value:=datetimeToStr(now);           FieldByName('缴费日期').Value:='2006-01-01 00:00:00';           FieldByName('抄表人').Value:=dm.Guser;           FieldByName('签收人').Value:='未曾缴费';           FieldByName('所在小区名').Value:=combobox13.Text;           FieldByName('楼号').Value:=combobox14.Text;           FieldByName('单元号').Value:=combobox15.Text;           FieldByName('房间号').Value:=combobox16.Text;           FieldByName('表代码').Value:=combobox18.text;           FieldByName('交费次数').Value:='';           FieldByName('上次缴费').Value:='0';           FieldByName('上次找零').Value:='0';           FieldByName('代收费业务名').Value:='暂无';           FieldByName('代收费金额').Value:='0';           post;//插入结束post保存           setProccessBar;dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'抄水表成功(insert)->'+combobox18.text);         end;        end;        except         begin          showmessage('数据库操作失败');         end;        end;      end      else//如果不是第一次录入则采用edit方式修改这条数据。       begin         try        begin       with dm.ADODs2 do         begin           active:=false;           CommandText :='select bmc as 表名称,yzxm as 所属业主,dj as 单价,blx as 表类型,dw as 单位,ysbs as 原始表数,mqbs as 目前表数,sjyl as 实际用量,je as 金额,tmp1 as 上次缴费,tmp2 as 上次找零,tmp3 as 代收费业务名,tmp4 as 代收费金额,cbrq as 抄表日期,jfrq as 缴费日期,'+             'cbr as 抄表人,qsr as 签收人,xqh as 所在小区名,lh as 楼号,dyh as 单元号,fjh as 房间号,bdm as 表代码 from cbsfxx where blx=''水'' and bdm='''+ComboBox18.text+'''';           active:=true;           edit;           FieldByName('原始表数').Value:=edit9.text;//如果不是第一次抄表,首先将原始表数为上次的目前表数。           FieldByName('目前表数').Value:=edit10.text;//将目前表述           FieldByName('实际用量').Value:=edit11.text;
 图5—10  抄表流程图
  FieldByName('金额').Value:=edit12.text;           FieldByName('抄表日期').Value:=datetimeToStr(now);           FieldByName('签收人').Value:='未缴费';           //FieldByName('缴费日期').Value:='2006-01-01 00:00:00';//将在操作员收费的时候对此数值进行修改,           //通过判断抄表时间和收费时间的先后,判断业主是否缴费,抄表大于缴费:没有收费;抄表小于缴费:已经缴费。           FieldByName('抄表人').Value:=dm.Guser;           post;           dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'抄水表成功(update)->'+combobox18.text);           setProccessBar;         end;        end;        except          begin
 
Delphi小区能源管理系统 showmessage('数据库更新失败');          end;         end;       end;      end  else    begin     showmessage('信息不能为空');    end;  initdmadods2;   ProgressBar1.Position:=0; end;5.3.8 操作员管理、权限设置(Ufrmaddczy.pas)实现系统操作员的添加删除功能,实现操作员的权限配置功能。实际思想:当操作员登录成功之后,系统会使用一个全局变量来存储这个权限字段(111111111111111…)22位的字符串,每位代表一个权限选项,1代表具备,0代表不具备。当打开此窗口的时候,如果此用户有配置权限的权利,配置权限cheakbox为可用状态,否则此处不可电击,如果具备此权限,点击[配置权限]就可以弹出权限配置窗口,完成权限的配置,提交设置完成权限字符串的写回操作。在下次操作员登录的时候被修改的操作员就具备了设置的相应权限。确认增加按钮按下执行代码://确认添加一个操作员,默认权限字符串为:000001000001100000000000procedure Tfrmaddczy.Button1Click(Sender: TObject);begin  edit1.text:=dm.Checkuser(edit1.Text);  sleep(100);  if ((Edit1.Text <>'') and (Edit3.Text=Edit2.Text) ) then//如果都不为空值 begin  try   begin   dm.ADODs4.Append;//采用append方式实现插入。   dm.ADODs4.FieldByName('name').Value :=Edit1.Text;   dm.ADODs4.FieldByName('pwd').Value :=dm.Decrypt(Edit3.Text,'love');   dm.ADODs4.FieldByName('purview').Value :='0000010000011000000000000';
 图5—11  操作员管理窗体   dm.ADODs4.FieldByName('tmp1').Value :=datetimetostr(DateTimePicker1.DateTime);   dm.ADODs4.Post;   showmessage('添加成功');   dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'增加操作员成功');   end;  except    showmessage('数据库操作异常!');  end;endelseshowmessage('添加失败,操作员帐号不能为空,检查密码确认是否正确');end;//完成设置一个操作员的权限,当登陆操作员具有修改权限的权限时,点击[配置权限]系统可以产生权限配置窗口,通过鼠标选择完成权限的设置,[确定权限设置]按钮按下的时候执行的代码为:procedure Tfrmaddczy.Button13Click(Sender: TObject); var StrPurview,tmpname:string;begin    //通过checkbox点击,获取权限字符串。    StrPurview:=GetpurviewString;    DM.ADODs4.Edit;    tmpname:=DBGrid1.DataSource.DataSet.FieldByName('name').Value;    DBGrid1.DataSource.DataSet.FieldByName('purview').Value:= StrPurview;    dm.ADODs4.Post;    dm.SetLogFile(dm.Glogontime,datetimeTostr(now),dm.Guser,'修改['+tmpname+']的权限->'+StrPurview);    if (DBGrid1.DataSource.DataSet.FieldByName('name').Value=dm.Guser) then      begin       dm.Gpurview :=StrPurview;       showmessage('您设置了当前用户权限,设置立即生效!');      end     else      begin       showmessage('权限设置成功!');      end;end;5.3.9 备份恢复数据库(UFrmshujkHuiFu、UFrmShuJuBeiFen)为了提高系统安全性,提供了这两项功能。备份数据库:选择要备份的路径点击[备份]系统随机产生备份的文件名.dat。点击[备份]的代码为://完成数据库的备份工作procedure TFrmShuJuBeiFen.Button1Click(Sender: TObject); var adq:TADOQuery ;     DBName,BackUpFileName,username,pwd:string;//定义变量begin  ProgressBar1.Position:= 10;  dbname:=dm.getini('config','dbname','');    try//使用ShellTreeView1完成备份路径的制定,创建备份出文件的名字BackUpFileName:=ShellTreeView1.Path+'\'+dm.CreateStreamyNo+'sqlbackup.dmp';    Except//如果上面的抱错了,执行下面的BackUpFileName:=ShellTreeView1.Path+dm.CreateStreamyNo+'sqlbackup.dmp';    end;//showmessage(BackUpFileName); try    ADQ:=TADOQuery.Create(NIL);    adq.Connection :=dm.ADOc ;    ADQ.sql.clear;//具体的备份语句    ==========ADQ.SQL.Add('Backup DataBase '+DBName+' To disk = '''+BackUpFileName+''' With Nounload');    ADQ.execsql;//执行这个sql语句    ADQ.sql.clear;    ProgressBar1.Position:= 100;    showmessage(' 数 据 备 份 成 功 !');  dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'数据库备份成功');  FINALLY   ADQ.Free;  end;end;恢复数据库:选择备份的文件,点击[恢复]系统会将备份的数据恢复到现用的数据库中。点击[恢复]按钮代码为:procedure TFrmshujkHuiFu.Button2Click(Sender: TObject);//恢复数据库 var  BackUpFileName,DBName:string;      adq:TADOQuery; begin ProgressBar1.Position := 10; BackUpFileName:=ShellTreeView1.Path; dbname:=dm.getini('config','dbname','');//从ini文件中获取数据库名字
 
Delphi小区能源管理系统ProgressBar1.Position := 30; try  adq:=TADOQuery.Create(nil);//动态创建adoquery,用它来执行备份sql语句。  adq.Connection :=dm.ADOc ;//创建数据库联接  adq.sql.clear;//sql赋值开始==============  adq.SQL.Add('Use master');//使用master数据库完成恢复  adq.SQL.Add('exec  killdataspid   '+DBName);//杀掉所有其他联接//下面语句,完成数据库名为:DBName的数据库恢复,恢复文件是BackUpFileName路径//下。  adq.SQL.Add('RESTORE DATABASE '+DBName+' FROM Disk= '''+BackUpFileName+'''');//sql赋值结束==============  adq.execsql;//执行这条sql语句  adq.sql.clear;//清空sql  ProgressBar1.Position := 100;  //dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'恢复数据库成功');  showmessage(' 恢复数据库成功!');  except   showmessage(' 请选则资源文件!');  end;  adq.Free;end;5.3.10 系统计本信息配置(UfrmLXsz.pas)1、 系统名称设置:实现思想,通过修改config.ini文件中的内容,系统在启动时读取相应得配置信息,完成系统窗体名字的动态设置。使系统更加人性化。[设置]按钮的代码实现为:procedure TfrmLXsz.BitBtn3Click(Sender: TObject); begin  trybegindm.setini('application','formcaption',edit1.Text);//设置配置文件confige.ini 图5—12 备份恢复数据库窗体图5—13  设置系统名称//文件   dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'修改系统名字成功->'+edit1.Text);    showmessage('设置成功!');   end;   except    begin     showmessage('设置失败!');    end;  end; end;
2、 单价设置:实现思想和方法,针对基本信息配置表SFLX进行修改,系统在抄表收费的时候根据此表中的信息和实际使用的量来完成实际金额的计算。系统中不可获却得以部分。具体费用项如下:
 图5—14 设置单价信息 [设置]按钮点击之后代码实现为:procedure TfrmLXsz.Button1Click(Sender: TObject); var i:integer;yzlx,blx:string;begin if ((ComboBox1.text<>'') and (ComboBox2.text<>'')) then  begin  try   begin    with DataSource1.DataSet do    begin     edit;      yzlx:=FieldByName('业主类型').Value;      blx:=FieldByName('表类型').Value;      FieldByName('单价为').Value:=ComboBox3.text;//修改对应得单价。     post;dm.SetLogFile(dm.Glogontime,datetimetostr(now),dm.Guser,'修改单价成功->'+yzlx+blx+ComboBox3.text+'元');//对此操作写入日志表。    end;    for i:=1 to 100 do     begin      ProgressBar1.Position:=i;     end;     showmessage('修改成功');    end;   except    begin     showmessage('修改失败');    end;  end;  ProgressBar1.Position:=0; end  else   begin    showmessage('选项为空,未经修改');   end;end;
3、 热键的设置:设计思想和方法:针对常用的几个菜单项,加入了热键的功能,配置信息存储在config.ini文件中,系统登陆时读取相应得配置,实现热键设置。
 
Delphi小区能源管理系统[确认设置]按钮点击之后代码实现为:procedure TfrmLXsz.Button2Click(Sender: TObject);begin if ((edit2.text<>edit3.text) and (edit2.text<>edit4.text) and (edit2.text<>edit5.text) and (edit3.text<>edit4.text) and (edit3.text<>edit5.text) and (edit5.text<>edit4.text)) then    begin      dm.setini('SystemshortCuts','cbycb',edit2.Text);      dm.setini('SystemshortCuts','czysf',edit3.Text);      dm.setini('SystemshortCuts','AZB',edit4.Text);      dm.setini('SystemshortCuts','yzxx',edit5.Text);      //设置完成之后立刻生效。      frmmain.getHotKey;      showmessage('快捷键设置成功');    end else IF ((edit2.text='') or (edit3.text='') or (edit4.text='') or (edit5.text='')) then    begin      dm.setini('SystemshortCuts','cbycb',edit2.Text);      dm.setini('SystemshortCuts','czysf',edit3.Text);      dm.setini('SystemshortCuts','AZB',edit4.Text);      dm.setini('SystemshortCuts','yzxx',edit5.Text);       //设置完成之后立刻生效。      frmmain.getHotKey;      showmessage('快捷键设置成功!');    end      else    begin      showmessage('快捷键重复,请重新设置!');    end;end;5.3.11 清除历史数据(UFrmQCSJ.pas)设计思想:用户系统测试期间或者长久使用之后,数据库中会累计很多的数据,提供此功能来初始化系统,具体完成除了日志数据和操作员数据之外所有数据的清理工作,并记录日志,操作不可逆,通过adocommand执行要删除表的命令(例如:truncate table cbsfxx;)此权限慎重分配。
 图5—16  清除历史数据
[清楚……]按钮点击后代码实现:procedure TFrmQCSJ.Button1Click(Sender: TObject);begin if ((application.MessageBox('是否真的要清除数据?','确认信息',mb_okcancel)=idok) and CheckBox1.Checked) then    begin     //Do something here....      if Truncatee then//truncatee负责truncate ('bxx') ('yzxx') ('cbsfxx'); //('bakcbsfxx');       begin       dm.SetLogFile(dm.Glogontime,datetimetostr(now),DM.Guser,'清!除!历!史!数!据!');       ProBar('数据清除成功,写日志成功!');       end      else       begin        showmessage('数据库操作失败');       end;    end  else     begin     showmessage('操作被取消');    end;end;5.3.12 修改密码(UFrmChangepwd.pas)修改密码,实现思想,系统登陆之后,会设置一个全局变量保存此值,通过认证老密码之后才可以修改当前登陆操作员的密码,不可以修改别人的密码;接收密码的edit都是密码格式。点击修改的代码实现:procedure TFrmChangepwd.Button1Click(Sender: TObject); var tmpds:TADODataSet ;//声明一个tmpds。     tmpstr:string; begintmpds:=TADODataSet.Create(nil);//声明后需要动态创建。with tmpds do begin  Connection :=dm.ADOc ;//指定adoconnection 图5—17 当前用户密码修改
Active:=false;CommandText:='select * from czyinfo where name='''+dm.Guser+'''';  //获取,当前登录操作员的信息。  Active:=true; end; tmpstr:=dm.Encrypt(tmpds.FieldByName('pwd').asstring,'love');//通过取得到加密的密码,然后通过解密函数进行解密操作。获取原来密码。  if edit1.Text = tmpstr then  begin  if edit2.Text =edit3.Text then    with tmpds do       begin       edit;       Fieldbyname('pwd').Value :=dm.Decrypt(edit2.Text,'love');//修改之后,通过加密函数加//密,然后存储到数据库。       post;       showmessage('密 码 修 改 成 功');       self.Close;       end    else     showmessage('确认密码错误,请从新输入');    end  else  showmessage('旧密码输入错误,请重新输入');
 
Delphi小区能源管理系统5.3.13 锁定当前用户(UFrmLockuser.pas)锁定当前用户,实现思想和方法:当操作员短暂离开的时候可以利用此功能保证信息安全,通过对全局变量的认证来实现。采用窗体的ShowModal方法实现。当[返回工作台]按钮点击之后代码实现:procedure TFrmLockuser.Button1Click(Sender: TObject);begin//完成用户锁定功能; if dm.Gpwd = edit1.Text  then//判断你输入的和全局变量dm.Gpwd是否相同  begin   self.Close;//如果相同锁定窗体关闭,解除锁定。   edit1.Text:='';  end else   showmessage('     密码错误    ');end;5.3.14 更换背景图片(Ufrmmain.pas)设计思想和实现方法:此设计实现了,按自己的爱好设置系统得背景图片,此设置为全局设置,一经设置任何操作员登录后背景都将发生变化。使用OpenDialog获取图片要更换图片的全路径,并且存放到config.ini文件中,当系统登陆的时候读取相应得文件路径,主窗体上的image会根据这个路径加载 图5—20 更换背景图片当点击[打开]按钮时代码实现:procedure Tfrmmain.OpenDialog1CanClose(Sender: TObject;  var CanClose: Boolean);begin//修改ini文件中的路径名字,下次启动时加载此文件。dm.setini('application','background',OpenDialog1.FileName);showmessage('背景图片在下次登陆时更新');end;5.3.15 数据库连接配置程序(DBconfiger.exe)实现思想和方法:配置系统的配置文件config.ini,在系统的主窗体登陆的时候动态读取这个配置参数,并且在密码上面加入了加密机制。
 图5—21 设置数据库连接程序
点击[设置]按钮时代码实现:procedure TFconfig.BitBtn1Click(Sender: TObject); var tmpini:Tinifile;begin   tmpini:=TIniFile.Create(extractfiledir(application.ExeName)+'\confige.ini');    tmpini.WriteString('config','dbname',edit1.text);    tmpini.WriteString('config','dbusername',edit2.text);    tmpini.WriteString('config','dbpwd',Decrypt(edit3.text,'love'));    tmpini.UpdateFile;    tmpini.Free;    showmessage('设置成功,并退出!') ;    application.Terminate;end;5.3.16 更换用户(Login.pas)实现思想和方法:更新系统登陆之后的全局变量:操作员,密码和权限。此步骤和登陆窗体代码实现完全一样。 图5—22 等换用户窗口
小结,以上为系统得功能描述,具体代码可以在后面的[部分原代码]部分。 第6章 调试及测试在软件生命周期的每个阶段都不可避免地会产生差错。调试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的的关键步骤,它是对软件规格说明、设计和编码的最后复审。仅就调试而言,它的目标是发现软件中的错误,但是,发现错误并不是我们的最终目的。它的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。6.1 功能调试6.1.1 链接调试链接测试可分为两个方面:与数据库的连接调试;功能模块之间的连接调试。首先,连接数据库,如果连接数据库异常,如果异常系统会提示你检查数据库运行状态,并自动启动[数据库连接配置程序],修改保存数据库连接配置,然后再次登陆;保证系统能够正常登录,证明数据库连接调试正常。其次,登录成功后调试各个功能模块儿。在设计得好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来调试,而且通常比较容易设计检验模块正确性的调试方案。模块调试的目的是保证每个模块作为一个单元能正确运行,所以模块调试通常又成为单元调试。在这个调试步骤中所发现的往往是编码和详细设计的错误。6.1.2 数据库调试在管理系统技术中,数据库起着重要的作用,数据库为管理系统、运行、查询和实现用户对数据存储的请求等提供空间。在管理系统中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理由于本系统在数据库设计时考虑比较周全,再加上指导老师的细心指导,系统运行时数据库没有报错差生,发生的异常也已经通过delphi异常处理机制进行了相应的处理。
 
Delphi小区能源管理系统6.1.3 系统性能调整本系统窗体之间几乎无关联,所以窗体是通过动态创建的方式使用,系统登录成功后只创建了主窗口,在使用到某个模块的窗体是系统会自动创建。使用完毕后自动释放onclose event{ action=cafree;}。这样保证了,系统在运行期间占用较小的内存资源空间。6.1.4 安全性测试现系统采用先由具备操作员管理权限的操作员为新操作员登记,后经过授权的操作员输入正确的用户名和密码方可登陆。再加上操作员录入的密码是经过加密之后存储进数据库的,在作修改数据库操作的时候同时写下日志。所以,操作员对系统使用的环节是安全的。配置数据库连接中,设置用户名密码的时候也是通过加密之后记录到confige.ini文件中的。进一步完善了系统得安全性。系统提供了晚上的备份和恢复功能,数据库系统本身存在的安全隐患也可以规避。通过这这几方面的调试,我很好的提高了系统的性能,达到了所要达到的要求,可以说调试是非长成功的。   6.2 功能测试程序测试能证明错误的存在,但不能证明错误不存在。故为了系统的更加完善,系统详细地进行测试是很有必要的。本系统采用的是人工测试,并结合的黑盒测试的方法进行的。首先进行代码复审,检测编码和逻辑设计错误。此过程查处出了很多编译系统不能发现的错误。之后把程序看成一个黑盒,反复检查输入数据和输出数据,通过计算测试系统是否正确运行。最后,还借助了Delphi7.0提供的内置调试器帮助查找代码中的错误,利用这个调试器完成了普通的单步跟踪、断点设置、变量查看、设置条件断点等调试方法。最终,完成了以上工作后,系统编可以正式发布了。第7章  性能分析整个系统经过了前言、可行性分析、需求分析、数据库设计、程序设计、及调试几个阶段,已经实现了需求分析阶段小区管理系统应达到的要求。本题目是为锦州智能小区开发的一套小区能源管理系统。本系统结构合理,简单明了,美观大方并能够快速、准确的响应用户所进行的操作,系统管理员能很好的对数据库进行录入,修改,删除,查询等操作,稳定性好,安全性优良。使复杂繁琐的工作变得快速简单,使小区能源管理更加智能化、直观化、合理化。小区能源管理系统满足了来自各方的需求,提供了快捷方便的信息检索、录入、维护并可以产生相应得系统报表;实现了用户的安全加密;提供更加合理化、人性化的扶助功能。小区能源系统的引入能够极大程度提高操作元的工作效率,进一步加快了小区智能化的实施。 第8章 总结经过几个月的设计和开发,以Delphi为开发工具的智能小区能源管理系统基本开发完毕。其功能基本符合用户的需求,能够完成对水,电,煤气,小区物业等费用的查询,统计等操作,并提供了系统维护功能,可以实现对用户信息的添加,修改,删除等相关操作,对于数据的一致性问题也通过程序进行了有效的解决。在做毕业设计前,我对使用Delphi的软件开发的理解只停留在理论知识水平上,缺乏实际的软件开发经验。通过这次毕业设计的实际操作,使我把大学所学到的知识都贯穿起来了,形成了比较系统的知识结构,而且还锻炼了我的独立思考能力,增强了自学能力,使我对系统的开发有了比较全面的认识,对开发一个系统的工作流程有了感性的认识。这次毕业设计使我在数据库方面,编程技术方面有了长足的进步,这对我将来的发展有很大的帮助。但是由于毕业设计时间仓促,该系统还有许多不足的地方,例如功能还不是很完善,出错处理还不够等多方面问题。这些都有待进一步改善。 参考文献[1]徐国智 汪孝宜.SQL Server数据库开发实例精粹.吉林:电子工业出版社,2003-4[2]肖桂东.SQL Server疑难解析.吉林:电子工业出版社,2003-4[3]李真文.SQL Server2000开发指南.北京:北京电子出版社,2001-1[4]赵杰.SQL Server数据库管理设计与实现教程.北京:清华大学出版社,2004-3[5]张水平.SQL Server数据库应用技术.西安:西北工业大学出版社,2005-1[6]廖望.SQL Server案例教程.北京:冶金工业出版社,2004-7[7]袁鹏飞.SQL Server数据库应用开发技术.北京:人民邮电出版社,2001-6[8]陈平 褚华.软件设计师教程.北京:清华大学出版社,2004-7[9]李维.Delphi7高效数据库程序设计.北京:清华大学出版社,2003-1[10]周松辰.Delphi程序设计实战训练.北京:人民邮电出版社,2004-11[11]牛汉民.Delphi 7 高级应用开发教程.北京:科学出版社,2004-12[12]侯太平.Delphi数据库编程.北京:清华大学出版社,2004-8[13]储启明.Delphi7典型实例开发篇.北京:清华大学出版社,2003-7[14][美]  Borland David I .Borland Delphi 7 – Database Application Developers Book.Printed in the U.S.A. ,2005-1[15][美]  Microsoft Corporation.Microsoft® SQL Server™ 2000 DatabaseDesign and Implementation, Exam 70-229, Second Edition.2003-7
  • 上一篇资讯: 房地产估价报告
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师