// 管理员初始数据--登录系统 同一下标位置 表示同一管理员位置
// 账号
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);
}
}
atm管理系统
最新推荐文章于 2024-05-07 15:46:37 发布