1.系统分析
由于企业员工可以分为普通员工、部门经理和管理员三种级别,在前面我们已经定义了一个Employee类实现了各类员工的共同功能。但是各类员工既有相同的功能,也有各自特定的功能,因此,在这里可以设计三个类:Staff、Manager和Admin类分别对应三类员工,通过继承Employee类重用相关代码,并且各自实现特定功能:普通员工实现“汇报工作”功能,部门经理实现“查看工作汇报”功能,管理员实现“修改员工级别”功能和“查看员工信息”功能。
由于“汇报工作”和“查看工作汇报”模块都需要“汇报Id、汇报人姓名和汇报内容”等信息,所以可以定义一个汇报类Report。
为了代码逻辑清晰,可以新建一个保存所有数据的Data类,保存员工信息和汇报内容。
2.本次任务
(1)通过继承Employee类定义Staff类、Manager类和Admin类。
(2)定义一个汇报类Report,包含“汇报Id、汇报人Id和汇报内容”等信息。
(3)定义一个保存数据的类Data,该类包含员工数据、汇报数据以及数据的初始化方法。
(4)实现Staff类的“汇报工作”功能。
(5)实现Manager类的“查看工作汇报”功能。
(6)实现Admin类的“修改员工级别”功能和“查看员工信息”功能。
(7)修改Menu类,增加员工汇报工作、经理查看汇报、管理员修改员工级别和查看员工信息的功能调用。
(8)修改测试类StartMenu,测试各业务功能。
3.代码实现
1)Report类
package hrms.entitly;
//汇报类
public class Report{
private int reportId; //汇报Id
private String reporterId;//汇报人Id
private Sting content; //汇报内容
public Report(){
}
public Report(int reportId,String reporterId,Sting content){
this.reportId=reportId;
this.reporterId=reporterId;
this.content=content;
}
public int getReportId(){
return reportId;
}
public void setReportId(int reportId){
this.reportId=reportId;
}
public int getReporterId(){
return reporterId;
}
public void setReportIdString reporterId){
this.reporterId=reporterId;
}
public int getContent(){
return content;
}
public void setReportId(Sting content){
this.content=content;
}
}
2)Data类
package hrms.util;
import hrms.entitly.Admin;
import hrms.entitly.Employee;
import hrms.entitly.Manager;
import hrms.entitly.Report;
import hrms.entitly.Staff;
public class Data{
//当前登录员工
public static Employee currentEmployee;
public static Staff staff=new Staff("0001","111","张三","男",1,"技术部",3000.5); //实例化普通员工
public static Manager manager=new Manager("0002","222","李四","男",2,"技术部",4000.5); //实例化部门经理
public static Admin admin=new Admin("0003","333","王五","男",3,"技术部",5000.5); //实例化管理员
public static int reportcount=0; //初始化汇报数目
public static Report[] reports=new Report[1000];//声明并创建存储员工汇报内容的数组
//将元素初始化
public static void init(){
for(int i=0;i<reports.length;i++){
reports[i]=new Report();
}
}
}
3)Staff类
package hrms.entitly;
import hrms.util.Data;
import java.util.Scanner;
public class Staff extends Employee{
public Staff(String empNo,String password,String empName,String sex,int empLevel,String department,double salary){
super(empNo,password,empName,sex,empLevel,department,salary);
}
//汇报工作
public void addReport(Report report){
Data.reports[Data reportcount++]=report;
}
}
4)Manager类
package hrms.entitly;
import hrms.util.Data;
public class Manager extends Employee{
public Manager(String empNo,String password,String empName,String sex,int empLevel,String department,double salary){
super(empNo,password,empName,sex,empLevel,department,salary);
}
//查看所有汇报
public void displayReports(){
System.out.println("汇报如下:");
System.out.println("*****************************************");
System.out.println("汇报 Id:"+"\t"+"汇报人 Id"+"\t\t"+"汇报内容");
for(int i=0;i<Data.reportcount;i++){
System.out.println(Data.reports[i].getReportId()+"\t"+Data.reports[i],getReporterId()+"\t\t"+Data.reports[i].getContent());
}}
}
5)Admin类
package hrms.entitly;
import hrms.util.Data;
public class Admin extends Employee{
public Admin(String empNo,String password,String empName,String sex,int empLevel,String department,double salary){
super(empNo,password,empName,sex,empLevel,department,salary);
}
//修改员工级别
public void modifyEmployeeLevel(String empNo,int newLevel){
if(empNo.equals(Data.staff.getEmpNo())){
Data.staff.setEmpLevel(newLevel);
}else if(empNo.equals(Data.manager.getEmpNo())){
Data.manager.setEmpLevel(newLevel);
}else if(empNo.equals(Data.admin.getEmpNo())){
Data.admin.setEmpLevel(newLevel);
}
}
/**
*显示员工信息
*/
public void dispiayEmployeeInfo(){
System.out.println("普通员工信息如下:");
Data.staff.displayInfo();
System.out.println("经理信息如下:");
Data.manger.displayInfo();
System.out.println("管理员信息如下:");
Data.admin.displayInfo();
}
}
6)修改Menu类
public class Menu{
Scanner input=new Scanner(System.in);
/**
*登陆主菜单
*/
public void showLoginMenu(){
System.out.println("\n\t\t\t欢迎进入企业人力资源管理系统\n");
System.out.println("******************************************");
System.out.println("\t\t\t1.登陆系统\n");
System.out.println("\t\t\t2.退出系统\n");
System.out.println("******************************************");
System.out.println("请输入菜单项数字:");
}
/**
*返回登陆菜单
*/
private void returnLoginMenu(){
boolean flag=true;
do{
String num=input.next();
if(num.toUpperCase().equals("R")){
flag=false;
showLoginMenu();
break;
}else{
System.out.prinln("具体功能留待以后实现,请输入r/R返回登陆菜单");
}
}while(flag);
}
/**
*普通员工菜单
*/
public void showStaffMenu(){
System.out.println("人力资源管理系统=>普通员工");
System.out.println("******************************************");
System.out.println("\t\t\t1.汇报工作\n");
System.out.println("\t\t\t2.查看个人信息\n");
System.out.println("\t\t\t3.修改密码\n");
System.out.println("\t\t\t4.查看考评信息\n");
System.out.println("\t\t\t5.查看工资等级\n");
System.out.println("\t\t\t6.今日工作内容\n");
System.out.println("******************************************");
System.out.println("请输入菜单项数字或输入r/R返回上一级菜单:");
boolean flag=true;
do{
String num=input.next();
if(num.equals("1")){
//汇报工作
Report report=new Report();
report.setReportId(Data.reportcount+1);
report.setReporertId(Data.currentEmployee.getEmpNo());
System.out.println("请输入汇报信息:");
String content=input.next();
report.setContent(content);
Data.staff.addReport(report);
System.out.println("汇报完毕!");
showStaffMenu();//重新显示普通员工菜单
break;
}else if(num.equals("2")){
Data.staff.displayInfo();//显示个人信息
showStaffMenu();
break;
}else if(num.equals("3")){
//修改个人密码
System.out.println("请输入新密码:");
String newPassword=inpit.next();
Data.staff.modifyPassword(newPassword);
showStaffMenu();
break;
}else if(num.equals("4")){
//查看考评信息
System.out.println("本功能以后实现");
showStaffMenu();
break;
}else if(num.equals("5")){
//查看工资等级
System.out.println("本功能以后实现");
showStaffMenu();
break;
}else if(num.equals("6")){
//今日工作内容
System.out.println("本功能以后实现");
showStaffMenu();
break;
}else if(num.equals("r")||num.equals("R")){
flag=false;
showLoginMenu();
break;
}else{
System.out.print("输入错误,请重新输入数字:");
}
}while(flag);
}
/**
*部门经理菜单
*/
public void showManagerMenu(){
System.out.println("人力资源管理系统=>部门经理");
System.out.println("******************************************");
System.out.println("\t\t\t1.查看员工汇报工作\n");
System.out.println("\t\t\t2.考评员工\n");
System.out.println("\t\t\t3.查看个人信息\n");
System.out.println("\t\t\t4.修改密码\n");
System.out.println("\t\t\t5.查看工资等级\n");
System.out.println("\t\t\t6.今日工作内容\n");
System.out.println("******************************************");
System.out.println("请输入菜单项数字或输入r/R返回上一级菜单:");
boolean flag=true;
do{
String num=input.next();
if(num.equals("1")){
Data.manger.displayReports();//查看员工工作汇报
System.out.println("查看完毕!");
showManagerMenu();//重新显示经理菜单
break;
}else if(num.equals("2")){
//考评员工
System.out.println("本功能以后实现");
showManagerMenu();
break;
}else if(num.equals("3")){
Data.manger.displayInfo();//查看个人信息
showManagerMenu();
break;
}else if(num.equals("4")){
//修改个人密码
System.out.println("请输入新密码:");
String newPassword=inpit.next();
Data.manger.modifyPassword(newPassword);
showManagerMenu();
break;
}else if(num.equals("5")){
//查看工资等级
System.out.println("本功能以后实现");
showManagerMenu();
break;
}else if(num.equals("6")){
//今日工作内容
System.out.println("本功能以后实现");
showManagerMenu();
break;
}else if(num.equals("r")||num.equals("R")){
flag=false;
showLoginMenu();
break;
}else{
System.out.print("输入错误,请重新输入数字:");
}
}while(flag);
}
/**
*管理员菜单
*/
public void showAdminMenu(){
System.out.println("人力资源管理系统=>管理员");
System.out.println("******************************************");
System.out.println("\t\t\t1.查看员工信息\n");
System.out.println("\t\t\t2.修改员工级别\n");
System.out.println("\t\t\t3.查看个人信息\n");
System.out.println("\t\t\t4.修改密码\n");
System.out.println("\t\t\t5.查看工资等级\n");
System.out.println("\t\t\t6.今日工作内容\n");
System.out.println("******************************************");
System.out.println("请输入菜单项数字或输入r/R返回上一级菜单:");
boolean flag=true;
do{
String num=input.next();
if(num.equals("1")){
Data.manger.displayEmployeeInfo();//查看员工信息
showAdminMenu();
break;
}else if(num.equals("2")){
//修改员工等级
Syetem.out.println("请输入员工编号:");
String empNo=input.next();
Syetem.out.println("请输入员工新等级(1:普通员工,2:部门经理,3:管理员)");
int level=input.next();
Data.admin.modifyEmployeeLevel(empNo,level);
Syetem.out.println("修改成功!");
showAdminMenu();
break;
}else if(num.equals("3")){
Data.admin.displayInfo();//查看个人信息
showAdminMenu();
break;
}else if(num.equals("4")){
//修改个人密码
System.out.println("请输入新密码:");
String newPassword=inpit.next();
Data.admin.modifyPassword(newPassword);
showAdminMenu();
break;
}else if(num.equals("5")){
//查看工资等级
System.out.println("本功能以后实现");
showAdminMenu();
break;
}else if(num.equals("6")){
//今日工作内容
System.out.println("本功能以后实现");
showAdminMenu();
break;
}else if(num.equals("r")||num.equals("R")){
flag=false;
showLoginMenu();
break;
}else{
System.out.print("输入错误,请重新输入数字:");
}
}while(flag);
}
}
7)修改StartMenu类
package hrms.util;
import java.util.Scanner;
public class StartMenu{
public static void main(String[] args){
Data.init();//数据初始化
//实例化菜单
Menu menu=new Menu();
//实例化登陆主菜单
menu.showLoginMenu();
//循环标志位
boolean flag=true;
Scanner input=new Scanner(System.in);
while(flag){
int choice=input.next();
//根据输入不同的选项进行不同功能操作
switch(choice){
case 1:System.out.println("请输入员工序号:");
String name=input.next();
System.out.println("请输入密码");
String password=input.next();
//如果是普通员工,显示普通员工菜单
if(name.equals(staff.getEmpNo())&&password.equals(staff.getPassword())){
Data.currentEmployee=Data.staff;
menu.showStaffMenu();
}
//如果是经理,显示经理菜单
else if(name.equals(manager.getEmpNo())&&password.equals(manager.getPassword())){
Data.currentEmployee=Data.manager;
menu.showManagerMenu();
}
//如果是管理员,显示管理员菜单
else if(name.equals(admin.getEmpNo())&&password.equals(admin.getPassword())){
Data.currentEmployee=Data.admin;
menu.showAdminMenu();
}
else{
System.out.println("员工编号或者密码不对,请重新输入菜单项数字:");
menu.showLoginMenu();
}
break;
case 2:flag=false;
System.out.println("您退出了系统!");
break;
default:
System.out.println("输入选项不正确,请重新输入菜单项数字:");
menu.showLoginMenu();
break;
}
if(!flag) break;
}
}
}