一.本系统的意义
新的世界已经到来,在电子计算机技术发展日新月异的今天,计算机软件的应用早已深入到了各行各业,并发挥着它们巨大的潜力。随着企业,房户等一系列的改革,一切都在潮向社会化发展,管理体制也由过去的“全承包”向现在的“一体化,专门化”发展。为了人员的安全,社会的稳定,国家的持续发展,物业管理在起着举足轻重的作用。本物业管理系统提供对人员,住房,房产和收费信息的管理。为了有效管理和社会人员的方便,系统为管理员用户和普通用户提供了不同的功能。本系统具有一定的实用性。
本物业管理系统是在服务器上先安装Windows NT操作系统,并在NT系统下安装数据库系统SQL Server 7.0和建立人员、住房、房产、收费四个数据库。然后在NT操作系统下用Java编写不同的系统用户界面,后用JDBC/ODBC桥实现服务器上数据库和前端界面的连接。连接成功后,将Java编写的用户界面移植到客户端的Linux操作系统下,并用这个界面试图实现与服务器上NT系统下的数据库SQL连接。以达到在不同的操作系统下可以互相调用的目的,实现Java的重要特性:可移植性。
二.设计思想
2.1 当前数据库实现中存在的问题:
2.1.1 目前存在的问题----数据库的实现面向单一应用
在目前开发的一部分数据库应用软件中,程序员的主要任务是编写高质量的程序,对所使用的软件及数据库很少关注,这就面临数据库单一应用的问题。
2.1.2 数据库设计中存在数据完整性问题
数据库应用所提供的功能一般都比较安全,往往自成一个系统。但是当数据库不同后系统数据就会产生问题。
2.2 工具软件的介绍
2.2.1 Java语言的介绍
Java是一个由SUN公司开发成功的新一代编程语言,它的最大特点就是:使用它可在各式各样不同种机器,不同种操作平台的网络环境中开发软件,即SUN公司所宣扬的“一次编写,到处运行” 。
在SUN公司的“Java白皮书”中对Java有如下的定义:
Java: A simple, Object-oriented, distributed, robust, secure, architecture-neutral, portable, High-performance, multi-threaded, and dynamic language.(Java: 一种简单的,面向对象的,分布式的,健壮的,安全的,结构中立的,可移植的,高效性的,多线程和动态的语言)。
这个定义充分地表现了Java语言的特点。
- 简单性
Java是一种简单的语言。Java取消了其它的许多编程语言中十分繁琐的和难以理解的内容,例如C/C++中的指针,C++中类的多重继承等。Java语言在外观上让大多数程序员都感到很熟悉,这样程序员不需要经过长时间训练就能够学会使用这种新型的程序开发工具。Java要求的基本解释器约为40KB ,若加上基本的程序库,约为215KB。由于Java程序很小,因此在小型机上Java程序也能够很好地执行。
- 面向对象
Java是一种面向对象的语言。这里的“对象”是指应用程序的数据及其操作方法。Java程序的设计思想不同于C语言基于过程的程序设计思想。设计面向对象的程序需要将编程重点放在资料和接口上。
3. 分布式特性
Java是一种分布式的语言。Java有一个很周全的程序库,且很容易与HTTP和TCP/IP通信协议相配合。Java应用程序能在网络上开启并连结使用对象,就如同透过URL链接使用一个本地文件系统。利用Java来开发分布式的网络程序是Java的一个重要应用。
- 健壮性
用Java编写的程序在多种情况下都能稳定地执行。Java与C/C++最大的不同点是在于Java有一个专门的指针模型,它的作用是排除内存中的数据被覆盖和毁损的可能性。
- 安全性
Java是一种安全的网络编程语言。Java是被设计用于网络及分布的环境中的,所以Java程序的安全性自然是非常重要的。Java拥有数个阶层的互锁保护措施,能有效地防止病毒的侵入和破坏行为的发生。
- 结构中立性
众所周知,网络是由很多不同机型的计算机组合而成的。这些计算机的CPU和操作系统体系结构均有所不同。因此,要使一个应用程序可以在每一种计算机上都能够执行是很难的。所幸的是,Java的编译器能够产生一种结构中立的目标文件格式,这使得编译码能够在多数的处理器中执行。
- 可移植性
Java的源代码和C/C++的源代码一样具有可移植性,而且Java的可移植性在相比之下还要更强一些。只要有对应系统的解释器,Java程序就可以在所有的系统上执行。Java的原始资料形式的大小是被指定的,例如Java之所以一直用“float”来表示一个32位字节的IEEE754的浮点运算数字,正是因为绝大多数的CPU都有此共同特征。Java自带的程序库定义了一些可移植的程序接口,这使Java语言具备了很好的可移植性。
- 解释型语言
Java的源程序首先由编译器编译成字节码,之后再由解释器解释执行。Java解释器能直接在任何机器上执行Java字节码(Byte Codes),因此在进行程序链接时节省了时间,这对于缩短程序的开发过程有极大的帮助。
9. 高效性
Java字节码能迅速地转换成机器码(Machine Code)。Java的这种效能几乎与C/C++没有分别。用Java编制的Java小应用程序可以取代部分CGI脚本(CGI Scripts)的功能,但是考到效率方面的问题,在大多数的情况下很多客户端的基本操作还是由脚本语言来完成的。涉及到复杂算法的计算以及一些特别的效果,就可以由Applet或者ActiveX来完成。
10. 多线程性
Java语言具有多个线程,这对于交互回应能力和即时行为是有帮助的。
11. 动态性
Java比C/C++语言更具有动态性,更能适应时刻在变的环境。Java不会因程序库的更新而重新编译程序。
2.2.2 JDK的环境工具:
JDK是Java Developer’s Kit 的简称,意即Java的开发工具,这是旧的称呼,新的名称是Java 2 SDK,Standard Edition,V1.3简称为J2SE。
1. Javac-Java语言编译器
Javac 是Java语言的编译器,能够把用户由Java语言书中的程序编译成字节代码。
2. java-Java语言解释器
Java命令解释执行Java字节代码。
3. jdb-Java语言调试工具
jdb 命令用于调试Java语言编写的程序。
4. javah-C头文件和源文件生成器
javah命令从一个Java类中生成实现native方法所需的C头文件和C源文件,用作Java语言与C语言之间的连接。
5. javap-Java类文件反汇编器
javap对类文件进行反汇编,用于分解类的组成单无,包括方法,构造函数和变量等,也称为Java类分解器。
6. javadoc-Java API文档生成器
Javadoc从java源文件生成HTML格式的API文档。
7. Appletviewer-Java Applet小应用程序
Appletviewer命令使用户不通过www浏览器也可以运行Java语言编制的Applet.
2.2.3 JDK的使用
利用JDK编程,还需要一个文本编辑器,最简单的是Windows系统解释的记事本(NotePad)可以选择Ultraedit 或Editplus等工具。
1. 编写源文件:
源文件是一个利用Java语言编写的文本文件,可以在任何文本编辑器中来撰写或修改。
2. 将源文件编译成字节码文件
利用JDK中的Java编译器——javac,可以将源文件编译成Java虚拟机(JVM)能够解析的字节码文件。
3. 运行程序
利用JDK中的Java解析器,将字节码文件转化为你的系统能够理解的指令,加以执行。
2.2.4 JDBC简介
Java数据库连接JDBC(Java DateBase Connectivity)与ODBC(Open DataBase Connectivity)开放式数据库连接的概念和标准一样,两者都是为各种流行数据库提供无缝连接技术的。
JDBC利用java.sql包及其接口,类和异常事件,通过JDBC—ODBC桥可以对数据库进行操作,但数据库本身没有什么要求,不需要什么特别的命令,只需要同ODBC一样在服务器中设置ODBC数据源。
目前ODBC是存取关连式数据库最常用的应用程序接口,几乎所有平台都可适用,但Java不直接使用ODBC而执意要使用JDBC的理由如下:
1.ODBC是以C语言撰写的接口,从Java调用C语言的源生代码(native code)会有一些安全,稳定,移植等问题。
2.从ODBC的C语言应用程序接口所处的字符串常量与java的字符串常量转换结果可能不符需要。
3.ODBC不容易使用,即使简单的查询也得使用复杂的选项,不如JDBC易学易用。
4.使用ODBC时必须每台用户端计算机都要安装驱动程序和管理员,但JDBC在安装J2SDK时自动安装完成,并可移植到所有网络、计算机与大型主机的Java工作平台。
2.2.5 Microsoft SQL Server7.0
SQL Server 是一种客户机/服务器关系型数据库管理系统(RDBMS),使用Transact_SQL(一种结构化查询语言——SQL——客户机和 SQL Server之间发送请求。
- 客户机/服务器体系结构
SQL Server使用客户面/服务器体系结构把工作负责划分成在服务器计算机上运行的任务和在客户面上运行的任务。
- 关系型数据库管理系统
RDBMS负责增强数据库的结构,包括:
<1>维护数据库中数据之间的关系。
<2>保证数据被正确存放,不违背定义数据之间的关系的规则。
<3>在系统故障的情况下,恢复所有数据到已知的一致点。
- Transact-SQL
SQL Server使用Transact-SQL作为它的数据库查询和语言。Transact-SQL支持在1992年发布的最新ANSI SQL 标准,叫做ANSI SQL92,并增加了许多扩展来提供更多的功能。
2.3 物业管理系统软件技术基础
软件体系结构在软件系统中扮演一个非常重要的角色,它为系统的逻辑功能划分提供了一个依据,是快速,准确,高质量进行系统开发的基础,主要有两种体系结构。
本系统采用两层结构:将处理分两个部分,主要的事务处理逻辑运行于客户端,如向服务器端的数据库发送SQL请求。由于大量的应用运行客户端,所以又称胖客户机。
系统开发语言采用Java语言,数据库采用Microsoft SQL Server7.0。
SQL Server7.0是一种比较简单、普通的网络数据库。其操作系统环境也较普通——NT 4.0 Server 或NT2000。
Java编程环境。开发Java程序的工具有很多,Java Development Kit(Jdk)、Java Workshop(JWS)、Forte for Java(FFJ)。最新的Jdk版本是Jdk1.3。JavaSoft推荐用Jdk开发Java程序。JWS、FFJ都是运行在Jdk基础上的。JWS是sun公司早期的产品,其可用性比最近开发的FFJ差了许多。FFJ是可视化的编程工具,比之Jdk下的Dos编程更方便使用。故选择运行在Jdk基础上的FFJ。其操作系统环境为WinNT 4.0、WinNT 2000或Linux 6.2以上。最新的Forte for Java 是Forte for Java release 2.0,其Jdk版本是Jdk1.3.所以Java编程环境选择为运行在Jdk1.3上的Forte for Java release 2.0。FFJ操作系统环境用NT2000和Linux 7.0。
2.4物业管理系统的硬件基础
Forte for Java release 2.0硬件最低需求是350MHz Pentium II, 128 MB RAM 50 MB 硬盘空间。FFJ对硬件的要求很高,给编程带来一定的实际困难。以下是我的硬件环境:
服务器
·Operate System——Microsoft Windows NT Server4.0
·CPU——x86 Family 6 Model 8
·RAM——130,420 KB
·Hard Disk——21GB
·Display——PHILIPS 105G
客户机
·Operate System——Linux 7.0
·CPU——P II 400 MHz
·RAM——128 MB
·Hard Disk——10GB
·Display——SyncMaster 550s
2.5 系统介绍
2.5.1 网络结构简介
本物业管理系统的网络体系实现是在服务器上先安装windows NT操作系统,并在NT系统下安装数据库系统SQL Server 7.0和建立人员、住房、房产、收费四个数据库。然后在服务器的NT操作系统下用Java编写不同的系统用户界面,用JDBC/ODBC桥实现服务器端的数据库和前端界面的连接。连接成功后,将Java编写的用户界面移植到客户端的Linux操作系统下,并用这个界面试图实现与服务器端NT操作系统下的数据库SQL连接。以达到在不同的操作系统下可以互相调用的目的,实现Java的重要特性:可移植性。
网络体系结构图如下所示:
客户端 服务器
Linux
| |
Windows NT |
2.5.2 服务器系统功能模块
基于Java的跨平台网络数据库由后勤小区物业管理系来具体实现。后勤小区物业管理系统有两个模块——普通用户查询系统模块和管理员用户管理系统模块。普通用户查询系统是普通用户对数据库进行查询的模块,不支持数据库的管理。而管理员管理系统是数据库管理员对数据库进行管理的模块,需要密码验证才可进入。普通用户查询系统模块和管理员用户管理系统模块下又有四个模块——人员信息模块,住房信息模块,收费信息模块,房产信息模块。管理员可以对数据库的数据进行添加,修改,删除和查询
以下是后勤小区管理系统的功能模块图
| ||
士大夫士大夫房产 | ||
似的 | ||
人员信息查询 | ||
住房信息查询 | ||
收费信息查询 | ||
房产信息查询 | ||
人员信息管理 | ||
住房信息管理 | ||
收费信息管理 | ||
房产信息管理 | ||
| ||||||||||||||||||||||||||||
| | |||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||
| | | | | | | | |||||||||||||||||||||
|
其中,人员信息管理模块的下一级模块和其它三个模块的下一级模块一样, 这里只画了一个。
人员信息查询 | ||
人员信息添加 | ||
人员信息修改 | ||
人员信息删除 | ||
| |||||||||||
| | | | ||||||||
|
系统的前端开发语言采用Java语言,后端数据库采用MSSQL Server7.0.
2.5.1 服务器前端简介
系统主要针对普通用户和管理员用户两种类型,可以由主界面选择进入普通用户界面还是管理员界面如选择进入管理员界面,需通过域名验证和密码验证才可以。普通用户只具有对后端数据库的查询功能,而管理员用户同时具有对后端数据库的修改和查询功能,其中修改包括添加,更新,删除功能。
2.5.2 服务器后端数据库简介
系统主要建立了renyuan, zhufang, shoufei, fangchan 四个数据库,是通过在houqin数据库下建立renyuan,zhufang,shoufei, fangchan四个表(Tables)得到的。数据库的拥有者可以直接从SQL Server对数据库进行添加,删除,更新,查询和设置表的结构等功能。而系统管理员只可以从前端对数据库进行添加,删除,更新和查询功能,不能改变数据库的结构等,普通用户则只具有对数据库的查询功能。
2.5.3 系统查询结构图
系统前台 |
系统后台 |
三、设计过程
首先,用户看到的是系统的主界面(JFraml),即系统的进入界面,主要有三个按钮控件组成。如果你是普通用户,则选择普通用户进入系统按钮,如果你是系统管理员用户,则选择管理员进入系统按钮。系统管理员用户进入管理系统,必须通过域名和密码的验证,否则不能进入管理系统。
普通用户进入系统按钮的代码如下:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
zc.face.userInterface2 jf3=new zc.face.userInterface2();
jf3.setVisible(true);
setVisible(false);
}
管理员用户进入系统按钮的代码与普通用户进入系统按钮大代码相似。
如果现在你想退出系统,则可以选择推出系统按钮,将会弹出确认对话框,询问你是否决定退出系统(Are you sure to quit?).如果选择确定按钮,将会退出本系统。如果你现在又不想退出本系统,则选择取消按钮。
退出系统按钮的代码如下:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
javax.swing.JFrame f=new javax.swing.JFrame("ConfirmDialog");
int returnValue=javax.swing.JOptionPane.CANCEL_OPTION;
returnValue=javax.swing.JOptionPane.showConfirmDialog(f,"Are you sure to quit?","ask",javax.swing.JOptionPane.OK_CANCEL_OPTION);
if(returnValue==javax.swing.JOptionPane.OK_OPTION){
System.exit(0);
}
else
f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
3.1 普通用户系统
用户选择进入普通用户系统,系统弹出普通用户界面(userInterface)。
userInterface界面上有各类待查询信息,在界面的上方有主菜单,分六部分:人员信息、住房信息、收费信息、房产信息、帮助、返回。
在人员信息中有两种:
sql查询
填充查询
sql查询代码如下:
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
String input=null;
javax.swing.JFrame f=new javax.swing.JFrame();
input=javax.swing.JOptionPane.showInputDialog(f,"请输入sql叙述如select*from renyuan","Input",javax.swing.JOptionPane.QUESTION_MESSAGE);
System.out.println("数据查询.........");
if((input!=null)&&(input.length()!=0)){
System.out.println(input);
//进行数据库查询
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce){
System.out.println("SQLException:"+ce.getMessage());
}
try{
Connection con=DriverManager.getConnection("jdbc:odbc:houqin");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(input);
System.out.println(zc.face.MySqlUnit.printMetaData(rs));
System.out.println(zc.face.MySqlUnit.printResultSet(rs));
stmt.close();
con.close();
}
catch(SQLException e){
System.out.println("SQLException:"+e.getMessage());
}
catch(IOException e2){
System.out.println("IOException:"+e2.getMessage());
}
}
else
System.out.println("输入正确的查询语句.");
}
在填充查询中又分三种:
按姓名
按门牌号
按工作单位
按姓名查询代码如下:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
zc.face.renyuan1 jf=new zc.face.renyuan1( );
jf.setVisible(true);
setVisible(false);
}
按门牌号和工作单位查询代码与按姓名查询代码相似。
住房信息的菜单结构与人员信息大菜单结构相似,其查询代码也相似。
在收费信息和房产信息中有两种:
sql查询
填充查询
其查询代码与人员信息查询代码相似:
如果用户想查询人员方面的信息,可以通过点击主菜单中的“人员信息”选项实现。
如果用户想查询某个人的具体信息,用户对数据库查询语句又比较熟悉,用户可以选择人员信息菜单下的“sql查询” 。在弹出的对话框中输入Select查询语句点击“确定”按钮进行杳询。
如果用户想查询某个人的具体信息,用户对数据库又不熟悉,则可以选择人员信息菜单下的“填充查询” 。
如果用户只知道所要查询人的姓名,则可以点击“按姓名查询”。用户可以在弹出的人员信息查询界面1(renyuan1.java)的文本框中输入查询人姓名,点击“查询”按钮进行查询。如果用户想继续查询其他人员信息,则可以点击“继续查询”按钮继续进行查询。如果用户现在不想查询,则可以点击“取消”按钮,将会返回到普通用户界面。
查询按钮的代码如下:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce){
System.out.println("SQLException:"+ce.getMessage());
}
try
{
if(!jTextField4.getText( ).equals(" "))
{
Connection con=DriverManager.getConnection("jdbc:odbc:houqin");
System.out.println("链接成功");
System.out.println("sql查询:");
String query="select * from renyuan"+ " where 姓名='"+jTextField4.getText( )+"'";
System.out.println(query);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(query);
System.out.println(zc.face.MySqlUnit.printResultSet(rs));
stmt.close();
con.close();
}
else
System.out.println("请输入正确的姓名后按查询按钮");
}
catch(SQLException e){
System.out.println("SQLException:"+e.getMessage());
}
catch(IOException e2){
System.out.println("IOException:"+e2.getMessage());
}
}
继续查询按钮的代码如下:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
jTextField4.setText(" ");:
}
取消按钮的代码如下:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
zc.face.userInterface2 jf1=new zc.face.userInterface2();
jf1.setVisible(true);
setVisible(false);
}
如果用户只知道所要查询人的门牌号,就可以点击“按门牌号查询”,用户可以在弹出的人员信息查询界面2(renyuan2.java)的文本框中输入门牌号信息点击“查询”按钮进行查询.
如果用户只知道所要查询人的工作单位,就可以点击“按工作单位查询”,用户可以在弹出的人员信息界面3(renyuan3.java)的文本框中输入工作单位信息点击“查询”按钮进行查询。
当用户想查询住房方面的信息,可以通过点击主菜单的“住房信息”选项实现。用户可根据自身情况选择“sql查询”还是“填充查询”。如果选择“填充查询”,用户则要根据自已所知道的住房信息内容,进行按姓名,按门牌号,还是按工作来源查询来进行选择。其查询代码与人员信息菜单下的菜单项查询代码相似。
当用户想查询收费方面的信息,可以通过点击主菜单中的“收费信息”选项实现。用户可根据自身情况选择“sql查询”还是“填充查询”。如果选择“填充查询”,用户可以在弹出的收费信息查询界面(shoufei.java)的文本框中输入所要查询的收费信息住房的门牌号点击“查询”按钮进行查询。点击“继续查询”按钮在文本框内重新输入其它门牌号信息,点击“查询”按钮进行查询。其查询代码与主菜单中的“人员信息”菜单下的菜单项的查询代码相似。
如果用户想查询房户方面的信息,可以通过点击主菜单中的“房产信息”选项实现.用户可根据自身情况决定选择“sql查询”还是“填充查询”。如果选择“sql查询”,用户可以在弹出的对话框直接输入Select查询语句,点击“确定”按钮进行查询。如果选择“填充查询”,用户可以在弹出的房产信息查询界面(fangchan.java)的文本框中输入所要查询房产的楼号信息点击“查询”按钮进行查询。点击“继续查询”按钮在文本框内重新输入其它楼号信息,点击“查询”按钮进行查询。其查询代码与主菜单中的“人员信息”菜单下的菜单项的查询代码相似。
如果用户想了解关于普通用户系统的信息,则可以点击主菜单中的“帮助”菜单下的“帮助”菜单项,将会在文本区内显示帮助信息。
“帮助”菜单项的代码如下:
private void jMenuItem14ActionPerformed(java.awt.event.ActionEvent evt){
String s 欢迎进入用户系统 \n"+
" 用户在这里可以得到关于人员,住房,收费和房产方面的信息,\n"+
"系统功能使用说明如下:\n"+
" 1。用户可以使用sql查询和填充查询两种查询方式,可从菜\n"+
"单进行选择。\n"+
" 2。sql查询是直接在对话框内输入select查询语句按确定按\n"+
"钮进行查询,适合于对数据库查询语句熟悉的用户。\n"+
" 3。填充查询是根据用户从菜单所选中项的要求和提示在文本框\n"+
"内输入用户所知信息按查询按钮进行查询,适合于一般的查询用户。\n"+
" 4。查询结果在输出框内显示。\n"+
" 5。用户可通过帮助菜单的帮助项得到关于系统使用的说明。\n";
jTextArea1.setText(s);
}
如果用户想离开普通用户界面,则可以点击主菜单中的“返回”菜单下的“返回”菜单项。
“返回”菜单项的代码如下:
private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {
zc.JFrame1 jf1=new zc.JFrame1();
jf1.setVisible(true);
setVisible(false);
}
3.2 管理员系统
系统管理员用户选择管理员进入系统按钮,将会弹出管理员用户域名和密码验证界面(JFrame2)。在验证界面中,根据提示在文本框中输入管理员用户域名和进入密码,点“OK”按钮。如果域名和密码正确,管理员用户则可进入管理系统界面。如果域名和密码有一项不正确,管理员用户也不能进入管理系统,而且系统也会根据域名和密码的错误情况出现不同的对话框给予提示。如果域名不正确,而密码正确点击“OK”按钮将弹出对话框1并显示:Wrong Administrator name!! 信息,点击“确定”按钮将会返回到JFrame2界面,要求重新输入域名;如果域名正确而密码不正确,点击“OK”按钮将弹出对话框2并显示:Wrong Administrator Password!! 信息,点击“确定”按钮将会返回到JFrame2界面,要求重新输入密码;如果域名和密码都不正确,点击“OK”按钮将弹出对话框3并显示:Wrong Administrator name and Wrong Administrator passward!! 信息,点击“确定”按钮将会返回到JFrame2界面。
如果管理员用户不想进入管理系统,则可以点击JFrame2界面上的“Cancel”按钮,将会返回到开始界面(JFrame1)。
“OK”按钮的代码如下:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
confirmPassword();
}
public void confirmPassword(){
String s1="",s2="",s="htf",password="270098";
s1=jTextField1.getText();
s2=jPasswordField2.getText();
if(!(s1.equals(s))&&(!(s2.equals(password)))){
//用户名和密码都不正确
javax.swing.JFrame f=new javax.swing.JFrame("MessageDialog");
javax.swing.JOptionPane.showMessageDialog(f,"Wrong Administrator name and Wrong Administrator Password!!","ConfirmMessage",javax.swing.JOptionPane.ERROR_MESSAGE);
int returnValue=0;
if(returnValue==javax.swing.JOptionPane.OK_OPTION)
f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
else if(!(s1.equals(s))){
//用户名不正确;
javax.swing.JFrame f=new javax.swing.JFrame("MessageDialog");
javax.swing.JOptionPane.showMessageDialog(f,"Wrong Administrator name!!","ConfirmMessage",javax.swing.JOptionPane.ERROR_MESSAGE);
}
//用户名正确,校验密码;
else if(!(s2.equals(password))){
//密码不正确
javax.swing.JFrame f=new javax.swing.JFrame("MessageDialog");
javax.swing.JOptionPane.showMessageDialog(f,"Wrong Administrator Password!!","ConfirmMessage",javax.swing.JOptionPane.ERROR_MESSAGE);
int returnValue=0;
if(returnValue==javax.swing.JOptionPane.OK_OPTION)
f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
else{
zc.face.AdministratorInterface jf4=new zc.face.AdministratorInterface();
jf4.setVisible(true);
setVisible(false);
//密码正确,建立新的界面
}
}
如果管理员用户输入的域名和密码都正确,点击“OK”按钮后将会弹出管理员界面(Administrator)。
在界面的上方有主菜单,分六部分:人员管理,住房管理,收费管理,房产管理,帮助,返回。
在人员管理,住房管理,收费管理,房产管理菜单下有相同的四种菜单项:
添加(Insert)
更新(Update)
删除(Delete)
查询(Inquery)
添加(Insert)菜单的代码如下:
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
String input=null;
javax.swing.JFrame f=new javax.swing.JFrame();
input=javax.swing.JOptionPane.showInputDialog(f,"请输入Insert语句","Input",javax.swing.JOptionPane.QUESTION_MESSAGE);
System.out.println("数据添加........");
if((input!=null)&&(input.length()!=0)){
System.out.println(input);
//进行数据添加
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce){
System.out.println("SQLException:"+ce.getMessage());
}
try{
Connection con=DriverManager.getConnection("jdbc:odbc:houqin");
Statement stmt=con.createStatement();
int status=stmt.executeUpdate(input);
ResultSet rs=stmt.executeQuery("select * from renyuan");
System.out.println(zc.face.MySqlUnit.printResultSet(rs));
stmt.close();
con.close();
}
catch(SQLException e){
System.out.println("SQLException:"+e.getMessage());
}
catch(IOException e2){
System.out.println("IOException:"+e2.getMessage());
}
}
else
System.out.println("输入正确的Insert语句.");
}
其它查询代码与上面的相同。
如果管理员用户想修改和查询人员方面的信息,则可以点击主菜单中的“人员管理”选项。
如果管理员用户想对人员数据库添加记录,则可以点击“添加”菜单项将会弹出Insert对话框。管理员用户输入insert语句后点击“确定”按钮,如果Insert语句正确系统将会执行“select*from renyuan”查询并在Output Windows窗口输出查询结果,至此对后端的renyuan数据库添加了记录,如果点击“取消”按钮,将会返回到管理员界面。
如果管理员用户想对人员数据库进行更新,则可以点击“更新”菜单项将会弹出Update对话框。管理员用户输入update语句后点击“确定”按钮,如果Update语句正确,系统将会执行“selete*from renyuan”查询,并在OutputWindows窗口输出查询结果,至此对后端的renyuan数据库的记录进行了更新。如果点击“取消”按钮,将会返回到管理员界面。
如果管理员用户想删除人员数据库的某项记录,则可以点击“删除”菜单项将会弹出Delete对话框。管理员用户输入delete语句后点击“确定”按钮,如果Delete语句正确并且要删除的记录存在,系统将会执行“selete*from renyuan”查询,并在OutputWindows窗口输出查询结果,至此删除了后端renyuan数据库的某项记录。如果点击“取消”按钮,将会返回到管理员界面。
如果管理员用户只想查询有关人员数据库的信息,则可以点击“查询”菜单顶将会弹出Inquery 对话框。管理员用户输入select语句后点击“确定”按钮,如果select语句正确并且查询内容存在,系统将会执行select语句,在OutputWindows窗口显示查询结果。如果点击“取消”按钮,将会返回到管理员界面。
当管理员用户想对住房(zhufang)数据库进行修改和查询时,则可以点击主菜单中的“住房管理”选项。如果管理员用户想对住房数据库添加记录时,则可以点击“添加”菜单项;如果管理员用户想对住房数据库的记录进行更新,则可以点击“更新”菜单项;如果管理员用户想对住房数据库的记录进行删除,则可以点击“删除”菜单项;如果管理员用户只想查询住房数据库的信息,则可以点击“查询”菜单项。其“添加”,“更新”,“删除”,“查询”菜单的具体用法同“人员管理”菜单下的“添加”,“更新”,“删除”,“查询”菜单项。
当管理员用户想对收费(shoufei)数据库进行修改和查询时,则可以点击主菜单中的“收费管理”选项。如果管理员用户想对收费数据库添加记录时,则可以点击“添加”菜单项;如果管理员用户想对收费数据库的记录进行更新,则可以点击“更新”菜单项;如果管理员 用户想对收费数据库的记录进行删除,则可以点击“删除”菜单项;如果管理员用户只想查询收费数据库的信息,则可以点击“查询”菜单项。其“添加”,“更新”,“删除”,“查询”菜单的具体用法同“人员管理”菜单下的“添加”,“更新”,“删除”,“查询”菜单项。
当管理员用户想对房产(fangchan)数据库进行修改和查询时,则可以点击主菜单中的“房产管理”选项。如果管理员用户想对房产添加记录时,则可以点击“添加”菜单项;如果管理员用户想对房产的记录进行更新,则可以点击“更新”菜单项;如果管理员用户想对房产的记录进行删除,则可以点击“删除”菜单项;如果管理员用户只想查询房产的信息,则可以点击“查询”菜单项。其“添加”,“更新”,“删除”,“查询”菜单的具体用法同“人员管理”菜单下的“添加”,“更新”,“删除”,“查询”菜单项。
如果管理员用户想了解系统的有关信息,则可以点击主菜单中“帮助”菜单下的“帮助”菜单项,将会在主菜单下的文本区内显示系统信息。
如果管理员用户想离开管理系统,则可以点击主菜单中“返回”菜单下的“返回”菜单项,管理员用户则可以返回到开始界面(JFramel)。
3.3 物业管理系统的各个界面及其功能介绍
系统的进入界面是JFramel.java,下面是JFramel.java界面:
JFramel.java是系统的主界面,进入系统有三个选择:普通用户进入系统,管理员进入系统,退出系统。用户可以根据自己的需要选择进入不同的界面。
以下是userInterface.java界面:
userInterface.java是普通用户系统的查询主界面,用户可以在此实现对人员信息,住房信息、收费信息、房产信息的各种查询。
renyuan1.java界面是用户想查询人员方面的信息时,又只知道所要查询人的姓名时进行查询的界面。
renyuan2.java界面是用户想查询人员方面的信息时,又只知道所要查询人的门牌号时进行查询的界面。
renyuan3.java界面
zhufang1.java界面
zhufang2.java界面
zhufang3.java界面
shoufei.java界面
fangchan.java界面
以下是renyuan1.java界面:
以上是系统为方便普通用户查询各种信息而提供的不同种类的查询界面。
以下是Administraror.java界面:
Administraror.java是管理系统的主界面,管理员用户可以通过界面提供的各类管理信息的各种功能实现对后端数据库记录的添加,更新,删除,查询和管理。
Input1.java界面是管理员想对人员数据库添加记录时点击“人员管理”菜单下的“添加”项时出现的界面。
Input2.java界面是管理员想对住房数据库添加记录时点击“住房管理”菜单下的“添加”项时出现的界面。
Input3.java界面
Input4.java界面
Update1.java界面
Delete1.java界面
Inquery1.java界面
3.4 各个表单的联系
下面根据在普通用户界面对人员信息按姓名进行查询及管理员界面对人员数据库进行添加记录将以上部分界面连接起来。
用户在进入界面(JFraml.java)上点击“普通用户进入系统”按钮,系统就弹出普通用户界面(userInterface.java)。
如果用户想查询人员方面的信息,就点击主菜单中的“人员信息”菜单,如果用户对数据库查询方面的知识不熟悉,则选择“人员信息”菜单下的“填充查询”菜单。如果用户只知道所要查询人的姓名,则点击“填充查询”菜单下的“姓名”菜单项,系统将会弹出人员信息查询界面1(renyuan1.java)。用户可以输入查询人姓名点击“查询”按钮查询,查询结果在OutputWindow窗口显示,如果用户想继续查询,就点击“继续查询”按钮,用户重新输入其他查询人姓名点击“查询”按钮进行查询。用户此时如果想离开renyuan1.java界面,就点击“取消”按钮,将会返回到普通用户界面。
如果用户想了解更多方面的关于用户系统的信息,则可以点击主菜单中的“帮助”菜单下的“帮助”菜单项,将会在主菜单下的文本区内显示系统信息。
如果用户想离开普通用户界面,则可以点击主菜单中的“返回”菜单下的“返回”菜单项,用户将退出用户系统返回到进入界面(JFrame1.java).
管理员用户在进入界面上点击“管理员进入系统”按钮,系统就弹出管理员进入系统验证界面(JFrame2.java)。
界面如下:
JFrame2.java界面要求管理员用户输入正确的域名和密码进入管理系统。管理员用户输入域名和密码后,如果正确则进入管理系统。如果域名和密码都不正确,将会弹出error1.java界面;如果域名正确而密码不正确,将会弹出error2.java界面;如果域名不正确而密码正确将会弹出error3.java界面。
管理员用户输入正确的域名和密码后,点击“OK”按钮将会弹出管理员界面(Administrator.java)。如果管理员用户想对人员数据库进行添加记录,就可以点击主菜单中的“人员管理”菜单,然后选中“人员管理”菜单下的“添加”菜单项,将会弹出Input1.java界面。管理员用户输入添加记录语句(insert语句)后,点击“确定”按钮,如果insert语句正确,则可以实现对后端renyuan数据库记录的添加。
如果用户此时想退出Input1.java界面,就可以点击“取消”按钮,将会返回到管理员主界面(Administrator.java)。
如果管理员用户想了解更多方面的关于管理系统的信息,则可以点击主菜单中的“帮助”菜单下的“帮助”菜单项,将会在主菜单下的文本区内显示系统信息。
如果管理员用户想离开管理员界面,则可以点击主菜单中的“返回”菜单下的“返回”菜单项。管理员用户将退出管理系统返回到进入界面(JFrame1.java)。
如果管理员用户想退出本系统,就可以点击进入界面(JFrame1.java)上的“退出系统”按钮,将会弹出询问(askdialog)对话框,确认管理员用户是否决定退出本系统(Are you sure to quit ?),点击“确定”按钮将退出本系统;点击“取消”按钮将会返回到进入界面(JFrame1.java).
管理员用户点击“确定”按钮,退出本系统。
3.5后台数据库的建立
启动Microsoft SQL Server 7.0的Enterprise Manager,建立houqin数据库。
界面如下:
然后打开houqin数据库,右击tables,建立人员数据库(renyuan)。
人员数据库(renyuan)的表结构如下:
人员数据库(renyuan)的数据添加如下:
其它数据库的建立如人员数据库(renyuan)的建立。
3.6 建立ODBC数据源
在连接数据库之前,首先应该设置系统的ODBC数据源,此数据源向前面新建的houqin数据库,步骤如下:
1.先打开windows NT的控制面板,单击ODBC数据源(32位)的图标,将打开ODBC数据源管理器。
2.在弹出的对话框中,选择系统DSN(数据源名)属性页,其它还有用户DSN、文件DSN及驱动程序等。
3.在属性页中单击“添加”按钮。
4.出现“创建新数据源”窗口。因为要与SQL Server数据库系统相连接,所以选择SQL Server驱动程序,并单击“完成”。
5.出现“建立新的数据源到SQL Server”窗口。
“Data Source Name”域输入“houqin”
“Server”域输入“(local)”,单击“下一步”
6.选择“使用网络登录标识号的Windows NT验证”,单击“下一步”。
7.选择“houqin”数据库,单击“下一步”。
8.单击“完成”,弹出一对话框,单击“测试数据源”。
9.弹出“SQL Server ODBC数据源测试”对话框,单击“确认”按钮就完成了设置数据源的所有工作。
3.7 连接数据库
JDBC建立Java程序连接到数据库的结构,它看起来很像ODBC,但ODBC是以C语言撰写的,不能直接在Java程序中应用。JDBC中包含一个JDBC/ODBC的桥接器(bridge),通过该桥接器就可以在Java程序中调用合乎ODBC规格的数据库。
JDBC/ODBC ODBC SQL
Java程序 JDBC 桥接驱动程序 驱动程序 数据库
图:利用JDBC/ODBC桥接驱动程序将Java程序与数据库连接
连接代码如下:
try
{ Class.forName(“sun.jdbc.odbc. JdbcOdbcDriver”);}
catch (ClassNotFoundException ce)
{System.out.println(“SQLCXCEption:”+ce.getMessage());}
try
{Connection con=Driver Manager.getConnection(“jdbc:odbc:houqin”);}
catch(SQLException e)
{System.out.println(“SQLException:”+e.getMessage( );)
class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);载入JDBC/ODBC桥接驱动程序到程序中。Connection con=Driver Managor.getConnection(“jdbc:odbc:houqin”);连接到Microsoft的SQL Server数据库,数据来源名称为houqin的数据库houqin。Class类别的ferName()方法负责将指定的JDBC/ODBC桥接驱动程序载入到Java程序中,DriverManager类别的getConnection()方法负责与指定的数据来源houqin连接。
3.8 取得数据表属性
当使用JDBC送出SQL的select语句后,将会取得一个ResultSet对象rs,通过rs可建立一个ResultSetMetaData对象md,通过md对象可取得md对象中的数据成员或调用md对象中的方法成员:
md.getColumnCount() 取得指定数据表的域数
md.getColumnLabel(i) 取得第i域名称
md.getColumnDisplaySize(i) 取得第i域显示的域数
md.getColumnTypeName(i) 取得第i域的类型名称
程序MySqlUtil.java中的printMetaData()方法显示该连接表的一些静态数据,例如每一行共有几域(colCount)、每域名称(colLabel)、每域以几个域(column)表示(colDisplaySize)、每一域的数据类型(colTypeName)等等。PrintResultSet()方法显示该连接表的一些动态数据,每一域的域名以及该域的内含值。
其代码如下:
package zc.face;
import java.io.*;
import java.sql.*;
class MySqlUnit {
public static String printMetaData(ResultSet rs) throws SQLException
{
ResultSetMetaData md=rs.getMetaData();
int colCount=md.getColumnCount();
String colLabel[]=new String[colCount+1];
int colDisplaySize[]=new int[colCount+1];
String colTypeName[]=new String[colCount+1];
System.out.println("database colCount="+colCount);
StringBuffer sb=new StringBuffer();
for(int i=1;i<=colCount;i++){
colLabel[i]=md.getColumnLabel(i);
colDisplaySize[i]=md.getColumnDisplaySize(i);
colTypeName[i]=md.getColumnTypeName(i);
sb.append("Label:"+colLabel[i]+"DisplaySize:"+colDisplaySize[i]+"TypeName:"+colTypeName[i]+"\r\n");
}
return sb.toString();
}
public static String printResultSet(ResultSet rs) throws IOException,SQLException
{
ResultSetMetaData md=rs.getMetaData();
int colCount=md.getColumnCount();
String colLabel[]=new String[colCount+1];
for(int i=1;i<=colCount;i++)
colLabel[i]=md.getColumnLabel(i);
StringBuffer sb=new StringBuffer();
while(rs.next()){
for(int i=1;i<=colCount;i++)
sb.append(colLabel[i]+":"+rs.getObject(i)+" ");
sb.append("\r\n");
return sb.toString( );
}
}
四.系统评价与展望
在有限的时间里经过努力,物业管理系统已具规模。
界面比较实用,系统稳定性好,在不同的计算机上都可以很平稳的运行。
系统的查询功能完备,可以满足用户的各种查询要求。查询信息准确无误,完整详细、迅速方便。
系统的可操作性很好,基本上不同用户过多浪费时间在无谓的细节上。
系统的突出之处是用TDBC/ODBC桥接驱动程序连接成功,用Java语句实现了对后端数据库的修改和查询功能。
本系统在现有基础上,对于后端数据库系统的设计有待在又节约数据库资源和又便于客户端查询更方便的基础上进一步完善和协调。随着计算机技术的不断发展和更新以及人力物力的投入,本系统的功能将会得到更加完善的改进。
最后,我衷心感谢何嘉,徐虹两位老师对我的悉心指导和帮助,也一并感谢我的毕业设计合作者张诚同学对我的帮助。
五.参考书目:
Microsoft SQLServer 7.0 开发指南 [美]Sharon Bjeletich,Greg Mable
Microsoft SQLServer 7.0 系统管理指南 [美]M.Soenik,o.Sledge
JAVA 例解教程 柯温钊 中国铁道出版社
Java 程序设计入门教程 林邦杰 中国青年出版社
Java 编程思想 Thinking in JAVA [美] Bruce Eckel
Windows NT Server4 从入门到精通 [美] Mark Minasi
操作系统Linux 北京·电子工业出版社