欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用数据库和JDBC完成控制台版本的员工管理系统

程序员文章站 2022-07-13 14:11:57
...

一、功能介绍

1)、实现增加员工(员工信息包含:编号、姓名、职务、考勤天数、基本工资)功能,(注意:工资 = 基本工资-(基本工资/30)*请假天数)
用数据库和JDBC完成控制台版本的员工管理系统

2)、实现对员工的删除功能
用数据库和JDBC完成控制台版本的员工管理系统

3)、实现对员工的修改的功能(注意:工资 = 基本工资-(基本工资/30)*请假天数)

用数据库和JDBC完成控制台版本的员工管理系统

4)、实现对员工的查询功能
用数据库和JDBC完成控制台版本的员工管理系统

二、开发背景

  • 开发工具为mysql+IDEA。
  • 使用经典MVC模式。

M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

三、项目结构

用数据库和JDBC完成控制台版本的员工管理系统
用数据库和JDBC完成控制台版本的员工管理系统

四、file.properties

DRIVER = com.mysql.jdbc.Driver
URL = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
USER = root
PWD = root

五、DBUtils工具类

package goodsmanagesystem.utils;


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class DBUtils {
	//	要连接的驱动类型
	private static String DRIVER = null;
	//要连接的URL
	private static String URL = null;
	//	要连接的数据库的用户名
	private static String USER = null;
	//	要连接的数据库的密码
	private static String PWD = null;

	private static QueryRunner runner ;


	static {
		//建立连接器
		File f = new File("novexam/src/goodsmanagesystem/file.properties");
		Properties p = new Properties();
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(f);
			p.load(fis);
			DRIVER = p.getProperty("DRIVER");
			URL = p.getProperty("URL");
			USER = p.getProperty("USER");
			PWD = p.getProperty("PWD");
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		//连接数据库
		DruidDataSource ds = new DruidDataSource();
		ds.setUrl(URL);
		ds.setUsername(USER);
		ds.setPassword(PWD);
		ds.setDriverClassName(DRIVER);
		runner = new QueryRunner(ds);
	}

	/**
	 * 进行新增、修改、删除操作
	 * @param sql  进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL执行后受影响的行
	 */
	public static int udpate(String sql ,Object... param ){
		try {
			return runner.update(sql, param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0 ;
	}

	/**
	 * 查询1个对象封装成Bean对象
	 * @param sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的Bean对象,如果异常则返回null
	 */
	public static<T> T queryOneToBean(String sql, Class<T> clazz,Object... param  ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询只有1行结果的操作,结果封装成Map
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的1行内容封装到Map中,如果异常则返回null
	 */
	public static Map<String,Object> queryOneToMap(String sql, Object... param  ){
		try {
			return  runner.query(sql,new MapHandler(),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 有多行结果的查询操作,结果封装成List,元素为bean类型
	 * @param sql sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static<T> List<T> queryAllList(String sql, Class<T> clazz,Object... param ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanListHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询有多行结果的操作,结果封装成List中,元素为map类型
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static List<Map<String,Object>> queryAllMap(String sql, Object... param ){
		try {
			return runner.query(sql,new MapListHandler(),param );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

六、StaffView(用户界面)

package staffmanagesystem.view;


import staffmanagesystem.beans.Staff;

import java.util.Scanner;

// 用户界面:用于用户交互
public class StaffView {

    //创建Scanner对象
    private Scanner sc = new Scanner(System.in);
    //主界面
    public String showMenu(){
        System.out.println("|-------------------------|");
        System.out.println("|---------1. 增加---------|");
        System.out.println("|---------2. 删除---------|");
        System.out.println("|---------3. 修改---------|");
        System.out.println("|---------4. 查询---------|");
        System.out.println("|---------0. 退出---------|");
        System.out.println("|-------------------------|");
        System.out.println("请选择业务:");
        return sc.next();
    }

    //1.增加员工
    public Staff insertStaff(){
        System.out.println("---增加员工---");
        System.out.print("请输入新员工编号:");
        String staff_id = sc.next();
        System.out.print("请输入新员工姓名:");
        String staff_name = sc.next();
        System.out.print("请输入新员工职务(员工、经理、董事):");
        String staff_position = sc.next();
      /*  if (staff_position!="员工"&&staff_position!="经理"&&staff_position!="董事"){
            return staff;
        }*/
        System.out.print("请输入新员工请假天数:");
        int staff_leaveday = sc.nextInt();
        System.out.print("请输入新员工基本工资:");
        double staff_wage = sc.nextDouble();
        return new Staff(staff_id,staff_name,staff_position,staff_leaveday,staff_wage);
    }
    public void insertResult(int a){
        if (a>0){
            System.out.println("添加成功!");
        }else{
            System.out.println("添加失败!");
        }
    }

//2.删除员工
    public String deleStaff(){
        System.out.println("------删除员工------");
        System.out.println("---请输入员工姓名:---");
        return sc.next();
    }
    public void delResult(int a){
        if (a>0){
            System.out.println("删除成功!");
        }else {
            System.out.println("查无此人,请重新输入:");
        }
    }

    //3.修改员工
    public String updateStaff(){
        System.out.println("------修改员工------");
        System.out.println("---请输入员工编号:---");
        return  sc.next();


    }
    public Staff updateStaff2(){
        System.out.println("---请按照提示输入修改信息---");
        System.out.print("请输入员工新姓名:");
        String staff_name = sc.next();
        System.out.print("请输入员工新职务(员工、经理、董事):");
        String staff_position = sc.next();
        System.out.print("请输入员工新请假天数:");
        int staff_leaveday = sc.nextInt();
        System.out.print("请输入员工新基本工资:");
        double staff_wage = sc.nextDouble();
       return new Staff(null,staff_name,staff_position,staff_leaveday,staff_wage);
    }

    public void updateResult(int a){
    if (a>0){
        System.out.println("修改成功!");
    }else {
        System.out.println("修改失败!");
        }
    }




    //4.查找员工
    public String searchStaff(){
        System.out.println("------查找员工------");
        System.out.println("---请输入员工姓名:---");
        return sc.next();
    }
    public void searchResult(String s){
        if (s==null){
            System.out.println("查无此人,请重新输入:");
        }else {
            System.out.println("查找成功!");
        }
    }


    //0.退出
    public void logOff(){
        System.out.println("------0. 退出------");
        System.out.println("即将退出....");
    }
    //输出Staff对象的信息
    public  void outStaff(Staff s){
        System.out.println(s);
    }

}

七、StaffModel(业务模型)

package staffmanagesystem.model;

import staffmanagesystem.beans.Staff;
import staffmanagesystem.utils.DBUtils;

//业务模型:数据处理 跟数据库相关,sql语句、调用增删改查的方法
public class StaffModel {

    //1.增加员工
    public int  insertStaff(Staff s){
        String sql = "INSERT into staff VALUES (?,?,?,?,?);";
        return DBUtils.udpate(sql,s.getStaff_id(),s.getStaff_name(),s.getStaff_position(),s.getStaff_leaveday(),s.getStaff_wage());
    }

    //2.删除员工
    public int deleStaff( String staff_name ){
    return DBUtils.udpate("DELETE from staff where staff_name =?;",staff_name);
    }

    //3.修改员工
    public int  updateStaff(Staff s,String staff_id){
        String sql ="update  staff  set staff_name=?,staff_position=?,staff_leaveday=?,staff_wage=? WHERE staff_id =?;";
        return DBUtils.udpate(sql, s.getStaff_name(), s.getStaff_position(), s.getStaff_leaveday(), s.getStaff_wage(), staff_id);
    }

    //4.查找员工(姓名)
    public   Staff searchStaff( String staff_name ){
       return DBUtils.queryOneToBean("SELECT * from staff where staff_name =?;", Staff.class, staff_name);
    }
    //4.查找员工(编号)
    public   Staff searchStaffId( String id){
        return DBUtils.queryOneToBean("SELECT * from staff where staff_id =?;", Staff.class, id);
    }

}

八、StaffController(控制器)

package staffmanagesystem.controller;


import staffmanagesystem.beans.Staff;
import staffmanagesystem.model.StaffModel;
import staffmanagesystem.view.StaffView;

//控制器:调用方法
public class StaffController {
    private static StaffView view = new StaffView();
    private static StaffModel model = new StaffModel();

    public static void main(String[] args) {
        boolean isWork=true;//管理系统退出控制器

        while (isWork){
        //主界面
        String result = view.showMenu();

        //0. 退出
        if(result.equals("0") ){
                view.logOff();
                isWork=false;

        //1.增加员工
        }else if(result.equals("1") ){
            Staff insertStaff = view.insertStaff();
            int insertStaffNum = model.insertStaff(insertStaff);
            view.outStaff(insertStaff);
            view.insertResult(insertStaffNum);
            //2.删除员工
        }else if(result.equals("2") ){
            boolean isdele =true;
            while (isdele){
                String staff_name = view.deleStaff();
                Staff searchStaff= model.searchStaff(staff_name);
                if (searchStaff==null){
                    view.delResult(-1);
                }else {
                    view.outStaff(searchStaff);
                    int i = model.deleStaff(staff_name);
                    view.delResult(i);
                    isdele=false;
                }
            }

            //3.修改员工
        }else if(result.equals("3") ){
            String updateStaffId = view.updateStaff();
            Staff staff = model.searchStaffId(updateStaffId);
            if (staff==null){
                return;
            }else {
                view.outStaff(staff);
                Staff staff1 = view.updateStaff2();
                int i = model.updateStaff(staff1, updateStaffId);
                view.outStaff(staff1);
                view.updateResult(i);
            }


            //4.查找员工
        }else if(result.equals("4") ){
            boolean issearch =true;
            while (issearch){
                String searchStaffName = view.searchStaff();
                Staff staff = model.searchStaff(searchStaffName);
                if (staff==null){
                    view.searchResult(null);
                }else {
                    view.outStaff(staff);
                    view.searchResult(searchStaffName);
                    issearch=false;
                }

                }
            }
        }
    }
}

九、Staff员工类

package staffmanagesystem.beans;
//员工:员工编号、姓名、职务、请假天数、基本工资
public class Staff {
    private String staff_id;
    private String staff_name;
    private String staff_position;
    private int staff_leaveday;
    private double staff_wage;

    @Override
    public String toString() {
        return "编号:"+ staff_id + "\t姓名:"+ staff_name + "\t职务:"+ staff_position +
                "\t请假天数:"+ staff_leaveday + "\t工资:"+ (staff_wage-staff_wage/30*staff_leaveday);
    }

    public Staff() {
    }

    public Staff(String staff_id, String staff_name, String staff_position, int staff_leaveday, double staff_wage) {
        this.staff_id = staff_id;
        this.staff_name = staff_name;
        this.staff_position = staff_position;
        this.staff_leaveday = staff_leaveday;
        this.staff_wage = staff_wage;
    }

    public String getStaff_id() {
        return staff_id;
    }

    public void setStaff_id(String staff_id) {
        this.staff_id = staff_id;
    }

    public String getStaff_name() {
        return staff_name;
    }

    public void setStaff_name(String staff_name) {
        this.staff_name = staff_name;
    }

    public String getStaff_position() {
        return staff_position;
    }

    public void setStaff_position(String staff_position) {
        this.staff_position = staff_position;
    }

    public int getStaff_leaveday() {
        return staff_leaveday;
    }

    public void setStaff_leaveday(int staff_leaveday) {
        this.staff_leaveday = staff_leaveday;
    }

    public double getStaff_wage() {
        return staff_wage;
    }

    public void setStaff_wage(double staff_wage) {
        this.staff_wage = staff_wage;
    }
}

十、数据库

员工管理系统:
创建表
create table staff(
staff_id int NOT NULL ,
staff_name VARCHAR(20) not NULL,
staff_position VARCHAR(20) not NULL,
staff_leaveday int ,
staff_wage double 
);


新增数据
INSERT into staff VALUES (001,'赵云','经理',3,60000.00);

SELECT * from staff where staff_name ="张飞";

DELETE from staff where staff_name ="张飞";

更新数据
update  staff  set staff_name="韩信",staff_position="董事",staff_leaveday=11,staff_wage=10000 WHERE staff_id =1;
查看数据
SELECT * from staff;