在学习java的第二周测试题中,最后一题是一个编程题,觉得很有意思,基本上使用arraylist对象和一些关系处理。
题目如下:
某航空公司在其航班到达的不同的国家的不同地方设有不同的办事处,这个项目要求开发一个自动化软件系 统,该系统将提供给这些办事处的管理者(role=1)和普通用户(role=0)用于管理航班信息。根据以上描述,要 求实现系统的用户模块和办事处模块,包含以下功能:
(注:系统存在一个默认管理员admin/admin123):
用户模块:
1. 用户添加
2. 密码修改
3. 个人信息查看
4. 账号状态修改(禁用0、启用1)
5. 用户登录(被禁用账号无法登录并提示友好的消息)
6. 修改用户角色(设置取消管理员)
7. 用户列表
8. 删除用户
办事处模块
1. 办事处添加
2. 办事处列表
3. 查询指定办事处的所有员工
注意:管理员具备以上所有功能,普通用户只有密码修改和个人信息查看功能。
想法
- 最基本的员工类(User),有基本的属性和显示自己的方法
- 一群员工交给一个员工管理员(UserManager)管理
- 一个办事处(Office)有一个属性“办事处名”和一个员工管理员(UserManager)来管理员工
- 一群办事处交给一个办事处管理员(OfficeManager)管理
- 用户交互菜单界面,功能实现都交给办事处管理员来调用
可能分的层次多了一点,,但是我最开始想到的就是尽可能的多分,方便管理和理清思路。。
画个图来理一下基本结构
tips:下学期的软件工程忘的差不多了。。我还是按照我平时画图的方法来画,大佬勿喷,还请指教。
员工类
![](https://i-blog.csdnimg.cn/blog_migrate/6a08f3bbf822c8ca7ca6f189c5fb8b92.png)
员工管理员
![](https://i-blog.csdnimg.cn/blog_migrate/cec905325ffca475aa0506d626b3c392.png)
办事处
![](https://i-blog.csdnimg.cn/blog_migrate/6d059ad9bae4aeb308014fb7c82534d9.png)
办事处管理员
![](https://i-blog.csdnimg.cn/blog_migrate/6d059ad9bae4aeb308014fb7c82534d9.png)
用户界面
整合一下模块之间的调用,最终如下:
客户端方法调用关系
普通用户界面调用
管理员界面调用
办事处界面调用
代码如下:构造器,getset方法都是生成的。
员工User类
package exame;
public class User {
//ID(账号)
private int id;
//姓名
private String name;
//所在办事处
private String office;
//密码
private String password;
//账号状态(禁用0,启用1)
private byte ban=1;
//权限(0用户,1管理员)
private byte level=0;
//显示本人详细信息
public void showInfo() {
System.out.println("工号:"+this.id);
System.out.println("姓名:"+this.name);
System.out.println("密码:"+this.password);
System.out.println("办事处:"+this.office);
}
//显示本人粗略信息
public void showLittleInfo() {
System.out.println("工号:"+this.id+" 姓名:"+this.name+" 办事处:"+this.office);
}
//构造器
public User() {
// TODO Auto-generated constructor stub
}
public User(int id, String name, String office, String password, int ban, int level) {
super();
this.id = id;
this.name = name;
this.office = office;
this.password = password;
this.ban = (byte)ban;
this.level = (byte)level;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public byte getBan() {
return ban;
}
public void setBan(byte ban) {
this.ban = ban;
}
public byte getLevel() {
return level;
}
public void setLevel(byte level) {
this.level = level;
}
public String getOffice() {
return office;
}
public void setOffice(String office) {
this.office = office;
}
}
员工管理员UserManager
package exame;
import java.util.ArrayList;
public class UserManager {
//用户数组
private ArrayList<User> usr = new ArrayList<>();
//构造器
public UserManager(ArrayList<User> usr) {
super();
this.usr = usr;
}
//构造器
public UserManager() {
// TODO Auto-generated constructor stub
}
//添加用户
public void addUser(User temp) {
this.usr.add(temp);
}
//删除用户
public void removeUser(User temp) {
this.usr.remove(temp);
}
//修改某个用户密码
public void updatePwdById(int id,String password) {
for (int i = 0; i < this.usr.size(); i++) {
if(this.usr.get(i).getId()==id){
this.usr.get(i).setPassword(password);
}
}
}
//修改某个用户的状态
public void changeBanById(int id,byte ban) {
for (int i = 0; i < this.usr.size(); i++) {
if(this.usr.get(i).getId()==id){
this.usr.get(i).setBan(ban);
}
}
}
//显示所有用户信息
public void showAllInfo() {
for (User user : usr) {
user.showInfo();
}
}
//查询某个人的信息
public void findUserById(int id) {
for (User user : usr) {
//如果id是要查找的id
if(user.getId()==id){
user.showInfo();
}
}
}
//获取指定id的员工
public User getUserById(int id) {
for (int i = 0; i < this.usr.size(); i++) {
if(this.usr.get(i).getId()==id){
return this.usr.get(i);
}
}
return null;
}
public ArrayList<User> getUsr() {
return usr;
}
public void setUsr(ArrayList<User> usr) {
this.usr = usr;
}
}
办事处(Office)
package exame;
import java.util.ArrayList;
public class Office {
//办事处名称
private String name;
//一个员工管理者
private UserManager usrmanage = new UserManager();
//增加本办公处员工
public void addUser(User temp) {
this.usrmanage.addUser(temp);
}
//查询本办事处所有员工
public void showAllUser() {
this.usrmanage.showAllInfo();
}
//查询办事处某个人信息
public void findUserById(int id) {
this.usrmanage.findUserById(id);
}
//修改本办事处某个员工的密码
public void updateUserPassword(int id,String newpwd) {
this.usrmanage.updatePwdById(id, newpwd);
}
//获取本办公室所有员工
public ArrayList<User> getOfficeUser() {
return this.usrmanage.getUsr();
}
//设置本办公室某个员工状态
public void changeUserBanById(int id,byte ban) {
this.usrmanage.changeBanById(id, ban);
}
//根据id找本办公室员工
public User getUserById(int id) {
return this.usrmanage.getUserById(id);
}
//删除本办公室指定员工
public void removeUserById(int id) {
this.usrmanage.removeUser(this.usrmanage.getUserById(id));
}
//构造器
public Office(String name) {
super();
this.name = name;
}
//构造器
public Office() {
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserManager getUsrmanage() {
return usrmanage;
}
public void setUsrsys(UserManager usrsys) {
this.usrmanage = usrsys;
}
}
办事处管理员代码(OfficeManager)
package exame;
import java.util.ArrayList;
public class OfficeManager {
private ArrayList<Office> office = new ArrayList<>();
//显示办事处列表
public void showListOfOffice() {
System.out.println("办事处列表:");
for (Office temp : office) {
System.out.println(temp.getName());
}
}
//添加办事处
public void addOffice(Office temp) {
this.office.add(temp);
}
//查询办事处所有员工
public void showUserByOfficeName(String name) {
for (int i = 0; i < this.office.size(); i++) {
if(this.office.get(i).getName()==name){
this.office.get(i).showAllUser();
}
}
}
//显示所有员工
public void showAllUser() {
for (int i = 0; i < this.office.size(); i++) {
this.office.get(i).showAllUser();
}
}
//修改某个员工的密码
public void updateUserPwd(int id,String newpwd) {
for (int i = 0; i < this.office.size(); i++) {
this.office.get(i).updateUserPassword(id, newpwd);
System.out.println("修改成功");
}
}
//获取所有所有办公室的员工
public ArrayList<User> getAllUser() {
ArrayList<User> AllUser = new ArrayList<>();
for (int i = 0; i < this.office.size(); i++) {
for (int j = 0; j < this.office.get(i).getOfficeUser().size(); j++) {
AllUser.add(this.office.get(i).getOfficeUser().get(j));
}
}
return AllUser;
}
//获取指定id员工
public User getUserById(int id) {
for (int i = 0; i < this.office.size(); i++) {
return this.office.get(i).getUserById(id);
}
System.out.println("未找到该员工");
return null;
}
//删除指定id员工
public void removeUserById(int id) {
for (int i = 0; i < this.office.size(); i++) {
this.office.get(i).removeUserById(id);
}
}
//构造器
public OfficeManager(ArrayList<Office> office) {
super();
this.office = office;
}
//构造器
public OfficeManager() {
// TODO Auto-generated constructor stub
}
public ArrayList<Office> getOffice() {
return office;
}
public void setOffice(ArrayList<Office> office) {
this.office = office;
}
}
客户端界面
package exame;
import java.util.Scanner;
public class UserClient {
private Scanner in = new Scanner(System.in);
private OfficeManager osys = new OfficeManager();
//当前用户
private User now;
//普通用户菜单
public void normalMenu() {
int choose=0;
while(true){
System.out.println("输入回车继续");
this.in = new Scanner(System.in);
this.in.nextLine();
System.out.println("1.密码修改");
System.out.println("2.个人信息查看");
System.out.println("0.退出");
choose = this.in.nextInt();
switch(choose){
case 1:
this.updatePassword();
return;
case 2:
this.now.showInfo();
break;
case 0:
return;
}
}
}
//管理者菜单
public void menu() {
int choose=0;
while(true){
System.out.println("输入回车继续");
this.in = new Scanner(System.in);
this.in.nextLine();
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("-----办事处模块----");
System.out.println("11.添加办事处");
System.out.println("12.办事处列表");
System.out.println("13.查询指定员工");
System.out.println("0.退出");
choose = this.in.nextInt();
switch(choose){
case 1:
addUser();
break;
case 2:
this.updatePassword();
return;
case 3:
this.now.showInfo();
break;
case 4:
this.setBan();
break;
case 5:
this.login();
return;
case 6:
this.setLevel();
break;
case 7:
this.showAllUserInfo();
break;
case 8:
this.removeUser();
break;
case 11:
this.addOffice();
break;
case 12:
this.osys.showListOfOffice();
break;
case 13:
this.findUserById();
break;
case 0:
return;
}
}
}
//登录
public void login(){
System.out.println("请输入您的工号");
int id = this.in.nextInt();
System.out.println("请输入您的密码");
this.in = new Scanner(System.in);
String pwd = this.in.nextLine();
for (int i = 0; i < this.osys.getAllUser().size(); i++) {
//判断账号id
if(this.osys.getAllUser().get(i).getId()==id && this.osys.getAllUser().get(i).getPassword().equals(pwd)){
//判断账号状态
if(this.osys.getAllUser().get(i).getBan()==0){
System.out.println("账号已禁用");
this.login();
return;
}
System.out.print("登陆成功");
//设置当前用户
this.now=this.osys.getAllUser().get(i);
//判断权限
switch(this.now.getLevel()){
case 0:
System.out.print("-员工模式\n");
this.normalMenu();
return;
case 1:
System.out.println("-管理者模式");
this.menu();
return;
}
}
}
System.out.println("不存在该用户");
this.login();
}
//修改密码
public void updatePassword() {
System.out.println("请输入您的新密码");
String pwd =this.in.nextLine();
this.getOsys().updateUserPwd(this.now.getId(),pwd);
System.out.println("请重新登录");
this.login();
}
//员工添加
public void addUser() {
int id;
String name,office,password;
byte ban,level;
System.out.println("请输入员工id");
id=this.in.nextInt();
for (User temp : this.osys.getAllUser()) {
if(temp.getId()==id){
System.out.println("id已存在,请重新输入");
id=this.in.nextInt();
}
}
System.out.println("请输入员工姓名");
this.in=new Scanner(System.in);
name=this.in.nextLine();
System.out.println("请输入员工office");
office=this.in.nextLine();
for (int a = 0; a < this.osys.getOffice().size(); a++) {
//如果有这个公司
if(this.osys.getOffice().get(a).getName().equals(office)){
//继续
System.out.println("请输入员工的密码");
password=this.in.nextLine();
System.out.println("请输入员工账号状态(0禁用,1启用)");
ban=this.in.nextByte();
System.out.println("请输入员工权限(0用户,1管理员)");
level=this.in.nextByte();
User temp = new User(id, name, office, password, ban, level);
this.osys.getOffice().get(a).addUser(temp);
return;
}
}
System.out.println("无此办事处,添加失败");
}
//账号用户状态设置
public void setBan() {
System.out.println("请输入要设置用户的id");
int id=this.in.nextInt();
System.out.println("请输入用户状态(0禁用,1开启)");
byte ban = this.in.nextByte();
this.osys.getUserById(id).setBan(ban);
System.out.println("设置成功");
}
//修改用户角色
public void setLevel() {
System.out.println("请输入要设置用户的id");
int id=this.in.nextInt();
System.out.println("请输入用户权限(0用户,1管理者)");
byte level = this.in.nextByte();
this.osys.getUserById(id).setLevel(level);
System.out.println("设置成功");
}
//查看当前个人信息
public void showMyInfo() {
this.now.showInfo();
}
//查看所有员工信息
public void showAllUserInfo() {
for (User temp: this.osys.getAllUser()) {
temp.showLittleInfo();
}
}
//删除指定员工
public void removeUser() {
System.out.println("请输入要删除员工的工号");
int id = this.in.nextInt();
this.osys.removeUserById(id);
}
//添加办事处
public void addOffice() {
this.in= new Scanner(System.in);
System.out.println("请输入办事处名称:");
String name = this.in.nextLine();
Office temp = new Office(name);
this.osys.addOffice(temp);
System.out.println("添加成功");
}
//查找指定员工
public void findUserById() {
System.out.println("请输入要查找的员工号");
int id= this.in.nextInt();
this.osys.getUserById(id).showInfo();
}
public Scanner getIn() {
return in;
}
public void setIn(Scanner in) {
this.in = in;
}
public OfficeManager getOsys() {
return osys;
}
public void setOsys(OfficeManager osys) {
this.osys = osys;
}
public User getNow() {
return now;
}
public void setNow(User now) {
this.now = now;
}
}
测试(主函数)代码
package exame;
public class Test {
public static void main(String[] args) {
//========================================================初始化====
//新建一个员工客户端
UserClient uct = new UserClient();
//办事处
Office ruandi = new Office("软帝集团");
Office code = new Office("code");
//员工
User yll = new User(1001, "yll", "软帝集团", "123456", 1, 0);
User ysy = new User(1002, "ysy", "软帝集团", "123123", 1, 1);
User admin = new User(1000, "admin", "admin", "admin123", 1, 1);
//添加办事处
uct.getOsys().addOffice(ruandi);
uct.getOsys().addOffice(code);
//办事处添加员工
uct.getOsys().getOffice().get(0).addUser(yll);
uct.getOsys().getOffice().get(0).addUser(ysy);
//===================================================================
//登录界面
uct.login();
}
}
总结
做完系统之后,发现提前画好结构图再来写代码是很方便的,思路很清晰。但是由于经验不够,功能还是有很多重复的地方,浪费了很多时间。
比如修改某人的密码,不需要单独做一个功能,因为有一个功能是返回指定员工,可以直接让返回来的员工自己改密码。
总的来说,这些东西还只是JAVA的皮毛,也希望我在接下来的学习中能学到更多东西