/*
背景:在公司中,为了管理众多员工,以及员工的工资,特开发了员工工资管理系统。通过该系统完成新员工入职,离职,修改工资,查询等功能。

需求:使用员工管理系统之前,需要先登陆。登陆后,可以完成员工的添加、显示,删除、修改、查找、排序的功能
 */

        //定义初始数据部分
        // 管理员初始数据--登录系统 同一下标位置 表示同一管理员位置
        // 账号
        String[] admins = {"lovo","wang","test"};
        // 密码
        String[] adminPwd = {"lovo","wang","test"};
        // 员工初始数据 同一下标位置 表示同一员工数据
        // 员工工号
        String[] emIds = {"lovo111","lovo222","lovo333"};
        // 员工姓名
        String[] emNames = {"张三","王五","刘六"};
        // 员工工资
        double[] emMoney = {7800,9800,10000};

        //1、登录部分

        //登录部分用循环包裹
          //创建一个条件变量,表示下标
           int i;
           //创建一个条件变量,表示输入,错误的次数
           int w=0;
        //创建输入器
        Scanner input=new Scanner(System.in);
        while (true){
            w++;
            //提醒用户输入账号
            System.out.println("请输入用户名");
            String name= input.next();
            //提醒用户输入密码
            System.out.println("请输入密码");
            String pasword= input.next();
            //用循环判断用户输入的内容是否符合要求
                //定义一个条件变量,表示输入内容是否符合标准
                int q=0;
            for (i=0;i< admins.length;i++){
                //先判断用户名是否错误
                if(name.equals(admins[i])){
                    q++;
                    //再判断用户密码是否错误
                    if(pasword.equals(adminPwd[i])){
                        q++;
                    }
                }
            }
            //当输入次数等于3次时,为非法用户,账户冻结
            if(w==3){
                System.out.println("非法用户,账户已冻结");
                System.exit(0);
            }
            //当q等于0时,账号错误,需要重新输入
            if(q==0){
                System.out.println("用户名错误请重新输入");
                continue;
            }
            //当q等于1时,账号错误,需要重新输入
            if(q==1){
                System.out.println("密码错误请重新输入");
                continue;
            }
            //当q等于2时,账号密码正确,进入主菜单
            if(q==2){
                System.out.println("欢迎进入黑心公司,祝你天天加班");
                break;
            }
        }

        //主菜单
       while (true){
           System.out.println("主菜单");
           System.out.println("请选择:1-添加员工、2-显示员工信息、3-删除员工信息、4-查询员工信息、5-修改员工工资、6-按照工资排序显示工资单、7-退出");
           //输入菜单选择
           int  number= input.nextInt();


           while (true){
               //当输入1时--添加员工
               if(number==1){
                   //提示输入新增员工工号
                   System.out.println("请输入新增员工工号");
                   String id2= input.next();
                   //新建一个数组储存新增员工后的工号
                   String[]  emIds2=new String[emIds.length+1];
                   //新增的员工工号储存在新数组的最后一位
                   emIds2[emIds.length]=id2;
                   //判断输入工号是否重复
                       //定义一个条件变量,判断工号是否错误
                       int t=0;
                   for (int j=0;j<emIds.length;j++){
                       if(id2.equals(emIds[j])){
                           System.out.println("该工号已存在,请重新输入");
                           t++;
                           break;
                       }
                   }
                   //当t等于0时,代表工号正确,可以接着完成后续步骤
                   if(t==0) {
                       //提示输入新增员工姓名
                       System.out.println("请输入新增员工姓名");
                       String  name2= input.next();
                       //新建一个数组储存新增员工后的姓名
                       String[]  emNames2=new String[emNames.length+1];
                       //新增的员工姓名储存在新数组的最后一位
                       emNames2[emNames.length]=name2;
                       //提示输入新增员工工资
                       System.out.println("请输入新增员工工资");
                       double money2= input.nextDouble();
                       //新建一个数组储存新增员工后的工资
                       double[]  emMoney2=new double[emMoney.length+1];
                       //新增的员工工资储存在新数组的最后一位
                       emMoney2[emMoney.length]=money2;
                       //用循环将老数组内的内容,赋值给新数组
                       for(int u=0;u<emIds.length;u++){
                           emIds2[u]=emIds[u];
                       }
                       for(int u=0;u<emNames.length;u++){
                           emNames2[u]=emNames[u];
                       }
                       for(int u=0;u<emMoney.length;u++){
                           emMoney2[u]=emMoney[u];
                       }
                       //将新数组的地址赋值给老数组,方便后续展示新数组的内容
                       emIds=emIds2;
                       emNames=emNames2;
                       emMoney=emMoney2;
                       break;
                   }
                   //当t大于0时,代表工号错误,需要重新输入
                   if(t>0){
                       continue;
                   }
                   //当新增员工信息录入完毕以后,选项1结束,又回到主菜单进行选择
                   break;
               }

               //当输入2时---显示员工信息
               if(number==2){
                   //用循环输出数组内员工信息
                   System.out.println("工号     姓名   薪资");
                   //用循环输出新数组
                   for(int y=0;y<emIds.length;y++){
                       System.out.println(emIds[y]+"--"+emNames[y]+"--"+emMoney[y]+"--");
                   }
                   当员工信息显示完毕以后,选项2结束,又回到主菜单进行选择
                   break;
               }

               //当输入3时---删除员工信息
               if(number==3){
                   while (true){
                       //提示输入想要删除的员工工号
                       System.out.println("请输入想要删除的员工工号");
                       String id3= input.next();
                       //新建一个数组储存删除员工后的工号
                       String[]  emIds3=new String[emIds.length-1];
                       //用循环判断输入工号是否存在
                            //定义一个变量记录输入工号是否存在
                            int o=0;
                            //定义一个变量记录输入的值在旧数组的下标是多少
                            int s=0;
                            //将循环变量声明在循环外部
                            int p=0;
                       for(;p<emIds.length;p++){
                           if(id3.equals(emIds[p])){
                               o++;
                               s=p;
                               break;
                           }
                       }
                       //当o等于0时,代表输入工号不存在,需要重新输入
                       if (o==0){
                           System.out.println("输入工号不存在请从新输入");
                           continue;
                       }
                       //当o等于1时,代表输入工号存在,可以执行删除操作
                       if (o>0){
                           //用循环赋值删除后的新数组
                           for(int a=0;a<emIds3.length;a++){
                               //将老数组下标不等于p的元素赋值给新数组
                              if(a<s){
                                  emIds3[a]=emIds[a];


                              }else if(a>=s){
                                   emIds3[a]=emIds[a+1];


                               }
                           }
                           //将删除操作完成后的新数组地址赋值给老数组
                           emIds=emIds3;
                           //展示删除完成后剩余工号
                           System.out.println("删除员工工号后,剩余工号为:");
                           for(int d=0;d<emIds.length;d++){
                               System.out.print(emIds[d]+"--");
                           }
                       }
                       System.out.println("删除操作完成,回到主菜单");
                       break;
                   }
                   //当删除操作完成后,循环结束
                   break;
               }

               //当输入4时---查询员工信息
               if(number==4){
                 while (true){
                     //提示用户输入需要查询的员工姓名
                     System.out.println("请输入员工姓名");
                     String inquire=input.next();
                     //新增一个条件变量,代表输入姓名是否存在
                     int g=0;
                     //新增一个条件变量,代表与输入内容相等的元素下标
                     int k=0;
                     //用循环判断输入姓名是否存在
                     for(int h=0; h<emNames.length; h++){
                         if(inquire.equals(emNames[h])){
                             g++;
                             k=h;
                             break;
                         }
                     }
                     //当g=0时,代表输入姓名不存在,需要用户从新输入
                     if(g==0){
                         System.out.println("输入姓名不存在,请重新输入");
                         continue;
                     }
                     //当g=1时,代表输入姓名存在
                     if(g==1){
                         System.out.println("工号     姓名       薪资");
                         System.out.println(emIds[k]+" "+emNames[k]+" "+emMoney[k]);
                     }
                     break;
                 }
                   //查询操作完成后,循环结束,回到主菜单
                   break;
               }

               //当输入5时---修改员工工资
               if(number==5){
                   while (true){
                       //提示用户输入需要查询的员工姓名
                       System.out.println("请输入员工姓名");
                       String inquire2=input.next();
                       //新增一个条件变量,代表输入姓名是否存在
                       int l=0;
                       //新增一个条件变量,代表与输入内容相等的元素下标
                       int z=0;
                       //用循环判断输入姓名是否存在
                       for(int h=0; h<emNames.length; h++){
                           if(inquire2.equals(emNames[h])){
                               l++;
                               z=h;
                               break;
                           }
                       }
                       //当g=0时,代表输入姓名不存在,需要用户从新输入
                       if(l==0){
                           System.out.println("查无此人");
                           continue;
                       }
                       //当g=1时,代表输入姓名存在
                       if(l==1){
                           //提示输入新工资金额
                           System.out.println("输入新的工资金额");
                           double fresh= input.nextDouble();
                           //原来的薪资改为输入后的薪资
                           emMoney[z]=fresh;
                           System.out.println("修改后的信息为:");
                           System.out.println("工号     姓名       薪资");
                           System.out.println(emIds[z]+" "+emNames[z]+" "+emMoney[z]);
                       }
                       break;
                   }
                   //查询操作完成后,循环结束,回到主菜单
                   break;
               }

               //当输入6时---按照工资排序显示工资单
               if(number==6){
                   //创建一个新的数组,放排序后的薪资
//                   double[] box=new double[emMoney.length];
                   //创建一个空容器
                   double c=0;
                   //用循环比较工资大小
                   for(int b=0;b<emMoney.length;b++){//取值0 1 2 3
                       for(int x=0;x<emMoney.length-1-i;x++){//取值(0 1 2 )-i
                           if(emMoney[x]<emMoney[x+1]){
                               c=emMoney[x+1];
                               emMoney[x+1]=emMoney[x];
                               emMoney[x]=c;
                           }
                       }
                   }
                   //比较过后工资从大到小排序
                   System.out.println("工号     姓名       薪资");
                   for(int v=emMoney.length-1;v>=0;v--){
                       System.out.println(emIds[v]+"--"+emNames[v]+"--"+emMoney[v]+"--");
                   }
                   //查询操作完成后,循环结束,回到主菜单
                   break;
               }

               //当输入7时--退出员工管理系统
               if(number==7){
                   System.out.println("谢谢使用黑心员工管理系统,欢迎下次使用");
                   System.exit(0);
               }











           }

       }