天天看点

一个小型公司员工的信息系统(控制台版)

在慕课网学习java的时候有一个小型的公司员工信息系统的作业,其要求实现的效果如下:

某公司要开发内部的 “办公信息化管理系统”,请使用面向对象的思想描述以下员工信息。

一个小型公司员工的信息系统(控制台版)

程序运行参考效果如下:

一个小型公司员工的信息系统(控制台版)

任务描述

一、语言和环境

  • 实现语言

       Java语言

  • 环境要求及开发工具

       JDK、Eclipse

二、程序整体要求

  1. 划分功能模块,根据题目要求设置不同的类,在类中实现相应功能的管理。
  2. 类的标识要清楚易懂,代码结构要层次分明,代码编辑思路要清晰、整洁。
  3. 要求Java代码书写、命名符合规范,属性所属数据类型要准确合理,在代码中添加必要的注释
  4. 程序运行效果与提供的页面效果图、结构保持一致,信息间分隔符“=”号数量不做统一要求,文字大小、颜色也不做统一要求

三、思路分析:

      由场景和运行效果,可以分析出项目中可以抽取如下类(要求编码时注意面向对象思想及封装特性的应用):

  • 部门类:

       类型描述:能够描述部门编号、部门名称、获取所有该部门员工信息

       要求:设定方法统计该部门员工个数

  • 职务类:

       类型描述:能够描述职务编号、职务名称

  • 员工类:

       类型描述:能够描述员工姓名、工号、年龄、性别、所属部门、职务信息

       要求:

        1、 设定方法限定年龄只能是18--65之间,反之则设置默认为18岁

        2、 设定方法限定性别只能是“男”或者“女”,反之则设置默认为"男"

        3、 重新toString方法,实现员工自我介绍信息

  • 测试类:

       类型描述:测试程序,并参照效果图输出结

注意:可以在属性上添加适当的信息验证,提高信息的安全性

很显然,根据题目要求我们首先需要设置两个包,一个包放测试类(Test),一个包放模型类(Member、Department、Position)。

在Member员工类下我们设置六大private属性,分别为姓名(memberName)、工号(memberNum)、年龄(memberAge)、性别(memberSex)

、所属部门(department)和职务信息(position),由于所属部门和职务信息在本题需求中也是两个大类,因此在员工类下这两个属性应该是

Department类和Position类的对象。此外我们还需要一个toSring()函数返回一个自我介绍的字符串。

在Department类下除了部门编号和部门名称外,题目还要求我们能够统计这个部门下的人数,这其实是两大需求,首先我们需要一个存放Member类的

对象的数组来存放这个部门下的员工,其次我们需要一个方法statistics(Member[] member)来统计这个数组下的有效元素(即部门员工数)。

Position类的属性设置与Department类似,由于题目不需要我们统计人数,所以我们可以不在这个类下设置存放成员对象的数组,但最终我在程序中

还是加上去了。

Test类就是主方法运行的地方,也就是为了实现运行效果的代码段,这里比较简单就不详细说了。

下面说一下大致思路:

在Member类下首先写好构造方法(最好再利用重载留一个无参数的构造方法),其参数自然是其六大属性,方法体内自然是六大属性的set方法。但

在这里要注意,在部门和职位的set方法中,不仅仅要实现职位与员工的关联(即将职位的对象送给员工类下的职位属性),还要实现员工与职位的关联

(即将员工类的对象送给职务类下的存放员工对象的数组元素),这样就在Member类下的setMemberPosition方法中实现了员工与职位的双向关联,

员工与Department的双向关联也是这样建立的。经过这样设置,我们在为创建一个员工对象的时候,员工有了部门,而部门同时也有了这个员工,职位也是一样。

这种双向关联是这种信息系统的核心之一。

--------------------------------------------------------------------------Member类-------------------------------------------------------------------------------

package com.imooc.model;


public class Member 
{
//能够描述员工姓名、工号、年龄、性别、所属部门、职务信息
    /*要求:
    1、 设定方法限定年龄只能是18--65之间,反之则设置默认为18岁
    2、 设定方法限定性别只能是“男”或者“女”,反之则设置默认为"男"
    3、 重新toString方法,实现员工自我介绍信息*/
private String memberName;
private String memberNum;
private int memberAge;
private String memberSex;
private Department department;
private Position position;
public Member()
{

}
public Member(String memberName,String memberNum,String memberSex,int memberAge,Department department,Position position)
{
setMemberName(memberName);
setMemberNum(memberNum);
setMemberAge(memberAge);
setMemberSex(memberSex);
this.setDepartment(department); //在为员工设置部门的时候,最好用双向关联,也为这个部门增加这个员工
this.setPosition(position); //同上
}
public void setMemberName(String memberName)
{
this.memberName=memberName;
}
public String getMemberName()
{
return this.memberName;
}
public void setMemberNum(String memberNum)
{
this.memberNum=memberNum;
}
public String getMemberNum()
{
return this.memberNum;
}
public void setMemberAge(int memberAge)
{
if(memberAge<18||memberAge>65)
this.memberAge=18;
else
this.memberAge=memberAge;
}
public int getMemberAge()
{
return this.memberAge;
}
public void setMemberSex(String memberSex)
{
if(memberSex!="男"&memberSex!="女")
this.memberSex="男";
else
this.memberSex=memberSex;
}
public String getMemberSex()
{
return this.memberSex;
}
public void setDepartment(Department department)
{
this.department=department;
for(int i=0;i<this.getDepartment().getDepartmentMember().length;i++)  //员工与部门双向关联
{                                                           //即员工有了部门之后,对应的这个部门也要有这个员工.
if(this.getDepartment().getDepartmentMember()[i]==null) //但由于一个员工只有一个部门,一个部门可以有很多员工,所以部门类下的员工必须要用数组来存。
{
this.getDepartment().getDepartmentMember()[i]=this;
return;
}
}
}
public Department getDepartment()
{
return this.department;
}
public void setPosition(Position position)
{
this.position=position;
for(int i=0;i<this.position.getPositionMember().length;i++)  //员工与职位的双向关联
{
if(this.position.getPositionMember()[i]==null)
{
this.position.getPositionMember()[i]=this;
return;
}
}
}
public Position getPosition()
{
return this.position;
}
public String toString()
{
String str="姓名:"+this.getMemberName()+"\n工号:"+this.getMemberNum()+"\n性别:"+this.getMemberSex()
+"\n年龄:"+this.getMemberAge()+"\n所在部门:"+this.getDepartment().getDepartmentName()+"\n职位:"+this.getPosition().getPositionName()+
"\n=========================================================";
return str;
}
}

--------------------------------------------------------------------------Department类-------------------------------------------------------------------------------
package com.imooc.model;


public class Department 
{
//       类型描述:能够描述部门编号、部门名称、获取所有该部门员工信息
    //要求:设定方法统计该部门员工个数
private String departmentName;
private String departmentNum;
private Member[] departmentMember;
    private int departmentMemberNumber;
public Department()
{

}
public Department(String departmentName,String departmentNum)
{
this.setDepartmentName(departmentName);
this.setDepartmentNum(departmentNum);
}
public void setDepartmentName(String departmentName)
{
this.departmentName=departmentName;
}
public String getDepartmentName()
{
return this.departmentName;
}
public void setDepartmentNum(String departmentNum)
{
this.departmentNum=departmentNum;
}
public String getDepartmentNum()
{
return this.departmentNum;
}
public void setDepartmentMember(Member[] departmentMember)
{
this.departmentMember=departmentMember;
}
public Member[] getDepartmentMember()
{
if(this.departmentMember==null)      //防止遗漏对员工数组的初始化
departmentMember=new Member[200];
return this.departmentMember;
}
public void setDepartmentMemberNumber(int departmentMemberNumber)
{
this.departmentMemberNumber=departmentMemberNumber;
}
public int getDepartmentMemberNumber()
{
return this.departmentMemberNumber;
}
public void statistics(Member[] departmentMember)       //统计部门职工人数的方法
{
this.departmentMemberNumber=0;
for(int i=0;i<this.getDepartmentMember().length;i++)
{
if(departmentMember[i]!=null)
this.departmentMemberNumber++;
else
return;
}
}

}

--------------------------------------------------------------------------Position类-------------------------------------------------------------------------------
package com.imooc.model;


public class Position 
{
    //类型描述:能够描述职务编号、职务名称
private String positionNum;
private String positionName;
private Member[] positionMember;
public Position()
{

}
public Position(String positionNum,String positionName)
{
this.setPositionName(positionName);
this.setPositionNum(positionNum);
}
public void setPositionNum(String positionNum)
{
this.positionNum=positionNum;
}
public String getPositionNum()
{
return this.positionNum;
}
public void setPositionName(String positionName)
{
this.positionName=positionName;
}
public String getPositionName()
{
return this.positionName;
}
public void setPositionMember(Member[] positionMember)
{
this.positionMember=positionMember;
}
public Member[] getPositionMember()
{
if(this.positionMember==null)
this.positionMember=new Member[200];
return this.positionMember;
}

}

--------------------------------------------------------------------------Test类-------------------------------------------------------------------------------
package com.imooc.test;
import com.imooc.model.*;


public class Test 
{


public static void main(String[] args) 
{ 
Department dep1=new Department("人事部","001");
Department dep2=new Department("市场部","002");
Position pos1=new Position("001","经理");
Position pos2=new Position("002","助理");
Position pos3=new Position("003","职员");
Member mem1=new Member("张铭","S001","男",29,dep1,pos1);
Member mem2=new Member("李艾爱","S002","女",21,dep1,pos2);
Member mem3=new Member("孙超","S004","男",29,dep1,pos3);
Member mem4=new Member("张美美","S005","女",26,dep2,pos3);
Member mem5=new Member("蓝迪","S006","男",37,dep2,pos1);
Member mem6=new Member("米莉","S007","女",24,dep2,pos2);
dep1.statistics(dep1.getDepartmentMember());
dep2.statistics(dep2.getDepartmentMember());
System.out.println(mem1.toString());
System.out.println(mem2.toString());
System.out.println(mem3.toString());
System.out.println(mem4.toString());
System.out.println(mem5.toString());
System.out.println(mem6.toString());
System.out.println("人事部的人数为:"+dep1.getDepartmentMemberNumber());
System.out.println("市场部的人数为:"+dep2.getDepartmentMemberNumber());
}


}
           

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其余的部分代码中都有详细步骤,最关键的双向关联应该已经讲清楚了。