黑马程序员技术交流社区

标题: 老板与顾客 多角色 超市管理系统 [打印本页]

作者: 冰雪丝阳    时间: 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