package com.kfm.food;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;
import com.kfm.food.entity.Goods;
import com.kfm.food.entity.User;
import com.kfm.food.util.MD5Util;
/**
* 点餐的类
*/
public class Food {
// 成员变量获取输入, 在类的实例方法中都能使用
Scanner input = new Scanner(System.in);
// 用户编号。 自增长 调用 getAndIncrement() 方法
AtomicInteger userId = new AtomicInteger(1);
// 商品编号
AtomicInteger goodsId = new AtomicInteger(1);
// 保存用户信息
User[] users = new User[10];
int userCount = 0; // 用户数量
// 保存商品信息
Goods[] goodsArr = new Goods[10];
int goodsCount = 0;
// 保存订单信息
// 管理员账号
private static final String ADMIN_USERNAME = "admin";
// 管理员密码
private static final String ADMIN_PASSWORD = "admin@123";
/**
* 初始化一些运行数据
*/
private void init() {
// 初始化用户
for(int i = 0; i < 5; i ++) {
User user = new User();
user.setId(userId.getAndIncrement());
user.setUsername("test" + i);
user.setPassword(MD5Util.enctype("123123"));
user.setName("测试账号" + i);
user.setPhone("12312312311");
users[userCount] = user;
userCount ++;
}
// 初始化商品
for(int i = 0 ; i < 3; i ++) {
Goods goods = new Goods();
goods.setId(goodsId.getAndIncrement());
goods.setGoodsName("食物盲盒" + i);
goods.setCount(30);
goods.setPrice(1900 + i * 100);
goodsArr[goodsCount] = goods;
goodsCount ++;
}
}
/**
* 启动程序
*/
public void start() {
init();
print("欢迎使用 开发喵点餐系统 ");
showMenu();
}
/**
* 显示菜单
*/
public void showMenu() {
print("请选择要使用的功能:(输入序号即可)");
print("1. 登录");
print("2. 注册");
print("8. 管理员登录");
// print("9. 显示所有用户");
print("0. 退出");
String index = getInput("请选择功能:");
selectMenu(index); // 一个功能执行完毕
showMenu(); // 没退出
}
/**
* 根据输入执行不同的功能
* @param index
*/
public void selectMenu(String index) {
switch(index) {
case "1":
while(!login()) {}
showGoods();
break;
case "2":
register();
break;
case "8":
while(!adminLogin()) {}
showAdminMenu();
break;
case "0":
exit();
break;
}
}
/**
* 管理员登录后显示的菜单
*/
public void showAdminMenu() {
print("请选择要使用的功能:(输入序号即可)");
print("1. 添加用户");
print("2. 添加商品");
print("3. 修改库存");
print("4. 查看所有订单");
print("5. 显示所有用户");
print("6. 显示所有商品");
print("0. 退出");
String index = getInput("请选择功能:");
selectAdminMenu(index); // 一个功能执行完毕
showAdminMenu(); // 没退出
}
public void selectAdminMenu(String index) {
switch(index) {
case "1":
register();
break;
case "2":
addGoods();
break;
case "3":
updateGoodsCount();
break;
case "4":
showOrders();
break;
case "5":
showAllUser();
break;
case "6":
showAllGoods();
break;
case "0":
exit();
break;
}
}
/**
* 添加商品
*/
private void addGoods() {
print("** 添加商品 **");
String goodsName = getInput("请输入商品名称");
String p = getInput("请输入价格"); // 19.9
int price = parsePrice(p);
int count = Integer.parseInt(getInput("请输入商品数量"));
Goods goods = new Goods();
goods.setId(goodsId.getAndIncrement());
goods.setGoodsName(goodsName);
goods.setPrice(price);
goods.setCount(count);
// 保存商品信息
goodsArr[goodsCount] = goods;
goodsCount ++;
}
/**
* 处理价格
* 根据输入的价格字符串转换为 以分为单位的 整数
* @param p
* @return
*/
private int parsePrice(String p) {
int index = p.indexOf(".");
if (index == -1) {
return Integer.parseInt(p) * 100;
} else {
String[] arr = p.split("\\.");
String str = arr[0] + arr[1];
return Integer.parseInt(str);
}
}
private void showAllGoods() {
if (goodsCount == 0) {
print("暂无商品");
} else {
print("现有商品共 " + goodsCount + " 件, 分别是:");
for(int i = 0; i < goodsCount; i ++) {
print(goodsArr[i].toString());
}
}
}
private void updateGoodsCount() {
print("** 修改库存 **");
showAllGoods();
String id = getInput("请输入商品编号:");
Goods goods = getGoodsById(id);
while (goods == null) {
id = getInput("商品编号错误,请重新输入:");
goods = getGoodsById(id);
}
String count = getInput("请输入商品数量:");
int c = Integer.parseInt(count);
goods.setCount(c);
}
private Goods getGoodsById(String id) {
int idValue = Integer.parseInt(id);
for (int i = 0; i < goodsCount; i ++) {
Goods goods = goodsArr[i];
if(idValue == goods.getId()) {
return goods;
}
}
return null;
}
private void showOrders() {
print("** 查看所有订单 **");
}
/**
* 实现登录功能
*/
public boolean login() {
print("** 登录 **");
String username = getInput("请输入用户名:");
String pasword = getInput("请输入密码:");
// 查找用户
User user = getUserByUsernameAndPassword(username, MD5Util.enctype(pasword));
if (user != null) {
// 登录成功
print(user.getName() + ", 欢迎您!");
return true;
} else {
// 没找到用户
print("用户名或密码错误!请重试");
return false;
}
}
/**
* 管理员登录
*/
private boolean adminLogin() {
print("** 管理员登录 **");
String username = getInput("请输入用户名:");
String pasword = getInput("请输入密码:");
// 判断用户名、密码是否正确
if (ADMIN_USERNAME.equals(username) && ADMIN_PASSWORD.equals(pasword)) {
print("管理员, 欢迎您!");
// 登录成功
return true;
} else {
print("用户名或密码错误,请重试");
return false;
}
}
/**
* 根据用户名和密码查找用户
* @param username
* @param password
* @return null 表示没找到, user 对象表示找到了
*/
public User getUserByUsernameAndPassword(String username, String password) {
for(int i = 0; i < userCount; i ++) {
User user = users[i];
if (username.equals(user.getUsername()) && password.equals(user.getPassword())) {
return user;
}
}
return null;
}
/**
* 显示商品列表
*/
private void showGoods() {
// 所有的商品
print("商品列表");
}
/**
* 实现注册功能
* 创建一个 User 对象: 输入相应的字段
* TODO 数据有效性校验未做
*/
private void register() {
print("** 注册账号 **");
String username = getInput("请输入用户名:");
// 判断用户名是否已注册
boolean flag = checkUsername(username);
while(!flag) {
print("用户名已注册");
username = getInput("请输入用户名:");
flag = checkUsername(username);
}
String password = getInput("请输入密码:");
String rePassword = getInput("请确认密码:");
int errorCount = 1;
// 比较两次密码输入是否一致, 错误 3 次后返回到菜单列表
while (!password.equals(rePassword)) {
if (errorCount >= 3) {
print("输入错误次数过多,请重新开始。");
// showMenu();
return;
}
errorCount ++;
password = getInput("两次密码输入不一致,请重新输入密码:");
rePassword = getInput("请确认密码:");
}
String name = getInput("请输入真实姓名: ")