首页 > 编程语言 >java实现自动售货机

java实现自动售货机

时间:2023-04-18 17:56:29浏览次数:39  
标签:java 实现 System next int 自动售货机 println data out

自动售货机主要实现两大功能:售卖和管理。

一、对于售卖,购买者只要可以看见有什么卖,卖多少钱就可以。

先给售货机一个初始的商品列表。在储存商品时我用的是链表写的,方便遍历。

public void initProduct(){
product a=new product();
a.setID(1);
a.setName("可乐");
a.setPrice(4.00);
a.setNumber(5);
product b=new product();
b.setID(2);
b.setName("雪碧");
b.setPrice(3.00);
b.setNumber(5);
product c=new product();
c.setID(3);
c.setName("旺仔牛奶");
c.setPrice(5.00);
c.setNumber(5);
product d=new product();
d.setID(4);
d.setName("娃哈哈");
d.setPrice(4.00);
d.setNumber(5);
product e=new product();
e.setID(5);
e.setName("摩卡咖啡");
e.setPrice(7.00);
e.setNumber(5);
product f=new product();
f.setID(6);
f.setName("矿泉水");
f.setPrice(2.00);
f.setNumber(5);

q.data=a;
q.next=null;
head=q;
Node p=new Node();
p.data=b;
p.next=null;
q.next=p;
q=p;
Node t=new Node();
t.data=c;
t.next=null;
q.next=t;
q=t;
Node y=new Node();
y.data=d;
y.next=null;
q.next=y;
q=y;
Node u=new Node();
u.data=e;
u.next=null;
q.next=u;
q=u;
Node i=new Node();
i.data=f;
i.next=null;
q.next=i;
q=i;
}
public void showProduct(){
initProduct();

q=head;
while(q!=null){
System.out.println("编号为"+q.data.getID()+q.data.getName()+":"+q.data.getPrice()+"元/瓶");
q=q.next;
}
}

 

然后购买者首先是要看到这个列表,再输入自己想买的商品和数量,然后投币,找零,拿到商品就可以。

 

public void BuyProduct() throws ChargeExcept{
showProduct();
System.out.println("请输入你要购买的商品编号:");
int ID=scanner.nextInt();
System.out.println("请输入你要购买的数量:");
int count=scanner.nextInt();
double price=0;

q=head;
while(q!=null){
if(q.data.getID()==ID){
price=q.data.getPrice();
break;
}
q=q.next;
}

double require=count*price;
System.out.println("你需要支付:"+require+"元");
System.out.println("请投币:");
sumMonNum=scanner.nextDouble();
PutChange(sumMonNum);
splitChange(sumMonNum-require);
Oprationafter();
}

这里的PutChange()就是把顾客投的钱放到售货机系统里,splitChange()就是找零;

public void PutChange(double money){
if (money < 0) {
System.out.println("money is invalid, money=" + money);
return;
}
double[] prices = {100, 50, 20, 10, 5, 1,0.5};
int[] outmoney = new int[prices.length];
double change = money;
int count = 0;
for (int i = 0; i < prices.length; i++) {
count = 0;
while (change - prices[i] >= 0) {
change = change - prices[i];
count++;
}
inventory[i]=inventory[i]+count;
outmoney[i] = count;
}

}

 

public void splitChange(double money) throws ChargeExcept {
if (money < 0) {
System.out.println("money is invalid, money=" + money);
return;
}
int flag=0;
double[] prices = {100, 50, 20, 10, 5, 1,0.5};
int[] outmoney = new int[prices.length];
double change = money;
Charge c=new Charge();
int count = 0;
for (int i = 0; i < prices.length; i++) {
count = 0;
while (change - prices[i] >= 0) {
change = change - prices[i];
count++;
}
try{
c.change(inventory[i],count);
}
catch(ChargeExcept e){
System.out.println(e.warnMess());
flag=1;
break;
}
if(flag!=1){
inventory[i]=inventory[i]-count;
outmoney[i] = count;
}
}

if(flag!=1){
System.out.println("找你" + money + "元,请关注出钱口!");
for (int num = 0; num < prices.length; num++) {
System.out.print(outmoney[num] + "张" + prices[num] + "元 \n");
}
System.out.println("您的商品将要出货!!!");
}
}

这里用了自定义异常类来处理售货机不够零钱的现象。

二、对于管理,主要是三种:上架(更新商品)、下架(删除商品)、货币管理(取钱、放钱)。这里的货币管理就简单化了,直接输入现在有的货币,不管他是放进去还是取出来。

public void PutAway() throws ChargeExcept{
System.out.println("已有货物-------1");
System.out.println("商品上新-------2");
int operationNum=scanner.nextInt();
switch(operationNum){
case 1:{

AlreadyExist();
}
case 2:{
Newproduct();
}

}
}

private void Newproduct() throws ChargeExcept {

Node p=new Node();
product a=new product();

System.out.println("请输入新商品编号:");
int ID=scanner.nextInt();
a.setID(ID);
System.out.println("请输入新商品价格:");
Double newprice=scanner.nextDouble();
a.setPrice(newprice);
System.out.println("请输入新商品库存:");
int newnum=scanner.nextInt();
a.setNumber(newnum);

p.data=a;
p.next=null;

q=head;
while(q!=null){
q=q.next;
}
q.next=p;
System.out.println("已完成,正在退出...");
Oprationfirst();
}
public void AlreadyExist() throws ChargeExcept{

q=head;
while(q!=null){
System.out.println("编号为"+q.data.getID()+q.data.getName()+":"+q.data.getPrice()+"元/瓶"+"库存:"+q.data.getNumber());
q=q.next;
}
System.out.println("请输入你要更新的商品:");
int ID=scanner.nextInt();
q=head;
while(q!=null){
if(q.data.getID()==ID){
manage=q;
break;
}
q=q.next;
}
while(true){
System.out.println("更新价格-------1");
System.out.println("更新库存-------2");
System.out.println("退出-------3");
int operationNum=scanner.nextInt();
switch(operationNum){
case 1:{
System.out.println("请输入新价格");
Double newprice=scanner.nextDouble();
manage.data.setPrice(newprice);
}
case 2:{
System.out.println("请输入现有库存");
int newnum=scanner.nextInt();
manage.data.setNumber(newnum);
}
case 3:{
Oprationfirst();
}
}
q=head;
while(q!=null){
if(q.data.getID()==ID){
q=manage;
break;
}
q=q.next;
}
}

}

public void TakeDown(){

q=head;
while(q!=null){
System.out.println("编号为"+q.data.getID()+q.data.getName()+":"+q.data.getPrice()+"元/瓶"+"库存:"+q.data.getNumber());
q=q.next;
}
System.out.println("请输入你要下架的商品:");
int ID=scanner.nextInt();
q=head;
manage=head;
while(q!=null){
if(q.data.getID()==ID){
manage.next=q.next;
break;
}
manage=q;
q=q.next;
}
System.out.println("下架成功!");


}

public void MoneyManage(){
System.out.println("查询自动贩卖机零钱库存:"+"五角:"+inventory[6]+"张"+"一元:"+inventory[5]+"张"+"五元:"+inventory[4]+"张"+"十元:"+inventory[3]+"张"+"二十元:"+inventory[2]+"张"+"五十元:"+inventory[1]+"张"+"一百:"+inventory[0]+"张");

while(true){
System.out.println("选择补充金额的面额");
int operationNum=scanner.nextInt();
switch(operationNum){
case 100:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[0]=n;
}
case 50:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[1]=n;
}
case 20:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[2]=n;
}
case 10:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[3]=n;
}
case 5:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[4]=n;
}
case 1:{
System.out.println("输入现有数量");
int n=scanner.nextInt();
inventory[5]=n;
}
}
}
}

最后就是选择问题,都是用swich来做的,差不多实现页面跳转吧。这些都是核心的部分,至于一些类的定义还是比较好处理的。

 

标签:java,实现,System,next,int,自动售货机,println,data,out
From: https://www.cnblogs.com/mdddd-yep/p/17330554.html

相关文章

  • SpringBoot Web实现文件上传下载功能实例解析
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • Java房屋出租系统
    房屋出租系统-需求实现基于文本界面的《房屋出租软件》。能够实现对房屋信息的添加、修改和删除(用数组实现),并能够打印房屋明细表房屋出租系统-界面项目界面-主菜单项目界面-新增房源项目界面-查找房源项目界面-删除房源项目界面-修改房源项目界面-房屋列表项目界面-退出系......
  • Fragment——底部导航栏的实现
    本节开始我们会讲解一些Fragment在实际开发中的一些实例!而本节给大家讲解的是底部导航栏的实现!而基本的底部导航栏方法有很多种,比如全用TextView做,或者用RadioButton,又或者使用TabLayout+RadioButton,当然复杂的情况还是得走外层套布局的方法!本节我们用TextView来做一个底部导航栏......
  • pandas读取Excel核心源码剖析,面向过程仿openpyxl源码实现Excel数据加载
    今天我们将研究pandas如何使用openpyxl引擎读取xlsx格式的Excel的数据,并考虑以面向过程的形式简单的自己实现一下。截止目前本人所使用的pandas和openpyxl版本为:pandas:1.5.2openpyxl:3.0.10今天所有的测试全部基于以下文件:pandas的read_excel核心代码这里我使用pycharm工具对以下代......
  • java8 BigDecimal 除法保留三位小数 (舍去小数三位后的数,四舍五入)
    BigDecimala=newBigDecimal("9");BigDecimalb=newBigDecimal("15");//舍去小数三位后的数BigDecimalc=b.divide(a,3,RoundingMode.HALF_UP);System.out.println(c);//四舍五入BigDecimal......
  • Java入门6(String和封装类)
    使用第三方jar包,完成get/set操作Lombok,结合特殊的注解,实现setter和getter的自动生成导入jar包使用插件Lombok在类里import即可使用importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;//使用注解@Data,在类编译的时候,自动给class......
  • java.lang.OutOfMemoryError- unable to create new native thread 问题排查
    问题描述最近连续两天大约凌晨3点,线上服务开始异常,出现OOM报错。且服务所在的物理机只能ping通,但是无法登录。报错信息如下:ERROR04-1203:01:43,930[DefaultQuartzScheduler_Worker-3]JobRunShell[JobRunShell]:211JobthrewanunhandledException:java.lang.OutOfMemoryErr......
  • 客服系统vue源码聊天界面,ajax上传图片功能实现
    在线客服系统的聊天界面上,有上传图片按钮功能,使用js实现ajax上传图片功能html部分,有一个点击事件<divclass="iconExtendBtn"@click="uploadImg"><divclass="elIconel-icon-picture"></div>......
  • 升级Java17后Maven中使用bouncycastle加解密遇到JCE cannot authenticate the provide
    网上找了很多办法,逐一试过之后,发现有效的方式为修改打包方式:<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version&......
  • 使用国密SSL证书,实现SSL/TLS传输层国密改造
    密码是保障网络空间安全可信的核心技术和基础支撑,通过自主可控的国产密码技术保护重要数据的安全,是有效提升我国信息安全保障水平的重要举措。因此,我国高度重视商用密码算法的应用并出台相关政策法规,大力推动国产商用密码算法在金融与重要领域的应用。目前,国密算法已经成熟应用于金......