Java通讯录管理系统课程设计报告.doc

上传人:jian****018 文档编号:8890599 上传时间:2020-04-01 格式:DOC 页数:26 大小:1.24MB
返回 下载 相关 举报
Java通讯录管理系统课程设计报告.doc_第1页
第1页 / 共26页
Java通讯录管理系统课程设计报告.doc_第2页
第2页 / 共26页
Java通讯录管理系统课程设计报告.doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
课程设计报告(本科)课程:面向对象分析程序设计学号:姓名:班级:教师:时间:计算机科学与技术系设计名称:通讯录管理系统设计内容、目的与要求:设计内容和目的:随着社会的发展,人际关系变得越来越重要,为了保持良好的人际关系,必须经常与亲戚、朋友、同学、同事和其他一些人保持联系,因此,为了能够快速查找到联系人的信息,节省查找时间,可以创建一个通讯录管理系统。基本要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。计划与进度安排:5月4日5月10日 写需求分析,开会讨论需要实验的功能以及如何实现。5月11日5月16日 概要设计,分组把需求分析得到的系统扩展用例图转换为软件结构和数据结构。5月17日5月22日 详细设计,详细设计每个模块实现算法,所需的局部结构。5月23日5月28日 根据每人分工编写每人负责的代码。5月29日6月2日 整合大家代码,并做debug。6月3日6月6日最后的测试、除错、修改细节以及文档编写。设计过程、步骤(可加页):通讯录管理系统给用户提供了一个在Windows操作系统上运行的通讯录管理平台,用户可以对同学、同事、亲戚、朋友进行在电话号码、姓名以及简介等方面的添加、删除、修改等管理操作。同时系统还可以判断登录用户,根据用户的不同,其拥有的数据库也不同。 通讯录管理系统软件是为用户提供一个保存联系人及信息管理进行辅助的应用软件、功能描述如下。1用户登陆:进入界面后用户可以选择自己的账户进行登陆。2添加联系人:用户根据提示输入联系人的姓名、简介。可一次性输入多个联系人的相关信息。系统将联系人的信息存储在数据库的文件中,以便进行管理、查找和备份。3查询联系人:用以查看联系人的信息以及联系人的电话号码。4. 删除联系人:用以删除联系人的信息以及联系人的电话号码。5修改联系人:提示用户输入要进行修改操作的联系人的信息,如果在文件中有该联系人存在,则将该电话号码所对应的姓名、电话号码、简介以及得票数所对应文件中加以修改。由系统提示是否继续进行修改操作,让用户可多次进行修改操作。需求分析需求分析阶段的主要任务是确定目标系统的功能,设计应用程序的第一个步骤就是根据用户的需求规划系统的功能。作为应用程序的第一要求,也是最主要的要求就是满足用户的需求。如果连这一点都做不到,即使系统的功能再强大、界面再美观,也是一个失败的项目,因为它没有应用价值。因此实用性是衡量软件的第一标准。而系统功能的规划是软件实用性的核心。下面是通讯录管理系统的功能规划。1.系统登录模块包括登录系统和退出应用程序2个功能,其功能结构如图1所示。图1 系统登录窗体功能结构图2.家人信息模块包括添加家人信息、修改家人信息、删除家人信息和查询家人信息4个功能,其功能结构如图2所示。图2 家人信息管理模块功能结构图3.朋友信息模块包括添加朋友信息、修改朋友信息、删除朋友信息和查询朋友信息4个功能,其功能结构如图3所示。图3 朋友信息管理模块功能结构图4.同学信息模块包括添加同学信息、修改同学信息、删除同学信息和查询同学信息4个功能,其功能结构如图4所示。图4 同学信息管理模块功能结构图5.同事信息模块包括添加同事信息、修改同事信息、删除同事信息和查询同事信息4个功能,其功能结构如图5所示。图5 同事信息管理模块功能结构图6.其他信息模块包括添加其他人信息、修改其他人信息、删除其他人信息和查询其他人信息4个功能,其功能结构如图6所示。根据上述功能规划,可以对各功能模块设计功能结构图。图6 其他信息管理模块功能结构图系统结构设计1总体设计本系统的总体思想基于面向对象的程序设计。着重实现管理系统的增、删、改、查等典型的管理功能。因此,系统的设计方法是面向对象设计方法,开发手段是JAVA语言,在eclipse环境下开发。2系统模块结构图依据需求分析结果,通讯录管理系统可以分为以下模块:通讯录管理系统用户登陆模块用户管理模块用户选择模块 图7系统模块结构图系统流程描述: 开始退出用户选择 用户登陆 退出 姓名密码用户功能选择界面 删除联系人浏览联系人修改联系人添加联系人结束否? 否 是 结束 图8系统流程图设计数据库在通讯录管理系统中,我们采用MySQL作为后台数据库,存储系统信息。对于用户信息和联系人信息我们要存储起来,这样可以方便以后的使用,因此我们需要创建一个数据库,这里我们创建了一个名为“db_addresslist”的数据库,创建完数据库,接下来就可以创建所需要的表了,本系统需要两个数据表,一个用于存储用户信息,另一个用户存储联系人信息:(1)根据系统的需要,只有合法用户才能进入系统,为此我们设计了存放用户信息的表tb_user,tb_user表的结构如表A.1所示。表1 tb_user表的结构(2)根据系统的需要,还要能够快速操作联系人的信息,如添加联系人信息、修改联系人信息、删除联系人信息和查找联系人信息,为此我们设计了存放联系人信息的表tb_message,tb_message表的结构如表A.2所示。表2 tb_message表的结构结果与分析(可以加页): 随着社会的发展,人际关系变得越来越重要,为了保持良好的人际关系,必须经常与亲戚、朋友、同学、同事和其他一些人保持联系,因此,为了能够快速查找到联系人的信息,节省查找时间,创建了一个通讯录管理系统,在该系统中为了防止信息被他人窃取,可以通过密码进行验证,只有通过密码验证才能进入系统。通讯录管理系统主窗体界面如图9所示。图9 通讯录管理系统主窗体由于整个系统分为家人、朋友、同学、同事和其他5类,并且这5类信息的操作过程是一样的,所以下面主要以家人信息进行介绍。1 系统运行后,首先进入系统登录模块,效果如图10所示。图10 系统登录窗体2在图10所示的系统登录模块中可以通过输入正确的用户“myz”和密码“123”,单击“登录”按钮进入通讯录管理系统的主窗体界面,通讯录管理系统的主窗体界面如图11所示,可以通过菜单和工具栏进入相应的模块。图11 通讯录管理系统主窗体3在通讯录管理系统的主窗体中,单击“家人”/“添加信息”菜单项,可以打开添加家人信息模块,如图12所示,在该界面中可以输入家人的联系信息,然后单击“保存”按钮,保存此次输入的家人联系信息。图12 添加家人信息模块4在通讯录管理系统的主窗体中,单击“家人”/“修改信息”菜单项,可以打开修改家人信息模块,如图13所示,在该界面中可以修改家人的联系信息,方法是首先在下面的表格中选择要修改的家人信息,然后在编辑组件中输入要修改的内容,单击“修改”按钮,保存此次信息的修改。 图13 修改家人信息模块5在通讯录管理系统的主窗体中,单击“家人”/“删除信息”菜单项,可以打开删除家人信息模块,如图14所示,从表格中选择要删除的家人信息,然后单击“删除”按钮,即可删除所选择的家人联系信息。图14 删除家人信息模块6在通讯录管理系统的主窗体中,单击“家人”/“查询信息”菜单项,可以打开查询家人信息模块,如图15所示,在该界面中默认在表格中显示所有家人的联系信息,也可以从“查询条件:”标签右侧的组合框中选择查询字段,然后在右侧的文本框中输入对应的查询内容,单击“查询”按钮,即可查询出指定条件的家人联系信息。图15 查询家人信息模块设计体会与建议: 本次Java课程设计我们这组做的课题是设计通讯录管理系统,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。实验过程中,首先要将系统要实现的功能分为几大模块,然后每个组员分别完成,在此过程中使我们加深了对Java的理解,以及如何进行团队工作的划分,学会发现各组员的长处并将其发挥出来。通过努力实验,进一步培养我们利用Java语言进行编程和调试程序的能力,同时使我们能够学会用Java语言编写较复杂具有实际意义和算法复杂度较小的程序。与此同时熟练掌握Java语言的编辑,编译,调试程序,并将算法转变为程序实现。正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现。掌握算法的时间分析和空间分析的技术。针对问题的特点选择合适的数据结构,设计实用高效的算法,提高大家的算法设计的能力和动手实验的技能,同时在这次的实验中,培养了我们独立思考、动手操作的能力,在各种其它能力上也都有了提高。在实验中,我们学会了很多学习的方法。而这是日后最实用的。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我的将来也有很大的帮助。以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我都可以在实验结束之后变的更加成熟,会面对需要面对的事情,以及学会遇到问题,不急不慌,慢慢解决它。附录(部分源代码):package cf.background;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import javax.swing.JPanel;public class BackgroundPanel extends JPanel /继承了swing.JPanel,给系统登录窗口和主窗口设置背景private Image image;/ 定义图像对象public BackgroundPanel(Image image)super();/ 调用父类的构造方法this.image=image;/ 为图像对象赋值/* * 重写paintComponent方法 */protected void paintComponent(Graphics g)super.paintComponent(g);/ 调用父类的方法Graphics2D g2 = (Graphics2D) g;/ 创建Graphics2D对象if (image != null)int width = getWidth();/ 获得面板的宽度int height = getHeight();/ 获得面板的高度 / 绘制图像g2.drawImage(image, 0, 0, width, height, this);/用本类作为图像的监听器thispackage cf.db;public class Message /一个封装联系人信息的实体类private String id;/ 编号private String name;/ 姓名private String sex;/ 性别private String birthday;/ 生日private String nation;/ 民族private String zuoji;/ 座机号码private String shouji;/ 手机号码private String qq;/ QQ号码private String email;/ 电子信箱private String address;/ 家庭住址private String youbian;/ 邮政编码private String type;/ 类型private String memo;/ 备注public String getId()/ id的get方法return id;public void setId(String id)/ id的set方法this.id=id;public String getName() return name;public void setName(String name) this.name = name;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public String getBirthday() return birthday;public void setBirthday(String birthday) this.birthday = birthday;public String getNation() return nation;public void setNation(String nation) this.nation = nation;public String getZuoji() return zuoji;public void setZuoji(String zuoji) this.zuoji = zuoji;public String getShouji() return shouji;public void setShouji(String shouji) this.shouji = shouji;public String getQq() return qq;public void setQq(String qq) this.qq = qq;public String getEmail() return email;public void setEmail(String email) this.email = email;public String getAddress() return address;public void setAddress(String address) this.address = address;public String getYoubian() return youbian;public void setYoubian(String youbian) this.youbian = youbian;public String getType() return type;public void setType(String type) this.type = type;public String getMemo() return memo;public void setMemo(String memo) this.memo = memo;package cf.frame;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.net.URL;import java.sql.Timestamp;import java.util.Date;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.WindowConstants;import cf.background.BackgroundPanel;import cf.dao.DAO;public class LoginFrame extends JFrame private JPasswordField pw_password;private JTextField tf_user;public static void main(String args) new LoginFrame().setVisible(true);public LoginFrame() super();setResizable(false);setTitle(系统登录);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setBounds(260,140,355,237);URL url = LoginFrame.class.getResource(/image/login.jpg);/ 获得图片的URLImage image=new ImageIcon(url).getImage();/ 创建图像对象BackgroundPanel gbPanel=new BackgroundPanel(image);/ 创建背景面板gbPanel.setLayout(null);/ 设置背景面板为绝对布局getContentPane().add(gbPanel);/ 将背景面板添加到窗体容器中部final JLabel label = new JLabel();label.setText(用户名:);label.setBounds(61, 75, 66, 18);gbPanel.add(label);final JLabel label_1 = new JLabel();label_1.setText(密 码:);label_1.setBounds(61, 108, 66, 18);gbPanel.add(label_1);tf_user = new JTextField();tf_user.setBounds(112, 73, 169, 22);gbPanel.add(tf_user);pw_password = new JPasswordField();pw_password.setEchoChar(*);pw_password.setBounds(112, 106, 169, 22);gbPanel.add(pw_password);final JButton button = new JButton();button.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) String user=tf_user.getText();/ 获得输入的用户名String password=new String(pw_password.getPassword();/ 获得输入的密码if (user.equals() | password.equals()/ 如果用户名或密码为空JOptionPane.showMessageDialog(null, 用户名和密码不能为空。);elseboolean ok=DAO.okUser(user, password);/ 调用DAO的方法判断用户名和密码if (ok)/ 用户名和密码正确new MainFrame().setVisible(true);/ 创建并显示主窗体LoginFrame.this.dispose();/ 销毁系统登录窗体);button.setText(登 录);button.setBounds(61, 145, 106, 28);gbPanel.add(button);final JButton button_1 = new JButton();button_1.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) System.exit(0);/ 退出应用程序);button_1.setText(u53D6 u6D88);button_1.setBounds(175, 145, 106, 28);gbPanel.add(button_1);package cf.swtdesigner;import java.awt.Image;import java.awt.Toolkit;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Iterator;import javax.swing.ImageIcon;public class SwingResourceManager /SWING资源管理,包括颜色 ,字体图片等private static HashMap m_ClassImageMap = new HashMap();/hashMap哈希映射,基本操作有put(向容器中加入元素)和get(检索与键对象对应的值对象)private static Image getImage(InputStream is) try ByteArrayOutputStream baos = new ByteArrayOutputStream();byte buf = new byte1024 * 4;while (true) int n = is.read(buf);if (n = -1)break;baos.write(buf, 0, n);baos.close();return Toolkit.getDefaultToolkit().createImage(baos.toByteArray(); catch (Throwable e) return null; /* * Returns an image stored in the file at the specified path relative to the specified class * param clazz Class The class relative to which to find the image * param path String The path to the image file * return Image The image stored in the file at the specified path */public static Image getImage(Class clazz, String path) String key = clazz.getName() + | + path;Image image = m_ClassImageMap.get(key);if (image = null) if (path.length() 0) & (path.charAt(0) = /) String newPath = path.substring(1, path.length();image = getImage(new BufferedInputStream(clazz.getClassLoader().getResourceAsStream(newPath); else image = getImage(clazz.getResourceAsStream(path);m_ClassImageMap.put(key, image);return image; /* * Returns an image stored in the file at the specified path * param path String The path to the image file * return Image The image stored in the file at the specified path */public static Image getImage(String path) return getImage(default, path); /$NON-NLS-1$ /* * Returns an image stored in the file at the specified path * param section String The storage section in the cache * param path String The path to the image file * return Image The image stored in the file at the specified path */public static Image getImage(String section, String path) String key = section + | + SwingResourceManager.class.getName() + | + path;Image image = m_ClassImageMap.get(key);if (image = null) try FileInputStream fis = new FileInputStream(path);image = getImage(fis);m_ClassImageMap.put(key, image);fis.close(); catch (IOException e) return null;return image; /* * Clear cached images in specified section * param section the section do clear */public static void clearImages(String section) for (Iterator I = m_ClassImageMap.keySet().iterator(); I.hasNext();) String key = I.next();if (!key.startsWith(section + |)continue;Image image = m_ClassImageMap.get(key);image.flush();I.remove(); public static ImageIcon getIcon(Class clazz, String path) /将文件的路径和集体的类相关联return getIcon(getImage(clazz, path); /* * Returns an icon stored in the file at the specified path * param path String The path to the icon file * return Icon The icon stored in the file at the specified path */public static ImageIcon getIcon(String path) /return getIcon(default, path); /$NON-NLS-1$ /* * Returns an icon stored in the file at the specified path * param section String The storage section in the cache * param path String The path to the icon file * return Icon The icon stored in the file at the specified path */public static ImageIcon getIcon(String section, String path) return getIcon(getImage(section, path); /* * Returns an icon based on the specified image * param image Image The original image * return Icon The icon based on the image */public static ImageIcon getIcon(Image image) if (image = null)return null;return new ImageIcon(image);package cf.dao;import java.sql.*;import java.text.SimpleDateFormat;/import java.util.Date;import java.util.Vector;import javax.swing.JOptionPane;import cf.db.Message;public class DAO / 可以实现对数据库的操作private static DAO dao = new DAO(); / 创建DAO对象public DAO() try Class.forName(com.mysql.jdbc.Driver); / 加载数据库驱动类 catch (ClassNotFoundException e) JOptionPane.showMessageDialog(null, 数据库驱动加载失败。);/* * 获得数据库连接的方法 * * return Connection */public static Connection getConn() / 声明为static可通过类名直接访问该方法try Connection conn = null; / 定义数据库连接String url = jdbc:mysql:/localhost:3306/db_addresslist; / 声明数据库的URL/ localhost/192.168.0.100String user = root; / 数据库用户String password = 123456; / 数据库密码conn = DriverManager.getConnection(url, user, password); / 建立数据库连接return conn; / 返回连接 catch (Exception e) JOptionPane.showMessageDialog(null, 数据库连接失败。n + e.getMessage();return null;/* * 判断用户名和密码的方法 * * param user * 用户名 * param pwd * 密码 * return true用户名和密码正确,false用户名和密码不正确 */public static boolean okUser(String user, String pwd) / 判断登录用户的用户名和密码是否正确try Connection conn = getConn(); / 获得数据库连接/ 创建PreparedStatement对象,并传递SQL语句PreparedStatement ps = conn.prepareStatement(select password from tb_user where username=?);ps.setString(1, user); / 为参数赋值ResultSet rs = ps.executeQuery(); / 执行SQL语句,获得查询结果集if (rs.next() & rs.getRow() 0) / 查询到用户信息String password = rs.getString(1); / 获得密码if (password.equals(pwd) return true; / 密码正确返回true else JOptionPane.showMessageDialog(null, 密码不正确。);return false; / 密码错误返回false else JOptionPane.showMessageDialog(null, 用户名不存在。);return false; / 用户不存在返回false catch (Exception ex) JOptionPane.showMessageDialog(null, 数据库异常!n + ex.getMessage();return false; / 数据库异常返回false/* * 向数据库中添加联系人信息的方法 * * param m * 实体类Message的对象 */public static void insert(Message m) try Connection conn = getConn(); / 获得数据连接/ 创建PreparedStatement对象,并传递SQL语句PreparedStatement ps = conn.prepareStatement(insert into tb_message (name,sex,birthday,nation,phone,handset,qq,email,address,postalcode,sort,memo) values(?,?,?,?,?,?,?,?,?,?,?,?);ps.setString(1, m.getName(); / 通过实例类的实例为第1个参数赋值ps.setString(2, m.getSex(); / 通过实例类的实例为第2个参数赋值/ 创建日期格式化对象,并指定格式ps.setString(3, m.getBirthday();/ SimpleDateFormat format = new/ SimpleDateFormat(YY-MM-dd);/ Date date = format.parse(m.getBirthday(); / 将实体类的生日转换为Date类型/ ps.setTimestamp(3, new Timestamp(date.getTime(); / 通过实例类的实例为第3个参数赋值ps.setString(4, m.getNation(); / 通过实例类的实例为第4个参数赋值ps.setString(5, m.getZuoji(); / 通过实例类的实例为第5个参数赋值ps.setString(6, m.getShouji(); / 通过实例类的实例为第6个参数赋值ps.setString(7, m.getQq(); / 通过实例类的实例为第7个参数赋值ps.setString(8, m.getEmail(); / 通过实例类的实例为第8个参数赋值ps.setString(9, m.getAddress(); / 通过实例类的实例为第9个参数赋值ps.setString(10, m.getYoubian(); / 通过实例类的实例为第10个参数赋值ps.setString(11, m.getType(); / 通过实例类的实例为第11个参数赋值ps.setString(12, m.getMemo(); / 通过实例类的实例为第12个参数赋值int flag = ps.executeUpdate(); / 执行SQL语句,获得更新记录数if (flag 0) JOptionPane.showMessageDialog(null, 添加成功!); else JOptionPane.showMessageDialog(null, 添加失败!);ps.close();conn.close(); / 关闭连接 catch (Exception ex) JOptionPane.showMessageDialog(null, 添加失败!n + ex.getMessage();/* * 修改联系人信息的方法 * * param m * 实体类Message的对象 */public static void update(Message m) try Connection conn = getConn(); / 获得连接String sql = update tb_message set name=?,sex=?, birthday=?, nation=?, phone=?, handset=?, qq=?, email=?, address=?, postalcode=?, sort=?, memo=? where ID=?;PreparedStatement ps = conn.prepareStatement(sql); / 创建PreparedStatement对象,并传递SQL语句ps.setString(1, m.getName(); / 通过实例类的实例为第1个参数赋值ps.setString(2, m.getSex(); / 通过实例类的实例为第2个参数赋值/ 创建日期格式化对象,并指定格式ps.setString(3, m.getBirthday();/ SimpleDateFormat format = new SimpleDateFormat(YY-MM-dd);/ Date date = format.parse(m.getBirthday(); / 将实体类的生日转换为Date类型/ ps.setTimestamp(3, new Timestamp(date.getTime(); / 通过实例类的实例为第3个参数赋值ps.setString(4, m.getNation(); / 通过实例类的实例为第4个参数赋值ps.setString(5, m.getZuoji(); / 通过实例类的实例为第5个参数赋值ps.setString(6, m.getShouji(); / 通过实例类的实例为第6个参数赋值ps.setString(7, m.getQq(); / 通过实例类的实例为第7个参数赋值ps.setString(8, m.getEmail(); / 通过实例类的实例为第8个参数赋值ps.setString(9, m.getAddress(); / 通过实例类的实例为第9个参数赋值ps.setString(10, m.getYoubian(); / 通过实例类的实例为第10个参数赋值ps.setString(11, m.getType(); / 通过实例类的实例为第11个参数赋值ps.setString(12, m.getMemo(); / 通过实例类的实例为第12个参数赋值int id = Integer.parseInt(m.getId(); / 获得编号ps.setInt(13, id); / 通过实例类的实例为第13个参数赋值int flag = ps.executeUpdate(); / 执行SQL语句,获得更新记录数if (flag 0) JOptionPane.showMessageDialog(null, 修改成功!); else JOptionPane.showMessageDialog(null, 修改失败!);ps.close();conn.close(); / 关闭连接 catch (Exception ex) JOptionPane.showMessageDialog(null, 修改失败!n + ex.getMessage();ex.printStackTrace();
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!