我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java如何实现自动售货机

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java如何实现自动售货机

本篇文章给大家分享的是有关java如何实现自动售货机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

要求:

简易售货机

流程:

【投币】—>【显示货物清单】—>【选择一个商品编号购买】—>【提示出货】—>【找钱】

功能要求:

使用mysql数据库,将所有货物存储在数据库中(货物应至少具有编号、名称、数量、价格等基本信息,可自行增加其他属性以完善程序)。
2. 要有友好的客户提示,例如:请输入购买商品的编号。
3. 清单要求包含每种商品的剩余数量。
4. 出货后,可以选择【找钱】,也可以选择【继续购买】,而不直接找钱

以下为解题思路及答案(略过数据库建表操作):

首先要先将JDBC链接包加入路径,这一步在之前的博客中已经讲过,这里就直接略过了。然后就是在代码中将驱动器打开:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DBUtil {    //定义JDBC包导入路径    private String dbDriver = "com.mysql.jdbc.Driver";    //连接要操作的数据库    private String url = "jdbc:mysql://localhost:3306/database";    //数据库用户名    private String user = "root";    //数据库密码    private String password = "123456";        public Connection getDBConn() throws Exception{        try {            Class.forName(dbDriver);            return DriverManager.getConnection(url, user, password);        } catch (ClassNotFoundException e) {            throw new ClassNotFoundException("数据库驱动不存在!!");        } catch (SQLException e) {            throw new SQLException("数据库连接异常!");        }    }        public void close(Connection conn){        try {            if(conn != null){                conn.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }        public void close(Statement stat){        try {            if(stat != null){                stat.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }        public void close(ResultSet rs){        try {            if(rs != null){                rs.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

操作完JDBC之后,新建一个类,用来定义自动售货机具有的各个属性及方法:

import java.sql.Connection;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.Scanner;public class SimpleVendingMachine {    //实例化JDBC连接和输入方法    DBUtil dbu = new DBUtil();    Scanner scanner = new Scanner(System.in);    //定义Connection,Statement和ResultSet    Connection conn = null;    Statement stat = null;    ResultSet rs = null;    //定义投入的金币和余额    private double money;    private static double balance = 0;      //投入金钱    public void slot(double money){        this.money = money;    }    //显示当前商品的信息    public void displayAllGoods(){        //结果集封装        ArrayList<String[]> rsList = new ArrayList<String[]>();         String[] strTemp = null;        //sql显示操作        String sql = "SELECT `Code`, `Name`, Number, Price FROM goods";        try {            //驱动器加载            conn = dbu.getDBConn();            stat = conn.createStatement();            rs = stat.executeQuery(sql);            ResultSetMetaData rsmd = rs.getMetaData();            int columnCount = rsmd.getColumnCount();            String[] columnNames = new String[columnCount];            for(int i = 0 ; i < columnNames.length ; i++){                columnNames[i] = rsmd.getColumnName(i + 1);            }            rsList.add(columnNames);            //遍历赋值            while(rs.next()){                strTemp = new String[columnCount];                for(int i = 0 ; i < columnNames.length ; i ++){                    strTemp[i] = rs.getString(columnNames[i]);                }                rsList.add(strTemp);                }            //遍历输出            for(String[] datas : rsList){                for(String data : datas){                    System.out.print(data + "\t");                }                System.out.println();            }        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            //关闭连接            dbu.close(rs);            dbu.close(stat);            dbu.close(conn);        }    }    //进行购买    public void buyByCode(){        System.out.println("请输入您想购买的商品编号:");        int code = scanner.nextInt();        //如果购买成功,则商品数量减一,该商品销售所得金额增加自身价格        String sql = "update Goods set Number = Number - 1, Gain = Gain + Price where Code = " + code;        try {            //驱动器加载            conn = dbu.getDBConn();            //手动提交            //conn.setAutoCommit(false);            stat = conn.createStatement();            //操作影响行数            int affectedRows = stat.executeUpdate(sql);            //检查余额是否足够            if(checkMoney(code, stat, this.money)){                if(affectedRows > 0){                    System.out.println("购买成功!");                    //操作成功则手动提交                    //conn.commit();                    //后续操作:找零或继续购买                    this.proceed();                }            }else{                System.out.println("金额不足!");                //回到驱动器加载的位置                //conn.rollback();            }        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            dbu.close(rs);            dbu.close(stat);            dbu.close(conn);        }    }    //检查投入金额是否足够购买商品    public boolean checkMoney(int code, Statement stat, double money){        ResultSet rs = null;        try {            rs = stat.executeQuery("select Price from goods where Code  = " + code);            while(rs.next()){                //对余额进行更改                SimpleVendingMachine.balance = money - rs.getDouble("Price");                if(SimpleVendingMachine.balance >= 0){                    return true;                }else{                    return false;                 }            }        } catch (SQLException e) {            e.printStackTrace();        }        return false;    }    //定义后续操作    public void proceed(){        System.out.println("请选择找零(0)或继续购买(1):");        int n = scanner.nextInt();        switch(n){            case 0:                System.out.println("剩余零钱:" + SimpleVendingMachine.balance + "已退回!");                break;            case 1:                this.money = SimpleVendingMachine.balance;                buyByCode();                break;        }    }}

3 . 之后定义售货机服务菜单,让用户进行投币、购买及后续操作:

import java.util.Scanner;public class SVMService {    SimpleVendingMachine svm = new SimpleVendingMachine();    Scanner scanner = new Scanner(System.in);    public void service(){        //显示所有商品        svm.displayAllGoods();        System.out.println("---------------------------");        //投入金额准备购买商品        System.out.println("请输入您要投入的金额:");        svm.slot(scanner.nextDouble());        svm.buyByCode();    }}

最后就是在主方法中将SVMService 实例化并进行调用:

public class Demo {    public static void main(String[] args) {        SVMService svms = new SVMService();        svms.service();    }}

Java的优点是什么

1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。

以上就是java如何实现自动售货机,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java如何实现自动售货机

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java如何实现自动售货机

本篇文章给大家分享的是有关java如何实现自动售货机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。要求:简易售货机流程:【投币】—>【显示货物清单】—>
2023-06-28

如何使用C语言实现自动售货机

这篇文章将为大家详细讲解有关如何使用C语言实现自动售货机,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下如图所示的简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1-10,标有
2023-06-28

Java自动释放锁如何实现

本篇内容介绍了“Java自动释放锁如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Python 提供了 try-with-lock
2023-06-30

JS如何实现自动打字机动效

这篇文章主要讲解了“JS如何实现自动打字机动效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS如何实现自动打字机动效”吧!1、实现思路 首先这个需求的目的是实现自动打字机效果,意思就是文字
2023-07-05

如何让computer实现自动开机

如何让computer实现自动开机,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。按照通常主板最常见的BIOS界面,在开机时连续按多次“Del”键进入BIOS,然后在左边的列
2023-06-14

Java数据结构之AC自动机算法如何实现

本篇内容主要讲解“Java数据结构之AC自动机算法如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java数据结构之AC自动机算法如何实现”吧!1 概念和原理一般的字符串匹配算法都是匹配一
2023-07-04

emule如何实现自动关机脚本

小编给大家分享一下emule如何实现自动关机脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!dir="E:\Temp" Set fso=CreateObject
2023-06-08

java web如何实现自动登录功能

这篇文章主要介绍java web如何实现自动登录功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下主要思路就是:当用户访问网站的首页时,浏览器端会先检擦浏览器中存在的cookie中是否又登录的用户的用户名
2023-05-31

java开发如何实现订阅到货通知

本篇内容主要讲解“java开发如何实现订阅到货通知”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java开发如何实现订阅到货通知”吧!思路为什么每次到货通知进去看都没货呢?猜想可能有几种情况,可
2023-07-05

Java如何实现茶叶售卖商城系统

本篇内容介绍了“Java如何实现茶叶售卖商城系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言这是一个应用SSM框架的项目,前端页面整洁
2023-06-22

php-fpm如何实现开机自动启动Shell脚本

小编给大家分享一下php-fpm如何实现开机自动启动Shell脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!网上有各种版本的php-fpm开机自动启动脚本,
2023-06-09

C语言如何实现飞机售票系统

本文小编为大家详细介绍“C语言如何实现飞机售票系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现飞机售票系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、项目简介通过“航空售票系统”C语言课程
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录