自动售货系统源码

这里给出的是华为公司在线软件训练与测试平台(网址:career-oj.huawei.com)上一道编程挑战题,在其系统中查看名为:自动收获系统的题目可以找到该题的详细信息。

view plaincopy to clipboardprint?
import java.util.HashSet;  
import java.util.Scanner;  
import java.util.Stack;  
  
public class Main {  
    class Goods {  
        public String name;  
        public int price;  
        public int count;  
        public Goods(String name,int price) {  
            this.name = name;  
            this.price = price;  
            count = 0;  
              
        }  
        public String print() {  
            return new String(name + " " + price + " " + count);  
        }  
        public int getNameOrder() {  
            return Integer.parseInt(name.substring(1));  
        }  
    }  
      
    class GoodsAll {  
        public Goods A1 = new Goods("A1",2);  
        public Goods A2 = new Goods("A2",3);  
        public Goods A3 = new Goods("A3",4);  
        public Goods A4 = new Goods("A4",5);  
        public Goods A5 = new Goods("A5",8);  
        public Goods A6 = new Goods("A6",6);  
      
        public Goods getA(int i) {  
            switch(i) {  
            case 1:  
                return A1;  
            case 2:  
                return A2;  
            case 3:  
                return A3;  
            case 4:  
                return A4;  
            case 5:  
                return A5;  
            case 6:  
                return A6;  
            default:  
                return null;  
            }  
        }  
          
        public String print() {  
            Goods[] goods = new Goods[] {A1,A2,A3,A4,A5,A6};  
            Goods tmp = null;  
            int i,j;  
            for (i = 0; i < goods.length - 1; i++) {  
                for (j = i + 1; j < goods.length; j++) {  
                    if (goods[i].count < goods[j].count) {  
                        tmp = goods[i];  
                        goods[i] = goods[j];  
                        goods[j] = tmp;  
                    } else if (goods[i].count == goods[j].count) {  
                        if (goods[i].getNameOrder() > goods[j].getNameOrder()) {  
                            tmp = goods[i];  
                            goods[i] = goods[j];  
                            goods[j] = tmp;  
                        }  
                    }  
                }  
            }  
            StringBuilder sb = new StringBuilder();  
            for (i = 0; i < goods.length; i++) {  
                sb.append(goods[i].print() + "\r\n");  
            }  
            return sb.toString();  
        }  
          
        public boolean isEmpty() {  
            int sum = 0;  
            for (int i = 1; i <= 6; i++) {  
                sum += getA(i).count;  
            }  
            if (sum == 0) {  
                return true;  
            }else {  
                return false;  
            }  
        }  
    }  
      
    class Moneys {  
        //按次序依次存储10、5、2、1的信息  
        int[] change = new int[4];  
        //向存钱罐中增加钱  
        public String addMoney(int m) {  
            boolean ok = true;  
            StringBuilder sb = new StringBuilder();  
            if (m != 1 && m != 2 && m != 5 && m != 10) {  
                sb.append("E002:Denomination error\r\n");  
                ok = false;  
                return sb.toString();  
            }  
              
            if (m > 2 && m > change[3] + change[2] * 2) {  
                sb.append("E003:Change is not enough, pay fail\r\n");  
                ok = false;  
                return sb.toString();  
            }  
            if (m > 10) {  
                sb.append("E004:Pay the balance is beyond the scope biggest\r\n");  
                ok = false;  
                return sb.toString();  
            }  
            if (goodsAll.isEmpty()) {  
                sb.append("E005:All the goods sold out\r\n");  
                ok = false;  
                return sb.toString();  
            }  
            if(ok) {  
                switch(m) {  
                case 1:  
                    change[3]++;  
                    break;  
                case 2:  
                    change[2]++;  
                    break;  
                case 5:  
                    change[1]++;  
                    break;  
                case 10:  
                    change[0]++;  
                    break;  
                default:  
                        break;  
                }  
                consumer.balance += m;  
                sb.append("S002:Pay success,balance=" + consumer.balance + "\r\n");  
            }  
            return sb.toString();  
        }  
          
        //找钱  
        public String exchange(int m) {  
            int mtmp = m;  
            //将所有零钱压栈,将最小的先入栈  
            Stack<Integer> stackChange = new Stack<Integer>();  
            //新建一个堆栈用来存储找零结果  
            Stack<Integer> stackResult = new Stack<Integer>();  
            int i,j,k;  
            int one, two, five, ten;  
//          for (i = 0; i < change[3]; i++) {  
//              stackChange.push(1);  
//          }  
//          for (i = 0; i < change[2]; i++) {  
//              stackChange.push(2);  
//          }  
//          for (i = 0; i < change[1]; i++) {  
//              stackChange.push(5);  
//          }  
//          for (i = 0; i < change[0]; i++) {  
//              stackChange.push(10);  
//          }  
//            
//          while(!stackChange.isEmpty()) {  
//              int test = stackChange.pop();  
//              if (m >= test) {  
//                  m -= test;  
//                  stackResult.push(test);  
//              }  
//          }  
              
            for (i = 0; i <= 3; i++) {  
                for(j = 3; j >= i; j-- ) {  
                    for (k = 0; k < change[j]; k++) {  
                        if (j == 3) {  
                            stackChange.push(1);  
                        } else if(j == 2) {  
                            stackChange.push(2);  
                        } else if(j == 1) {  
                            stackChange.push(5);  
                        } else {  
                            stackChange.push(10);  
                        }  
                    }  
                }  
                while(!stackChange.isEmpty()) {  
                    int test = stackChange.pop();  
                    if (m >= test) {  
                        m -= test;  
                        stackResult.push(test);  
                    }     
                }  
                if (m == 0) {  
                    break;  
                } else {  
                    m = mtmp;  
                    stackChange.clear();  
                    stackResult.clear();  
                }  
            }  
              
            //将找零结果存储在这四个Int变量中。  
            one = two = five = ten = 0;  
            while(!stackResult.isEmpty()) {  
                int result = stackResult.pop();  
                switch(result) {  
                case 1:  
                    one++;  
                    break;  
                case 2:  
                    two++;  
                    break;  
                case 5:  
                    five++;  
                    break;  
                case 10:  
                    ten++;  
                    break;  
                default:  
                }  
            }  
              
            //更新存钱罐  
            change[0] -= ten;  
            change[1] -= five;  
            change[2] -= two;  
            change[3] -= one;  
            //消费余额清零  
            consumer.balance = 0;  
            //生成找钱信息  
            StringBuilder sb = new StringBuilder();  
            sb.append("1 yuan coin number=" + one + "\r\n");  
            sb.append("2 yuan coin number=" + two + "\r\n");  
            sb.append("5 yuan coin number=" + five + "\r\n");  
            sb.append("10 yuan coin number=" + ten  + "\r\n");  
            return sb.toString();  
        }  
          
        //打印钱盒信息  
        String print() {  
            StringBuilder sb = new StringBuilder();  
            sb.append("1 yuan coin number=" + change[3] + "\r\n");  
            sb.append("2 yuan coin number=" + change[2] + "\r\n");  
            sb.append("5 yuan coin number=" + change[1] + "\r\n");  
            sb.append("10 yuan coin number=" + change[0] + "\r\n");  
            return sb.toString();  
        }  
    }  
      
    //消费者类  
    class Consumer {  
        int balance = 0;  
        //str is like 'A1' or 'A3'  
        public String buy(String str) {  
            StringBuilder sb = new StringBuilder();  
            boolean ok = true;  
            HashSet<String> names = new HashSet<String>();  
            names.add("A1");  
            names.add("A2");  
            names.add("A3");  
            names.add("A4");  
            names.add("A5");  
            names.add("A6");  
            if (!names.contains(str)) {  
                sb.append("E006:Goods does not exist");  
                ok = false;  
                return sb.toString();  
            }  
            int goodsId = Integer.parseInt(str.substring(1));  
            if (goodsAll.getA(goodsId).count == 0) {  
                sb.append("E007:The goods sold out\r\n");  
                ok = false;  
                return sb.toString();  
            }  
            if (consumer.balance < goodsAll.getA(goodsId).price) {  
                sb.append("E008:Lack of balance\r\n");  
                ok =false;  
                return sb.toString();  
            }  
            if (ok) {  
                consumer.balance -= goodsAll.getA(goodsId).price;  
                goodsAll.getA(goodsId).count -- ;  
                sb.append("S003:Buy success,balance=" + consumer.balance + "\r\n");  
            }  
            return sb.toString();  
        }  
    }  
      
    //初始化  
    public String reset(String str) {  
        String[] strOne = str.split(" ");  
        String[] strA = strOne[1].split("-");  
        String[] strMoney = strOne[2].split("-");  
        int i;  
        for (i = 0; i < strA.length; i++) {  
            goodsAll.getA(i + 1).count = Integer.parseInt(strA[i]);  
        }  
        for (i = 0; i < strMoney.length; i++) {  
            moneys.change[3 - i] = Integer.parseInt(strMoney[i]);  
        }  
        return new String("S001:Initialization is successful");  
    }  
      
    public String pay(String str) {  
        String s = str.substring(2);  
        return moneys.addMoney(Integer.parseInt(s));  
    }  
      
    public String buy(String str) {  
        return consumer.buy(str.substring(2));  
    }  
      
    public String change(String str) {  
        if (consumer.balance > 0) {  
            return moneys.exchange(consumer.balance);  
        } else {  
            return new String("E009:Work failure");  
        }  
    }  
      
    public String query(String str) {  
        if (!str.equals("q 0") && !str.equals("q 1")) {  
            return new String("E010:Parameter error");  
        } else {  
            int queryId = Integer.parseInt(str.substring(2));  
            if (queryId == 0) {  
                return goodsAll.print();  
            } else {  
                return moneys.print();  
            }  
        }  
    }  
      
    //  
    public GoodsAll getGoodsAll() {  
        return new GoodsAll();  
    }  
    public Moneys getMoneys() {  
        return new Moneys();  
    }  
    public Consumer getConsumer() {  
        return new Consumer();  
    }  
      
    public static Main main = new Main();  
    public static Main.Consumer consumer = main.getConsumer();  
    public static Main.GoodsAll goodsAll = main.getGoodsAll();  
    public static Main.Moneys moneys = main.getMoneys();  
      
    public static void main(String[] args) {  
//      Main main = new Main();  
//      Main.Consumer consumer = main.getConsumer();  
//      Main.GoodsAll goodsAll = main.getGoodsAll();  
//      Main.Moneys moneys = main.getMoneys();  
          
        Scanner sca = new Scanner(System.in);  
        String order = sca.nextLine();  
        //while(!((order = sca.nextLine()).equals("0"))){  
          
        String[] str = order.split(";");  
        for (String s:str) {  
            String title = s.substring(0,1);  
            switch(title) {  
            case "r":  
                System.out.println(main.reset(s));  
                //System.out.print(goodsAll.print());  
                 //System.out.print(moneys.print());  
                break;  
            case "p":  
                System.out.print(main.pay(s));  
                break;  
            case "b":  
                System.out.print(main.buy(s));  
                break;  
            case "c":  
                System.out.print(main.change(s));  
                break;  
            case "q":  
                System.out.print(main.query(s));  
                break;  
            default:  
                  
            }  
        }  
        //}  
    }  
}  

需要注意的是:在给出输出信息的时候,一定要按照题目所给的格式来编写,比如给出找钱信息的时候 1 yuan coin number=X,这句话中每一个单词之间都要用空格隔开,我曾经因为1和yuan之间没有用空格隔开而导致测试结果出错,所以如果一定要追求答题的准确,就必须注意这些细节性的东西。

代码质量不高,仅仅能完成功能。

销售管理系统源码 第1章 系统登录 系统登录模块主要用于验证用户登录系统时输入的用户名、密码和验证码是否正确,只有合法的用户才可以进入系统,否则将不能进入此系统系统登录页面如图1.1所示。 图1.1 登录页面 在用户名处输入“admin”,密码为“51aspx”,并输入正确的验证码,单击“确定”按钮,进入网页首页,如图1.2所示。 图1.2 首页 第2章 基本信息 基本信息主要包括:添加公司信息、添加商品信息、公司信息管理、商品信息管理。 2.1 添加公司信息 在功能导航区中单击“添加公司信息”按钮,在操作区会显示添加页面,如图2.1所示。此页面主要用于添加供应商及客户信息。在“所属类型”下拉列表中选择公司的所属类型,单击“添加”按钮,完成添加操作。 图2.1 添加公司信息 2.2 添加商品信息 在功能导航区中单击“添加公司信息”按钮,在操作区中会显示添加页面。添加商品信息页面的运行效果如图2.2所示。此页面的操作方法请参见2.1节的添加公司信息。 说明:供应商下拉列表中的信息是公司的所属类型为供应商的公司信息。 图2.2 添加商品信息 2.3 公司信息管理 在功能导航区中单击“公司信息管理”按钮,在操作区中会显示公司信息的管理页面。如图2.3所示。此页面主要实现修改及删除公司信息等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值