题目:
完成一个企业人事管理系统, 该系统中包含两个实体类:员工(Emp),部门(Dept), 两个类中分别包含以下属性: 员工(工号,姓名,性别,职位,年龄,月薪,部门) 部门(编号,部门名,部门介绍,分机号) 要求实现以下功能: 完成部门的创建,添加3个部门 向各个部门中添加若干员工 查询所有的员工信息和所在的部门信息 根据员工工号显示员工信息 修改指定工号员工的薪资 根据部门号查询出门中的所有员工 1、根据类的特征给类进行属性的添加 2、根据类的行为,处理增删改查相关的操作 需要先定义一个接口,然后根据接口的内容指定抽象方法 3、创建操作类(DAO)相关的类来进行数据和逻辑的处理 还需要使用集合进行数据的存储,修改,删除,查询操作 重点: 集合只能在一个类中,不能到处创建集合, 要保证所有的方法都操作的是菜单栏中的集合 4、对每一个方法要进行充分的测试,每写一个方法就要测试功能是否完善
员工实体类:
package cn.java.dto;
/**
* 员工类
*/
public class Emp {
//工号
private String eid;
//姓名
private String name;
//性别
private String sex;
//职位
private String job;
//年龄
private int age;
//月薪
private double salary;
//部门
private Dept dept;
public Emp() {
}
public Emp(String eid, String name, String sex, String job, int age, double salary, Dept dept) {
this.eid = eid;
this.name = name;
this.sex = sex;
this.job = job;
this.age = age;
this.salary = salary;
this.dept = dept;
}
public String getEid() {
return eid;
}
public void setEid(String eid) {
this.eid = eid;
}
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 getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"eid='" + eid + '\'' +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", job='" + job + '\'' +
", age=" + age +
", dept=" + dept +
'}';
}
}
部门实体类
package cn.java.dto;
/**
* 部门类
*/
public class Dept {
//编号
private String did;
//部门名
private String dname;
//部门介绍
private String introduce;
//分机号
private String tel;
public Dept() {
}
public Dept(String did, String dname, String introduce, String tel) {
this.did = did;
this.dname = dname;
this.introduce = introduce;
this.tel = tel;
}
public String getDid() {
return did;
}
public void setDid(String did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "部门编号 = '" + did + '\'' +
", 部门名称 = '" + dname + '\'' +
", 部门简介 = '" + introduce + '\'' +
", 部门分机号 = '" + tel + '\'' +
'}';
}
}
接口
package cn.java.dao;
public interface Base<T> {
public T add(Object o);
public int delete(Object o);
public void update(Object o);
public void find();
public void findAll(Object o);
}
员工实现类:
package cn.java.dao.impl;
import cn.java.dao.Base;
import cn.java.dto.Dept;
import cn.java.dto.Emp;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 员工类的操作类
*/
public class EmpDao implements Base<Emp> {
Scanner scanner = new Scanner(System.in);
/**
* 添加员工信息
* @param o
* @return
*/
@Override
public Emp add(Object o) {
Object[] objects = (Object[]) o;
ArrayList<Emp> emps = (ArrayList<Emp>) objects[0];//员工集合
ArrayList<Dept> depts = (ArrayList<Dept>) objects[1];//部门集合获取
String eid = "";
for(;;){
System.out.println("请输入员工编号:");
eid = scanner.next();
boolean flag = true;
for (int i = 0; i < emps.size(); i++){
if(emps.get(i).getEid().equals(eid)){
System.out.println("员工工号不能重复");
flag = false;
}
}
if(flag){
break;
}else{
System.out.println("请重新输入");
}
}
System.out.println("请输入员工姓名:");
String name = scanner.next();
String sex = "";
for (;;){
System.out.println("请输入员工性别(1、男 2、女):");
int num = scanner.nextInt();
if(num == 1){
sex = "男";
break;
}else if(num == 2){
sex = "女";
break;
}else{
System.out.println("请选择你正确的性别");
}
}
System.out.println("请输入员工职业:");
String job = scanner.next();
System.out.println("请输入员工年龄:");
int age = scanner.nextInt();
System.out.println("请输入员工月薪:");
double salary = scanner.nextDouble();
System.out.println("序号\t编号\t名称\t");
for(int i = 0; i < depts.size(); i++){
System.out.println((i + 1)
+ "\t" + depts.get(i).getDid()
+ "\t" + depts.get(i).getDname());
}
System.out.println("----------------------------------");
Dept dept = null;
for (;;){
System.out.println("请输入员工部门:");
int index = scanner.nextInt();
if(index >= 1 && index <= depts.size()){
dept = depts.get(index - 1);
break;
}
}
Emp emp = new Emp(eid,name,sex,job,age,salary,dept);
return emp;
}
/**
* 删除员工
* @param o
* @return
*/
@Override
public int delete(Object o) {
//将传过来的部门信息进行强制转换
ArrayList<Emp> emps = (ArrayList<Emp>)o;
int index = -1;
//将所有的员工信息获取到
System.out.println("请问你要删除的员工的工号是哪个:");
String eid = scanner.next();
for(int i = 0; i < emps.size(); i++){
if(eid.equals(emps.get(i).getEid())){
index = i;
}
}
return index;
}
/**
* 修改员工信息
* @param o
*/
@Override
public void update(Object o) {
Object[] arr = (Object[]) o;
ArrayList<Emp> emps = (ArrayList<Emp>)arr[0];
ArrayList<Dept> depts = (ArrayList<Dept>)arr[1];
System.out.println("请输入你要修改的员工的编号:");
String eid = scanner.next();
boolean flag = false;
int index = -1;
for (int i = 0; i < emps.size(); i++){
if(eid.equals(emps.get(i).getEid())){
flag = true;
index = i;
}
}
if(flag){
System.out.println("请输入你要修改的员工职位:");
emps.get(index).setJob(scanner.next());
System.out.println("请输入你要修改的员工年龄:");
emps.get(index).setAge(scanner.nextInt());
for(int i = 0; i < depts.size(); i++){
System.out.println(depts.get(i));
}
System.out.println("请输入你要修改的员工部门的id:");
String did = scanner.next();
for(int i = 0; i < depts.size(); i++){
if(did.equals(depts.get(i).getDid())){
emps.get(index).setDept(depts.get(i));
}
}
}else{
System.out.println("你输入的员工信息是错误的,请重新输入");
update(o);
}
}
@Override
public void find() {
}
/**
* 查询所有的员工
* @param o
*/
@Override
public void findAll(Object o) {
ArrayList<Emp> emps = (ArrayList<Emp>)o;
//遍历所有的员工信息
for (int i = 0; i < emps.size(); i++){
System.out.println(emps.get(i));
}
}
/**
* 修改员工工资
* @param emps
*/
public void updateByEid(ArrayList<Emp> emps) {
System.out.println("请输入你要修改的员工的工号:");
String eid = scanner.next();
for(int i = 0; i < emps.size(); i++){
if (eid.equals(emps.get(i).getEid())) {
System.out.println("工号:" + emps.get(i).getEid() + "\t"
+ "姓名:" + emps.get(i).getName() + "\t"
+ "工资:" + emps.get(i).getSalary() + "元");
System.out.println("请问你要将其工资修改为多少?");
double salary = scanner.nextDouble();
emps.get(i).setSalary(salary);
System.out.println("修改之后的员工薪资为");
System.out.println("工号:" + emps.get(i).getEid() + "\t"
+ "姓名:" + emps.get(i).getName() + "\t"
+ "工资:" + emps.get(i).getSalary() + "元");
}
}
}
/**
* 根据部门名称来查询员工
* @param emps
*/
public void findByDname(ArrayList<Emp> emps) {
for(int i = 0; i < emps.size(); i++){
System.out.println((i + 1) + "\t"+emps.get(i).getDept().getDname());
}
System.out.println("请输入你要查询的部门:");
String dname = scanner.next();
for(int i = 0; i < emps.size(); i++){
if(dname.equals(emps.get(i).getDept().getDname())){
System.out.println(emps.get(i));
}
}
}
/**
* 根据员工id查询员工信息
* @param emps
*/
public void findByEid(ArrayList<Emp> emps) {
System.out.println("请输入你要查询的员工的工号:");
String eid = scanner.next();
for(int i = 0; i < emps.size(); i++){
if(eid.equals(emps.get(i).getEid())){
System.out.println(emps.get(i));
}
}
}
}
部门实现类
package cn.java.dao.impl;
import cn.java.dao.Base;
import cn.java.dto.Dept;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 部门类的操作类
*/
public class DeptDao implements
Base<Dept> {
Scanner scanner = new Scanner(System.in);
/**
* 添加部门信息
* @param o
* @return
*/
@Override
public Dept add(Object o) {
ArrayList<Dept> depts = (ArrayList<Dept>)o;
findAll(o);
System.out.println("请输入部门编号:");
String did = "";
for(;;){
did = scanner.next();
boolean flag = true;
for (int i = 0; i < depts.size(); i++){
if(depts.get(i).getDid().equals(did)){
System.out.println("部门编号不能重复");
flag = false;
}
}
if(flag){
break;
}else{
System.out.println("请重新输入");
}
}
System.out.println("请输入部门名称:");
String dname = "";
for(;;){
dname = scanner.next();
boolean flag = true;
for (int i = 0; i < depts.size(); i++){
if(depts.get(i).getDname().equals(dname)){
System.out.println("部门名称不能重复");
flag = false;
}
}
if(flag){
break;
}else{
System.out.println("请重新输入");
}
}
System.out.println("请输入部门介绍:");
String introduce = scanner.next();
System.out.println("请输入部门分机号:");
String tel = scanner.next();
Dept dept = new Dept(did,dname,introduce,tel);
return dept;
}
/**
* 删除部门信息
* 删除之前需要先确定部门中是否有员工 如果还有员工,就不能删除部门信息
*
* 1、查询部门中是否还有员工,如果还有员工就将员工信息或者员工信息删除
* 2、如果部门中还有员工,但是删除部门信息之后,员工信息的部门一栏就没有了
* 更改所有没有部门员工的部门信息
* @param o
*/
@Override
public int delete(Object o) {
//将传过来的部门信息进行强制转换
ArrayList<Dept> depts = (ArrayList<Dept>)o;
int index = -1;
//将所有的部门信息获取到
for (int i= 0; i < depts.size(); i++){
System.out.println(depts.get(i).getDname());
}
System.out.println("请问你要删除的部门信息是哪个:");
String dname = scanner.next();
for(int i = 0; i < depts.size(); i++){
if(dname.equals(depts.get(i).getDname())){
index = i;
}
}
return index;
}
/**
* 修改部门的信息
* @param o
*/
@Override
public void update(Object o) {
ArrayList<Dept> depts = (ArrayList<Dept>)o;
System.out.println("以下是所有的部门相关信息:");
//遍历所有的部门信息
findAll(o);
System.out.println("请输入你要修改的部门的编号:");
String did = scanner.next();
boolean flag = false;
int index = -1;
for (int i = 0; i < depts.size(); i++){
if(did.equals(depts.get(i).getDid())){
flag = true;
index = i;
}
}
if(flag){
System.out.println("请输入你要修改的部门名称:");
depts.get(index).setDname(scanner.next());
System.out.println("请输入你要修改的部门介绍:");
depts.get(index).setIntroduce(scanner.next());
System.out.println("请输入你要修改的部门分机号:");
depts.get(index).setTel(scanner.next());
}else{
System.out.println("你输入的部门信息是错误的,请重新输入");
update(o);
}
}
@Override
public void find() {
}
/**
* 查询所有的部门
* @param o
*/
@Override
public void findAll(Object o) {
ArrayList<Dept> depts = (ArrayList<Dept>)o;
//遍历所有的部门信息
for (int i = 0; i < depts.size(); i++){
System.out.println(depts.get(i));
}
}
}
菜单类
package cn.java.testDept;
import cn.java.dao.impl.DeptDao;
import cn.java.dao.impl.EmpDao;
import cn.java.dto.Dept;
import cn.java.dto.Emp;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 菜单类
* 数据相关的信息放在菜单类中
*/
public class Menu {
ArrayList<Emp> emps = new ArrayList<Emp>();
ArrayList<Dept> depts = new ArrayList<Dept>();
DeptDao deptDao = new DeptDao();
EmpDao empDao = new EmpDao();
Scanner scanner = new Scanner(System.in);
/**
* 主菜单
*/
public void menu(){
System.out.println("请输入你要执行的操作(1、部门 2、员工 0、退出):");
int num = scanner.nextInt();
switch (num){
case 1:
deptMenu();
break;
case 2:
empMenu();
break;
case 0:
System.exit(0);
break;
default:
System.out.println("输入指令错误请重新输入");
menu();
break;
}
}
/**
* 部门菜单
*/
public void deptMenu(){
System.out.println("--------------------------------------------");
System.out.println("1、添加部门信息");
System.out.println("2、修改部门信息");
System.out.println("3、查询所有的部门");
System.out.println("4、删除部门");
System.out.println("5、回到上一级菜单");
System.out.println("请输入你对部门的操作:");
int num = scanner.nextInt();
switch (num){
case 1:
depts.add(deptDao.add(depts));
deptMenu();
break;
case 2:
deptDao.update(depts);
deptMenu();
break;
case 3:
deptDao.findAll(depts);
deptMenu();
break;
case 4:
try {
int index = deptDao.delete(depts);
depts.remove(index);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("没有找到你要删除的部门");
deptMenu();
}
deptMenu();
break;
case 5:
menu();
break;
default:
System.out.println("输入指令有误请重新输入");
deptMenu();
break;
}
}
/**
* 员工菜单
*/
public void empMenu(){
System.out.println("--------------------------------------------");
System.out.println("1、添加员工信息");
System.out.println("2、修改员工信息");//修改 职位 年龄 部门 不修改薪资
System.out.println("3、查询所有的员工");//除了 薪资
System.out.println("4、根据工号删除员工信息");
System.out.println("5、根据工号修改员工工资");
System.out.println("6、根据部门查询所有的员工");
System.out.println("7、根据工号查询员工信息");
System.out.println("8、回到上一级菜单");
System.out.println("请输入你对员工的操作:");
int num = scanner.nextInt();
switch (num){
case 1:
//使用数组存储两个集合,并且将数组以对象的形式传到参数中去
Object[] objects = {emps,depts};
emps.add(empDao.add(objects));
empMenu();
break;
case 2:
Object[] object = {emps,depts};
empDao.update(object);
empMenu();
break;
case 3:
empDao.findAll(emps);
empMenu();
break;
case 4:
try {
int index = empDao.delete(emps);
emps.remove(index);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("没有找到你要删除的员工工号");
deptMenu();
}
empMenu();
break;
case 5:
empDao.updateByEid(emps);
empMenu();
break;
case 6:
empDao.findByDname(emps);
empMenu();
break;
case 7:
empDao.findByEid(emps);
empMenu();
break;
case 8:
menu();
break;
default:
break;
}
}
}
测试类
package cn.java.testDept;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class Test {
public static void main(String[] args) {
Menu menu=new Menu();
menu.menu();
}
}