JAVA课程设计通讯簿.doc

上传人:仙人指路1688 文档编号:2386996 上传时间:2023-02-17 格式:DOC 页数:45 大小:828KB
返回 下载 相关 举报
JAVA课程设计通讯簿.doc_第1页
第1页 / 共45页
JAVA课程设计通讯簿.doc_第2页
第2页 / 共45页
JAVA课程设计通讯簿.doc_第3页
第3页 / 共45页
JAVA课程设计通讯簿.doc_第4页
第4页 / 共45页
JAVA课程设计通讯簿.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《JAVA课程设计通讯簿.doc》由会员分享,可在线阅读,更多相关《JAVA课程设计通讯簿.doc(45页珍藏版)》请在三一办公上搜索。

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 uid=+uname+and pname=+name+;this.setInfo(DButil.getPerInfo(sql);sql=select pid,pname,pgender,page,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号