2025年《Java程序小作业之自动贩卖机》谭子

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

大家好,我是讯享网,很高兴认识大家。

第一次写博客有点小小紧张哈,刚入门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,,10); gs[goodsIndex++] = new Goods(7,"营养快线",20,,10); gs[goodsIndex++] = new Goods(8,"脉动",20,49200,10); gs[goodsIndex++] = new Goods(9,"罐装椰奶",30,,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 = ""; 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......嘿嘿,你来改吧!!!

        最后留张图来结尾吧。

小讯
上一篇 2025-02-10 11:31
下一篇 2025-02-19 16:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54201.html