亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現自動售貨機

發布時間:2022-01-24 09:17:49 來源:億速云 閱讀:364 作者:kk 欄目:開發技術

本篇文章給大家分享的是有關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<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();

    }

}

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如何實現自動售貨機,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通州区| 宁海县| 醴陵市| 吕梁市| 扬州市| 东丰县| 屏东县| 马山县| 勐海县| 上杭县| 阿鲁科尔沁旗| 深泽县| 昭平县| 沙雅县| 寿宁县| 宾川县| 泰和县| 大兴区| 关岭| 澳门| 西华县| 堆龙德庆县| 东安县| 托克逊县| 海兴县| 新河县| 岳池县| 武鸣县| 茌平县| 彩票| 浪卡子县| 梁平县| 平度市| 阿克陶县| 南江县| 新巴尔虎左旗| 张家口市| 四会市| 稷山县| 冕宁县| 交口县|