软件开发与项目管理KC0210000021个人通讯录管理平台.docx
- 文档编号:28907689
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:16
- 大小:47.38KB
软件开发与项目管理KC0210000021个人通讯录管理平台.docx
《软件开发与项目管理KC0210000021个人通讯录管理平台.docx》由会员分享,可在线阅读,更多相关《软件开发与项目管理KC0210000021个人通讯录管理平台.docx(16页珍藏版)》请在冰豆网上搜索。
软件开发与项目管理KC0210000021个人通讯录管理平台
模块把综合项目实战案例
——个人通讯录管理平台
一、案例描述
使用Java标准版开发通讯录管理系统,管理亲戚、朋友、同学、同事以及其他熟悉的人的联系方式。
。
二、案例要求
该案例的具体要求如下:
(1)便于保存新的联系人信息;
(2)便于查询以及删除联系人;
(3)分类别管理联系人;
(4)操作方便
三、案例实现步骤
(一)设计用例图和功能模块图
图1用例图
图2功能结构图
(二)系统设计
首先,对照图1,我们可以把“新建类别”、“查询类别”、“删除类别”、“新建联系人”、“查询联系人”、“更改联系人”和“删除联系人”7个功能模块分别定义成7个不同的图形界面,系统进入某个界面就可以执行对应的功能。
这样,我们首先可以定义7个图形界面类:
CreateType、QueryType、DeleteType、CreatePerson、UpdatePerson、DeletePerson和QueryPerson。
每个图形界面类除了形成图形界面外,还要编写正确的事件响应程序。
对于访问数据库操作,我们准备把对应的代码定义到专门的类中。
访问数据库首先需要Connection对象,创建Connection是一项繁琐的工作,而且需要提供数据库名、用户名、密码等信息。
我们可以把创建和释放Connection对象的代码定义成不同的方法,放在类MyConnection中,一方面有利于代码复用,另一方面,Connection对象创建后只要还没释放就可以再次使用,从而避免频繁地创建和释放对象,提高软件系统的性能。
图形界面访问数据库的操作无非是对TYPE和PERSON表执行操作。
我们为每个表定义一个JavaBean类,分别命名为TypeBean和PersonBean,把表中的所有属性定义为JavaBean的成员变量,并定义相应的setter和getter方法。
图形界面类访问表格的每个操作,在对应的JavaBean中就定义一个方法与其对应。
也就是说,图形界面类通过调用JavaBean的方法实现对应表格的访问。
这样,图形界面总控程序MainFrame在最上层,访问数据库的类MyConnection类在最下层,形成图4所示的单元模块结构图。
图3个人通讯录管理平台单元模块结构图
(三)程序代码
'在MyConnection中,我们定义一个Connection变量,一个获取连接对象的方法以及一个关闭连接对象的方法,类定义如下:
packagecommon;
importjava.sql.Connection;
importjava.sql.DriverManager;
publicclassMyConnection
{
staticConnectioncon=null;
publicstaticConnectiongetConnection()//获取连接对象
{
if(con==null)//如果con为空,创建一个Connection对象
{
try
{
Class.forName("com.mysql.jdbc.Driver");//安装驱动器类
con=DriverManager.getConnection(//建立连接
"jdbc:
mysql:
//localhost/TXL","root","mysql");
}
catch(Exceptione)
{
System.out.println("建立数据库连接遇到异常!
");
}
}
returncon;//返回连接对象
}
publicstaticvoidcloseConnection()//关闭连接对象
{
if(con!
=null)
try
{
con.close();
}
catch(Exceptione)
{
System.out.println("关闭数据库连接遇到异常!
");
}
}
}
我们把con、getConnection()和closeConnection()定义成static成员有两个好处。
一方面,系统运行过程中只需要创建一次Connection对象,以后每次调用getConnection()获取同一个对象,这样就减少了创建对象和垃圾对象收集的开销,提高了系统性能。
另一方面,获取和关闭Connection对象可以通过类名调用这两个方法。
在TypeBean定义中,我们按照TYPE表的结构定义成员变量,并为每个成员变量定义setter和getter方法。
此外,我们把其他功能模块访问TYPE表的操作在TypeBean中定义成不同的方法。
例如,下列方法insertNetType()、findLbmcById()、findIdByLbmc()、getJComboBoxItems()是任务6中的三个功能模块用到的方法。
此外,读者还可以按照项目需要定义其他的方法。
packagejavaBean;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.Statement;
importcommon.MyConnection;
publicclassTypeBean
{
longid;//主键
Stringlbmc;//类别名称
Stringlbsm;//类别说明
Stringbz;//备注
publicTypeBean()
{
}
publicTypeBean(Stringlbmc,Stringlbsm,Stringbz)
{
super();
this.lbmc=lbmc;
this.lbsm=lbsm;
this.bz=bz;
}
publiclonggetId()
{
returnid;
}
publicvoidsetId(longid)
{
this.id=id;
}
publicStringgetLbmc()
{
returnlbmc;
}
publicvoidsetLbmc(Stringlbmc)
{
this.lbmc=lbmc;
}
publicStringgetLbsm()
{
returnlbsm;
}
publicvoidsetLbsm(Stringlbsm)
{
this.lbsm=lbsm;
}
publicStringgetBz()
{
returnbz;
}
publicvoidsetBz(Stringbz)
{
this.bz=bz;
}
//把新的联系人类别插入TYPE表
publicbooleaninsertNewType()
{
booleanfinish=false;
//把成员变量保存到数据库中
Connectionconnection=MyConnection.getConnection();
Stringsql=
"insertintoTYPE(LBMC,LBSM,BZ)values
('"+lbmc+"','"+lbsm+"','"+bz+"')";
try
{
Statementstate=connection.createStatement();
state.executeUpdate(sql);
state.close();
finish=true;
}
catch(Exceptione)
{
System.out.println("新建联系人类别遇到异常!
");
}
returnfinish;
}
//根据指定的类别名称查询主键id
publicstaticlongfindIdByLbmc(Stringlbmc)
{
Connectionconnection=MyConnection.getConnection();
Stringsql="selectIDfromTYPEwhereLBMC='"+lbmc+"'";
longi=0;
try
{
Statementstate=connection.createStatement();
ResultSetrs=state.executeQuery(sql);
if(rs.next())
i=rs.getLong("ID");
rs.close();
state.close();
}
catch(Exceptione)
{
System.out.println("根据联系人类别名称查询主键遇到异常!
");
}
returni;
}
//根据指定的id查询类别名称
publicstaticStringfindLbmcById(longid)
{
Connectionconnection=MyConnection.getConnection();
Stringsql="selectLBMCfromTYPEwhereID="+id+"";
Stringlbmc=null;
try
{
Statementstate=connection.createStatement();
ResultSetrs=state.executeQuery(sql);
if(rs.next())
lbmc=rs.getString("LBMC");
rs.close();
state.close();
}
catch(Exceptione)
{
System.out.println("根据联系人类别名称查询主键遇到异常!
");
}
returnlbmc;
}
//查询所有联系人类型作为组合框的选项
publicstaticString[]getJComboBoxItems()
{
Connectionconnection=MyConnection.getConnection();
Stringsql="selectLBMCfromTYPE";
try
{
Statementstate=connection.createStatement();
ResultSetrs=state.executeQuery(sql);
rs.last();
intsize=rs.getRow();
Stringtypes[]=newString[size+1];
types[0]="请选择";
rs.beforeFirst();
intn=1;
while(rs.next())
{
types[n]=rs.getString("LBMC");
n++;
}
rs.close();
state.close();
returntypes;
}
catch(Exceptione)
{
System.out.println("查询所有联系人遇到异常!
");
returnnull;
}
}
}
同样地,在PersonBean定义中,我们按照PERSON表的结构定义成员变量,并为每个成员变量定义setter和getter方法。
此外,我们把其他功能模块每次访问PERSON表的代码定义成不同的方法。
packagejavaBean;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.List;
importcommon.MyConnection;
publicclassPersonBean
{
longid;//在PERSON表中的主键
longlbid;//该联系人所属类别在TYPE表中的主键
Stringxm;//该联系人姓名
Stringdh;//电话
Stringsjh;//手机号
Stringgzdw;//工作单位
Stringzz;//住址
Stringyzbm;//邮政编码
publicPersonBean()
{
}
publicPersonBean(longlbid,Stringxm,Stringdh,
Stringsjh,Stringgzdw,Stringzz,Stringyzbm)
{
super();
this.lbid=lbid;
this.xm=xm;
this.dh=dh;
this.sjh=sjh;
this.gzdw=gzdw;
this.zz=zz;
this.yzbm=yzbm;
}
publiclonggetId()
{
returnid;
}
publicvoidsetId(longid)
{
this.id=id;
}
publiclonggetLbid()
{
returnlbid;
}
publicvoidsetLbid(longlbid)
{
this.lbid=lbid;
}
publicStringgetXm()
{
returnxm;
}
publicvoidsetXm(Stringxm)
{
this.xm=xm;
}
publicStringgetDh()
{
returndh;
}
publicvoidsetDh(Stringdh)
{
this.dh=dh;
}
publicStringgetSjh()
{
returnsjh;
}
publicvoidsetSjh(Stringsjh)
{
this.sjh=sjh;
}
publicStringgetGzdw()
{
returngzdw;
}
publicvoidsetGzdw(Stringgzdw)
{
this.gzdw=gzdw;
}
publicStringgetZz()
{
returnzz;
}
publicvoidsetZz(Stringzz)
{
this.zz=zz;
}
publicStringgetYzbm()
{
returnyzbm;
}
publicvoidsetYzbm(Stringyzbm)
{
this.yzbm=yzbm;
}
//把新的联系人保存到PERSON表
publicbooleaninsertNewPerson()
{
booleanfinish=false;
Connectionconnection=MyConnection.getConnection();
Stringsql="insertintoPERSON(LBID,XM,DH,SJH,GZDW,ZZ,YZBM)
values("+lbid+",'"+xm+"','"+dh+"','"+sjh+"','"+gzdw+"',
'"+zz+"','"+yzbm+"')";
try
{
Statementstate=connection.createStatement();
state.executeUpdate(sql);
state.close();
finish=true;
}
catch(Exceptione)
{
System.out.println("新建联系人遇到异常!
");
}
returnfinish;
}
//查询联系人,List对象返回所有满足条件的联系人
publicstaticListselectPerson(Stringsql)
{
Listpersons=newArrayList();
Connectionconnection=MyConnection.getConnection();
try
{
Statementstate=connection.createStatement();
ResultSetrs=state.executeQuery(sql);
while(rs.next())
{
longlbid=rs.getLong("LBID");
Stringxm=rs.getString("XM");
Stringdh=rs.getString("DH");
Stringsjh=rs.getString("SJH");
Stringgzdw=rs.getString("GZDW");
Stringzz=rs.getString("ZZ");
Stringyzbm=rs.getString("YZBM");
//把满足条件的联系人封装在PersonBean中
PersonBeanp=
newPersonBean(lbid,xm,dh,sjh,gzdw,zz,yzbm);
persons.add(p);
}
rs.close();
state.close();
}
catch(Exceptione)
{
System.out.println("查询联系人遇到异常!
");
}
returnpersons;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 项目 管理 KC0210000021 个人 通讯录 平台