千家信息网

java如何实现自动售货机

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关java如何实现自动售货机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。要求:简易售货机流程:【投币】—>【显
千家信息网最后更新 2026年11月03日java如何实现自动售货机

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

要求:

简易售货机

流程:

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

功能要求:

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

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

1、首先要先将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";    /**打开JDBC驱动器     * 如果打开不成功,要抛出异常     * @return     * @throws Exception     */    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("数据库连接异常!");        }    }    /**     * 关闭Connection,     * 如果关闭不成功要抛出异常     */    public void close(Connection conn){        try {            if(conn != null){                conn.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /**     * 关闭Statement,     * 如果关闭不成功要抛出异常     */    public void close(Statement stat){        try {            if(stat != null){                stat.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /**     * 关闭ResultSet,     * 如果关闭不成功要抛出异常     */    public void close(ResultSet rs){        try {            if(rs != null){                rs.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

2、操作完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 rsList = new ArrayList();         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();    }}

4、最后就是在主方法中将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如何实现自动售货机,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

数据 数据库 商品 成功 售货机 投入 驱动 金额 驱动器 选择 自动售货机 就是 方法 程序 网络 货物 解释 输入 中将 余额 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝思科技飞鸽互联网 互联网科技媒体 艾特科技互联网 奇士达互联网科技 人人互联网科技是培训 美国互联网前沿科技 镁科技互联网资讯平台 四个字互联网科技公司取名 广州慧亚互联网科技怎么样 互联网科技创新服务 宁夏科技产业互联网案例 知域互联网科技有限公司大骗子 区块链结合互联网科技 广州千川互联网科技有限公司 35岁以上互联网科技行业 郑州欣桑互联网科技有限公司 萌小萌互联网科技河南有限公司 互联网时代科技型公司的机会 互联网科技职业技能培训学校 前海云享互联网科技 云信互联网科技有限公司 狮子座互联网科技 远信互联网科技 科技大学互联网专业好不好 科技与互联网哪个更好 湖南诚度互联网科技有限公司 内蒙古九一互联网科技 全球科技与互联网公司市值变化 米泉互联网科技专业怎么样 株洲百竞科技的互联网营销顾问
0