第一次写博客有点小小紧张哈,刚入门Java这门语言没多久,博主现在还在打基础中。这里为大伙们分享一下程序课的模拟作业,大概内容也不是很多,图一乐看个热闹就好了,如果需要借鉴的话,当然可以把这里的源码拿去玩玩的。就是,我们最后还有部分Bug问题没解决,就,图一乐吧!

开学第一周是实训周,我们这边给到的题目的是整一个自动贩卖机的模拟,给了五天的作业时间,2天就已经写好了大致内容了,后面又花了3天在补Bug,最后勉强把论文报告的字数凑满。下面是我们课题组整的活。

一、设计思路

        本作业设计了6个类,分别为:贩卖机运行类(DrinkMachine)、菜单编辑类(Menu)、处理会员类(User)、处理货币类(MoneyCounter)、商品类(Goods)、用户类(Per)。其中,商品类与用户类为构造属性方法,分别为处理货币类及处理会员类所调用;贩卖机运行类是测试类,负责主菜单与分支菜单的逻辑管理及运行;菜单编辑类是主要控制类,为贩卖机运行类的附属管理,主要负责所有菜单逻辑分支及调用区,方便管理文字;处理会员登录拥有手机短信登录方法、会员注册方法、查询会员信息方法,便于管理会员菜单;处理货币类中存在结算方法及找零的两种方法,应对支付所出现的客观现象。

具体类的关系图如下:

根据程序设计需求,设计方案的系统工作流程内容如下:

  1. 系统主菜单及内置数组属性的初始化;
  2. 系统将默认拥有9种可选饮料信息,2位初始内置会员信息,1位管理员用户信息(固定的);
  3. 使用者可根据已设计的主菜单进行分支菜单的选择,本方案主菜单设计包含4种输入分支菜单的事件管理,如:输入1进入直接购买饮料菜单选择、输入2进入会员登录菜单选择、输入3进入管理商品菜单选择、输入0或其他数字刷新主菜单。
  4. 若用户在主菜单输入1,则可以直接购买饮料,并且进行现金投币支付的交易流程,倘若支付的金额不能够达到购买价格,将继续进行投币操作,当投币达到价格直接结算并返回主菜单;当投币数超过价格,则进行找零操作,返还用户现金并结算返回主菜单。在结算的同时,我们还提供了热量值计算及一次性购买多个饮料的选择。
  5. 若用户在主菜单输入2,则会跳转入会员菜单界面,用户可以通过输入相对应的数值来选择:手机短信一键登录、会员注册、会员信息查询、返回主菜单。我们为会员们提供了购买结算打七折的优惠。
  6. 若用户在主菜单输入3,则进入到管理员登录页面,需要输入该机器默认管理员名及密码,将会有3次判定输入错误的执行。输入3次失败则返回主菜单;输入成功则转换为管理商品菜单,拥有查询商品信息,添加新品种商品的权限。
  7. 该程序会一直循环,大部分分支菜单可通过输入0退回主菜单,然后继续循环。

二、功能结构

1、具体功能模块流程图如下图所示。

2、具体类图构造如下图所示。

三、源代码

1、DrinkMachine类:
package oneproject;
import java.util.Scanner;
public class DrinkMachine {/**构建售卖机系统*/public static void main(String[] args) {int a;while (true){Menu one = new Menu();one.Menu1();Scanner sc=new Scanner(System.in);a=sc.nextInt();switch (a){case 1:Menu two = new Menu();two.Menu2();break;case 2:Scanner vi = new Scanner(System.in);User sm = new User();sm.theUser();System.out.println("【输入 1 进入购买】\n【输入 2 返回上一级】\n【输入 0 返回主菜单】");int v=vi.nextInt();switch (v){case 1:Menu three = new Menu();three.Menu3();break;case 2:User st = new User();st.theUser();break;case 0:DrinkMachine dz = new DrinkMachine();dz.main(new String[]{});default:System.out.println("输入无效,自动返回主菜单");DrinkMachine dx = new DrinkMachine();dx.main(new String[]{});}continue;case 3:Menu four = new Menu();four.Menu4();case 0:System.out.println("刷新成功");break;default:System.out.println("输入无效,自动返回主菜单");DrinkMachine dt = new DrinkMachine();dt.main(new String[]{});}}}
}

2、Menu类:

package oneproject;
import java.util.Scanner;
public class Menu {private static final int size=100;private static Goods[] gs=new Goods[size];private static int goodsIndex=0;static {gs[goodsIndex++] = new Goods(1,"无糖可乐",10,0,10);gs[goodsIndex++] = new Goods(2,"百事可乐",10,950,10);gs[goodsIndex++] = new Goods(3,"芬达",10,916,10);gs[goodsIndex++] = new Goods(4,"罐装芬达",20,538,10);gs[goodsIndex++] = new Goods(5,"冰红茶",20,525,10);gs[goodsIndex++] = new Goods(6,"蒙牛牛奶",20,692500,10);gs[goodsIndex++] = new Goods(7,"营养快线",20,355040,10);gs[goodsIndex++] = new Goods(8,"脉动",20,49200,10);gs[goodsIndex++] = new Goods(9,"罐装椰奶",30,509600,10);}public static void query(){for (Goods j:gs){if (j!=null)System.out.println(j.toString());}}public static void query1(){for (Goods q:gs){if (q!=null)System.out.println(q.toString());}}/** 管理所有菜单文字*/public void Menu1(){System.out.println("=============欢迎进入饮料售卖机==============");System.out.println("          1-购买饮料");System.out.println("          2-会员登录(享受七折优惠)");System.out.println("          3-管理员登录");System.out.println("          0-刷新界面");System.out.println("==========================================");}public void Menu2(){try{System.out.println("以下饮料供您选择:");query();System.out.println("请选择饮品:");Scanner in=new Scanner(System.in);int id=in.nextInt();int i;boolean flag=false;while(true){for (i=0;i<gs.length;i++){if(gs[i].getId()==id){System.out.println("您选择的是:"+gs[i].getName());System.out.println("请投入现金进行支付");flag=true;break;}}if (flag==true)break;else{System.out.println("无此饮料,请重新选择(0 退出)");id=in.nextInt();if (id==0){System.out.println("欢迎下次购买...");return;}else i=0;}}System.out.println("输入数量");Scanner co = new Scanner(System.in);int count=co.nextInt();if (count<=10 & count>0){int total = (int) (gs[i].getPrice()*count);double cal=count*gs[i].getKl();MoneyCounter mc=new MoneyCounter();mc.Cal(total);System.out.println("卡路里小提示:\n预计摄入热量值为:"+cal+"焦");}else {System.out.println("限制购买瓶数为10瓶,请重新选择...");Menu io=new Menu();io.Menu2();}}catch (Exception e){System.out.println("输入无效");e.printStackTrace();}}public void Menu3(){try{System.out.println("以下饮料供您选择:");query1();System.out.println("请选择饮品:");Scanner ip=new Scanner(System.in);int id=ip.nextInt();int k;boolean choose=false;while(true){for (k=0;k<gs.length;k++){if(gs[k].getId()==id){System.out.println("您选择的是:"+gs[k].getName());System.out.println("【请投入现金进行支付】");choose=true;break;}}if (choose==true)break;else{System.out.println("无此饮料,请重新选择(输入 0 退出)");id=ip.nextInt();if (id==0){System.out.println("欢迎下次购买...");return;}else k=0;}}System.out.println("输入数量");Scanner co = new Scanner(System.in);int count=co.nextInt();if (count<=10 & count>0){int total = (int) (gs[k].getPrice()*count*7/10);double cal=count*gs[k].getKl();MoneyCounter mc=new MoneyCounter();mc.Cal(total);System.out.println("卡路里小提示:\n预计摄入热量值为:"+cal+"焦");}else {System.out.println("限制购买瓶数为10瓶,请重新选择");Menu io=new Menu();io.Menu3();}}catch (Exception e1){System.out.println("输入无效,请重新输入");e1.printStackTrace();}}public void Menu4(){System.out.println("请使用该机器的默认管理员用户名及密码登录");String admin = "123";String adminPassword = "123456";for(int j=0;j<3 ;j++ ){Scanner a1 = new Scanner(System.in);System.out.println("请输入管理员用户名:");String adm1 = a1.nextLine();System.out.println("请输入管理员密码:");String adm2 = a1.nextLine();if(adm1.equals(admin) && adm2.equals(adminPassword)){   //验证管理员名与密码是否正确System.out.println("欢迎管理员登录");int b;while (true){System.out.println("=============欢迎进入管理员系统==============");System.out.println("          1-查询饮料信息");System.out.println("          2-添加新饮料");System.out.println("          0-退出页面");System.out.println("==========================================");Scanner sc=new Scanner(System.in);b=sc.nextInt();switch (b){case 2:int id,price,Kl,num;String name;System.out.println("请输入编号(从10开始计入):");id=sc.nextInt();System.out.println("请输入名称:");name=sc.next();System.out.println("请输入价格:");price=sc.nextInt();System.out.println("请输入热量值:");Kl=sc.nextInt();System.out.println("请输入数量:");num=sc.nextInt();System.out.println("添加饮料成功!当前饮料售卖机的饮料种类为:"+(++goodsIndex)+"种");gs[goodsIndex++] = new Goods(id,name,price,Kl,num);break;case 1:System.out.println("请输入您需要查询的饮料编号:");System.out.println("若无法查询到该编号,则自动返回主菜单");Scanner er = new Scanner(System.in);int id1 = er.nextInt();int hi=0;for (int o =0; o<goodsIndex; o++){int hi1 = hi+1;if (hi1==1){if (gs[id1].getId() == o){System.out.println("饮料编号:"+gs[o].getId() );System.out.println("饮料名称:"+gs[o].getName() );System.out.println("饮料价格:"+gs[o].getPrice() );System.out.println("饮料热量:"+gs[o].getKl() );System.out.println("饮料数量:"+gs[o].getNum() );break;}}else {DrinkMachine dx = new DrinkMachine();dx.main(new String[]{});}}case 0:System.out.println("刷新成功");DrinkMachine drinkMachine = new DrinkMachine();drinkMachine.main(new String[]{});default:System.out.println("输入无效,自动返回主菜单");DrinkMachine dt = new DrinkMachine();dt.main(new String[]{});}}}else{if(j==2){System.out.println("您的错误次数达到极限,请10分钟后再次尝试");}System.out.println("用户名或密码错误,您还有"+(2-j)+"次机会");}}}public void Menu5(){System.out.println("=============欢迎进入用户管理系统==============");System.out.println("          1-手机信息登录");System.out.println("          2-会员注册");System.out.println("          3-会员查询");System.out.println("          0-返回主菜单");System.out.println("==========================================");}
}

3、Goods类:

package oneproject;
public class Goods {/** 构造商品属性方法*/private int id;private String name;private int price;private int Kl;private int num;public Goods(){}public Goods(int id,String name,int price,int Kl,int num){this.id=id;this.name=name;this.price=price;this.Kl=Kl;this.num=num;}public String toString(){return id+"."+name+"("+price+"元)"+"\t"+"\t"+Kl+"焦"+"\t"+num+"瓶";}public String getName(){return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getKl() {return Kl;}public void setKl(int Kl) {this.Kl = Kl;}public int getNum(){return num;}public void setNum(int num){this.num=num;}
}

4、User类:

package oneproject;
import java.util.Scanner;
public class User {/** 会员用户注册及登录*/private static final int person = 100;private static Per[] pe = new Per[person];private static int perIndex = 0;static {pe[perIndex++] = new Per(1, "雅塔莱斯", "女", "666");pe[perIndex++] = new Per(2, "终极帝皇侠", "男", "4399");}public void newUser() {Scanner c1 = new Scanner(System.in);System.out.println("请输入手机号码登录:");String userName = c1.nextLine();System.out.println("请输入验证码:");String password = c1.nextLine();System.out.println("【正在验证中】");for (int i = 0; i < 3; i++) {Scanner us = new Scanner(System.in);System.out.println("请再次输入您的手机号码:");String u1 = us.nextLine();System.out.println("请输入登录时使用的验证码:");String u2 = us.nextLine();if (u1.equals(userName) && u2.equals(password)) { // 验证用户名与密码是否正确System.out.println("欢迎" + "\t" + "【" + userName + "】" + "\t" + "登录");break;} else {if (i == 2) {System.out.println("您的错误次数达到极限,请10分钟后再次尝试");DrinkMachine we = new DrinkMachine();we.main(new String[] {});}System.out.println("手机号或验证码与首次输入不一致,请重新输入...\n" + "您还有" + (2 - i) + "次机会");}}}public void register() {System.out.println("注册您的专属会员编号");System.out.println("【请从序号 3 开始填写】");int number;String call, femininitytest, personpw;Scanner iu = new Scanner(System.in);System.out.println("请输入编号:");number = iu.nextInt();System.out.println("请输入名称:");call = iu.next();System.out.println("请输入性别:");femininitytest = iu.next();System.out.println("请输入密码:");personpw = iu.next();System.out.println("注册成功!\n当前会员数量为" + (++perIndex));pe[perIndex - 1] = new Per(number, call, femininitytest, personpw);}public void inquiry() {System.out.println("请输入您需要查询的会员编号:");System.out.println("若无法查询到该编号,则自动返回主菜单");Scanner et = new Scanner(System.in);int id2 = et.nextInt();for (int i = 0; i < perIndex; i++) {if (id2 == 1 | id2 == 2) {System.out.println("会员编号:" + pe[id2 - 1].getNumber());System.out.println("会员名称:" + pe[id2 - 1].getCall());break;} else if (pe[i].getNumber() == id2) {System.out.println("会员编号:" + pe[id2 - 1].getNumber());System.out.println("会员名称:" + pe[id2 - 1].getCall());System.out.println(pe[id2 - 1].getFemininitytest());System.out.printf("查询成功,自动返回上级菜单\n");break;}}return;}public void theUser() {int c;Menu pi = new Menu();pi.Menu5();Scanner cg = new Scanner(System.in);c = cg.nextInt();switch (c) {case 1:User yi = new User();yi.newUser();break;case 2:User yq = new User();yq.register();break;case 3:User qu = new User();qu.inquiry();DrinkMachine di = new DrinkMachine();di.main(new String[] {});break;case 0:DrinkMachine dt = new DrinkMachine();dt.main(new String[] {});default:System.out.println("输入无效,自动返回主菜单");DrinkMachine dz = new DrinkMachine();dz.main(new String[] {});}}
}

5、MoneyCounter类:

package oneproject;
import java.util.*;
public class MoneyCounter {/** 顾客结算机制*/public void Cal(int Price){Scanner in = new Scanner(System.in);System.out.println("投币口在下方,只支持人民币!");int totalPay = in.nextInt();if(totalPay == Price){Equal();}else if(totalPay>Price){More(Price,totalPay);}else{for(int i=0;totalPay<Price;i++){    //当投入金额小于饮料价格,提示继续投币Scanner input=new Scanner(System.in);System.out.println("投入金额不足以支付本次交易,请继续投币");int everyPay =input.nextInt();totalPay += everyPay;}if(totalPay == Price){  //当再次投币出现投币金额等于价格时,调用Equal方法Equal();}else{More(Price,totalPay);}}}public void Equal(){        //当投入硬币与价格相同时System.out.println("请在出口处取出饮料,找零为0元");System.out.println("欢迎下次使用!");}public void More(int Price,int totalPay){int backPay = totalPay-Price;int fiveHp = backPay/50;int fiveHRemain = backPay-fiveHp * 50;int twoHp = fiveHRemain/20;int twoHRemain = fiveHRemain-twoHp * 20;int oneHp = twoHRemain/10;int oneHRemain = twoHRemain-oneHp * 10;int fiftyp = oneHRemain/5;int fiftyRemain = oneHRemain-fiftyp*5;int tenp = fiftyRemain;System.out.println("请在出口处取饮料,找零为:"+backPay+"\n"+"分别为:");System.out.println("50元:"+fiveHp+"张");System.out.println("20元:"+twoHp+"张");System.out.println("10元:"+oneHp+"张");System.out.println("5元:"+fiftyp+"张");System.out.println("1元:"+tenp+"张");System.out.println("请在出口处取出饮料,欢迎下次使用!");}
}

6、Per类:

package oneproject;
public class Per {/*构造会员类*/private String call;private int number;private String personpw;private String femininitytest;public Per(){}public Per(int number,String call,String femininitytest,String personpw){this.call=call;this.number=number;this.personpw=personpw;this.femininitytest=femininitytest;}public String toString(){return "会员号码:"+number+"\n"+"会员名称"+call+"\n"+femininitytest;}public int getNumber(){return number;}public void setNumber(int number){this.number = number;}public String getCall(){return call;}public void setCall(String call) {this.call = call;}public String getPersonpw() {return personpw;}public void setPersonpw(String personpw) {this.personpw = personpw;}public String getFemininitytest() {return femininitytest;}public void setFemininitytest(String femininitytest) {this.femininitytest = femininitytest;}}

四、运行结果展示

因为截图放太多反而不好看,所以这里就简单地说一下我和我滴小伙伴们造的作业都有哪些内容:

1.主菜单的可选选项,进入分支菜单(共3个分菜单,1个刷新返回主菜单);

2.直接购买商品菜单,附带了卡路里值的计算及一次购买多个同种商品的操作,最终结算支付金额、找零及卡路里预摄入总值;

3.进入会员菜单,拥有内容:手机号二次输入登录(三次判错机会)、注册会员、查询会员;(只有查询存在bug,只能查询注册的第10编号内的信息,其他编号都没办法查询到)

4. 进入管理员菜单,需要先输入默认用户名及密码(三次判错机会),拥有的功能:可以添加新品种商品信息、查询商品信息。(和上面一样,只能查询到新注册的3的编号内信息)

五、作业总结

呃,这次作业大部分代码块是我负责编写的,本文的构图由宝子哥绘制,调试内容是啊宇哥整的(虽然没放多少内容在这里)。我们的作业使用到了循环and判断的嵌套、一维数组的调用、构造方法及调用方法等,涉及到的都是比较基础的Java初步知识。其实还有很多可以改进的,局限于能力不足及时间管理,就......(没摆烂啊)

        如果有哪天,谁谁谁也一样遇到了类似的模拟作业,突然搜到这里来了,本文的代码是完全可以拿去耍耍的,不过查询内容存在的bug......嘿嘿,你来改吧!!!

        最后留张图来结尾吧。

《Java程序小作业之自动贩卖机》#谭子相关推荐

  1. java商品自动贩卖机

    文章目录 目录 前言 一.创建类: customer , goods , shopping 1.customer类,主入口函数 2.goods类 (算作商品父类,子类我也写在里面的) 3.shoppi ...

  2. 《数据结构与抽象:Java语言描述(原书第4版)》一1.4 像使用自动贩卖机一样使用ADT...

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,第1.4节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timoth ...

  3. java学习之路2--简单工厂模式实现饮料自动贩卖机

    java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...

  4. 从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  5. python找零方案_从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  6. 自动贩卖机也能买药?24小时智能药柜背后的黑科技了解一下!

    药品购买,能否像自动贩卖机一样,在急需时即可在自助机柜直接下单立刻拿到?传统上,我们依赖24小时营业的药房,而24小时药房的形式也因运营成本高,依然在很多城市覆盖度不够,无法为用户提供及时的医药服务. ...

  7. 通过编程模拟一个简单的饮料自动贩卖机_你喝过自动贩卖的现榨橙汁吗?

    日前,关于自动贩卖的现榨橙汁机内部构件是否会污染橙汁一事,深圳和上海两地的监管部门给出了不同的监管意见.这也让该类设备产出的食品是否符合食品安全的标准再度成了坊间热议的问题.在青岛,现榨橙汁机也早已遍 ...

  8. 饮品自动贩卖机系统 c语言,自动贩卖机控制系统自动贩卖机控制系统.doc

    自动贩卖机控制系统自动贩卖机控制系统 综合训练项目四"自动贩卖机控制系统" 专 业: 自动化 班 级: 12-1班 姓 名: 白琼 学 号: 1205010102 指导教师: 谢国 ...

  9. c语言自动贩卖机设计报告,自动贩卖机课程设计.doc

    自动贩卖机课程设计.doc 课程设计名称电子技术课程设计题目基于MULTISIM12仿真软件的自动贩卖机的设计学期20132014学年第2学期专业自动化班级12级3班姓名温亮学号1205010321指 ...

最新文章

  1. spring问题--Unable to validate using XSD
  2. python socket 说明
  3. 分段函数 左右 f'正 不等于f'负 则f'导数不存在。所以不能推出f连续是否
  4. 网站html标签如何优化,网站HTML标签优化教程
  5. Android容器相关开发实践
  6. 银行大数据风控平台的建设要点与应用
  7. hdfs 数据迁移_基于 JindoFS+OSS 构建高效数据湖
  8. 设置只能开启一个程序实例
  9. MySQL(14)-----运算符和优先级
  10. 白山搜索引擎优化收费_白山SEO优化_专业搜索引擎优化、整站优化、快速排名公司...
  11. [Accessibility] ****************** Loading GAX Client Bundle ****************
  12. html 心形字符,心形符号大全
  13. java操作word的方法(总结)
  14. 幽灵蛛(pholcus)规则(二)
  15. 安卓-控制台-和风天气,和风天气3.0使用方法
  16. 定制专属于自己的HHKB机械键盘
  17. 团队管理——情绪价值
  18. 01时态(1):疑问句
  19. 验证:获取linux系统的网卡信息
  20. ibatis入门教程

热门文章

  1. 音乐 美术 劳技 计算机教研组工作总结,劳技教研组工作总结
  2. 在销量压力下,国产手机开始降价了,但还没有放下最后的面子
  3. 机器学习(五)logistic回归进行二分类以及多分类(Python代码)
  4. 自建ngrok服务支持https访问
  5. 腾讯云服务器搭建NextCloud云盘
  6. 多智能体强化学习(五)MARL的挑战
  7. 修改计算机参数,缺氧参数怎么修改 游戏内参数修改方法解答
  8. 阿里巴巴编程规范(new)
  9. Rademacher复杂度和VC-维
  10. 实验九 FBG 团队项目需求改进与系统设计