企业即时通讯课程设计.doc_第1页
企业即时通讯课程设计.doc_第2页
企业即时通讯课程设计.doc_第3页
企业即时通讯课程设计.doc_第4页
企业即时通讯课程设计.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

福建农林大学计算机与信息学院课程设计报告课程名称:软件工程课程设计题目:企业即时通讯姓 名:系:计算机系专 业:计算机科学与技术专业年 级:学 号:承担角色:同组组长:同组其他成员:实验地点:指导教师:职 称:完成起止日期:年月福建农林大学计算机与信息学院课程设计结果评定评价内容评价指标评分权值评定成绩业务水平有扎实的基础理论知识和课程知识;能正确设计实验方案;独立进行实验工作;能运用所学课程知识和技能去发现与解决实际问题0.2设计质量实验正确,分析处理科学;设计结果有应用价值;图纸绘制符合国家标准,质量符合要求;计算及测试结果准确;工作中有创新意识;对前人工作有改进或突破,或有独特见解; 0.4工作量、工作态度按期完成规定的任务,工作量饱满,难度较大;工作努力,遵守纪律;工作作风严谨务实0.2报告质量文字通顺,技术用语准确,符号统一,编号齐全,书写工整规范,图表完备、整洁、正确;0.2合 计1.0指导教师签字:评定日期:目录企业即时通讯11.课程设计概述(目的、任务、开发环境)11.1 目的11.2 任务11.3开发环境12.项目的可行性研究与需求分析22.1可行性研究22.1.1经济可行性22.1.2技术可行性22.1.3法律可行性22.2需求分析22.2.1用户需求分析22.2.2功能需求分析22.2.3用例图33.项目设计的基本原理和采用的主要方法与技术(体现方案)33.1项目基本原理33.2主要方法与技术44.本人实现项目的过程与步骤44.1 查询用户54.1.1 精确查询54.1.2 模糊查询64.2 添加用户64.3 修改用户74.4重置密码74.5重置所有密码85.课程设计完成结果分析与个人小结85.1成果分析85.1.1正确进入服务器界面85.1.2点击用户管理面板105.1.3测试查询功能115.1.4测试添加用户125.1.5修改用户165.1.6删除用户175.1.7测试重置密码185.1.8测试重置所有密码195.2个人小结195.2.1个人遇到的困难195.2.2个人心得196. 附录197.参考文献3333企业即时通讯1.课程设计概述(目的、任务、开发环境)1.1 目的通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用软件工程课堂上所学的软件开发方法和知识,比如,软件项目的完整设计与开发过程、结构化技术、快速原型法和面向对象方法等。特别是结构化分析、结构化设计、快速原型开发、面向对象分析与面向对象设计。为学生适应毕业后团队合作开发规模稍大项目和综合应用本专业所学习的多门课程知识(例如,软件工程、程序设计语言、操作系统、数据库、网络编程等)创造实践机会。为学生提供主动学习(比如,对Web网页设计、ASP或ASP交互网页技术、Java开发环境、商用数据库应用、电子商务、客户机/服务器技术、Visio与Rose软件工具等内容的学习)、积极探索与大胆创新的机会。使学生通过参加小组团队的开发实践,了解项目管理、团队合作、文档编写、口头与书面表达的重要性。使每个学生了解软件工具与环境对于项目开发的重要性,并且重点深入掌握好一、两种较新或较流行的软件工具或计算机应用技术、技能(比如,网页设计技术与常见工具;基于Java(ASP、PHP等)技术的Web编程;软件开发文档编制工具Office、Visio、Rose等;商用数据库Access(或SQL Server、Oracle、MySql等)设计与实现;客户机/服务器结构)。通过“稍大的”富有挑战性的软件实验项目开发实践,为学生提供主动学习(比如,对Web网页设计、ASP或ASP交互网页技术、Java开发环境、商用数据库应用、电子商务、客户机/服务器技术、Visio与Rose软件工具等内容的学习)、深入实践的机会,并且通过课程设计实践中,提高学生的自学能力、书面与口头表达能力、创造能力和与团队其他成员交往和协作开发软件的能力,提高学生今后参与开发稍大规模实际软件项目和探索未知领域的能力和自信心。1.2 任务本次课程设计的任务是,做出一个尽量简化,开发成本较低,能够模拟出满足基本功能可正常实现的企业即时通讯软件。该软件是一款服务于企业内部,部门与部门、员工与员工、企业与员工之间正常办公通讯,公告发送等的一种工具,方便办公,节省企业内部通讯费用。便于公司管理各个用户。1.3开发环境Java Jdk1.6 Window Xp 2.项目的可行性研究与需求分析2.1可行性研究2.1.1经济可行性所需购置的硬件,软件为个人计算机和Java Jdk1.6编程软件,两者已经具有,不必另行购置。由于此次开发为课程设计需要,费用只需为购置少量笔记,打印。本软件可以减小用户精力花费和工作时间。通过本系统软件,能够服务于企业内部,员工与员工、部门与部门、企业与员工之间正常办公通讯、公告发送等,在满足员工的沟通习惯的同时,又解决了企业制度和网络安全等问题,一举两得。2.1.2技术可行性由于此次选题难度较小,个人对于完成的模块所需掌握的知识较为熟悉,所以风险较小,系统开发所需的各类软件、硬件等资源和相应的工作环境都完全具备。整个系统属于规模较小的项目。尽管其在组织关系上存在着很大的复杂性,繁琐性,不确定性,但是就整个系统的技术构成上来看,它还是属于一个C/S的软件。需要用到的技术较多,知识要求较高。遇到的问题比较多,需要不断的解决技术方面的问题。2.1.3法律可行性此次课程设计所完成的项目没有设计到法律问题。2.2需求分析2.2.1用户需求分析用户运行客户端软件进行登录,然后选择对象进行聊天沟通分为私聊和群聊。也可以随时修改密码,并通过聊天窗口看到最新的公告信息。 运行服务器端软件,可以进行对用户信息的查询、添加、修改、删除、重置密码、重置所有密码的操作。2.2.2功能需求分析前台功能:用户登录功能,用户之间的私聊和群聊功能,修改密码功能,网络设置功能。后台功能:管理员管理功能,服务器管理功能,用户管理的添加、删除、修改、重置密码、重置所有密码查询用户的功能,日志管理功能。2.2.3用例图服务器端: 客户端:3.项目设计的基本原理和采用的主要方法与技术(体现方案)3.1项目基本原理当用户点击登录时,客户端发起请求与服务端建立连接,登录信息首先在客户端做验证,然后通过填写的服务器IP地址申请与服务端建立连接。而在服务器端,有一个主线程专门创建SOCKET服务,等待客户端的连接,每当客户端发起连接的申请时,与之建立连接,并创建一个线程,将建立的连接交给这个线程处理,并将连接存入一个集合中,用于后续业务的处理。然后服务器将反序列化客户端传输过来的数据,生成一个用户对象。从中获取登录填写的信息,根据用户名和密码在数据库中查找数据,如果能够找到表示登录成功,反之,登录不成功。最后将登录的结果通过文本发送给客户端发送给服务端。最后,如果通过验证,得到一个标志,进入聊天主窗体,否则弹出登录失败的对话框,让用户重新登录。3.2主要方法与技术本软件模拟了以java语言为实现的网络即时通信工具,采用了C/S模型。服务器在C/S模型中处于一个中心地位。服务器一般同时为多个客户提供服务,这就造成了服务器设计的复杂性。即时通讯服务器是数据中心,它是客户活动的中介,需要同时应对众多客户的请求。主要方法:socket服务,由于数据库没完成,所以用文件流读写技术代替数据库来实现登录的账号的储存。在进行多个窗口通信的时候,采用多线程技术来实现。4.本人实现项目的过程与步骤创建用户管理面板。在“用户管理”面板,管理员可以对用户进行增删改查的工作。本面板由查询模块、用户信息表、用户信息操作模块组成。用户信息表中显示用户的所有属性,包括账号、姓名、年龄、性别、地址、状态、注册时间。在面板右上方,则以蓝色字体显示总记录数。用户信息表及总记录数将实时更新。在默认状态下,用户信息操作模块中除了按钮、按钮可以使用以外,其他按钮都处于灰色不可用状态。若有用户处于“在线”状态,则按钮也不可用。当管理员选择“用户信息表”中任何一个状态为“离线”的用户时,界面下方的、按钮将会处于可用状态。当所有用户都处于“离线”状态时,则按钮处于可用状态,否则将处于灰色不可用状态。4.1 查询用户4.1.1 精确查询4.1.2 模糊查询4.2 添加用户管理员点击按钮时,程序将弹出一个“添加用户”的窗口。窗口中“编号”的内容是程序自动生成、“在线状态”默认为“离线”、“注册时间”为当前精确时间。4.3 修改用户管理员选择任何一个状态为“离线”用户,并且点击按钮时,则会弹出一个“修改用户”的窗口。4.4重置密码管理员选择任何一个状态为“离线”用户,并且点击按钮时,则会弹出一个“重置密码”的窗口。4.5重置所有密码5.课程设计完成结果分析与个人小结5.1成果分析5.1.1正确进入服务器界面 首先,点击,在端口正确时,点击。 5.1.2点击用户管理面板5.1.3测试查询功能在编号内输入00001,点击按钮。5.1.4测试添加用户对于输入数据不符合要求的以红色字体报错:姓名只能是1-10个的中文年龄只能20-150之间性别只能男与女当通过所有验证时,弹出用户添加成功。并在用户信息表中添加该用户信息。5.1.5修改用户选中“用户信息表”中的一行,然后点击修改用户。按输入条件修改信息后,点击按钮。5.1.6删除用户选中00012条信息,点击按钮:点击按钮后,“用户信息表”中就没了删掉编号为00012的信息:5.1.7测试重置密码选中00008号的信息,点击重置密码:5.1.8测试重置所有密码5.2个人小结5.2.1个人遇到的困难程序在编程中由于对界面方面编程的不熟悉,常常出现一个界面完成之后跳转不到指定的界面,经常产生多个界面同时存在的情况。在小组成员的帮助下,并且查阅了相关的书籍与网络资料,最后解决了方面的问题。在跳转界面时参数的合理传递,用户体验的完善,是我此次课程实习的较大收获。在查询时,对sql语句的不熟悉也经常出错,对于模糊查询的理解不足,也是此次课程设计中较大的问题。通过此次设计,也让我更进一步的掌握了sql语句。5.2.2个人心得此次的课程设计,让我体会到了团队合作对于一个项目的完成是重中之重。只有队员们之间互相帮助,保持协调的步伐。按照需求、设计、编码、测试、运行等步骤,对项目的整个流程进行合理的安排、队员间的协调,才能保证一个项目的顺利完成。这也让我深深体会到了书本上理论的作用,加深了我对书本知识的理解。对于编码中出错时,不急不躁的解决问题,队员的帮助、书籍的查阅等方面是该次课程设计中最常发生的事件。如何在实际项目中合理充分的使用书本知识,是相当重要的。6. 附录软件配置:Java Jdk1.6 Window Xp 个人完成的程序模块:package usermanage;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.util.Vector;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.DefaultTableModel;import usermanageLister.userManageLister;import dao.impl.UserDaoImpl;import frame.MainServerFrame;public class UserManage extends JPanel JButton buttonAdd = new JButton(添加用户);JButton buttonAlt = new JButton(修改用户);JButton buttonDel = new JButton(删除用户);JButton buttonReset = new JButton(重置密码);JButton buttonResetAll = new JButton(重置所有密码);JButton jbuttonNorth = new JButton(查询);JTextField textField_01 = new JTextField();JTextField textField_02 = new JTextField();MainServerFrame mainServerFrame;private JTable userTable;private DefaultTableModel defaultTableModel = null;JLabel labelNorth = new JLabel(总记录数:);public UserManage(MainServerFrame mainServerFrame) this.mainServerFrame = mainServerFrame;this.setLayout(new BorderLayout();init();private void init() / 用户管理界面JPanel panel2 = new JPanel(new BorderLayout();/ 1.北边JPanel panel2North = new JPanel();textField_01.setPreferredSize(new Dimension(120, 25);textField_02.setPreferredSize(new Dimension(120, 25);panel2North.add(new JLabel(编号:);panel2North.add(textField_01);panel2North.add(new JLabel(姓名:);panel2North.add(textField_02);panel2North.add(jbuttonNorth);panel2North.add(labelNorth);/ 中间面板JPanel panel2Centre = new JPanel(new BorderLayout();VectorVector data = new UserDaoImpl().selectAllUsers();labelNorth.setText(总记录数:+data.size()+);labelNorth.setForeground(Color.blue);defaultTableModel = new DefaultTableModel();defaultTableModel.setDataVector(data, tableHeader();userTable = new JTable() / 1单元格不可以编辑Overridepublic boolean isCellEditable(int row, int column) return false;userTable.setModel(defaultTableModel);/ 2设置表头行高userTable.getTableHeader().setPreferredSize(new Dimension(0, 30);/ 3设置表内容行高userTable.setRowHeight(25);/ 4设置单选模式userTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);/ 5设置单元格不可拖动userTable.getTableHeader().setReorderingAllowed(false);/ 6设置不可改变列宽userTable.getTableHeader().setResizingAllowed(false);/ 7设置列宽setColWidth();/ 监听事件userTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() public void valueChanged(ListSelectionEvent e) if (e.getValueIsAdjusting() / 连续操作int rowIndex = userTable.getSelectedRow();if (rowIndex != -1) / System.out.println(表格行被选中+rowIndex);buttonAlt.setEnabled(true);buttonDel.setEnabled(true);buttonReset.setEnabled(true); else buttonAlt.setEnabled(false);buttonDel.setEnabled(false);buttonReset.setEnabled(false););JScrollPane scrollPaneCentre = new JScrollPane();scrollPaneCentre.setViewportView(userTable);panel2Centre.add(scrollPaneCentre);panel2Centre.setBorder(BorderFactory.createTitledBorder(用户信息表);/ 南边JPanel panel2South = new JPanel();buttonAlt.setEnabled(false);buttonDel.setEnabled(false);buttonReset.setEnabled(false);panel2South.add(buttonAdd);panel2South.add(buttonAlt);panel2South.add(buttonDel);panel2South.add(buttonReset);panel2South.add(buttonResetAll);userManageLister uml = new userManageLister(this, mainServerFrame);buttonAdd.addActionListener(uml);buttonAlt.addActionListener(uml);buttonDel.addActionListener(uml);buttonReset.addActionListener(uml);buttonResetAll.addActionListener(uml);jbuttonNorth.addActionListener(uml);panel2.add(North, panel2North);panel2.add(panel2Centre);panel2.add(South, panel2South);this.add(panel2);public Vector tableHeader() Vector header = new Vector();header.add(编号);header.add(名字);header.add(年龄);header.add(性别);header.add(是否在线);header.add(住址);header.add(注册时间);return header;/设置列宽public void setColWidth()userTable.getColumnModel().getColumn(0).setPreferredWidth(35);userTable.getColumnModel().getColumn(1).setPreferredWidth(40);userTable.getColumnModel().getColumn(2).setPreferredWidth(25);userTable.getColumnModel().getColumn(3).setPreferredWidth(25);userTable.getColumnModel().getColumn(4).setPreferredWidth(50);userTable.getColumnModel().getColumn(5).setPreferredWidth(100);userTable.getColumnModel().getColumn(6).setPreferredWidth(135);/刷新数据public void refreshUserTable()VectorVector data = new UserDaoImpl().selectAllUsers();defaultTableModel.setDataVector(data, tableHeader();defaultTableModel.fireTableDataChanged();labelNorth.setText(总记录数:+data.size()+);public JButton getButtonAdd() return buttonAdd;public JButton getButtonAlt() return buttonAlt;public JTable getUserTable() return userTable;public JButton getButtonDel() return buttonDel;public JButton getButtonReset() return buttonReset;public JButton getButtonResetAll() return buttonResetAll;public JButton getJbuttonNorth() return jbuttonNorth;public JTextField getTextField_01() return textField_01;public JTextField getTextField_02() return textField_02;/ public static void main(String args) / new UserManage();/ package usermanage;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridLayout;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import dao.bean.UserBean;import frame.MainServerFrame;import usermanageLister.UserAltListner;public class UserAltJDialog extends JDialog SimpleDateFormat simpleDateFormat = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String time = simpleDateFormat.format(new Date();MainServerFrame ServerFrame=null;JButton buttonSave = new JButton(保存);JButton buttonCencel = new JButton(取消);JTextField fieldNum = new JTextField();JTextField fieldNam = new JTextField();JPasswordField fieldPasssword = new JPasswordField();JTextField fieldAge = new JTextField();JTextField fieldSite = new JTextField();JTextField fieldSsex = new JTextField();JTextField fieldOn = new JTextField(离线);JTextField fieldLogin = new JTextField(time);JLabel labelwarn = new JLabel();UserBean userBean;public UserAltJDialog(MainServerFrame ServerFrame, UserBean userBean) super(ServerFrame); this.ServerFrame=ServerFrame;this.userBean = userBean;init();this.setTitle(修改用户对话框);this.setSize(new Dimension(380, 240);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);this.setVisible(true);/ TODO Auto-generated constructor stubprivate void init() JPanel panelAlt = new JPanel(new BorderLayout();JPanel panelCentre = new JPanel(new GridLayout(6, 1);JPanel panelNum = new JPanel();fieldNum.setPreferredSize(new Dimension(250, 23);panelNum.add(new JLabel(编 号:);panelNum.add(fieldNum);fieldNum.setEditable(false);fieldNum.setText(userBean.getSid();JPanel panelNam = new JPanel();fieldNam.setPreferredSize(new Dimension(90, 23);fieldPasssword.setPreferredSize(new Dimension(90, 23);panelNam.add(new JLabel(姓 名:);panelNam.add(fieldNam);fieldNam.setText(userBean.getSname();panelNam.add(new JLabel(密 码:);panelNam.add(fieldPasssword);fieldPasssword.setEditable(false);fieldPasssword.setText(userBean.getSpassword();JPanel panelSex = new JPanel();fieldSsex.setPreferredSize(new Dimension(80, 23);fieldAge.setPreferredSize(new Dimension(100, 23);panelSex.add(new JLabel(性 别:);panelSex.add(fieldSsex);fieldSsex.setText(userBean.getSsex();panelSex.add(new JLabel(年 龄:);panelSex.add(fieldAge);fieldAge.setText(userBean.getNage();JPanel panelSite = new JPanel();fieldSite.setPreferredSize(new Dimension(100, 23);fieldOn.setPreferredSize(new Dimension(80, 23);panelSite.add(new JLabel(地 址:);panelSite.add(fieldSite);fieldSite.setText(userBean.getSaddress();panelSite.add(new JLabel(在线状态:);panelSite.add(fieldOn);fieldOn.setEditable(false);fieldOn.setText(userBean.getNisonlin();JPanel panelLogin = new JPanel();fieldLogin.setPreferredSize(new Dimension(250, 23);panelLogin.add(new JLabel(注册时间:);panelLogin.add(fieldLogin);fieldLogin.setEditable(false);fieldLogin.setText(userBean.getDregtime();panelCentre.add(labelwarn);panelCentre.add(panelNum);panelCentre.add(panelNam);panelCentre.add(panelSex);panelCentre.add(panelSite);panelCentre.add(panelLogin);JPanel panelSouth = new JPanel();panelSouth.add(buttonSave);panelSouth.add(Box.createHorizontalStrut(100);panelSouth.add(buttonCencel);UserAltListner s = new UserAltListner( this, ServerFrame);buttonSave.addActionListener(s);buttonCencel.addActionListener(s);/panelAlt.add(panelCentre);panelAlt.add(South, panelSouth);this.add(panelAlt);public JButton getButtonSave() return buttonSave;public JButton getButtonCencel() return buttonCencel;public JTextField getFieldNum() return fieldNum;public JTextField getFieldNam() return fieldNam;public JPasswordField getFieldPasssword() return fieldPasssword;public JTextField getFieldAge() return fieldAge;public JTextField getFieldSite() return fieldSite;public JTextField getFieldSsex() return fieldSsex;public JTextField getFieldOn() return fieldOn;public JTextField getFieldLogin() return fieldLogin;public JLabel getLabelwarn() return labelwarn;/ public static void main(String args) / new UserAltJDialog();/ package usermanage;import java.awt.Dimension;import java.awt.GridLayout;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import usermanageLister.UserAddLister;import dao.impl.UserDaoImpl;import frame.MainServerFrame;public class UserAddJDialog extends JDialog SimpleDateFormat simpleDateFormat = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String time = simpleDateFormat.format(new Date();MainServerFrame ServerFrame;JButton buttonSave = new JButton(保存);JButton buttonCencel = new JButton(取消);JTextField fieldNum = new JTextField();JPasswordField fieldPasssword = new JPasswordField();JTextField fieldName = new JTextField();JTextField fieldAge = new JTextField();JTextField fieldSex = new JTextField();JTextField fieldSite = new JTextField();JTextField fieldOn = new JTextField(离线);JTextField fieldLogin = new JTextField(time);JLabel labelwarn = new JLabel();public UserAddJDialog(MainServerFrame serverFrame) super(serverFrame);this.ServerFrame = serverFrame;init();this.setTitle(添加用户对话框);this.setSize(new Dimension(300, 450);this.setLocationRelativeTo(serverFrame);this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);this.setModal(true);this.setVisible(true);private void init() JPanel panelAdd = new JPanel(new GridLayout(10, 1);JPanel panelNum = new JPanel();fieldNum.setPreferredSize(new Dimension(130, 23);String nextsid = new UserDaoImpl().getNextSid();fieldNum.setText(nextsid);panelNum.add(new JLabel(编 号:);panelNum.add(fieldNum);fieldNum.setEditable(

温馨提示

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

评论

0/150

提交评论