资源描述
面向对象技术课程设计A 任务书
一、课程设计目的
“面向对象技术”是计算机科学及技术专业的核心专业课,面向对象程序设计技术也是软件工程师的基本技能,“面向对象课程设计”的目的是理解和巩固面向对象程序设计的基本理论、原理和方法的重要的实践环节。
本课程设计综合应用学生所学知识,结合小型应用系统的设计,建立面向对象程序设计的概念,理解和巩固封装、类及对象、继承及多态、JAVA数据结构、多线程、IO、UI设计及UML等知识,掌握常用设计模式知识以及分层设计思想,为后续课程的学习打下良好的基础。
二、课程设计阶段教学内容及任务
本课程设计分二个阶段,第一阶段为课程知识的复习及巩固,教学形式为讲授及训练相结合(算法及程序设计基础课程设计实施计划);第二阶段为项目实战案例及职业素养教育,以学生编程训练为主,在这一阶段,学生需要以分组为单位,完成以下实训项目:人事管理系统。
三、选题要求、学时分配和辅导
选题要求
(1)以学号的最低位为选题依据,每人1题,独立完成各自的任务。
(2)任务完成后,以小组为单位,独立撰写课程设计报告并打印。
四、评分和验收标准
1评分标准
课程成绩组成:
平时+任务合作及设计质量+课程设计报告质量
2验收标准
教师根据设计报告、软件的运行演示和学生回答问题的情况评定成绩。
(1)设计报告规范、完整,概念原理论述清楚、软件设计结构合理,独立完成设计,软件运行正常,能够突出表现多道程序运行的特点,回答问题准确明了,可以评为优秀(A)。
(2)设计报告规范、完整,概念原理论述清楚、软件设计结构合理,独立完成、软件基本运行正常,能够表现多道程序运行的特点,回答问题正确,可以评为良(B)。
(3)设计报告规范、概念原理论述基本清楚、软件设计结构合理,基本独立完成,软件基本运行正常,基本能够表现多道程序运行的特点,回答问题部分正确,可以评为中良(C)。
(4)设计报告基本规范、概念原理论述基本清楚、软件设计结构基本合理,部分独立完成,软件基本可以运行,基本能够表现多道程序运行的特点,回答问题部分正确,可以评为及格(D)。
(5)设计报告不规范、概念原理论述不清楚、软件设计结构不合理,大部分不能独立完成,软件基本不能运行,回答问题大部分不正确,可以评为不及格(E)。
五、设计的基本步骤
(1) 需求分析
查找相关技术资料,了解基本原理,根据题目要求的功能,确定运行流程。.
(2) 设计软件的界面
程序运行界面要求使用中文或中英文对照.。
(3) 总体设计、
用UM图实现:用例图、类图、状态图、时序图
确定软件的总体结构、模块关系、总体流程;
确定开发要使用的语言环境;
要解决的关键技术问题。
(4) 详细设计
确定要使用的函数、API,掌握它们的使用的参数和返回值。
确定模块内部的流程和实现算法;
确定要设计的过程、构件、类、对象、函数和它们的参数。
(5) 编码设计
建立设计编程的环境;
注意编程的风格的规范。
(6) 实际数据运行测试
检查程序是否有错误;
检查界面是否美观;
检查操作是否方便;
检查提供的信息是否清晰;
检查性能是否稳定。
六、设计说明书内容要求
6.1 概述
目的:实现人事管理。
主要完成的任务:实现了员工信息的查询,对员工信息的增、删、改,对员工工资的查询,和对员工信息的统计,数据的备份和恢复。
使用的开发工具:Myeclipse8.5,MySQL。
解决的主要问题:解决了对员工信息的管理,对工资的统计。
6.2 总体设计
确定基本的技术路线:面向对象。
确定软件的总体结构、模块关系、总体流程:
人事管理系统
工资管理系统
统计管理系统
管理管理系统
人事工资管理系统
数 据恢复
数据备份
部门个数统计
部门人数统计
员工工资管理
员工调薪管理
员工信息管理
员工奖惩管理
6.3 详细设计
1. ResultSet executeQuery(String sql) throws SQLException//执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。 参数: sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句;返回: 包含给定查询所生成数据的 ResultSet 对象;永远不能为 null ;抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容。
2.
3.主要的方法体:
public User login(User user);//登录方法
public Vector findUserAll();//查找所有员工信息
public void backUp(User user);//数据备份
public User recOver(); //数据恢复
public Vector showUserType();//显示用户种类
public Vector showUserTypeMain();//显示用户种类
public int updateUserType(UserType userType);//更新用户种类
public int saveUserType(UserType userType);//保存用户种类
public int removeUserType(int tid);//删除用户种类
public Vector showUserTypeAndUser();//连接查询员工信息及其种类
public Vector showUserTypeLikeType(String userType); //模糊查询用户种类
public Vector findStaffInfo(String staffname);//模糊查找
public int saveStaff(StaffInfo staffInfo);//添加员工
public int removeStaff(String name);//根据姓名删除员工
public int updateStaff(StaffInfo2 staffInfo2);//修改员工信息
public Vector findStaffSalary(String staffname);//模糊查找
public int updateSalary(String depart,double salary);//调整员工薪水信息
public int addRewardPunish(RewardPunish rp);//增加奖惩数据
public int deleteRewardPunish(RewardPunish rp);//删除奖惩数据
public int updateRewardPunish(int id,String date, String type, String reason,
int score,String remark);//更新奖惩数据
public Vector showRewardPunish(int id);//显示奖惩数据
public int SelectRewardPunish(RewardPunish rp);//选择奖惩数据
public Vector findDepart(String name);//根据部门名模糊查找
public Vector showDepartNumber(String name);//根据部门名统计各部门人数
6.4 编码设计
开发环境的设置和建立:下载并安装My Eclipse8.5,My SQL6.0;
程序设计时要注意的事项:需加载及MySQL相对应的驱动包;
关键构件/插件的特点和使用:JTable需要放在ScrollPane中,可及数据库中的表相对应,而且可以实现下拉滚动。
主要程序的代码设计及注释:
一.登录模块是用户登录进去进行相关操作的,如员工信息的增删改查等等。
(1)View层代码
loginTitle = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
uname = new javax.swing.JTextField();
pwd = new javax.swing.JPasswordField();
limit = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
loginBtn = new javax.swing.JButton();
registerBtn = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setForeground(java.awt.Color.white);
setResizable(false);
setState(1);
loginTitle.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 44));
loginTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
loginTitle.setText("\u4eba\u4e8b\u5de5\u8d44\u7ba1\u7406\u7cfb\u7edf");
jLabel1.setText("\u7528\u6237\u540d");
jLabel2.setText("\u5bc6 \u7801\uff1a");
//limit.setModel(javax.swing.DefaultComboBoxModel@187e702);
jLabel3.setText("\u6743 \u9650\uff1a");
loginBtn.setText("\u767b\u9646");
(2) Action层
private void registerBtnActionPerformed(java.awt.event.ActionEvent evt) {
registerFrame r = new registerFrame();
r.setVisible(true);
private void loginBtnMouseClicked(java.awt.event.MouseEvent evt) {
String name = this.uname.getText();
String pwd = this.pwd.getText();
String limit = this.limit.getSelectedItem().toString();
int type = 0;
if ("管理员".equals(limit)) {
type = 1;
usertype="管理员";
} else {
type = 2;
usertype="普通员工";
User user = new User(name, pwd, type);
User flag = userService.login(user);
if (flag != null) {
wusername = name;
wtype = limit;
ok o = new ok();
o.setVisible(true);
setVisible(false);
} else {
fail f = new fail();
f.setVisible(true);
dispose();
(3) Dao数据交互层
@Override
public User login(User user) {
// TODO Auto-generated method stub
User resultUser=null;
String sql = "select user_no,user_name,user_pwd,user_type" +
" from t_user " +
" where user_name='"+user.getUserName()+"' " +
" and user_pwd='"+user.getUserPwd()+"'" +
" and user_type="+user.getUserType()+"";
conn = JDBCUtil.getConnection();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()){
resultUser = new User();
resultUser.setUserNo(rs.getInt("user_no"));
resultUser.setUserName(rs.getString("user_name"));
resultUser.setUserPwd(rs.getString("user_pwd"));
resultUser.setUserType(rs.getInt("user_type"));
} catch (SQLException e) {
e.printStackTrace();
finally{
JDBCUtil.closeResource(conn, psmt, stmt, rs);
return resultUser;
二.人事管理模块设计及实现
对员工的相关资料及记录进行管理。可在该模块对员工基本资料、奖惩记录、修改员工信息可实现对员工的调动、薪水记录进行修改。
当进入到人事管理子系统模块,再点击模糊查询。删除员工按钮,会进入到下面的界面
其中的模糊查询代码如下
(1) view层
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jname = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jButton4 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "姓名", "编号", "部门编号", "职称", "性别", "基本工资","电话号码", "工号" }));
jScrollPane1.setViewportView(jTable1);
jButton1.setText("\u786e\u5b9a");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}); jLabel1.setText("\u8bf7\u8f93\u5165\u59d3\u540d\uff0c\u652f\u6301\u6a21\u7cca\u67e5\u627e");
jname.setText(null);
jButton2.setText("\u9000\u51fa\u6a21\u7cca\u67e5\u627e");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
jButton3.setText("\u5237\u65b0");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
jLabel2.setText("\u5237\u65b0\u540e\u53ef\u7ee7\u7eed\u67e5\u627e");
jButton4.setText("\u5220\u9664\u6b64\u5458\u5de5");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
jLabel3.setText("\u7a7a\u503c\u53ef\u67e5\u627e\u6240\u6709\u5458\u5de5");
jLabel4.setText("\u9700\u8981\u8f93\u5165\u5168\u540d\u53ef\u4ee5\u5220\u9664\u5458\u5de5");
public void findStaffName(JTable jTable, String name) {
DefaultTableModel model = (DefaultTableModel) jTable.getModel();
model.setRowCount(0);
Vector v = staffInfoDao.findStaffInfo(name);
for (int i = 0; i < v.size(); i++) {
model.addRow((Vector) v.get(i));
(2) action层
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String name = jname.getText();
if (name != null) {
staff.findStaffName(jTable1, name);
} else {
pleaseInput p = new pleaseInput();
p.setVisible(true);
(3) dao层
public Vector findStaffInfo(String staffname) {
Vector list = new Vector();
String sql = "select *" + "from t_staff_info "
+ "where staff_name like'%" + staffname + "%'";
conn = JDBCUtil.getConnection();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
Vector listObject = new Vector();
// listObject.add( new
// User(rs.getInt("id"),rs.getString("uname"),rs.getString("pwd")));
listObject.add(rs.getString("staff_name"));
listObject.add(rs.getInt("staff_id"));
listObject.add(rs.getInt("dept_no"));
listObject.add(rs.getString("staff_pos_name"));
listObject.add(rs.getString("staff_sex"));
listObject.add(rs.getInt("staff_baseSal"));
listObject.add(rs.getInt("staff_phoneNum"));
listObject.add(rs.getString("staff_workNum"));
list.add(listObject);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.closeResource(conn, psmt, stmt, rs);
return list;
4.4 工资管理模块设计及实现
在员工基本信息管理界面里可以对单个员工进行基本工资的修改,因而在面向人数较多的企业时,这种方式存在弊端,部门整体调薪操作可以对整个业绩高的部门进行整体调薪
(1) view层
private void initComponents() {
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jdepart = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jLabel3 = new javax.swing.JLabel();
jdepart2 = new javax.swing.JTextField();
sure = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
money = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("\u8fd4\u56de\u4e3b\u754c\u9762");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
jLabel1.setText("\u8bf7\u8f93\u5165\u90e8\u95e8\u540d\u53ef\u8fdb\u884c\u6a21\u7cca\u67e5\u627e");
jButton2.setText("\u786e\u5b9a");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
jLabel2 .setText("\u7ed9\u6307\u5b9a\u90e8\u95e8\u7684\u6240\u6709\u5458\u5de5\u8c03\u85aa");
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "部门编号", "部门名称" }));
jScrollPane1.setViewportView(jTable1);
jLabel3.setText("\u8f93\u5165\u5168\u540d\u9009\u5b9a\u90e8\u95e8");
sure.setText("\u786e\u5b9a");
sure.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sureActionPerformed(evt);
jLabel4.setText("\u8f93\u5165\u8c03\u6574\u529b\u5ea6");
money.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moneyActionPerformed(evt);
jLabel5 .setText("\u6e29\u99a8\u63d0\u793a:\u63d0\u85aa\u5219\u8f93\u5165\u6b63\u6570,\u964d\u85aa\u5219\u8f93\u5165\u8d1f\u6570");
jLabel6.setText("\u5143");
(2) action层
private void sureActionPerformed(java.awt.event.ActionEvent evt) {
String jdept = jdepart2.getText();
Double money2 = Double.parseDouble(money.getText());
StaffInfo s=new StaffInfo();
s.num(staff.updateSalary(jdept,money2));
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String department = jdepart.getText();
if (department != null) {
depart.findDepart(jTable1, department);
} else {
pleaseInput p = new pleaseInput();
p.setVisible(true);
(3) dao层
public Vector findDepart(String name) {
Vector list = new Vector();
String sql = "select *" + "from t_department "
+ "where dept_name like'%" + name + "%'";
conn = JDBCUtil.getConnection();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
Vector listObject = new Vector();
// listObject.add( new
// User(rs.getInt("id"),rs.getString("uname"),rs.getString("pwd")));
listObject.add(rs.getInt("dept_no"));
listObject.add(rs.getString("dept_name"));
list.add(listObject);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.closeResource(conn, psmt, stmt, rs);
return list;
统计管理模块设计及实现
统计部门总数和各部门人数
(1) view层
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jdepart = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jScrollPane3 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jLabel2 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "员工编号", "员工姓名", "统计人数" }));
jScrollPane1.setViewportView(jTable1);
jButton1.setText("\u786e\u5b9a");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
jLabel1
.setText("\u8bf7\u8f93\u5165\u90e8\u95e8\u540d\u8fdb\u884c\u6a21\u7cca\u67e5\u627e");
jdepart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jdepartActionPerformed(evt);
jButton2.setText("\u8fd4\u56de\u4e3b\u754c\u9762");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "部门编号",
展开阅读全文