2022-07-20 第二组 程梓杭 Java(6)
今日学习内容:类,对象,方法的练习实例:简易员工管理系统
思路:大概的循环思路如上,剩下的就是对各个方法的设计。
注册不可以账号相同,但是可以密码相同。注册失败可以继续注册,也可以返回循环开始。
登录需要循环查询已有账号密码是否同时相同,是则结束循环并进入下一层,否则返回外层循环的开始。
退出可以强制系统退出,也可以结束外层循环然后让系统自然结束。
异常输入值处理用default,返回外层循环开始。
可以在建立类存放方法,定义一个员工数组的信息查询方法。循环查询输入的员工工号是否有匹配信息,返回循环查询的结果为循环执行次数(自然结束则为循环结束条件,非自然结束说明查询到了目标。)
未循环代码(循环只需要添加while,设置Boolean flag,用flag控制各个循环的结束即可):
import java.sql.SQLOutput;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
UserManager userManager = new UserManager();
EmployeeManager employeeManager = new EmployeeManager();
main:for (;;){
User[] users = userManager.getUsers();
System.out.println("请选择功能:1、注册 2、登录 3、查询账户");
String flag = sc.next();
u:for(;;){
switch (flag) {
case "1":
System.out.println("请输入账号:");
String username = sc.next();
for (User user : users) {
if(user != null){
// if(username == user.getUsername()){
if(username.equals( user.getUsername())){
System.out.println("用户名不能重复,请重新输入!");
continue u;
}
}
}
System.out.println("请输入密码:");
String password = sc.next();
String info = userManager.register(username, password);
System.out.println(info);
continue main;
case "2":
System.out.println("请输入账号:");
String username1 = sc.next();
System.out.println("请输入密码:");
String password1 = sc.next();
boolean b = userManager.login(username1, password1);
if(b){
// 进入到员工管理
Employee[] employees = employeeManager.getEmployees();
System.out.println("登录成功!");
e:for(;;){
System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
String selection = sc.next();
switch (selection) {
case "1":
System.out.println("请输入员工姓名:");
String name = sc.next();
String s = employeeManager.addEmp(name);
System.out.println(s);
continue e;
case "2":
System.out.println("请选择功能:1.根据id查询 2.查询所有");
String s2 = sc.next();
switch (s2) {
case "1":
System.out.println("请输入id:");
int id = sc.nextInt();
Employee empById = employeeManager.getEmpById(id);
if(empById != null){
System.out.println("你要找的" + id + "号员工信息为:" + empById.getName());
}else {
System.out.println("你要找的" + id + "号员工不存在!");
}
continue e;
case "2":
for (Employee employee : employees) {
if ( employee != null ) {
System.out.println(employee.getId() + "," + employee.getName());
}
}
}
continue e;
case "3":
System.out.println("请输入你要修改的员工工号:");
int id =sc.nextInt();
Employee emp = employeeManager.getEmpById(id);
if(emp != null){
System.out.println("你要修改的"+id+"号员工信息为:"+emp.getName());
System.out.println("请输入你要修改的员工信息:");
name = sc.next();
emp.setName(name);
System.out.println("已将该员工信息修改为"+emp.getName());
}
else System.out.println("你要修改的员工的员工号不存在");
continue e;
case "4":
System.out.println("请输入需要删除的id:");
int id1 = sc.nextInt();
emp = employeeManager.getEmpById(id1);
if(emp != null){
System.out.println("你要删除的"+id1+"号员工信息为:"+emp.getName());
int i;
for (i = 0; i < employees.length; i++) {
if ( employees[i] != emp ) {
continue ;
}
for (; i < employees.length - 1; i++) {
employees[i] = employees[i + 1];
}
System.out.println("员工已删除。");
break;
}
if(i == employees.length){
System.out.println("你要删除的员工的员工号不存在");
}
}
else System.out.println("你要删除的员工的员工号不存在");
}
continue e;
}
}else {
continue main;
}
}
}
}
}
}
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
public class Employee {
private int id;
private String name;
public Employee() {
}
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
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 Employee[] select(Employee [] employees){
return employees;
}
}
public class UserManager {
// User类型的数组
// User类型的数中保存的就是一个个的User对象
private User [] users = new User[10];
private int index = 1;
public UserManager() {
users[0] = new User("admin","123456");
}
public String register(String username, String password){
// 保存账号密码,保存的是User对象
// 构建User对象
User user = new User(username,password);
users[index] = user;
index ++;
// this.index = this.index + 1;
return "注册成功,账号:" + username + ",密码:" + password;
}
public boolean login(String username,String password) {
boolean b = false;
for (User u : users) {
if(u != null){
if(u.getUsername().equals(username) && u.getPassword().equals(password)) {
b = true;
break;
}
}
}
return b;
}
public User[] getUsers() {
return users;
}
public void setUsers(User[] users) {
this.users = users;
}
}
public class EmployeeManager {
private Employee [] employees = new Employee[10];
private int index = 0;
private int id = 1001;
public Employee getEmpById(int id){
Employee emp = null;
for (Employee employee : employees) {
if(employee != null){
if(id == employee.getId()) {
emp = employee;
}
}
}
return emp;
}
public String addEmp(String name){
Employee employee = new Employee(id,name);
employees[index] = employee;
index ++;
return "添加成功,工号:" + (id++) + ",姓名:" + name;
}
public Employee[] getEmployees() {
return employees;
}
public void setEmployees(Employee[] employees) {
this.employees = employees;
}
}
思考:
- 当编程过程过长时,面向过程繁琐且易错,面向对象设计属性与操作方法的确能大大减轻程序员的压力。
- 各种各样的{}嵌套会让人眼花缭乱,用图形描绘简易的层级关系或能有所帮助。
- 死循环的合理利用可以让程序“活起来”,但是需要记得设计好退出死循环的路径。
- 当方法内操作结果无法传递到主方法或其他地方定义的对象时,需要合理利用方法返回值。
- 对象数组和对象名似是而非时,可以拿笔记下各种的含义。(看的我头晕了。)