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