基于用户个人电话簿管理系统.docx
- 文档编号:8018049
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:40
- 大小:819.03KB
基于用户个人电话簿管理系统.docx
《基于用户个人电话簿管理系统.docx》由会员分享,可在线阅读,更多相关《基于用户个人电话簿管理系统.docx(40页珍藏版)》请在冰豆网上搜索。
基于用户个人电话簿管理系统
代码行数
767
项目名称
个人电话簿管理系统
1.实训目的
面向对象程序设计课程设计是计算机科学与技术专业培养计划中的重要实践教学环节,旨在通过一个管理信息系统的开发,加深学生对Java语言的理解和应用,尤其是对面向对象编程思想、Java编码规范、图形用户接口、JDBC访问数据库的理解,巩固软件工程课程的相关知识,了解软件开发的基本流程,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。
2.实训内容
使用Eclipse为开发工具,使用RationalRose为建模工具,使用MySQL为数据库服务器,基于JDBC技术,分析、设计并实现一个管理信息系统。
3.需求分析
个人电话簿是日常生活中经常使用的手机APP,具有实用性强,易于理解和分析的特点。
登录:
输入账号和密码,完成登录操作,进入主界面,显示电话簿中的所有联系人姓名以及可进行的相关操作的选项。
退出:
登录后可进行退出操作,结束整个程序。
注册:
输入账户、密码和确认密码完成新用户的注册。
按字典序显示所有联系人的姓名:
登录成功后在主界面中以表格形式按字典序升序显示所有联系人的姓名。
添加联系人:
输入联系人的各项信息,完成联系人信息的添加操作,添加成功后以表格形式按字典序升序显示所有的联系人信息。
删除联系人:
根据联系人的主键,完成联系人的删除操作,删除成功后以表格形式按字典序升序显示剩余联系人的信息。
修改联系人:
输入联系人主键,显示联系人的详细信息,输入每个字段值,完成联系人信息的修改,修改成功后以表格形式按字典序升序显示所有的联系人信息。
查询联系人:
利用模糊查询完成对联系人名称的查询操作,获得包含查询关键字的联系人姓名列表,再输入某个联系人的主键,显示该联系人的详细信息。
3.1附加功能
联系人信息进行导出操作,存储至一个文本文档中。
3.2用例描述
图3.2.1用例图
4.功能设计
4.1系统层次方框图
图4.1系统结构图
4.2算法设计(活动图或时序图)
图4.2登录功能时序图
图4.3登录功能活动图
图4.4注册功能时序图
图4.5注册功能活动图
图4.6显示所有电话簿信息时序图
图4.7显示所有电话簿信息活动图
图4.8电话簿信息添加时序图
图4.9电话簿信息添加活动图
图4.10查询电话簿信息时序图
图4.11查询电话簿信息活动图
5.数据设计
5.1类图设计
根据分析,系统由14个类构成,分别为:
数据库访问层:
DB类
数据封装类:
Login类、User类
业务层:
LoginService类、UserService类
控制层:
Controller类
视图层:
AddView类、DeleteView类、ModifyView类、QueryView类、MainView类、
Operation类
其它:
Test类
系统中各类之间关系如下图所示:
图5.1系统类图
5.1.1.数据库访问层
DB类用于封装JDBC的操作,完成对数据库的直接访问,创建对象,具体内容如下所示:
图5.2数据库访问层类图
5.1.2.数据封装类
Login类和User类分别用于登录、注册操作时的数据封装和电话簿信息管理时的数据封装,具体内容如下图所示:
图5.3数据封装类类图
5.1.3.业务层
LoginService类进行登录、注册等对Login类的访问操作,UserService类进行电话簿信息管理的操作,两者均采用单态模式创建对象,具体内容如下图所示:
图5.4业务层类图
5.1.4.控制层
Controller类用于进行系统的流程控制,具体内容如下所示:
图5.5控制层类图
5.1.5.视图层
MainView类用于完成登录、注册等提示信息的显示和系统主界面的显示,具体内容如下所示:
图5.6MainView类图
Operation接口是增、删、改、查等操作的抽象,AddView类、DeleteView类、ModifyView类、QueryView类均使用Operation接口,分别完成增、删、改、查、导出等操作,利用简单工厂模式与Controller类建立关系,具体内容如下所示:
图5.7视图层类图
5.1.6.其它
Test类是程序的主类,用于启动系统,具体内容如下:
图5.8Test类图
5.2数据表设计
根据概要设计中login类图和User类图可知,系统需要两张表t_login和t_suer,其中,t_login表用于存储登录信息,t_suer表用于存储电话簿基本信息,两张表之间没有关联关系,具体结构如下所示:
表5-2-1t_login表
序号
字段名
类型
长度
备注
1
id
int
11
主键
2
username
varchar
30
唯一性、不为空
3
userpass
varchar
30
不为空
表5-2-2t_user表
序号
字段名
类型
长度
备注
1
id
int
11
主键
2
name
varchar
30
不为空
3
sex
int
10
不为空
4
tel
varchar
10
可为空
6.运行结果
6.1.登录
用户可在系统首界面直接输入账号和密码进行登录,或在注册成功后再进行登录。
登录成功后显示所有通讯录信息和系统主控制界面。
图6.1登录成功后的显示
6.2.添加
“1,选择添加电话簿信息操作,次输入联系人的姓名、电话和性别,完成添加。
添加成功后,显示成功的提示信息,并显示所有电话簿信息和系统主控制界面。
如果添加失败,则显示失败的提示信息,并提示重新输入。
图6.2添加电话簿信息界面
6.3.删除
输入“2”,选择删除电话簿信息操作。
如果输入“123返回删除菜单。
输入要删除的联系人的id(主键)值,完成删除。
删除成功后,显示成功的提示信息,并显示所有电话簿信息和系统主控制界面。
如果删除失败,则显示删除失败的提示信息,并提示重新输入。
图6.3删除电话簿信息界面
6.4.修改
输入“3”,选择修改电话簿信息操作。
如果输入“123返回修改菜单。
输入要修改的用户的id(主键)值,显示该电话簿的信息。
再依次输入要修改的联系人的姓名、电话、QQ号和性别,执行修改操作。
修改成功后,显示成功的提示信息,并显示所有电话簿信息和系统主控制界面。
如果修改失败,则显示删除失败的提示信息,并提示重新输入。
图6.4改电话簿信息界面
6.5.查询
输入“4”,选择查询电话簿信息操作。
如果输入“0”表示返回查询菜单。
输入要查询的联系人名,显示以改名称作为关键字的所有电话簿的信息,之后显示所有通讯录信息和系统主控制界面。
图6.5查询到电话簿息的界面
6.6.退出
输入“0”,表示退出系统,结束整个程序。
图6.6出系统界面
6.7.导出电话本
图6.7电话薄导出文件界面
图6.8导出账单信息位置的界面
7.关键代码
7.1数据库访问类(DB.java)
packageDB;
//创建连接方法每次直接调用获得连接加载数据库类
//重要的参数ip地址+端口,数据库名,用户名,密码
importjava.sql.*;
publicclassDB{
privatestaticConnectioncon;
privatePreparedStatementpre;
privateResultSetrs;
privatestaticDBdb;
static{
try{
Class.forName("com.mysql.jdbc.Driver");//加载驱动
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
privateDB(){
}
publicstaticDBgetInstance(){
if(db==null){
db=newDB();
}
returndb;
}//单态
publicstaticConnectionbuildConnection(){
try{
con=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/demo?
useUnicode=true&characterEncoding=utf-8","root","root");//建立数据库连接
}catch(SQLExceptione){
e.printStackTrace();
}
returncon;
}
publicResultSetexecuteQueryByParam(Stringsql,Object...o){
this.buildConnection();
try{
pre=con.prepareStatement(sql);
for(inti=0;i pre.setObject(i+1,o[i]); } rs=pre.executeQuery(); }catch(SQLExceptione){ e.printStackTrace(); } returnrs; } publicResultSetexecuteQueryNoParam(Stringsql){ this.buildConnection(); try{ pre=con.prepareStatement(sql); rs=pre.executeQuery(); }catch(SQLExceptione){ e.printStackTrace(); } returnrs; } publicintexecuteUpdate(Stringsql,Object...o){ this.buildConnection(); try{ pre=con.prepareStatement(sql); for(inti=0;i pre.setObject(i+1,o[i]); } intcount=pre.executeUpdate(); returncount; }catch(SQLExceptione){ e.printStackTrace(); return0; } } publicvoidclose(){ try{ if(rs! =null){ rs.close(); } pre.close(); con.close(); }catch(SQLExceptione){ e.printStackTrace(); } } } 2、数据封装类 2.1Login.java packageperson; publicclassLogin{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } 2.2User.java packageperson; importjava.sql.*; publicclassUser{ privateintid; privateStringname; privateintsex; privateinttel; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetSex(){ returnsex; } publicvoidsetSex(intsex){ this.sex=sex; } publicintgetTel(){ returntel; } publicvoidsetTel(inttel){ this.tel=tel; } } 3、业务层 3.1LoginService.java packageService; importjava.sql.*; importjava.util.Scanner; importperson.Login; importDB.DB; publicclassLoginService{ privateDBdb; privatestaticLoginServiceservice; privateLoginService(){ db=DB.getInstance(); } publicstaticLoginServicegetInstance(){ if(service==null){ service=newLoginService(); } returnservice; } publicbooleanlogin(Loginlo){ Stringsql="select*fromt_loginwhereusername=? andpassword=? "; ResultSetrs=db.executeQueryByParam(sql,lo.getUsername(),lo.getPassword()); try{ if(rs.next()){ returntrue; } }catch(SQLExceptione){ e.printStackTrace(); } finally{ db.close(); } returnfalse; } publicbooleanregister(Loginlo){ Stringsql="insertintot_login(username,password)values(? ? )"; intcount=db.executeUpdate(sql,lo.getUsername(),lo.getPassword()); db.close(); if(count>0){ returntrue; } else{ returnfalse; } } } 3.2UserService.java packageService; importjava.sql.*; importjava.util.ArrayList; importjava.util.List; importperson.User; importDB.DB; publicclassUserService{ privateDBdb; privatestaticUserServiceservice; privateUserService(){ db=DB.getInstance(); } publicstaticUserServicegetInstance(){ if(service==null){ service=newUserService(); } returnservice; } publicList Stringsql="select*fromt_suerorderbyname"; ResultSetrs=db.executeQueryNoParam(sql); List try{ users=this.getList(rs); }catch(SQLExceptione){ e.printStackTrace(); }finally{ db.close(); } returnusers; } publicList Stringsql="select*fromt_suerwherenamelike? "; ResultSetrs=db.executeQueryByParam(sql,"%"+name+"%"); List try{ users=this.getList(rs); }catch(SQLExceptione){ e.printStackTrace(); }finally{ db.close(); } returnusers; } privateList List Useruser; while(rs.next()){ user=newUser(); user.setId(rs.getInt (1)); user.setName(rs.getString (2)); user.setSex(rs.getInt(3)); user.setTel(rs.getInt(4)); users.add(user); } returnusers; } publicbooleaninsertOneUser(Stringname,intsex,inttel){ Stringsql="insertintot_suer(name,sex,tel)values(? ? ? )"; intcount=db.executeUpdate(sql,name,sex,tel); db.close(); if(count>0){ returntrue; }else{ returnfalse; } } publicbooleandeleteUserById(intid){ Stringsql="deletefromt_suerwhereid=? "; intcount=db.executeUpdate(sql,id); db.close(); if(count>0){ returntrue; }else{ returnfalse; } } publicbooleanupdateUser(intid,Stringname,intsex,inttel){ Stringsql="updatet_suersetname=? sex=? tel=? whereid=? "; intcount=db.executeUpdate(sql,name,sex,tel,id); db.close(); if(count>0){ returntrue; }else{ returnfalse; } } publicUsergetUserById(intid){ Stringsql="select*fromt_suerwhereid=? "; ResultSetrs=db.executeQueryByParam(sql,id); try{ if(rs.next()){ Useruser=newUser(); user.setId(id); user.setName(rs.getString (2)); user.setSex(rs.getInt(3)); user.setTel(rs.getInt(4)); returnuser; } }catch(SQLExceptione){ e.printStackTrace(); }finally{ db.close(); } returnnull; } } 4、视图层 4.1operation.java packageview; //接口 importjava.util.InputMismatchException; importService.UserService; publicinterfaceOperation{ voidoperation(UserServiceservice)throwsInputMismatchException; 4.2AddView.java ackageview; importjava.util.Date; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.InputMismatchException; impo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 用户 个人 电话簿 管理 系统