JAVA课程设计通讯簿_第1页
JAVA课程设计通讯簿_第2页
JAVA课程设计通讯簿_第3页
JAVA课程设计通讯簿_第4页
JAVA课程设计通讯簿_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录一、设计任务与要求31.1 设计任务与要求31.2 选题目的与意义3二、需求分析32.1 用户需求分析32.2 开发环境分析4三、系统设计53.1 系统总体设计53.2 功能模块设计53.3 类的设计63.4 数据库设计12四、程序实现154.1 程序流程图154.2 关键算法与技术实现194.3 类与数据结构实现31五、测试运行365.1 系统测试方案365.2 运行结果分析37六、设计体会45主要参考文献46一、设计任务与要求1.1 设计任务与要求制作一个简单的通讯簿,要求可对朋友的姓名、性别、出生日期、工作单位、手机号码、联系电话、职称、职务、联系地址、邮编、email和qq号等信

2、息保存、查询、修改和删除等功能。具有友好界面,且需要用户名和密码登陆进入系统。使用数据库作为后台连接。1.2 选题目的与意义如今生活节奏日益加快,各种联系人也不短增多,但是很多人还是单纯的使用手机或纸质电话本来记录联系人的信息,这些记录的方式存在很多缺点,如:信息量少,查找不方便;容易丢失;存储照片不方便;安全性不高,隐私性不高这个通讯簿,可以帮助用户更好的存储朋友的相关信息,易于添加、修改,存储和使用都很方便。同时这个系统需要登陆才能进入,提高了通讯簿的安全性和隐私性。通过实现通讯薄功能的实际编程了解基于swing的图形用户界面开发和数据库操作原理,提高swing和jdbc技术结合的综合运用

3、能力。二、需求分析2.1 用户需求分析通讯簿的目的在于帮助用户实现轻松管理联系人的需求。为了用户通讯录的隐私性和安全性,通讯簿进入前需要进行系统登录,对用户的帐号和密码进行合法性验证,登录成功则进入系统功能界面。个人通讯簿登陆系统包括四项功能:登陆、注册、修改密码、删除账号。如果是第一次使用通讯簿,需要进行注册,注册成功后即可登陆通讯簿主界面。在登陆界面,输入已有的账号和正确的密码,还可以进行密码的修改和账号的注销。通讯簿的主系统主要功能包括实现添加、修改、删除、查询联系人的姓名、手机号码等信息,并且连接进数据库,将信息存储进数据库文件中去。程序的文本框中可以显示姓名、手机号码等联系人信息,通

4、过通讯簿轻松实现联系人的增、删、改、查需求。个人通讯簿主系统由四大模块组成:新建联系人、修改联系人、删除联系人、查询联系人,其功能如下:1新建联系人:用来增加联系人,并且将其信息存入系统数据库。信息如:姓名、手机号码、地址、生日、qq等。2修改联系人即编辑联系人,用来对数据库中已有的联系人信息进行编辑,将更新后的信息重新写入到系统数据库。3删除联系人用来删除联系人及其相关信息。4查询联系人用来根据信息内容,查询该信息联系人姓名及其他相关信息。综上所述,此通讯簿的要求如下: 每个用户都有自己的密码,确保通讯簿资料安全; 可以根据用户的需求进行分组的添加和删除; 联系人资料应齐全,包括地址、邮编、

5、电子邮箱等,并且可以进行增、删、改、查; 可以设置联系人的头像;2.2 开发环境分析系统编程基于java swing的图形用户界面开发,数据信息连接后台为access数据库。系统运行环境为运行windows的pc机,具有jdk1.4以上java编译环境和jcreator3.5或eclipse3.0以上java编辑环境,access2003。三、系统设计3.1 系统总体设计进入系统后必须先进行登陆。登陆成功后,即可进入通讯簿主界面。在主界面可以进行联系人的添加和查找。在查看联系人界面中,可以选择修改信息或删除联系人。系统总体设计图如下:图3.1.1 系统总体设计图3.2 功能模块设计为了保证通讯

6、簿的隐私性和安全性,进入系统后必须先进行登陆。同时,可以进行注册、修改密码、删除用户的操作。登陆成功后,即可进入通讯簿主界面。在主界面可以进行联系人的添加和查找。单击添加按钮,界面会切换到联系人信息输入的界面。按照需求录入联系人信息即可单击保存按钮保存该联系人。如有需求,可以选择照片进行联系人相册照片的添加。如果要进行联系人信息的修改或者删除该联系人,单击编辑或删除即可。主界面上方可以键入联系人姓名或编号进行联系人的查找,输入相关信息后单击查找即可。双击主界面左边的菜单中的联系人,即可展开联系人分类。双击分类名称或单击节点连接处,可以展开该分类下的联系人姓名。单击姓名,即可查看该联系人信息。双

7、击联系人姓名或单击节点连接处,可以查看该联系人的相册。3.3 类的设计由于系统需要链接数据库,所以先设计一个类进行数据库的连接。数据库为access2000版本。该类名称为dbutil,是数据库操作类。该类中的属性、方法如下:private static string driver=sun.jdbc.odbc.jdbcodbcdriver;/声明驱动类字符串/声明数据库连接字符串private static string url=jdbc:odbc:driver=microsoft access driver (*.mdb, *.accdb);dbq=db/linkman.mdb;privat

8、e static connection con=null;/声明数据库连接对象引用private static statement stat=null;/声明语句对象引用private static preparedstatement psinsert=null;/声明预编译语句对象引用private static resultset rs=null;/声明结果集对象引用public static connection getconnection()/得到数据库连接的方法public static void closecon()/关闭数据库连接的方法public static boolean

9、check(string user,string pwd)/登陆验证public static int update(string sql)/更新数据库public static boolean isexist(string sql)/某条记录是否存在public static int deluser(string uid)/删除用户public static vector getnode(string user,string condition)/根据条件得到节点名称列表public static int delgroup(string user,string group)/删除分组publ

10、ic static string insertperson(string uid,vector pinfo)/新建联系人public static string updateperson(string uid,vector pinfo)/修改联系人public static vector getperinfo(string sql)/得到联系人信息public static image getpic(string sql)/获取头像public static int insertpic(string path,string pid)/新增照片public static void main(st

11、ring args)设计一个类login来完成登陆界面及其功能。这个类实现了用户登陆、修改密码、注册、用户删除的功能,其属性和方法如下:private jpanel jp=new jpanel();/创建面板容器private jlabel jlarray=new jlabel(账 号),new jlabel(密 码),new jlabel(),;/创建标签数组private jbutton jbarray=new jbutton(登录),new jbutton(注册), new jbutton(修改密码),new jbutton(删除用户);/创建按钮数组private jtextfield

12、 jtf=new jtextfield();/填写账号的文本框private jpasswordfield jpf=new jpasswordfield();/填写密码的文本框public login()/登陆界面public void clear()/清空输入框的信息;并把输入焦点到账号框public void actionperformed(actionevent e) /实现登陆窗体业务功能的方法public static void main(string args)设计类mainframe来实现主窗体的功能,其属性和方法如下:private string uname=null;/当前用

13、户的名字private string pernamebefor=null;/编辑的时候之前的名字private string pergroupbefor=null;/编辑的时候修改之前的分组private boolean searchbyname=true;/true则默认为按姓名查找private boolean isinsert=false;/是否为添加默认为否image image=toolkit.getdefaulttoolkit().getimage(img/txl.jpg);/得到图标对象icon icon = new imageicon(image);private jpanel

14、 jps=new jpanel();/界面上半部分的jpanel容器private jbutton jba=new jbutton(添加);private jbutton jbs=new jbutton(查找);private jtextfield jtfs=new jtextfield();/按给出信息查找联系人信息private jradiobutton jrbxm=new jradiobutton(按姓名查找,true);/选择查找方式的单选按钮private jradiobutton jrbbh=new jradiobutton(按编号查找);/选择查找方式的单选按钮private b

15、uttongroup bg=new buttongroup();/单选按钮组private jpanel jpbr=new jpanel();/单选按钮面板defaultmutabletreenode root= new defaultmutabletreenode(new nodevalue(联系人,0);/界面左下的树 创建树模型 指定节点联系人为根节点defaulttreemodel dtm=new defaulttreemodel(root);private jtree jtz=new jtree();/界面下半部分左边的jtree private jscrollpane jspz=n

16、ew jscrollpane(jtz);/jtree的滚动条private defaulttreecellrenderer dtcr=new defaulttreecellrenderer();/树节点的绘制器private jpanel jpy=new jpanel();/界面下半部分右边界面,布局管理器为卡片布局private jpanel jpyinfo=new jpanel();/右侧显示个人信息的面板/界面下半部分右边的jpanel容器的个人信息栏目里的控件private jlabel jlinfo=new jlabel(用户编号:),new jlabel(姓名:), new jla

17、bel(性别:),new jlabel(年龄:), new jlabel(电话号码:),new jlabel(email:), new jlabel(所属组:),new jlabel(更改照片:), new jlabel(邮编:),new jlabel(地址:), new jlabel(添加相片);private jbutton jbinfo=new jbutton(编辑),new jbutton(保存), new jbutton(删除),new jbutton(浏览), new jbutton(添加分组),new jbutton(删除分组), new jbutton(浏览),new jbut

18、ton(上传), new jbutton(删除);/初始默认的一些分组private string str=朋友,同事,家庭,重要人士,其他;private jcombobox jcb=new jcombobox(str);/分组下拉列表控件private jlabel jlphoto=new jlabel();/显示图像的jlabel控件private jtextfield jtfinfo=new jtextfield10;private jtextfield jtfphoto=new jtextfield();/添加照片到相册的路径private jfilechooser jfcpic=n

19、ew jfilechooser(f:);/上传图像的文件选择器private jfilechooser jfcpho=new jfilechooser(f:);/上传照片的文件选择器/性别部分private jradiobutton jrbmale=new jradiobutton(男,true);private jradiobutton jrbfemale=new jradiobutton(女);private buttongroup bggender=new buttongroup();private jpanel jpgender=new jpanel();/单选按钮面板private

20、jpanel jpyview=new jpanel();/右侧显示多幅照片的面板private jscrollpane jspyview=new jscrollpane(jpyview);/滚动条private jlabel jldetail=new jlabel();/右侧显示一幅图片的标签private jscrollpane jspydetail=new jscrollpane(jldetail);/显示一幅图片标签的滚动条private jlabel jlnopic=new jlabel(没有照片);/没有照片的显示jlabel/图片加载进度条部分private jlabel jppr

21、ogress=new jlabel();/右侧显示图片加载进度的面板private jlabel jlprogress=new jlabel(预览图片加载中.);private jprogressbar jpb=new jprogressbar(jprogressbar.horizontal,0,100);/选中不同树节点时的提示信息部分private jlabel jlroot=new jlabel(icon,jlabel.left);private jlabel jlgroup=new jlabel();/分组节点的jlabelprivate cardlayout cl=new cardl

22、ayout();/创建卡片布局管理器private jlabel jla=null;/照片缓冲数组private jsplitpane jspouter=new jsplitpane(jsplitpane.vertical_split,true);/上下分割的jsplitpaneprivate jsplitpane jspinner=new jsplitpane(jsplitpane.horizontal_split,jspz,jpy);/下面右的jsplitpane/系统托盘部分private popupmenu popup=new popupmenu();private systemtra

23、y tray;/定义systemtray成员变量private trayicon trayicon;/定义trayicon成员变量private menuitem exit=new menuitem(退出程序);/定义菜单private menuitem currently=new menuitem(显示当前用户);/定义菜单public mainframe(string uname)/主类构造器public void initjps()/界面上半部分的初始化public void inittree()/初始化树public void initjpy()/界面右边为卡片布局的jpanel里一些

24、控件的添加public void initinfo()/初始化信息界面public void initgroup()/初始化分组下拉列表public void inittray()/初始化系统托盘public defaultmutabletreenode initpernode(string person)/生成联系人节点public void clearinfo()/清空信息面板public void setinfo(vector pinfo)/将信息向量设置到信息面板中public void setpic(string pid)/设置个人图像显示public void seteditabl

25、e(boolean editable)/设置信息窗口是否可编辑public vector getinfo()/从信息面板得到用户输入的信息public void monitoraddgroupbutton()/监听添加分组按钮public void addgroupnode(string group)/在树上添加分组节点public void monitordelgroupbutton()/删除分组的监听public void delgroupnode(string group)/删除分组节点public void monitordelbutton()/监听删除按钮的方法public void

26、 monitorsavebutton()/监听保存按钮的方法public void monitorsearchbutton()/监听查找按钮的方法public void addpernode(string personname,string group)/添加联系人节点public boolean delpernode(string personname,string group)/删除联系人节点public void monitoruploadbutton()/监听上传照片的方法public void addphonode(string photopath)/在树上添加照片节点public

27、void delphonode(string phoname)/删除照片节点public void viewpic(final defaultmutabletreenode cdmtn) /图片预览public void detailpic(string pname)/显示照片明细public void itemstatechanged(itemevent e)/触发itemstatechanged方法public void actionperformed(actionevent e)/用于接收操作事件的侦听器接口public static void main(string args)辅助类的

28、设计如下:创建树节点用到的参数对象nodevalue类,classcode属性可以知道当前选中的是哪一类节点,如根节点、分组节点、也可以得到节点的名称,用的是value属性,具体如下:class nodevalue string value;/节点字符串名称 int classcode;/ 0 根 1 分组 2 联系人 3 照片 jlabel jla;/缓存图片 public nodevalue(string value,int classcode) /构造器 this.value=value; this.classcode=classcode; public string getvalue(

29、) /得到节点字符串名称 return this.value; public void setvalue(string value) /节点名称发生变化时修改节点名 this.value=value; override public string tostring() /重写tostring方法 return value; 自定义边框类,类中paintborder方法主要实现照片预览时鼠标移动到照片上显示白色边框,具体如下:class myborder extends abstractborder public void paintborder(component c, graphics g,

30、 int x, int y, int width, int height) g.setcolor(color.white);/设置边框颜色为白色 g.drawrect(x,y,width-1,height-1);/画出边框 g.drawrect(x+1,y+1,width-3,height-3);/在画出边框里再画一个边框 3.4 数据库设计 通讯簿系统需要连接后台数据库进行数据的存储。这个通讯簿系统应用的数据库为access。数据库中有3个表,分别用来存储用户名密码、联系人信息和联系人相册。表user用来存储用户名和密码,具体如下:表3.4.1 用户表字段名称数据类型字段大小是否主键说明ui

31、d文本20是用户登录名pwd文本20否登录密码表user e-r 图如下:用户账号密码图3.4.1 用户表e-r图表fri用来存储联系人的相关信息,具体如下:表3.4.2 联系人信息表字段名称数据类型字段大小是否主键说明pid文本20是联系人编号pname文本20否联系人姓名pgender文本4否性别page文本6否年龄pgroup文本20否所属分组pnumber文本12否联系电话pemail文本20否电子邮件ppostalcode文本6否邮政编码padress文本50否联系地址pphotoole 对象n/a否照片uid文本20否所属用户表fri e-r 图如下:图3.4.2 联系人表e-r图

32、表photo用来存储联系人的相册,具体如下:表3.4.2 联系人照片表字段名称数据类型字段大小是否主键说明pid文本2否所属联系人photoname文本50是照片名称photoole 对象n/a否照片数据该表e-r图如下图:图3.4.3 联系人相册表e-r图实体间的简单关系如下图:照片联系人用户隶属隶属nn11图3.4.4 实体间简单关系创建完数据表后,还要建立表间关系。其中包括一对多和多对一的关系,数据库的表间关系具体如下图:图3.4.5 表间关系四、程序实现4.1 程序流程图关于联系人的添加,流程图如下:图4.1.1 联系人添加其中未显示完整行(自上而下,自左向右)为:pinfo.get(

33、9).equals()|pinfo.get(9)=nullpsinsert=con.preparestatement(insert into fri(pid,pname,pgender,page,pnumber, pemail,pgroup,ppostalcode,padress,uid) values(?,?,?,?,?,?,?,?,?,?)psinsert=con.preparestatement(insert into fri(pid,pname,pgender,page,pnumber, pemail,pgroup,ppostalcode,padress,uid,pphoto) val

34、ues(?,?,?,?,?,?,?,?,?,?,?) )psinsert.setstring(i,pinfo.get(i)关于联系人的修改,流程图如下:图4.1.2 联系人修改其中未显示完整行(自上而下,自左向右)为:pinfo.get(9).equals()|pinfo.get(9)=nullpsinsert=con.preparestatement(update fri set pname=?,pgender=?,page=?,pnumber=?,pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=? where pid=+pinfo.get(0).

35、trim()+)psinsert=con.preparestatement(update fri set pname=?,pgender=?,page=?,pnumber=?,pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid=+pinfo.get(0).trim()+);file f=new file(pinfo.get(9); byte b=new byte(int)f.length();fileinputstream fin=new fileinputstream(f);fin.read(b);fin.cl

36、ose();psinsert.setbytes(10,b);psinsert.setstring(i,pinfo.get(i)关于联系人的删除,流程图如下:图4.1.3 联系人删除其中未显示完整行(自上而下,自左向右)为:string personname=jtfinfo1.gettext().trim();string persongroup=(string)jcb.getselecteditem();string pid=jtfinfo0.gettext().trim();int index=joptionpane.showconfirmdialog(this,是否删除?y/n,确认对话框

37、,joptionpane.yes_no_option,joptionpane.question_message);boolean b=this.delpernode(personname,persongroup);string sqla=delete from photo where pid=+pid+;string sqlb=delete from fri where pid=+pid+;dbutil.update(sqla);int i=dbutil.update(sqlb);/joptionpane.showmessagedialog(this,删除成功,删除,joptionpane.i

38、nformation_message);this.clearinfo();关于联系人的查找,流程图如下:图4.1.4 联系人查找其中未显示完整行(自上而下,自左向右)为:string name=jtfs.gettext().trim();string sql=;joptionpane.showmessagedialog(this,请输入查找条件,错误,joptionpane.warning_message);sql=select pid,pname,pgender,page,pnumber,pemail,pgroup,ppostalcode, padress from fri where ui

39、d=+uname+and pname=+name+;this.setinfo(dbutil.getperinfo(sql);sql=select pid,pname,pgender,page,pnumber,pemail,pgroup,ppostalcode, padress from fri where uid=+uname+and pid=+name+;this.setinfo(dbutil.getperinfo(sql);4.2 关键算法与技术实现这个通讯录的最主要功能就是用户的注册、登陆、修改密码、删除以及联系人和联系人信息的增、删、改、查。下面是这些主要功能的算法代码:1.用户的注册

40、、登陆、修改密码、删除功能的实现:public void actionperformed(actionevent e)/实现登陆窗体业务功能的方法/得到账号和密码string user=jtf.gettext().trim();string pwd=string.valueof(jpf.getpassword();string sql=;/声明sql语句if(e.getsource()=jtf)/事件源为文本框 切换输入焦点到密码框jpf.requestfocus();else if(e.getsource()=jbarray0|e.getsource()=jpf)/判断账号和密码是否匹配 查

41、询数据库if(dbutil.check(user,pwd)/登陆成功mainframe mf=new mainframe(jtf.gettext(); /登陆进主窗体this.dispose();/释放登陆窗体else/登陆失败jlarray2.settext(账号或密码错误);this.clear();/清空输入窗口else if(e.getsource()=jbarray1)/事件源为注册按钮if(user.equals()|pwd.equals()/如果注册的账号为空或者密码为空jlarray2.settext(账号和密码都不能为空);this.clear();/清空输入文本框else

42、sql=select uid from user where uid=+user+;if(dbutil.isexist(sql)/账号已经存在jlarray2.settext(账号已存在,请重试);this.clear();/清空输入文本框elsesql=insert into user values(+user+,+pwd+);if(dbutil.update(sql)0)/注册成功jlarray2.settext(注册成功,请登陆);else if(e.getsource()=jbarray2)/修改密码的监听/先判断是否输入账号和密码if(user.equals()|pwd.equals

43、()jlarray2.settext(请先输入账号、密码);this.clear();/清空输入文本框/判断是否输入了正确的账号和密码else if(dbutil.check(user,pwd)/正确的账 号和密码string password=joptionpane.showinputdialog(this,修改密码:,请输入新密码,joptionpane.plain_message);/得到新的密码为空if(password=null|password.equals()joptionpane.showmessagedialog(this,密码不能为空,错误,joptionpane.warn

44、ing_message);else/密码不为空sql=update user set pwd=+password+ where uid=+user+;/更新密码的sqlif(dbutil.update(sql)0)/密码修改成功this.clear();/清空输入文本框jlarray2.settext(修改成功,请用新密码重新登陆);elsejoptionpane.showmessagedialog(this,账号或密码错误,错误,joptionpane.warning_message);this.clear();/清空输入文本框else if(e.getsource()=jbarray3)/

45、删除用户if(dbutil.check(user,pwd)/密码和用户都对的情况int yn=joptionpane.showconfirmdialog(this,是否删除?,删除,joptionpane.yes_no_option);if(yn=joptionpane.yes_option)int count=dbutil.deluser(user);jlarray2.settext(用户+user+删除成功+共删除了+count+个联系人);this.clear();/清空输入文本框else/密码和账 号不匹配jlarray2.settext(账号或密码错误);this.clear();/清空输入文本框2.联系人的增加实现:public static string insertperson(string uid,vector pinfo)/新建联系人 string ispathnull=isnotnull;/传过来的图像是不是合法,默认不为空trycon=getconnection();/得到数据库连接if(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论