黑马程序员技术交流社区
标题:
老板与顾客 多角色 超市管理系统
[打印本页]
作者:
冰雪丝阳
时间:
2015-12-11 09:02
标题:
老板与顾客 多角色 超市管理系统
本帖最后由 冰雪丝阳 于 2015-12-11 09:51 编辑
import java.util.Scanner;
/*
加入了通过用户输入的不同数字,判断用户的操作
使用for循环的方式完成一个用户一次完整的购买动作
使用switch语句,完成用户的不同操作
1:购买: 购买完毕后跳出switch,让用户选择其他操作
2:付账: 付账完毕后,一次购买完毕,跳出循环(完成一次完整的购买动作)
3:退出: 选择退出后,一次购买完毕,跳出循环(完成一次完整的购买动作)
的购物小票
*/
public class ShoppingReceipt {
//定义变量,记录现在的商品编号,用于生成新的编号
static int nowNumber = 0;
//定义数组,用来记录流水
static int[] flowData = new int[100];
//定义整数标记,记录当前的流水号
static int flowNumber = 0;
// 少林寺
static String slsName = "少林寺酥饼核桃核桃核桃核桃核桃核桃";
static int slsID = getNumber();
static double slsPrice = 15.5;
static int slsNumber = 0;
static double slsMoney = 0;
// 然光α移
static String rgName = "然光α移";
static int rgID = getNumber();
static double rgPrice = 16;
static int rgNumber = 0;
static double rgMoney = 0;
// 尚康杂粮牡丹饼
static String skName = "尚康杂粮牡丹饼";
static int skID = getNumber();
static double skPrice = 14.5;
static int skNumber = 0;
static double skMoney = 0;
public static void main(String[] args) {
doBussiness();
}
public static void doBussiness() {
for(;;) {
System.out.println();
System.out.println("欢迎光临,您是哪位?");
System.out.println("1:顾客 2:老板");
//选择角色 1:顾客 2:老板
int roleChoose = enterNumber();
switch (roleChoose) {
//顾客完成一个完整的购物动作
case 1:
purchase();
break;
case 2:
check();
break;
default:
System.out.println("sry!您输入的数字有误,请重新输入");
break;
}
}
}
//键盘录入功能
public static int enterNumber() {
Scanner sc = new Scanner(System.in);
int nextInt = sc.nextInt();
return nextInt;
}
//获取商品编号功能
public static int getNumber() {
nowNumber++;
return nowNumber;
}
//定义购物方法
public static void purchase() {
// 用户选择操作的步骤1:购买 2:付账 3:退出
int times = 0;
for (;;) {
// 1:购买 2:付账 3:退出
System.out.println();
System.out.println("欢迎光临");
System.out.println();
System.out.println("请选择您要执行的操作,1:购买/重新购买 2:付账(打印购物小票) 3:放弃购物");
int choose = enterNumber();
// 判断购买次数
if (times == 3) {
choose = 2;
}
switch (choose) {
case 1:
buy();
// 使用之前的Scanner对象,用于用户输入数量
System.out.println("您还有" + (2 - times)
+ "次重新购买机会,因为我是无良商家,满3次将强制购买!");
times++;
break;
case 2:
printReceipt();
resetData();
//完成一次完整的购买动作后,跳出购买方法
return;
case 3:
// 退出购物
System.out.println("谢谢光临");
resetData();
//完成一次完整的购买动作后,跳出购买方法
return;
default:
// 输入错误提示
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
//购买方法
public static void buy() {
// 购买:给变量赋值
// 打印货品报价单
System.out.println(" 货品报价单");
System.out.println(" 编号 货物名称 物品单价");
System.out.println(slsID + " " + slsName
+ " " + slsPrice);
System.out.println(rgID + " " + rgName
+ " " + rgPrice);
System.out.println(skID + " " + skName
+ " " + skPrice);
System.out.println("请输您要购买的少林寺酥饼核桃核桃核桃核桃核桃核桃数量:");
slsNumber = enterNumber();
slsMoney = slsNumber * slsPrice;
System.out.println("请输您要购买的然光α移数量:");
rgNumber = enterNumber();
rgMoney = rgNumber * rgPrice;
System.out.println("请输您要购买的尚康杂粮牡丹饼数量:");
skNumber = enterNumber();
skMoney = skNumber * skPrice;
}
请接着下面的代码...
作者:
冰雪丝阳
时间:
2015-12-11 09:49
承接上面的代码
//付账(打印小票)方法
public static void printReceipt() {
// 付账:打印小票
// ---------票头-----------------------------------------
// 定义变量:品名 编号 售价 数量 金额
System.out.println(" 欢 迎 光 临");
System.out.println();
System.out
.println(" 品名 售价 数量 金额");
System.out
.println("-------------------------------------------------------------------");
// --------票体-----------------------------------------
// 货物超过7个字,简化打印
slsName = slsName.length() > 7 ? slsName.substring(0, 7)
+ "..." : slsName;
rgName = rgName.length() > 7 ? rgName.substring(0, 7) + "..."
: rgName;
skName = skName.length() > 7 ? skName.substring(0, 7) + "..."
: skName;
System.out.println(slsName + "(" + slsID + ") "
+ slsPrice + " " + slsNumber
+ " " + slsMoney);
System.out.println(rgName + "(" + rgID + ") "
+ rgPrice + " " + rgNumber + " "
+ rgMoney);
System.out.println(skName + "(" + skID + ") " + skPrice
+ " " + skNumber + " " + skMoney);
// -------票脚------------------------------------------
System.out
.println("-------------------------------------------------------------------");
// 项数
int totalItemsNumber = 3;
// 共计
int totalNumber = slsNumber + rgNumber + skNumber;
// 总计
// 加入打折逻辑:
/*
* 如果商品总价超过300元,打95折 如果商品总价超过600元,打9折 如果商品总价超过1000元,打8折
* 如果商品总价超过1000元,并且少林寺酥饼核桃购买超过30份, 则总价打8折后,立减20
*/
double beforeTotalMoney = slsMoney + rgMoney + skMoney;
double totalMoney = beforeTotalMoney;
if (300 <= beforeTotalMoney && beforeTotalMoney < 600) {
totalMoney = beforeTotalMoney * 0.95;
} else if (600 <= beforeTotalMoney && beforeTotalMoney < 1000) {
totalMoney = beforeTotalMoney * 0.9;
} else if (1000 <= beforeTotalMoney) {
totalMoney = beforeTotalMoney * 0.8;
}
if (1000 <= beforeTotalMoney && slsNumber >= 30) {
totalMoney -= 20;
}
// 将总计四舍五入,并强转为整数
totalMoney = Math.round(totalMoney);
System.out.println(totalItemsNumber + "项商品 共计:"
+ totalNumber + "件");
System.out.println("总计:" + (int) totalMoney);
System.out.println("凭此小票换取发票!");
//记录本次交易流水
flowData[flowNumber] = (int)totalMoney;
//每次记录流水后,流水号自增
flowNumber++;
}
//数据重置
public static void resetData() {
slsNumber = 0;
slsMoney = 0;
rgNumber = 0;
rgMoney = 0;
skNumber = 0;
skMoney = 0;
}
//定义老板的查账方法
public static void check() {
for(;;) {
System.out.println("老板欢迎您!您要干嘛呀?");
System.out.println("1:流水查询 2:总收入查询 3:退出查询");
//1流水查询 2总收入查询 3退出查询
int choose = enterNumber();
switch (choose) {
case 1:
checkFlow();
break;
case 2:
checkTotalMoney();
break;
case 3:
System.out.println("欢迎老板下次光临!");
return;
default:
System.out.println("您输入的内容有误,请重新输入!");
break;
}
}
}
//查询流水的方法
public static void checkFlow() {
if(flowNumber==0) {
System.out.println("老板,今天没开张!");
return;
}
for (int i = 0; i < flowNumber; i++) {
System.out.println(flowData
);
}
}
//查询总账方法
public static void checkTotalMoney() {
int sum = 0;
for (int i = 0; i < flowNumber; i++) {
sum += flowData
;
}
System.out.println("目前为止,今天的收入为:"+sum);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2