Java课程设计 个人通讯录管理系统Word格式文档下载.docx
《Java课程设计 个人通讯录管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java课程设计 个人通讯录管理系统Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
需求分析
2.1功能需求
(1)登陆功能。
用户可以直接输入用户名和密码,登陆进入通讯录的主功能界面。
(2)注册功能。
其他用户可以输入自己的用户名和密码及确认密码,来实现注册成为该通讯录的使用者。
(3)查询功能。
在该功能里,用户可以采用模糊查询和精确查询两种查询方式来对自己存储的联系人信息进行查询。
(4)添加功能。
在该功能里,用户可以添加自己的常用联系人和分组信息。
(5)修改功能。
此功能里,用户可以修改数据库中已存的联系人信息和分组信息,以及个人的登陆密码。
(6)删除功能。
在该功能里,用户可以输入自己想要删除的分组名和联系人姓名。
(7)备份功能。
用户可以通过保存对话框,选择自己想要保存的联系人信息的路径,然后将其保存为txt文件。
(8)退出功能。
用户可以选择退出程序,也可以选择重新登录。
(1)系统的容错能力。
在做该系统时,一定要考虑全面可能出现错误信息的地方,然后加上trycatch语句进行捕捉,防止造成系统故障。
(2)系统的对话框提示。
当注册用户时,用户名有重复时,提示不可注册;
注册密码与确认密码不同时,也要弹出提示,不允许注册等等一系列对话框弹出提示。
(3)在使用数据的查询语句时,尽量使用存储过程提交,方便了对数据库的查询,同时也提高了查询速度。
(4)便捷性。
尽量用户界面做的简洁大方美观,有很好的用户界面交互能力,也使用户使用起来更加方便。
2.2系统的开发运行环境
本系统开发平台:
Java+sqlserver2008
本系统集成开发环境:
Eclipse
本系统运行环境:
windows7家庭普通版
总体设计
3.1系统体系结构设计
在登陆界面,如果不是该系统的用户的可以点击注册用户名和密码。
如果已经是该系统的用户的,可以输入用户名和密码后,登陆进入主功能界面,在主功能界面里,用户可以对通讯录实现以下功能:
查询、添加、修改、删除、备份,退出等功能。
具体功能结构图如下:
3.2系统功能模块及主要类设计
本通讯录系统主要包括三大模块:
用户登录模块、用户注册模块、主功能模块。
(1)用户登录模块。
在该模块里,用户可以输入用户名和密码,如果用户名或密码为空,则会提示“用户名不能为空”或“密码不能为空”;
如果数据库里没有匹配的,则提示“用户名或密码错误!
”然后将光标返回到用户名文本框中;
如果和数据库里的匹配,则提示“成功登陆!
”,进入主功能界面。
(2)主功能界面。
在该模块里,用户可以实现对联系人信息、分组名称的查询、添加、修改、删除,可以对联系人信息进行备份,可以退出程序或重新登陆进入程序。
(3)用户注册模块。
在该模块里,非系统用户可以进行注册,成为该系统的使用者。
在注册的过程中,如果系统中存在用户名,则提示“用户名已存在!
”;
如果密码和确认密码不同,则提示“两次密码输入不一致!
”,否则提示“恭喜您注册成功!
”。
(1)BookManage.java。
该类主要用于实现用户登录界面,包括如何使用正确的用户名、密码进行登录,如何对面板进行布局,如何实现用户登陆界面与主界面的连接等。
(2)Add_user.java。
该类主要用于实现新用户注册界面,包括新用户如何注册成为该通讯录系统的使用者,以及一些注册界面的设计和布局。
(3)BookWindow.java。
该类为用户主功能界面,在该类里,包括菜单、菜单项的设计,以及实现查询、添加、修改、删除、备份和退出功能的界面布局设计和它们的功能的实现。
并且这些功能基本上都在一个窗体下的面板里显示的。
(4)ModifyContactuser。
该类主要用于实现联系人信息的修改功能。
包括窗体组件的布局和设计,以及要修改的联系人的默认信息的显示在文本框里等。
(5)Search.java。
该类中定义了一系列的公有的、静态的变量。
目的是为了获取要修改的联系人的所有信息,以便当要修改联系人时弹出的窗口里面有联系人信息的默认值。
(6)User.java。
该类主要是为了当用户修改密码时,原用户的用户名和密码默认都已在文本框里显示了,用户不必再手动输入自己的用户名和密码,只需输入自己要修改后的密码就行,方便了用户的使用。
3.3数据库设计
(1)数据表的设计
根据系统的需求,在该数据库中主要建立了3个表,分别为:
联系人表(contactUser125)、分组表(contactGroup125)、用户表(systemUser125)。
联系人表(联系人编号(intidentity(100000,1))、联系人姓名(varchar(10))、性别(char
(2)check(sex='
男'
orsex='
女'
))、出生日期(date)、家庭住址(varchar(50))、邮编(char(6))、电话(varchar(12))、手机(char(11))、Email(varchar(20))、QQ(varchar(12))、MSN(varchar(20))、公司地址(varchar(50))、公司电话(varchar(12))、分组编号(smallint)、备注(varchar(100)))。
分组表(分组编号(smallintidentity(1000,1))、分组名(varchar(20))、用户编号(tinyint))。
用户表(用户编号(tinyintidentity(100,1))、用户名(varchar(10))、用户密码(char(16)))。
(2)数据完整性设计
实体完整性:
在创建表的过程中已经为表contactUser125的主键设为contactid列,contactGroup125的主键设为groupid列,systemUser125的主键设为userid。
域完整性:
在创建contactUser125表的的过程中,就已经对sex列做了check约束,即只能是‘男’和‘女’;
然后,对于contactUser25表里的Email列创建了名为email_constraint的check约束,规定每个Email的格式必须包含@.com。
参照完整性:
在创建表的过程中,已经把contactGroup125的外键列userid参照了systemUser125表里的userid,把contactUser125表里的外键列groupid参照了contactGroup125表里的groupid列。
(3)存储过程设计
在本通讯录系统中,我一共做了十个存储过程。
创建查询用户个人创建的所有联系人信息的存储过程search_all_info1,这是一个无参的存储过程,通过该存储过程,用户可以快速的获取contactUser125表里的联系人信息。
创建一存储过程insert_systemUser,形参为@username,@userpassword,该存储过程可以向形参传递增加的用户名和密码,然后向systemUser125表里增加一条记录。
创建一存储过程insert_contactUser,形参为@contactName,@sex,@birthday,@homeAddress,@postcode,@telephone,@handset,@Email,@QQ,@MSN,@companyAddress,@companyPhone,@remark。
该存储过程可以向形参传递要增加的联系人信息,然后向contactUser125表里增加一条记录。
详细设计与实现
4.1登录模块
1功能设计
用户输入正确的用户名和密码后点击“登录”按钮则可以进入到该通讯录管理系统,如果输入错误,则提示“用户名或密码错误!
”,如果用户名为空,则提示“用户名不能为空!
”,如果密码为空,则提示“密码不能为空!
”
2.界面设计
3模块算法(或重要代码段)
当用户点击“登录”按钮时,由于登录按钮添加了监听器,所以会产生一个监听动作,即系统会主动获取文本框中输入的用户名和密码,连接数据库,然后和数据库中systemUser125表中的username和userpassword列的数据相比对,如果完全匹配,则进入主功能界面,否则失败。
当用户点击“取消”按钮时,使用System.exit(0)自动退出系统。
当用户点击“注册”按钮时,则弹出注册窗口。
4调试与测试
当用户名为空时,会弹出提示信息“用户名不能为空!
当密码为空时,会弹出信息“密码不能为空!
”当用户名或密码和数据库中的不匹配时,则会弹出提示信息“用户名或密码错误!
4.2注册新用户模块
用户在登录界面点击“注册”时,会弹出一个注册新用户的窗口,在这个窗口里,想要使用该系统的人需填写用户名、密码、确认密码来注册成为该系统的用户。
2界面设计
3模块算法
当用户点击“注册新用户”按钮时,由于该按钮添加了监听器,所以系统会发现用户点击了它,并且会产生一个监听动作,即获取用户名、密码和确认密码文本框中的字符串,然后通过连接数据库和使用数据库的SQL语句,将从文本框中读取到的字符串插入到数据库中的systemUser125表中,实现注册功能。
当用户点击“退出”按钮时,由于按钮添加了监视器,系统会产生一个监听动作,即退出该界面。
4调试与测试
如果用户名为空时,会弹出提示信息“用户名不能为空!
如果用户名框中输入的字符在数据库中已经存在,则会弹出提示信息“该用户名已存在!
如果密码框为空时,系统会弹出提示信息“密码不能为空!
如果确认密码框为空时,会弹出提示信息“请输入确认密码!
如果密码框和确认密码框中输入的字符串不同的话,则会弹出提示信息“两次密码输入不一致!
4.3查询模块
在该功能里,用户可以选择“模糊查询”和“精确查询”两种操作,如果用户选择“模糊查询”的话,则又可以选择“按姓名查询”、“按分组查询”、“按手机号码查询”三种方式,这三种方式属于复选框类型的,用户可以根据自己的需要选中自己的查询方式,然后在该方式的文本框中输入内容,查询即可。
如果用户选择“精确查询”的话,也可以选择“按姓名查询”、“按手机号查询”、“按QQ号查询”这三种方式里的一种方式,选中查询方式后,在文本框中输入字符串,点击查询即可。
模糊查询
精确查询
模糊查询算法
当用户点击了“查询”按钮时,会产生一个监听动作,这个监听动作为:
首先要加载数据库连接,然后定义一个StringBuffer类型的字符串str,并给他赋初值为SQL语句的查询语句字符串,然后使用if条件判断三种查询方式中,哪些方式被选择了,然后把被选择的查询方式所对应的where条件采用str.append()方式,追加到SQL语句中,然后把StringBuffer类型的字符串用toString()方法转换为String类型,最后把查询的结果在表格组件中显示出来。
精确查询算法
当用户点击“查找”按钮时,会产生一个监听动作,这个监听动作为:
首先要加载数据库连接,然后定义一个StringBuffer类型的字符串str1,并给它赋初值为"
SELECT*FROMcontactUser125where1=0"
,然后采用if...elseif...elseif条件来判断用户选择的是哪一个单选框,如果选择“按姓名查询”单选框,则在str1后面调用append方法追加"
orcontactName='
"
+jt4.getText()+"
'
,否则的话,如果选择“按手机号查询”,则在str1后面追加"
orhandset='
,否则的话,如果选择“按QQ号查询”,则在str1后面追加"
orQQ='
,最后将str1调用toString()方法转换为String类型,最后将查询的结果在表格组件中显示出来。
刚开始对于模糊查询也有自己的想法,那就是把复选框中所有可能的条件组合全都列出来,然后由系统去判断用户选择的复选框组合属于哪一种,然后再去查询结果,后来,觉得这样做,会有点麻烦,最后,在向老师请教后,终于有了简单的可行的方法,那就是定义一个StringBuffer类的对象,然后去判断哪一个复选框被选中了,把被选中的复选框的条件,追加到where条件中,这样就实现了简便的模糊查询。
而对于精确查询的实现,也就慢慢地迎刃而解了。
4.4添加模块
1.功能设计
在该功能里,用户可以添加新的分组和新的联系人信息到数据库的相应的表中。
添加分组
添加联系人
由于在“添加”按钮里添加了监听器,执行的监听动作为:
首先获得一个数据库的连接,然后调用getText()方法获得文本框中输入的字符串,用isSelected()方法判断输入单选框里被选中的项,用getSelectedItem()方法获得下拉列表框里被选中的项。
然后用SQL语句将字符串和项写入到数据库里相对应的表里面。
在调试的过程中,当点击“添加”按钮时,会出现以下提示信息:
如果分组名为空,则提示“分组名不能为空!
”,如果要添加的分组名在数据库里已经存在,则会弹出提示信息“该分组已存在!
”,否则的话,分组名添加成功。
在添加联系人时,如果姓名为空的话,会弹出提示信息“姓名不能为空!
”,如果要添加的姓名在数据库中已存在,则提示“姓名已存在!
”的信息。
在添加联系人时,遇到的主要问题是,刚开始在实现从数据库查找出分组名,然后在把分组名添加到列表框里的过程中,一直出现问题,后来在同学的帮助下,终于实现了这个功能。
具体的实现措施是先从数据库中的contactGroup125表里查询出所有的分组名,把它放在一个一维的字符串数组里,然后再把这个一维数组添加到列表组件中。
4.5修改模块
在该功能里,要实现的主要功能是,可以修改分组名,即在列表框里选择要修改的分组名,然后在下面的文本框里写出修改后的分组名就可以修改了;
还可以修改联系人信息,用户选择要修改的联系人后,弹出一个包含所有联系人信息的窗口,用户只需修改自己想要修改的信息即可;
另外,用户还可以修改自己的密码,由于在文本框里已经默认的把用户名和密码写在文本框里了,所以用户在修改时,只需填写修改后的密码和确认密码即可。
修改分组信息
修改联系人信息
修改密码
首先从数据库里查找出当前contactGroup125表中所有分组名称,然后把分组名放到一维字符串数组listGroupname1[]里,然后把这个一维数组添加到列表框jcgroup1里,在修改分组名时,先从列表框里选择要修改的分组名称,以及从文本框里输入修改后的分组名称,当点击“确认修改”按钮时,就会获得一个数据库连接,然后利用SQL语句,把分组信息的修改反映到数据库里。
当修改联系人信息时,首先要从文本框里获取要修改的联系人信息,然后从数据库里查找该联系人是否存在,如果存在,则弹出一个窗口,由于在添加联系人信息时,已经把所有的文本框里的信息都赋给了search类里的静态成员变量,然后又把这个类所获取的信息,给该窗口定义了初值,所以在这个窗口里包含着用户在添加联系人信息时所填写的所有信息,用户在修改时,只需修改自己想要改动的信息即可,然后点击“修改”按钮,就会通过SQL语句将修改后的信息存入数据库中。
修改密码算法与修改联系人信息的算法大致相同,也是定义一个类来获取用户登录时的用户名和密码,然后在修改密码时,在把这些获取的用户名和密码设为文本框的默认值,用户在修改时,只需填写“新密码”和“确认密码”即可,然后把修改后的值通过SQL语句反映到数据库中。
在修改分组名时,当点击“确认修改”按钮时,如果修改后的分组名为空,则弹出提示信息“修改后的分组名不能为空!
如果修改后的分组名在数据库中已存在,则弹出提示信息“修改后的分组名在数据库中已存在!
”,否则,修改成功!
在修改联系人信息时,当点击“查找”按钮时,如果联系人姓名为空时,则提示“联系人姓名不能为空!
”,如果联系人姓名在数据库中不存在,则提示“该联系人不存在!
”,否则,弹出修改联系人信息的窗口。
在修改用户密码时,当点击“提交”按钮时,如果“新密码”为空,则提示“新密码不能为空!
”,如果“新密码”和“确认密码”输入的不同时,则提示"
新密码和确认密码不一致!
,否则,提示,修改成功。
在这个模块里,我遇到的主要问题就是如何把前面登录时的用户名和密码成为修改密码时相应文本框里的默认值,在和同学的交流和自身的学习后,最终得以解决。
4.6删除模块
在该功能里,用户可以输入自己要删除的分组名或者联系人名来删除分组或者联系人信息。
删除分组
删除联系人
当点击“删除”按钮时,系统会从文本框里获取已经输入的要想删除的分组名,然后把它和数据库里的分组名进行比较,如果数据库里有该分组名,则实现删除。
与实现删除分组的算法完全相同,这里就不在陈述。
在删除分组时,当点击“删除”按钮时,如果分组名为空,则提示"
分组名不能为空!
,如果分组名在数据库中不存在,则提示"
该分组不存在!
否则,删除成功!
在删除联系人是,当点击“删除”按钮时,如果联系人姓名为空时,则提示"
联系人姓名不能为空!
,如果联系人姓名在数据库中不存在,则提示"
联系人不存在!
否则删除成功。
4.7备份模块
就是实现一个简单的把联系人信息保存为txt文件,而且自己可以选择保存路径,方便以后的使用。
首先建立一个二维字符串数组backup[][],然后把从数据库中读到的联系人信息全部都存储到该二维数组里,然后新建一个JFileChooser类的对象chooser2,然后用该对象调用showSaveDialog()方法,弹出一个保存对话框,接着用chooser2调用chooser2.getSelectedFile().getAbsolutePath()来新建一个文件类的对象f2,再用该文件类新建一个StringBuffer类的对象fin,然后调用该类的write方法将联系人信息循环写入到txt文本文件中。
在做的过程中,虽然花费了一些时间,中间也遇到了一些问题,但最终还是自己独立解决了。
4.8退出模块
在该功能里,主要实现了退出程序和重新登录的功能。
在退出程序中,主要调用java的System.exit(0)来退出整个系统。
在重新登录功能中,主要是采用新建一个登录类的对象,然后将现有窗口隐藏的方法来实现。
由于该部分比较简单,没有遇到问题。
小结和展望
在此次java课设中我做的是一个《个人通讯录管理系统》,早在做课设之前,我就一直想过要做一个这样的系统,所以在我们数据库综合实验时,我就选择了做个人通讯录的数据库系统,因而在做java课程设计时,也正好派上了用场。
该开始做java课设时,本来想着应该很简单,几天就能搞定,因为我之前做过一个相类似的系统,也算有点经验吧,寻思着就借用之前的思路和方法直接拿过来用就行。
后来我又想,不能这样做,因为如果我还按之前的套路走的话,可能会很快完成这次课设,但是却不会对我的编程能力和编程思想有任何提高,于是我决定,开辟新思路,体现出和之前的不同,于是我便着手了自己的创作。
在做的过程中,遇到了不少的问题,首先就是关于复合查询的问题,最终在老师您的帮助下得以解决,其次遇到的问题就是如何把前面登录系统时用到的用户名和密码作为修改密码功能里面的用户名和密码文本框里的默认值,以及如何把所有的功能的组件都在一个窗体里显示,最终在和同学交流的过程中得以解决。
在这次课设还存在的问题就是,由于我缺乏编程经验,导致变量的定义有点混乱,太多了,有时如果自己不仔细的往前找找,也不说不清某个变量的含义了,虽然在后面的编程中已经开始注意到了这个问题了,但是由于前面的变量太多,所以也没有修改。
在以后的编程中我会更加注意这个问题的。
这次课程设计也让我学到了很多东西,其一是个人的独立思考能力和老师同学之间的相互交流相结合。
就是在我们遇到问题时,首先一定要自己动脑想一想该如何解决问题,在这个过程中可以查阅资料,因为只有自己经过深思熟虑做出来的才会记忆更深刻,其次,如果自己实在想不出来,可以向同学或老师请教来解决问题,但这样解决问题之后,自己一定要消化吸收成为自己的东西,才能学以致用;
其二是进步是在不断地挑战自我中实现的,一成不变只能原地踏步。
就拿我个人来说,以前我用java做过一个类似的系统,可能如果我直接用那个系统里我现有的成果来做这个通讯录系统,也许2,3天或3,4天就能完成,但是这样重复的做一件事情可能最终只是更加熟练了自己以前会的东西,对自己也不会有任何提高,虽然重新做的这个系统花费了我不少的时间才完成它,但是,在做它的过程中,让我的java水平有了新的进步,我想,无论是学什么,我们只有不断地遇到问题,解决问题才能获得不断地进步和提高。
对于java这门语言,以后如果还有机会再和它接触或研究它的话,有了这次的经验和心得,我想我会做得更好的!
参考文献
[1]耿祥义,张跃平.Java大学实用教程.北京:
电子工业出版社,2012.
[2]孙家广,杨长青.计算机图形学[M].北京:
清华大学出版社,1995.
[3]李旭东,宗光华,毕树生等.基于J2EE的排课系统关键问题研究[J].华北科技学院报,2002,28(3):
249-252.
附录
使用说明书
(1)还不是该系统的用户可以在登录界面点击注册按钮,注册成为该系统的用户。
(2)已经是该系统的用户在登录界面直接输入自己的用户名和密码进入系统。
(3)登录进入系统后,用户可以选择菜单项里的功能,如增、删、改、查、退出、备份等。