基于JAVA个人通讯录管理系统开发与设计Word文件下载.docx
《基于JAVA个人通讯录管理系统开发与设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于JAVA个人通讯录管理系统开发与设计Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
可以一次完成若干条信息的输入;
(3)显示功能:
完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示);
(4)查找功能:
完成按姓名查找通讯信息;
(5)删除功能:
完成按姓名删除通讯信息;
(6)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
3算法分析
3.1程序总体设计思想
个人通讯录件的功能模块有:
(1)提供登陆界面,方便用户进入,满足需求;
(2)添加:
可以添加通讯录记录,依次输入姓名、性别、出生日期、移动电话、固定电话、MSN/QQ、公司地址、E-Mail地址、家庭住址、组别、备注后,会提示是否继续添加;
(3)显示:
可以以表格形式输出所有通讯录里的记录;
(4)查询:
可以用姓名查询;
(5)修改:
输入欲修改的那个人的名字后,再依次输入姓名、性别、出生日期、移动电话、固定电话、MSN/QQ、公司地址、E-Mail地址、家庭住址、组别、备注即可完成修改;
(6)删除:
可以直接删除多余的通讯录记录;
(7)帮助:
可以在帮助里面修改用户密码;
(8)导出数据库:
可以将数据库以文本txt格式导出。
程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。
3.2程序设计总体框图
个人通讯录管理系统设计的总体框图如图3-1:
图3-1个人通讯录管理系统设计的总体框图
3.3程序详细设计
该程序共有18个类,也分别创建了18个java源程序文件,以下按照文件名字母排序先后解释(在设计软件MyEclipse工程排序也是如此),另外在此只是简要介绍相关源程序所实现的功能,程序截图参见调试,源程序参见附录:
Demonstrationaction.java文件做的是功能表中“编辑—查找全部”的功能,使用此项功能的时候,在点击“显示查询结果”后,让界面显示出全部数据库中的内容;
点击“退出全部查询”的时候退出该功能。
Demonstrationframe.java文件做的就是“编辑—查找全部”的界面,上面有标题、文字显示框和两个控制按钮——“显示查询结果”和“退出全部查询”。
Dlframe.java文件做的是“编辑—删除”的界面,有一个文字输入框(提供按名字来删除),和两个控制按钮——“删除”和“放弃”。
Dlframeaction.java文件做的是“编辑—删除”的相关功能,当输入名字之后会进行查找删除,若在数据库中含有当前名字的数据则删除该条数据并显示“删除成功”,否则显示“未找到该项”。
点击“放弃”即退出删除功能。
Fdframe.java文件做的是“编辑—查询”的界面,提供按名字搜索,有一个文字输入框,和两个控制按钮——“查询”和“撤销”。
Fdframeaction.java文件做的是“编辑—查询”的相关功能,输入需要查询的姓名之后,如若在数据库中有符合的数据后,则显示查询结果,并弹窗显示“查询结束”;
如若没有对应的数据,则弹窗显示“没有记录”。
点击“撤销”则退出查询功能。
Fdkeep.java文件做的是“文件—导出数据库”的界面,有一个文字输入框提供输入导出的数据库的完整路径,两个控制按钮——“save”和“giveup”。
Fdkeepaction.java文件做的是“文件—导出数据库”的相关功能,输入了完整路径之后,会启动MicrosoftOfficeAccess导出数据库;
如若路径错误,则会弹窗显示“路径错误!
”。
点击“giveup”后则退出界面。
Frameaction.java文件做的是主界面的相关功能选择。
主界面有三个大选项,文件、编辑和帮助。
其中文件包括导入数据库和退出,编辑包括删除、添加、按姓名查找和查找全部,帮助则是修改管理员密码。
Image.java文件是使主界面支持背景图片的切换,使用的是工程文件夹Images下的U.jpg。
支持任意大小的图片。
Loginframe.java文件做的是主界面的登录界面。
即在程序以javaApplication运行后需要进行用户登录的界面,提供用户名和密码的文本输入框和两个控制按钮——“certain”和“cancel”。
LoginIn.java文件做的是登录界面的相关功能,对输入的用户名与密码和数据库进行匹配,如若正确则弹窗显示“登录成功”,否则弹窗显示“用户名或密码错误”。
Myaddress.java文件做的是定义了一个公共类Myaddress,并定义了主函数是调用这个Myaddress的公共类。
Panelframe.java文件做的是“编辑—添加”的界面,提供给用户向数据库添加新数据,有对于姓名、性别、出生日期、移动电话、固定电话、MSN/QQ、公司地址、E-Mail地址、家庭住址、组别、备注等信息录入的文本输入框。
以及最后的两个控制按钮——“保存”和“取消”。
Panelframeaction.java文件做的是“编辑—添加”的相关功能。
在界面中输入相关信息后,点击保存则系统向数据库存入信息,点击取消则将信息丢弃。
同时还确保信息的相关性,例如控制了出生日期是使用了日期控件的使用等等。
Revisionmovement.java文件做的是“帮助—修改密码”的相关功能。
首先验证用户输入的原始密码是否正确,然后接受用户输入的6位以上的新密码,存入数据库并修改密码信息。
Revisionpassword.java文件做的是“帮助—修改密码”的界面。
界面包括两个旧密码和新密码的文本输入框,和两个控制按钮——“保存”和“取消”。
Year.java文件做的是在出生日期里面的日期控件,对平年闰年的区分,然后对各个月不同日期做了相关定义。
4调试过程
调试是一耳光程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编写出任何好的软件。
这是当初我最开始接触C语言的时候让我感受很深的一句话,我当时很不能理解如果调试真的这么重要,为什么在我们的课本里面却找不到相关的内容,甚至一些相当经典的教材里面也没有对其进行大篇幅的介绍。
直到自己开始写了一些大一点的程序,才发现有时候自己最初设计程序在一些细节上的新颖想法是那么的可笑,带来的只是无穷无尽的错误和威胁。
程序编写完成就应该调试自己所完成的程序,以减少程序中的bug。
以下是我的程序调试以及运行过程截图。
说明:
本程序的运行环境是MyEclipse6.5,经验证在Eclipse中运行会产生错误“ColumnnotFound”,但是最开始我是在MyEclipse中完成的程序,我也就没有去就针对Eclipse进行更改,Linux的环境虚拟机我没有安装,所以不知道在虚拟机Linux下是否能够正常运行。
打开MyEclipse6.5软件,导入Workspace,如图4-1:
图4-1编程环境截图
右键点击工程,选择“Runas—JavaApplication”,成功运行,出现用户登录界面,输入用户名“wj”,密码“123”,如图4-2:
图4-2个人通讯录登入界面
点击“certain”,登录成功,点击确定,进入个人通讯录管理系统,如图4-3:
图4-3个人通讯录管理系统主界面
点击左上角的“文件—导出数据库”,如图4-4:
图4-4导出数据库
输入完整路径之后点击“save”就可以以文本格式保存数据库,例如我们就按照提示输入路径,则数据库的备份文件如图4-5:
图4-5保存的数据库文件
点击“文件—退出”则退出了个人通讯录管理系统。
接下来是对数据库进行添加、编辑、查找、删除等功能。
故先看看数据库的原文件。
注:
本数据库是由MicrosoftOfficeAccess2007创建,如若计算机里面没有Access,编译环境会对Access驱动的设置报错!
数据库如图4-6:
图4-6原始数据库
选择“编辑—添加”对数据库进行添加操作。
输入如下信息,如图4-7:
图4-7信息添加界面
点击“保存”将新加的信息加入数据库,系统会告知“添加成功”。
如图4-8:
图4-8系统信息添加界面
重新查看数据库,可以发现新添加的信息已经加入了数据库。
如图4-9:
图4-9添加信息后的数据库部分截图
由上面操作可以知道,添加功能正常。
选择“编辑—删除”,按照提示输入删除的用户名,如图4-10,就假设我们删除刚才添加的信息:
图4-10删除记录
点击“删除”后,则系统会提示“删除成功”,如图4-11:
图4-11删除成功
重新查看数据库,发现刚才添加的信息已经被成功删除,如图4-12:
图4-12成功删除后的数据库
通过以上的删除操作可以知道,系统的删除功能也是可以正常运行的。
点击“文件—按姓名查找”,输入所需要查找的用户名,如图4-13:
图4-13查找记录
点击“查询”,系统会对数据库进行查找,并提示“查找结束”,如图4-14:
图4-14查找结束
并会弹窗显示所查找的结果,如图4-15:
图4-15查找结果
以上步骤只能说明是正确输入了数据库中包含的数据,如若数据库中未含有被查找的内容,则系统也应该做出正确的反应。
如图4-16,查找数据库中没有的信息:
图4-16输入数据库中没有的用户名
点击“查询”之后,则系统提示“没有记录”,如图4-17:
图4-17查找错误的消息提示
以上通过了正确查找和错误两方面充分论证了查找功能的正常运行。
点击文件“编辑—查找全部”,则会弹出一个空白的查找结果界面,这是因为在程序设计中默认的是不显示所得的信息,如图4-18:
图4-18查找全部界面
然后点击“显示查询结果”,即可显示出全部查询结果。
如图4-19:
图4-19查找全部结果
另外本系统还有一个功能,更改当前用户的密码。
点击“帮助—修改密码”,显示修改密码界面,如图4-20:
图4-20修改密码界面
分别输入当前的旧密码和所更改的新密码,如图4-21:
图4-21输入旧密码和新密码
点击“保存”即可成功修改密码,并可以修改数据库。
如图4-22:
图4-22密码修改成功消息
查看数据库中的表userpass,新密码已经更改成功,如图4-23:
图4-23数据库中的新密码显示
另外需要注意的是,修改的新密码是需要该系统重启生效。
即退出后重新运行该工程才能使新密码生效。
至此,个人通讯录管理系统的调试运行全部完成。
5体会
这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对Java的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
6参考文献
[1]王克宏.Java技术教程(基础篇).清华人学出版社,2002
[2]古大龙.软件开发的形式化方法.高等教育出版社,2005
[3]陈强.Java程序设计.北京:
人民邮电出版社,2001
[4]侯捷.Java编程思想.第2版.北京:
机械工业出版社,2002
[5]HerbertSchildt.Java2参考大全.北京:
清华大学出版社,2002
[6]谭浩强.sqlSever2000数据库实训教程,清华大学出版社,2007
[7]王珊、萨师煊.数据库系统概论,高等教育出版社,2006
附录(源程序)
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.ArrayList;
publicclasscontacts{
intconNum;
Stringname;
Stringtel;
StringQQ;
Stringemail;
Stringaddress;
publiccontacts()
{}
publiccontacts(intconNum)
{
this.conNum=conNum;
}
publiccontacts(intconNum,Stringname,Stringtel,StringQQ,Stringemail,Stringaddress)
{
this.name=name;
this.tel=tel;
this.QQ=QQ;
this.email=email;
this.address=address;
publicintgetconNum()
returnconNum;
publicvoidsetconNum(intconNum)
publicStringgetName()
returnname;
publicvoidsetName(Stringname)
publicStringgetTel()
returntel;
publicvoidsetTel(Stringtel)
this.tel=tel;
publicvoidsetQQ(StringQQ)
this.QQ=QQ;
publicStringgetQQ()
returnQQ;
publicvoidsetEmail(Stringemail)
this.email=email;
publicStringgetEmail()
returnemail;
publicvoidsetAddress(Stringaddress)
this.address=address;
publicStringgetAddress()
returnaddress;
//向数据库中插入联系人基本信息,若插入成功返回true
publicbooleaninsertcontacts()
booleanb=true;
try
{
Connectioncon=SqlConnection.getCon();
Statementstatement=con.createStatement();
Stringsql="
insertintocontactsvalues('
"
+conNum+"
'
'
+name
+"
+tel+"
+QQ+"
+email+"
+address+"
)"
;
//sql=newString(sql.getBytes("
GB2312"
),"
ISO8859_1"
);
//处理汉字乱码
statement.executeUpdate(sql);
statement.close();
con.close();
}
catch(Exceptione)
b=false;
System.out.println("
插入数据遇到异常!
}
returnb;
//根据序号查询基本信息,若查询成功返回true
publicbooleanselectByconNum(StringconNum)throwsException
booleanb=false;
Connectioncon=SqlConnection.getCon();
Statementstatement=con.createStatement();
Stringsql="
select*fromcontactswheresconNum='
ResultSetrs=statement.executeQuery(sql);
if(rs.next())
intno=rs.getInt
(1);
this.setconNum(no);
Stringn=rs.getString
(2);
//n=newString(n.getBytes("
GBK"
this.setName(n);
Stringt=rs.getString(3);
//g=newString(g.getBytes("
this.setTel(t);
Stringq=rs.getString(4);
this.setQQ(q);
Stringe=rs.getString(5);
this.setEmail(e);
Stringa=rs.getString(6);
this.setAddress(a);
b=true;
rs.close();
statement.close();
con.close();
publicbooleandelete(StringconNum)
{booleanb=true;
try{
deletefromcontactswheresconNum='
+conNum+"
statement.executeUpdate(sql);
}
catch(Exceptione)
b=false;
System.out.println("
删除遇到异常!
returnb;
publicbooleanpaixu()
booleanb=true;
try
Statementstatement=con.createStatement();
Stringsql="
select*fromcontactsorderbysconNum"
ResultSetrs=statement.executeQuery(sql);
ArrayList<
String>
list1=newArrayList<
();
list2=newArrayList<
list3=newArrayList<
list4=newArrayList<
list5=newArrayList<
list6=newArrayList<
while(rs.next())
{
list1.add(rs.getString
(1));
list2.add(rs.getString
(2));
list3.add(rs.getString(3));
list4.add(rs.getString(4));
list5.add(rs.getString(5));
list6.add(rs.getString(6));
}
String[]arr1=newString[list1.size()];
String[]arr2=newString[list2.size()];
String[]arr3=newString[list3.size()];
String[]arr4=newStr