个人通讯录管理系统.docx

上传人:b****1 文档编号:2187286 上传时间:2023-05-02 格式:DOCX 页数:31 大小:180.39KB
下载 相关 举报
个人通讯录管理系统.docx_第1页
第1页 / 共31页
个人通讯录管理系统.docx_第2页
第2页 / 共31页
个人通讯录管理系统.docx_第3页
第3页 / 共31页
个人通讯录管理系统.docx_第4页
第4页 / 共31页
个人通讯录管理系统.docx_第5页
第5页 / 共31页
个人通讯录管理系统.docx_第6页
第6页 / 共31页
个人通讯录管理系统.docx_第7页
第7页 / 共31页
个人通讯录管理系统.docx_第8页
第8页 / 共31页
个人通讯录管理系统.docx_第9页
第9页 / 共31页
个人通讯录管理系统.docx_第10页
第10页 / 共31页
个人通讯录管理系统.docx_第11页
第11页 / 共31页
个人通讯录管理系统.docx_第12页
第12页 / 共31页
个人通讯录管理系统.docx_第13页
第13页 / 共31页
个人通讯录管理系统.docx_第14页
第14页 / 共31页
个人通讯录管理系统.docx_第15页
第15页 / 共31页
个人通讯录管理系统.docx_第16页
第16页 / 共31页
个人通讯录管理系统.docx_第17页
第17页 / 共31页
个人通讯录管理系统.docx_第18页
第18页 / 共31页
个人通讯录管理系统.docx_第19页
第19页 / 共31页
个人通讯录管理系统.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

个人通讯录管理系统.docx

《个人通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《个人通讯录管理系统.docx(31页珍藏版)》请在冰点文库上搜索。

个人通讯录管理系统.docx

个人通讯录管理系统

第一章个人通讯录管理系统概述

1.1需求分析

通讯录在当今的日常生活工作中的应用是十分普及的。

每个人都有可能拥有大量的通讯录资料信息,当前大家一般都用手工来记录所有的通讯录信息。

随着时代的进步,人们的联系信息,联系方式变得复杂而多样化,通讯录信息的大量增加,导致管理这些信息资料就成了问题。

直接操作来查找,添加,修改,删除这些信息,由于数据繁多,工作量十分巨大,查找,编辑都十分困难,而且极易出错,容易造成资料的混乱或者丢失。

在各种手机,商务通内设的电话簿尽管携带方便却又存在“记录量少,界面小,浏览不方便,记录数据信息不全面”的缺点。

有些人利用Excel或Word编制通讯录,虽然数据比较全面,信息比较充分,可是查找极其不便,维护起来也麻烦。

所以运用数据库技术,在计算机中建立一个通讯录资料管理系统十分必要。

使通讯录资料管理工作规范化,系统化,程序化,避免资料管理中的混乱,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改通讯录的情况。

1.2系统总体规划

1.2.1系统功能简介

个人通讯录系统。

在明确了系统目标与数据库结构的前提下,设计出该系统的主要功能:

系统登录、数据输入与修改、数据的删除、联系人和群组管理等。

主要功能包括:

(1)可以登录和注册用户;

(2)可以显示已有联系人和分组的基本信息。

(3)用户可以对自己已有的联系人和分组进行维护;如:

删除和修改。

(4)用户可以随意添加自己的联系人和分组;

1.2.2系统功能模块规划

系统的整体功能模块框架如图1.1所示:

图1.2.1系统整体模块框架图

整个系统分为系统登录、群组管理、联系人管理3个子模块,各模块具体实现在下面陈述。

系统登录子模块框架如图1.2所示:

图1.2.2系统登录模块框架图

该子模块中用户在运用这个通讯录系统前要注册成为该系统的用户,每次打开通讯薄前都需要登录系统,以保证用户通讯信息安全性。

同时用户也可随时更改登录时所用的密码,提高安全性。

群组管理子模块框架如图1.3所示:

图1.2.3群组管理模块框架图

该子模块中用户根据自己实际情况对联系人信息可作相应的分组管理,加大通讯薄得灵活性。

联系人管理子模块框架如图1.4所示:

图1.2.4联系人管理模块框架图

该子模块实现用户对联系人的增、删、改、查。

第二章系统数据库设计

2.1数据库需求分析

数据库的需求分析是进行系统功能划分和系统设计最重要的一个环节,根据系统需求分析,大致设计3个数据库表:

用户表(userbase),联系人表(linkbase),群组表(groupbase)。

各个数据表的关系模型如下:

1).用户表(userbase):

(姓名,密码)。

2).联系人表(linkbase):

(编号,姓名,性别,电话,地址,Email,分组)。

3).群组表(groupbase):

(编号,分组)。

2.2数据库字典

表1用户表

字段名

类型

属性

说明

username

文本

用户账号

userpassword

文本

口令

表2联系人表

字段名

类型

属性

说明

name

文本

姓名

sex

文本

性别

phone

文本

电话

address

文本

地址

email

文本

QQ邮箱

group

文本

所属分组

num

文本

主键

编号

表3分组表

字段名

类型

属性

说明

group

文本

群组

grouppnumber

文本

主键

编号

2.3E-R图如下:

这一设计阶段是在系统功能结构图的基础上进行的,设计出能够满足用户需求的各种实体以及它们之间的关系,为后面的逻辑结构设计打下基础。

根据以上的分析设计结果,得到用户实体,联系人实体,分组实体,合计三个实体。

下面来介绍几个主要的实体的E-R图。

1.用户实体

一个安全的通讯录管理系统的职能是保证有进入和管理权限的用户能够进入此系统,并对系统里面的所属功能进行使用,对于没有权限的用户,一定不允许次非法用户有任何的进入和操作权限。

为此,我们得先注册成为此系统合法的用户,并把注册所用的用户名和密码保存在系统的数据库中,并且此时系统会为用户自动生成一个用户编号。

那么当我们以正确的方式,并输入正确的用户名和密码的时候就可以进去用户个人的通讯录系统。

用户实体包括:

用户编号、用户名,密码。

用户信息实体图如图2.3.1所示:

图2.3.1用户信息实体图

2.联系人实体

在个人通讯录系统中,用户使用此系统的目的就是为了更方便快捷的管理、查找、联系用户个人的亲戚、朋友和同事等。

那么联系人就是一个非常庞大的实体,系统必须知道当用户准备联系其中任何一人的时候,用户只要按正确的方式和路径去查找联系人后,系统就应当给出当初用户保存在此系统中联系人的一切相关信息。

联系人实体包含的属性有联系人姓名、性别、电话、地址、QQ号码、所属分组、以及编号。

联系人信息实体图如图2.3.2所示:

图2.3.2联系人信息实体图

3.分组实体

当用户的联系人建立得比较多的时候,为了更好的区分联系人和用户之间的关系,便于用户能够更便捷、快速的查找到用户所需要查找的联系人,系统特地的队联系人进行一个分组,比如分成亲人组、朋友组、同事组、客户组等等一系列的组别。

在建立好这些相关组别之后,当用户查找相关联系人的时候就可以按照组别查找。

分组表实体包含群组和编号。

分组表信息实体图如图2.3.3所示:

图2.3.3分组信息实体图

由上述对各实体的描述,可知系统实体间E-R图如图2.3.4:

 

图2.3.4系统实体间E-R图

 

第三章数据类的编写

在整个系统数据库中,涉及到了三个数据表:

用户表、联系人表、分组表,根据这三个数据表的结构的不同,在这章节内容中,对此分别别编写了一个类来对数据表进行操作。

3.1数据库连接公共类

在对数据表进行操作时,经常要对数据库进行连接的情况,为了避免重复编码,可将这些处理封装到单独的类中,通常称这些类为公共类。

在开发本系统时,对于用户登录、用户注册、对联系人的增删改查以及显示,对分组的增删改以及显示的操作,都涉及到了数据库连接,本系统将这一连接在一个DBTool类中实现。

DBTool类的实现如下:

importjava.sql.Connection;

importjava.sql.DriverManager;

publicclassDBTool{

publicConnectiongetConn(Stringurl){

try{//创建数据库连接驱动

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

returnDriverManager.getConnection(url);

}catch(Exceptione){

e.printStackTrace();

returnnull;

}

}

}

3.2数据表操作类

3.2.1用户表类

在其构造方法中完成数据库连接,代码实现如下:

packagecom.java.valuebean;

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importcom.java.toolbean.DBTool;

publicclassUserBean{

privateConnectionconn=null;

privatePreparedStatementprst;

publicUserBean(){

Stringurl="jdbc:

odbc:

list";

DBTooldt=newDBTool();

conn=dt.getConn(url);

}

}

对用户表的增和查找具体代码实现如下:

publicvoidinsert(Stringstr[]){//添加

try{

PreparedStatementprst=conn.prepareStatement("insertintouserbase(姓名,密码)values(?

?

)");

prst.setString(1,str[0]);

prst.setString(2,str[1]);

prst.executeUpdate();

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicResultSetgetAll(){//查询

ResultSetrs=null;

try{

Statementst=conn.createStatement();

rs=st.executeQuery("select*fromuserbase");

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

3.2.2联系人表类

在其构造方法中完成数据库连接,代码实现如下:

packagecom.java.valuebean;

importjava.sql.*;

importjavax.swing.JOptionPane;

importcom.java.toolbean.DBTool;

publicclassLinkBean{

privateConnectionconn=null;

privateResultSetrs=null;

privateStatementst;

privatePreparedStatementprst;

publicLinkBean(){

Stringurl="jdbc:

odbc:

list";

DBTooldt=newDBTool();

conn=dt.getConn(url);

}

}

对联系人表的增删改查以及显示具体代码实现如下:

publicvoidinsert(Stringstr[]){//添加

try{

prst=conn.prepareStatement("insertintolinkbase(编号,姓名,性别,电话,地址,Email,分组)values(?

?

?

?

?

?

?

)");

…//此处为LinkBean中PreparedStatement对象获取各属性值

prst.executeUpdate();

JOptionPane.showMessageDialog(null,"\t添加成功!

");

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicintdeleteById(Stringid){//删除

intresult=-1;

try{

prst=conn.prepareStatement("deletefromlinkbasewhere编号=?

");

prst.setString(1,id);

result=prst.executeUpdate();

JOptionPane.showMessageDialog(null,"\t删除成功!

");

}catch(SQLExceptione){

e.printStackTrace();

}

returnresult;

}

publicvoidrework(Stringstr[]){//修改

try{

prst=conn.prepareStatement("updatelinkbaseset编号=?

姓名=?

性别=?

电话=?

地址=?

Email=?

分组=?

where编号=?

");

…//此处为LinkBean中PreparedStatement对象获取各属性值

prst.executeUpdate();

JOptionPane.showMessageDialog(null,"\t修改成功!

");

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicResultSetgetById(Stringid){//查询

try{

prst=conn.prepareStatement("select*fromlinkbasewhere编号=?

");

prst.setString(1,id);

rs=prst.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicResultSetgetAll(){//显示所有

try{

st=conn.createStatement();

rs=st.executeQuery("select*fromlinkbase");

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicResultSetgetByGroup(Stringgroup){//显示该分组联系人

try{

prst=conn.prepareStatement("select*fromlinkbasewhere分组=?

");

prst.setString(1,group);

rs=prst.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

3.2.1分组表类

在其构造方法中完成数据库连接,代码实现如下:

packagecom.java.valuebean;

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importcom.java.toolbean.DBTool;

publicclassGroupBean{

privateConnectionconn=null;

privateResultSetrs=null;

publicGroupBean(){

Stringurl="jdbc:

odbc:

list";

DBTooldt=newDBTool();

conn=dt.getConn(url);

}

}

对分组表的增删改以及显示具体代码如下:

publicintinsert(Stringstr[]){//添加

intresult=-1;

try{

PreparedStatementprst=conn.prepareStatement("insertintogroupbase(编号,分组)values(?

?

)");

prst.setString(1,str[0]);

prst.setString(2,str[1]);

result=prst.executeUpdate();

}catch(SQLExceptione){

e.printStackTrace();

}

returnresult;

}

publicintdeleteById(Stringid){//按删除

intresult=-1;

try{

PreparedStatementprst=conn.prepareStatement("deletefromgroupbasewhere编号=?

");

prst.setString(1,id);

result=prst.executeUpdate();

}catch(SQLExceptione){

e.printStackTrace();

}

returnresult;

}

publicvoidrework(Stringstr[]){//修改

try{

PreparedStatementprst=conn.prepareStatement("updategroupbaseset编号=?

分组=?

where编号=?

");

prst.setString(1,str[0]);

prst.setString(2,str[1]);

prst.setString(3,str[0]);

prst.executeUpdate();

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicResultSetgetAll(){//显示

ResultSetrs=null;

try{

Statementst=conn.createStatement();

rs=st.executeQuery("select*fromgroupbase");

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

 

第四章用户登录注册的设计

4.1用户登录功能的概述

当用户开始运行系统中得LoginFrame.java文件时,则进入用户登录页面,如图4.1.1所示:

图4.1.1用户登录界面

为了防止任意用户进入后台进行非法操作,可以设置登录功能。

当用户没有输入用户名和密码,或输入了错误的用户名和密码进行登录时,则会返回登录界面并显示相应的提示信息,如图4.1.2所示:

(a)(b)

(c)

图4.1.2用户登录非法示例图

用户登录模块的操作流程图如图4.1.3所示。

在实现登录功能时,首先对用户输入的用户名和密码进行是否为空的判断,若为空则提示用户输入用户和密码,若都不为空,则获取数据库中用户表中用户名和密码,并与用户输入的用户名和密码进行比对,若错误,则提示用户名或密码错误,若无误,则进入系统界面。

4.2用户登录功能的实现

1.界面设计

该登录界面的设计是用文本框中提交数据实现的,在用户框和密码框中,用户填写用户名和密码,然后按登录按钮,系统从数据库获取用户名和密码与用户用户输入的用户名和密码进行比对。

以下为登录界面的LoginFrame.java的关键代码:

publicLoginFrame(){

super("用户登录");

…//此处为LoginFrame中组件的定义和布局

this.setBounds(500,300,500,500);

this.pack();

this.setResizable(false);

this.setVisible(true);

}

2.创建接受数据并处理登录事务的actionPerformed()方法

在登录界面中,登录将触发button,而监听器将监听到事务的发生,从数据库获取用户名和密码,与用户输入的用户名和密码比对。

其actionPerformed()方法代码如下:

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==loginBtn){

name=userTxt.getText().trim();

pwd=newString(passwordPwd.getPassword());

if(name.equals("")){

JOptionPane.showMessageDialog(null,"用户名不能为空,请重新输入用户名!

","用户名空提示",JOptionPane.OK_OPTION);

userTxt.requestFocus();

return;

}

elseif(pwd.equals("")){

JOptionPane.showMessageDialog(null,"密码不能为空,请重新输入密码!

","密码空提示",JOptionPane.OK_OPTION);

passwordPwd.requestFocus();

return;

}

else{

try{

rs=conn.getAll();

rs.next();

Stringstrs[]=newString[2];

strs[0]=rs.getString

(1);

strs[1]=rs.getString

(2);

if(name.equals(strs[0].trim())&&pwd.equals(strs[1].trim())){

MainFramemain=newMainFrame();

this.dispose();//关闭当前窗口,进入子窗口

}

else{

JOptionPane.showMessageDialog(null,"用户名或密码错误!

","登录失败提示",JOptionPane.OK_OPTION);

}

}catch(SQLExceptionex){

ex=ex.getNextException();

}catch(Exceptionex){

ex.printStackTrace();

}finally{

conn.close();

}

}

}

if(e.getSource()==registerBtn){

RegisterFramere=newRegisterFrame();

Toolkittool=Toolkit.getDefaul

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2