package day9; import java.util.Scanner; public class homework { public static void main(String[] args) { // 管理员初始数据--登录系统 同一下标位置 表示同一管理员位置 // 账号 String[] admins = {"lovo","wang","test"}; // 密码 String[] adminPwds = {"lovo","wang","test"}; // 员工初始数据 同一下标位置 表示同一员工数据 // 员工工号 String[] emIds = {"lovo111","lovo222","lovo333"}; // 员工姓名 String[] emNames = {"张三","王五","刘六"}; // 员工工资 double[] emMoneys = {7800,9800,10000}; // 输入器 Scanner scanner = new Scanner(System.in); boolean isLogin = false; // 登录 有3次输入机会 for(int i = 0;i < 3;i++){// i = 0 1 2时 分别表示3次输入机会 System.out.println("请输入管理账号:"); String adminAccount = scanner.next(); System.out.println("请输入管理员密码:"); String pwd = scanner.next(); // 遍历 原始数据数组 判断用户名和密码是否匹配正确 for(int j = 0;j < admins.length;j++){ if(adminAccount.equals(admins[j]) && pwd.equals(adminPwds[j])){ // 账号和密码 匹配成功 将 标记变量值 改为true isLogin = true; break; } } // 要判断 登录失败 必须要等到循环结束(把数据全部遍历一次后,才能判断) // 判断标记变量的值 如果由false改为了true 表示登录成功 否则 登录失败 if(isLogin){ // if(true){} System.out.println("登录成功"); break; } // 如果 此时登录失败 执行此处代码 if(i != 2){ System.out.println("账号或密码有误,请重新输入"); System.out.println("剩余" + (2 - i) + "次输入机会"); }else { System.out.println("3次机会已经用完,该管理账号被冻结"); // 结束程序 System.exit(0); } } // 菜单 登录成功 isLogin 值为ture while (isLogin){ // 给菜单 System.out.println("请选择:1-添加员工 2-显示员工 3-删除员工 4-查询员工信息" + "\n 5-修改员工工资 6-按照工资排序显示工资单 7-退出"); int choose = scanner.nextInt(); // 根据不同的选择 做出不同的操作 (分支 if 和 switch-case语句) if(choose == 1){// 添加 while (true){ System.out.println("请输入新员工工号:"); String newEmId = scanner.next(); boolean isRepeat = false; // 判断新员工工号是否存在 遍历员工工号数组 for(int i = 0;i < emIds.length;i++){ if(newEmId.equals(emIds[i])){ // 如果工号 重复 isRepeat 改为true isRepeat = true; break;// 结束本层循环 } } // 循环结束后 判断标记变量的值 if(isRepeat){ // isRepeat == true System.out.println("工号重复,请重新输入"); continue;// 把剩余代码跳过 直接让管理员重新输入 } // 代码能执行到此处 说明 工号没有重复 System.out.println("请输入员工姓名:"); String newEmName = scanner.next(); System.out.println("请输入员工工资:"); double newEmMoney = scanner.nextDouble(); // 把 新员工的数据 加入到 老员工数组中 // 数组的特点:数组的长度 一旦确定 就无法更改 String[] addEmIds = new String[emIds.length + 1]; String[] addEmNames = new String[emNames.length + 1]; double[] addEmMoneys = new double[emMoneys.length + 1]; // 把老员工的数据 拷贝到新员工数组中 for(int i = 0;i < emIds.length;i++){ addEmIds[i] = emIds[i]; addEmNames[i] = emNames[i]; addEmMoneys[i] = emMoneys[i]; } // 把新员工数据 放到新员工数组 下标最大位置 addEmIds[addEmIds.length - 1] = newEmId; addEmNames[addEmNames.length - 1] = newEmName; addEmMoneys[addEmMoneys.length - 1] = newEmMoney; // 把新数组 变量空间中的地址 赋值给 老数组变量空间 emIds = addEmIds; emNames = addEmNames; emMoneys = addEmMoneys; System.out.println("添加成功"); break; } }else if(choose == 2){// 显示员工 System.out.println("工号 姓名 工资"); // 显示所有 员工 必须要遍历数组 for(int i = 0;i < emIds.length;i++){ System.out.println(emIds[i] + " " + emNames[i] + " " + emMoneys[i]); } }else if(choose == 3){// 删除员工 while (true){ System.out.println("请输入删除员工姓名");// 默认姓名 不重复 String delEmName = scanner.next(); // 记录 删除员工的数组下标 同时做标记变量 int delIndex = -1; for(int i = 0;i < emNames.length;i++){ if(delEmName.equals(emNames[i])){ delIndex = i; break; } } // 循环结束后 判断其值 if(delIndex == -1){//isRepeat == false 员工数组中 没有我们需要删除的员工 System.out.println("查无此人,请重新输入员工姓名"); continue; } // 代码能执行到此处 员工姓名 存在 可以执行删除操作 // 需要 即将删除员工信息的数组下标 删除delIndex的员工数据 // 新建数组 新数组长度 比 老数组长度 - 1 String[] delEmIds = new String[emIds.length - 1]; String[] delEmNames = new String[emNames.length - 1]; double[] delEmMoneys = new double[emMoneys.length - 1]; // 完成删除操作 i 表示老数组的下标 for(int i = 0;i < emIds.length;i++){ if(i < delIndex){ delEmIds[i] = emIds[i]; delEmNames[i] = emNames[i]; delEmMoneys[i] = emMoneys[i]; }else if(i > delIndex){ delEmIds[i - 1] = emIds[i]; delEmNames[i - 1] = emNames[i]; delEmMoneys[i - 1] = emMoneys[i]; } } // 把新数组 变量空间中的地址 赋值给 老数组变量空间 emIds = delEmIds; emNames = delEmNames; emMoneys = delEmMoneys; System.out.println("删除成功"); System.out.println("工号 姓名 工资"); // 显示所有 员工 必须要遍历数组 for(int i = 0;i < emIds.length;i++){ System.out.println(emIds[i] + " " + emNames[i] + " " + emMoneys[i]); } break; } }else if(choose == 4){// 查询员工信息 while (true){ System.out.println("请输入查询员工姓名");// 默认姓名 不重复 String showEmName = scanner.next(); // 记录 查询员工的数组下标 同时做标记变量 int showIndex = -1; for(int i = 0;i < emNames.length;i++){ if(showEmName.equals(emNames[i])){ showIndex = i; break; } } // 循环结束后 判断其值 if(showIndex == -1){// 员工数组中 没有我们需要查询的员工 System.out.println("查无此人,请重新输入员工姓名"); continue; } // 代码能执行到此处 员工姓名 存在 可以执行显示操作 System.out.println("工号 姓名 工资"); // 显示所有 员工 必须要遍历数组 System.out.println(emIds[showIndex] + " " + emNames[showIndex] + " " + emMoneys[showIndex]); break; } }else if(choose == 5){// 修改员工工资 while (true){ System.out.println("请输入修改工资员工姓名");// 默认姓名 不重复 String updateEmName = scanner.next(); // 记录 修改员工的数组下标 同时做标记变量 int updateIndex = -1; for(int i = 0;i < emNames.length;i++){ if(updateEmName.equals(emNames[i])){ updateIndex = i; break; } } // 循环结束后 判断其值 if(updateIndex == -1){// 员工数组中 没有我们需要修改的员工 System.out.println("查无此人,请重新输入员工姓名"); continue; } // 代码能执行到此处 员工姓名 存在 可以执行修改操作 System.out.println("请输入最新工资"); emMoneys[updateIndex] = scanner.nextDouble(); System.out.println("工号 姓名 工资"); System.out.println(emIds[updateIndex] + " " + emNames[updateIndex] + " " + emMoneys[updateIndex]); break; } }else if(choose == 6){// 工资排序显示员工清单 // 工资 需要从大到小排序(冒泡 反向) for(int i = 0;i < emIds.length - 1;i++){ for(int j = 0;j < emIds.length - 1 - i;j++){ // 原本的判断 前者比后者大 交换顺序。现在反向操作 // 此时 就会重大到小表示 if(emMoneys[j] < emMoneys[j + 1]){ double tempMoney = emMoneys[j]; emMoneys[j] = emMoneys[j + 1]; emMoneys[j + 1] = tempMoney; // 工号 和 姓名 随工资的变动而变动 String tempId = emIds[j]; emIds[j] = emIds[j + 1]; emIds[j + 1] = tempId; String tempName = emNames[j]; emNames[j] = emNames[j + 1]; emNames[j + 1] = tempName; } } } // System.out.println("排序成功,排序后结果如下:"); // 显示所有 员工 必须要遍历数组 for(int i = 0;i < emIds.length;i++){ System.out.println(emIds[i] + " " + emNames[i] + " " + emMoneys[i]); } }else if(choose == 7){// 退出 System.out.println("退出系统"); // 结束程序 System.exit(0); } } } }
员工管理系统
最新推荐文章于 2024-07-13 22:56:10 发布