员工管理系统

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);
            }

        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值