客户管理本科三级实训报告Word文档下载推荐.docx
《客户管理本科三级实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《客户管理本科三级实训报告Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
料考
与文
献
[01](美)梁(Liang,Y.D.).JAVA语言程序设计基础篇(原书第6版)[M]:
机械工业出版社2008.6
[02]凯德纳黑德,勒迈,陈武.21天学通Java2:
专业参考版.[M]人民邮电出版社2004.01
[03]洪维恩何嘉.JAVA2面向对象程序设计.[M]中国铁道出版社2005.01
[04]张靓顾慧敏.JAVA案例开发.[M]中国水利水电出版社.2005.01
指导教师签字:
年月日
客户管理系统
摘要
企业是一个生产、管理的集散地,生产资料和企业客户资料繁多,包含很多信息数据的管理。
在过去的企业中用书面管理信息,在修改、查询、添加企业客户信息方面都没有很好的发挥它的效益,企业客户资料管理复杂、工作量大比较突出,不能利用多种途径查询企业客户资料,修改后不能同步更改所有档案资料。
这就是企业客户管理系统开发的基本环境。
设计处理查询方式单一,添加不能与统计同步,出错率高,出错后不易更改。
由于信息比较多,企业客户信息管理比较混乱;
一般客户情况是记录的,资料的数目和内容记录在文件中,资料室的工作人员和管理人员也只能当时比较清楚,时间一长,如再有进行查询,查找了造成查询费时,费力。
如果对很长时间以前的资料进行更改就更加困难了。
基于此类问题,我组认为有必要建立一个企业客户管理系统,使资料管理工作规范化,程序化,避免资料管理随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询、修改和保存资料情况。
管理人员必须以管理员身份登录,保证了系统的安全性。
系统的总体任务是使企业管理人员可以轻松快捷地完成对企业客户管理的任务。
有利于提高管理效率。
关键词:
客户信息管理、通讯录、系统管理
第1章项目分析
本系统用于企业的客户资料管理。
主要任务是用计算机对企业客户进行日常管理,如企业客户信息的添加、删除、修改、查询。
能进行单条件的企业客户信息查询的查询。
1.1问题描述
程序需要有一个简洁的界面,使管理者一看便知怎么操作。
程序还需要实现增加、修改、删除、查询功能。
项目中我组用到了MySQL数据库实现客户信息的储存。
同时设置了登录功能只有管理员才能对客户进行相关的操作。
为解决这些问题我们就得查询个方面的资料,为更好的解决问题做好准备。
1.2技术分析
考虑到本系统的性能要求,和现有的条件,我选择了WINDOWSXP中文版作为开发、测试和运行的平台。
因为WINDOWS操作系统是目前应用最广的操作系统,它以全新的图形界面,简单快捷的操作方式,支持多媒体功能等特点而成为软件发展的流行趋势,选用它作为开发平台,易于功能的扩展和软件升级。
针对目前世界上流行的大量软件和开发工具,经过认真分析其优缺点并根据平时所学的知识,结合企业客户管理系统的需要和目前的硬件环境,我选用Eclipse作为软件开发工具。
本程序主要是利用JAVA语言编写,具有良好的可移植性。
能够适用于多种平台,对系统的推广有很大的作用。
本系统的数据库也是使用的最简单的数据库,MySQL它具有简单的界面方便的操作,可以让我们远离那些大型数据库的繁琐操作。
第2章数据库设计
数据库设计是应用系统开发的一个重要环节,数据库结构的好坏将直接对应用系统的效率及实现结果产生重要影响。
在数据库设计的开始阶段应尽量全面考虑用户的各种需求,收集基础数据、数据结构及数据处理流程。
2.1数据库图表设计
数据库中主要是存储的客户信息,由于时间有限本系统中的管理员只有一个默认的。
无法修改管理员的ID为admin密码为admin。
并没有用到数据库来存储管理员的信息。
数据库中的表为custom,表中的主要数据为id、name、phone、address。
2.2数据库图表
表中个变量的属性如图:
图2.1custom表中的变量及其属性
Custom表中数据情况如图:
图2.2custom表中数据情况
数据库中还要对用户进行设置,如果不进行设置其他的计算机就无法与服务器的数据库进行连接,也就无法得到数据库中相应的数据。
在第二周程序制作的时候遇到了这样的问题,在老师的细心帮助之下我们得到了良好的解决。
第3章系统实现
由于客户管理系统的众多要求,我组决定进行分工。
主要有程序界面的开发,程序中服务器及客户端的开发以及程序与数据库之间的通信。
我主要负责的为程序与数据库之间通信的部分,也就是程序功能实现的部分。
这部分的设计主要是实现:
显示现有数据库中所有客户的信息,重新加载客户的信息,对客户信息的增加,删除,修改,查询。
客户端系统主要有7个类:
Land.java:
实现系统的登录页面。
Client.java:
实现与服务器端的通信功能。
TableModeldemo.java:
这主要是系统的主界面。
它联系了程序的个个类。
NewRecordDialog.java:
这个类是系统的添加界面。
NewSelect.java:
这个类者是系统的查找界面。
User.java:
这个类是系统的管理员信息类,储存管理员的信息。
DB.java:
它主要实现系统的功能,以及对数据库的各种操作。
程序的主要流程如下图:
图3.1程序的主流程图
程序中的个个类之间也存在这各种的关系如下图:
图3.2程序各类之间的调用关系
下面将为你讲解我们程序功能实现的详细细节。
3.1程序与数据库连接模块
程序首先由Land.java登录,然后程序进入主界面也就是由TableModeldemo.java实现的部分。
程序中连接数据库主要是通过jbtconnection按键进行监听。
当按下jbtconnection按键时会调用DB.java中的setConection()方法实现对数据库的连接。
3.1.1流程图
程序数据库连接运行的主要流程如下:
图3.1.1数据库调用流程
3.1.2数据库连接界面
程序数据库连接成功出现的界面:
图3.1.2程序连接数据库成功并显示相关数据
3.1.3代码讲解
程序中的数据库连接就是通过DB.java中setConnection()方法实现代码如下:
publicvoidsetConnection()throwsClassNotFoundException,SQLException{
Class.forName("
com.mysql.jdbc.Driver"
);
connection=DriverManager.getConnection("
jdbc:
mysql:
//localhost/test"
statement=connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
showTable();
}
程序中用到了throws。
throws
是用来声明一个方法可能抛出的所有异常信息,注意,是可能的,所有的异常信息,在Java里面,大家很熟悉什么是类和对象,在这里,throws要抛出的就是一个异常类,因为它并不知道具体会出现哪种异常,所以就简单抛出一个异常类,包含这个异常类下面所有可能的异常。
throws通常不用显示的捕获异常,而是由系统自动将所有捕获到的异常信息抛给上级方法来处理,举个简单的例子来说:
A类声明抛出了一个异常类,如果系统捕获到该异常类下面某个具体的异常对象,则上交给A的父类B来处理,假如B不做处理,那么B继续上抛,上抛给B的父类C来处理,以此类推,直至问题解决。
Class.forName("
在连接数据库之前,还必须要加载一个合适的驱动程序,驱动程序是一个实现接口java.sql.Driver的具体类。
MySQLJDBC驱动程序包含在文件mysqljbc.jar中。
com.mysql.jdbc.Driver是mysqljdbc.jar中的一个类。
这个类由JDBC使用,但不直接由JDBC程序员使用。
当你在程序中明确使用某个类时,它被JVM自动加载。
但是驱动程序类不在程序中明确的使用,因此,必须编写代码告诉JVM加载它们。
connection=DriverManager.getConnection("
为了连接一个数据库,需要使用DriverManager类中的静态方法getConnection(databaseURL),databaseURL是数据库在Internet上的唯一标识符。
MySQL数据库的databaseURL指定定位数据库的主机名和数据库名。
statement=connection.createStatement(
如果把一个Connection对象想象成一个连接程序和数据库的缆道,那么Statement对象或它的子类可以看作一辆缆车,它为数据库传输SQL语句,并把运行结果带回程序。
一旦创建了Connection对象,就可以创建执行SQL语句的语句。
ResultSet.TYPE_SCROLL_INSENSITIVE设置结果集是可滚动的,但是对数据库中的变化不敏感。
ResultSet.CONCUR_UPDATABLE设置可以使用结果集更新数据库。
调用类DB.java中的showTable();
方法,使table中显示数据库中的结果集。
3.2程序客户显示模块
程序连接数据库成功以后要调用DB.java中的showTable()方法,显示数据库中的客户信息。
显示模块在程序中多次调用,是一个很重要的方法。
3.2.1流程图
显示模块运行的流程图:
图3.2.1程序界面系统的流程图
3.2.2显示模块界面
如图3-1-2。
3.2.3代码讲解
程序中的数据库连接就是通过DB.java中showTable()方法实现代码如下:
publicvoidshowTable()throwsSQLException{
rowVectors.clear();
columnHeaderVector.clear();
resultSet=statement.executeQuery("
select*fromcustom;
"
columnCount=resultSet.getMetaData().getColumnCount();
while(resultSet.next()){
VectorsingleRow=newVector();
for(inti=0;
i<
columnCount;
i++)
singleRow.addElement(resultSet.getObject(i+1));
rowVectors.addElement(singleRow);
}
for(inti=1;
=columnCount;
columnHeaderVector.addElement(resultSet.getMetaData()
.getColumnName(i));
TableModeldemo.tableModel.setDataVector(rowVectors,columnHeaderVector);
TableModeldemo.tableModel.setColumnIdentifiers(columnNames);
rowVectors.clear();
columnHeaderVector.clear();
首先要清除图标中的信息。
resultSet=statement.executeQuery("
SQL查询语句可以使用executeQuery(Stringsql)来执行,查询结果在rerultSet中返回。
结果集ResultSet存有一个表,该表的当前行可以访问。
当前行的初始位置是null,可以使用next方法移动到下一行,可以使用各种get方法从当前行检索值。
columnCount=resultSet.getMetaData().getColumnCount();
RseultSetMetaData接口描述与结果集相关的信息。
ResultSetMetaData对象能够用于结果集ResultSet中找出关于列的类型和属性的信息。
要得到ResultSetMetaData的一个实例,通过结果集使用getMetaData方法。
使用getColumnCount()方法可以在结果集中求得列的数目,使用getColumnName(int)方法可以求的列名。
while(resultSet.next()){
这段代码就是从结果集中得到相关的数据,并赋值给相应的图表。
for(inti=1;
得到相应的列名并赋值给相应的图表。
TableModeldemo.tableModel.setDataVector(rowVectors,columnHeaderVector);
TableModeldemo.tableModel.setColumnIdentifiers(columnNames);
调用TableModeldemo.java类中的tableModel变量,从新赋值,是table表中显示数据可中得到的客户信息。
3.3重载客户信息模块
重载客户信息模块就是重新查询了一下数据库,根据加进去的新客户信息,数据库会自动的从新排序,从新加载也就相当于从新进行排序了。
3.3.1代码讲解
privatevoidrefreshResultSet(){
try{
resultSet=statement.executeQuery("
}catch(SQLExceptionex){
ex.printStackTrace();
重新在数据库中进行查找。
3.4程序客户信息添加模块
程序中的添加模块是通过TableModeldemo.java中,jbtAddRow按键进行监听的。
通过调用BD.java中的insert方法来实现添加。
在insert中还需要调用NewRecordDialog来弹出添加窗口。
3.4.1流程图
增加方法的流程图:
图3.4.1增加方法流程图
3.4.2添加显示界面
添加客户信息时出现的界面:
图3.4.2添加客户信息界面
3.4.3代码讲解
方法insert的实现如下:
publicvoidinsert()throwsSQLException{
newRecordDialog=newNewRecordDialog();
newRecordDialog.displayTable(columnNames);
VectornewRecord=newRecordDialog.getNewRecord();
if(newRecord==null)
return;
resultSet.moveToInsertRow();
for(inti=1;
i++){
resultSet.updateObject(i,newRecord.elementAt(i-1));
}
resultSet.insertRow();
refreshResultSet();
TableModeldemo.tableModel.addRow(newRecord);
Vector类可以实现可增长的对象数组。
与数组一样,它包含可以使用整数索引进行访问的组件。
但是,Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作。
resultSet.moveToInsertRow();
让程序移动到添加行。
这句话必须要有,刚开始写代码的时候没有这句话,调试怎么也通不过,添加的数据把原来表中的数据给替代了,并没有添加到相应的下一行。
添加按键的处理涉及到显示接收新记录的添加对话框(newRecordDialog)。
输入新记录之后,单击确定按钮关闭对话框。
调用newRecordDialog.getNewRecord()方法得到新的记录。
为了将新记录插入到数据库中,调用updateObject方法更新域,然后调用insetRow方法将记录插入到数据库表中。
最后,需要重新执行查询来刷新结果集。
理论上,没有必要刷新结果集,驱动程序应该自动地将数据库中的变化反馈到结果集中,但是,刷新结果集更可靠。
3.5程序客户信息删除模块
程序的删除模块主要是先通过鼠标的定为确定相应的删除行。
然后调用相关的删除命令,表模型以及数据库中的相应信息删除。
3.5.1流程图
删除功能的流程比较的简单只是调用了DB.java类中的delete方法实现数据库中信息的删除。
图3.5.1添加客户信息界面
3.5.2程序删除显示界面
图3.5.2添加客户信息界面
程序的下方会显示你所选定的行数,程序会根据你选定的行进行删除操作。
删除后同样重新加载。
3.5.3代码讲解
publicvoiddelete()throwsSQLException{
resultSet.deleteRow();
refreshResultSet();
deleteRow方法为从此ResultSet对象和底层数据库中删除当前行。
也就是删除数据库中相应的客户信息。
调用tablemodel中的removeRow方法从jTable1中删除一行。
3.6程序客户信息修改模块
这个程序的修改功能是你直接在程序的窗口中对客户的信息进行修改,修改后点击修改按键。
程序自动修改数据库中客户的信息。
修改功能的实现也是通过调用DB.java中的方法实现的。
本次调用的是update方法。
3.6.1修改模块流程图
程序的流程比较的简单没有制作流程图的必要。
就是修改表模型中的数据,然后进行数据库中数据的修改。
所以本部分的流程图略。
3.6.2修改程序界面
图3.6.1修改客户信息界面
3.6.3代码讲解
publicvoidupdate()throwsSQLException{
introw=TableModeldemo.jTable1.getSelectedRow();
=resultSet.getMetaData().getColumnCount();
resultSet.updateObject(i,TableModeldemo.tableModel.getValueAt(row,
i-1));
resultSet.updateRow();
本段代码首先通过getSelectedRow方法得到光标所在的相应行。
用Object值更新指定列。
更新方法用于更新当前行或插入行中的列值,并不会更新底层数据库;
更新数据库要调用updateRow或insertRow方法。
更新后重新加载数据库。
3.7程序客户信息查询模块
程序的客户信息查询分为根据客户的姓名和根据客户的编号进行查询。
根据客户姓名查询调用的是DB.java中的selectname方法,根据客户编号查询调用的是DB.java中selectid方法。
3.7.1查询模块流程图
首先是程序中的查询按键被点击,调用出Newselect.java这个类来实现查询界面的显示,根据不同的选择调用DB.java中不同的方法来实现不同的查找。
图3.7.1查询客户信息流程图
3.7.2查询功能界面
图3.7.2查询客户信息界面
图3.7.3查询客户信息结果
3.7.3代码讲解
publicResultSetselectid(Stringid)throwsSQLException{
ResultSetresult=null;
Statementst=null;
Connectioncon=null;
con=DriverManager.getConnection("
Stringsql="
select*fromcustomwhereid="
+"
'
+id+"
;
st=con.createStatement();
result=st.executeQuery(sql);
}catch(Exceptione){
e.printStackTrace();
returnresult;
publicResultSetselectname(Stringname)throwsSQLException{
C