java综合案列

选择

1.B
2.AD

编程

二、编程题 题目要求: 某公司要开发内部的 “办公信息化管理系统”,请使用面向对象的思想描述以下员工信息。
任务描述 一、语言和环境
在这里插入图片描述
程序运行参考效果图如下:在这里插入图片描述
任务描述
一、语言和环境

  • 实现语言
    Java语言
  • 环境要求及开发工具
    JDK、
    Eclipse
    二、程序整体要求
  1. 划分功能模块,根据题目要求设置不同的类,在类中实现相应功能的管理。
  2. 类的标识要清楚易懂,代码结构要层次分明,代码编辑思路要清晰、整洁。
  3. 要求Java代码书写、命名符合规范,属性所属数据类型要准确合理,在代码中添加必要的注释
  4. 程序运行效果与提供的页面效果图、结构保持一致,信息间分隔符“=”号数量不做统一要求,文字 大小、颜色也不做统一要求
  5. 作业完成后发表在自己的博客上
    三、思路分析: 由场景和运行效果,可以分析出项目中可以抽取如下类(要求编码时注意面向对象思想及封装特性的 应用):
  • 部门类: 类型描述:能够描述部门编号、部门名称、员工数组、统计部门中的员工个数 要求:设定方法统计该部门员工个数 提示:部门类的属性有四个,分别是部门编号,部门名称,员工数组 和 统计变量 ,具体是市场 部还是人事部,是通过部门类的对象来表示的,如果是市场部的对象,那么添加并统计的就是市 场部的人数,同样如果是人事部的对象,添加并统计的就是人事部的人数
  • 职务类: 类型描述:能够描述职务编号、职务名称
  • 员工类: 类型描述:能够描述员工姓名、工号、年龄、性别、所属部门、职务信息 要求: 设定方法限定年龄只能是18–65之间,反之则设置默认为18岁 设定方法限定性别只能是“男”或者“女”,反之则设置默认为"男" 设定方法,实现员工自我介绍信息,将员工信息作为字符串返回
  • 测试类: 类型描述:测试程序,并参照效果图输出结果
    PS:注意:可以在属性上添加适当的信息验证,提高信息的安全性
//部门类
public class Department {
	private String departmentNum;//部门编号
	private String departmentName;//部门名称
	private Staff[] s;//部门员工数组
	private int number;//部门员工人数
	
	public Department() {}
	
	public String getDepartmentNum() {
		return departmentNum;
	}

	public void setDepartmentNum(String departmentNum) {
		this.departmentNum = departmentNum;
	}

	public String getDepartmentName() {
		return departmentName;
	}

	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}

	public Staff[] getS() {
		if (this.s == null) {
			this.s = new Staff[3];
		}
		return s;
	}

	public void setS(Staff[] s) {
		this.s = s;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}
	
	//带参构造
	public Department(String departmentNum, String departmentName) {
		super();
		this.setDepartmentNum(departmentNum);
		this.setDepartmentName(departmentName);
	}
	
	//统计该部门人数
	public void addStaff(Staff s) {
		int i;
		for(i = 0; i < this.getS().length; i++) {
			if(this.getS()[i] == null) {
				this.getS()[i] = s;
				break;
			}
		}
		this.setNumber(i + 1);
	}
}
//职务类
public class Post {
	private String postNum;//职务编号
	private String postName;//职务名称
	
	public Post() {}

	public String getPostNum() {
		return postNum;
	}

	public void setPostNum(String postNum) {
		this.postNum = postNum;
	}

	public String getPostName() {
		return postName;
	}

	public void setPostName(String postName) {
		this.postName = postName;
	}
	
	public Post(String postNum, String postName) {
		super();
		this.setPostNum(postNum);
		this.setPostName(postName);
	}
}
//员工类
public class Staff {
	private String staffName;//员工姓名
	private String staffNum;//员工工号
	private String sex;//性别
	private int age;//年龄
	private String department;//所在部门
	private String post;//职务
	
	public Staff() {}
	
	public String getStaffName() {
		return staffName;
	}

	public void setStaffName(String staffName) {
		this.staffName = staffName;
	}

	public String getStaffNum() {
		return staffNum;
	}

	public void setStaffNum(String staffNum) {
		this.staffNum = staffNum;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		if(sex.equals("男") || sex.equals("女")) {
			this.sex = sex;
		} else {
			sex = "男";
		}
		
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if(age >= 18 && age <= 65) {
			this.age = age;
		} else {
			age = 18;
		}
		
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public String getPost() {
		return post;
	}

	public void setPost(String post) {
		this.post = post;
	}
	
	public Staff(String staffName, String staffNum, String sex, int age, String department, String post) {
		super();
		this.setStaffName(staffName);
		this.setStaffNum(staffNum);
		this.setSex(sex);
		this.setAge(age);
		this.setDepartment(department);
		this.setPost(post);
	}
	
	public String info() {
		String str = "姓名:" + this.getStaffName() + "\n";
		str += "工号:" + this.getStaffNum() + "\n";
		str += "性别:" + this.getSex() + "\n";
		str += "年龄:" + this.getAge() + "\n";
		str += "职务:" + this.getDepartment() + this.getPost();
		return str;
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		Staff s1 = new Staff("张铭", "S001", "男", 29, "人事部", "经理");
		System.out.println(s1.info());
		System.out.println("======================");
		Staff s2 = new Staff("李艾爱", "S002", "女", 21, "人事部", "助理");
		System.out.println(s2.info());
		System.out.println("======================");
		Staff s3 = new Staff("孙超", "S003", "男", 29, "人事部", "职员");
		System.out.println(s3.info());
		System.out.println("======================");
		Staff s4 = new Staff("张美美", "S004", "女", 26, "市场部", "职员");
		System.out.println(s4.info());
		System.out.println("======================");
		Staff s5 = new Staff("蓝迪", "S005", "男", 37, "市场部", "经理");
		System.out.println(s5.info());
		System.out.println("======================");
		Staff s6 = new Staff("米莉", "S006", "女", 24, "市场部", "职员");
		System.out.println(s6.info());
		System.out.println("======================");
		
		Department d1 = new Department("D001", "人事部");
		d1.addStaff(s1);
		d1.addStaff(s2);
		d1.addStaff(s3);
		System.out.println("人事部总共有" + d1.getNumber() + "员工");
		
		Department d2 = new Department("D002", "市场部");
		d2.addStaff(s4);
		d2.addStaff(s5);
		d2.addStaff(s6);
		System.out.println("市场部总共有" + d2.getNumber() + "员工");
		
	}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 分布式锁,是指多个进程或服务器之间可以通过共享锁资源,来协调对共享资源的访问,以保证一定的互斥性和顺序性。 下面是一个简单的分布式锁示例: ```java public class DistributedLock { private static final String LOCK_PATH = "/distributed-lock"; private CuratorFramework client; private InterProcessMutex lock; public DistributedLock(CuratorFramework client) { this.client = client; this.lock = new InterProcessMutex(client, LOCK_PATH); } public boolean acquire() throws Exception { return lock.acquire(5, TimeUnit.SECONDS); } public void release() throws Exception { lock.release(); } } ``` 这里使用了 Apache Curator 框架提供的 InterProcessMutex 分布式锁实现。在 CuratorFramework 实例化时,需要指定 ZooKeeper 的连接信息。 接着在 acquire() 方法中,调用 lock.acquire() 方法获取锁,该方法会阻塞直到获取到锁或者超时。release() 方法则是释放锁,如果当前线程没有持有锁,则抛出 IllegalMonitorStateException 异常。 使用分布式锁的代码示例如下: ```java public void doSomething() throws Exception { DistributedLock lock = new DistributedLock(client); try { if (lock.acquire()) { // 获取到锁,执行业务逻辑 // ... } else { // 获取锁失败,执行其他逻辑 // ... } } catch (Exception e) { // 异常处理 } finally { lock.release(); } } ``` 在业务逻辑中,先实例化 DistributedLock 对象,然后调用 acquire() 方法获取锁。如果获取到了锁,则执行业务逻辑;否则执行其他逻辑。无论如何都要在 finally 块中调用 release() 方法释放锁。 需要注意的是,分布式锁的实现必须要考虑以下问题: 1. 锁的唯一性:多个进程或服务器之间必须共享同一个锁资源,否则无法达到互斥的目的。 2. 锁的可重入性:同一个线程可以多次获取同一个锁,而不会出现死锁等问题。 3. 锁的超时机制:获取锁的操作必须要有超时机制,否则可能会一直等待下去。 4. 锁的容错性:在锁的释放过程中,如果服务器崩溃等异常情况,必须要有容错机制,确保锁能够被释放。 5. 锁的性能问题:锁的实现需要考虑高并发场景下的性能问题,避免出现瓶颈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值