最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現自動售貨機

 更新時間:2022年01月23日 15:38:34   作者:吾人為學  
這篇文章主要為大家詳細介紹了java實現自動售貨機,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

JAVA基礎練手項目—自動售貨機,供大家參考,具體內容如下

要求:

簡易售貨機

流程:

【投幣】—>【顯示貨物清單】—>【選擇一個商品編號購買】—>【提示出貨】—>【找錢】

功能要求:

1. 使用mysql數據庫,將所有貨物存儲在數據庫中(貨物應至少具有編號、名稱、數量、價格等基本信息,可自行增加其他屬性以完善程序)。
2. 要有友好的客戶提示,例如:請輸入購買商品的編號。
3. 清單要求包含每種商品的剩余數量。
4. 出貨后,可以選擇【找錢】,也可以選擇【繼續(xù)購買】,而不直接找錢

以下為解題思路及答案(略過數據庫建表操作):

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();

? ? ? ? ? ? ? ? ? ? //后續(xù)操作:找零或繼續(xù)購買
? ? ? ? ? ? ? ? ? ? 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;
? ? }

? ? //定義后續(xù)操作
? ? public void proceed(){
? ? ? ? System.out.println("請選擇找零(0)或繼續(xù)購買(1):");
? ? ? ? int n = scanner.nextInt();

? ? ? ? switch(n){
? ? ? ? ? ? case 0:
? ? ? ? ? ? ? ? System.out.println("剩余零錢:" + SimpleVendingMachine.balance + "已退回!");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? this.money = SimpleVendingMachine.balance;
? ? ? ? ? ? ? ? buyByCode();
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }
}

3 . 之后定義售貨機服務菜單,讓用戶進行投幣、購買及后續(xù)操作:

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();
? ? }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

  • springboot 自定義屬性與加載@value示例詳解

    springboot 自定義屬性與加載@value示例詳解

    在SpringBoot框架中,自定義屬性通常通過application.properties文件配置,并使用@Value注解加載,雖然這是一種可行的方法,但存在一種更優(yōu)雅的實現方式,本文給大家介紹springboot 自定義屬性與加載@value的相關操作,感興趣的朋友一起看看吧
    2024-10-10
  • Spring裝配Bean教程之XML安裝配置bean詳解

    Spring裝配Bean教程之XML安裝配置bean詳解

    大家都知道spring有多重配置方式,基于XML,基于注解,基于java類的配置,其中基于XML是最強大的一種,下面這篇文章主要給大家介紹了關于Spring裝配Bean之XML安裝配置bean的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Java中zip的壓縮和解壓縮的實現代碼

    Java中zip的壓縮和解壓縮的實現代碼

    這篇文章主要介紹了Java中zip的壓縮和解壓縮的實現代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Spring配置動態(tài)數據源實現讀寫分離的方法

    Spring配置動態(tài)數據源實現讀寫分離的方法

    這篇文章主要介紹了利用Spring配置動態(tài)數據源實現讀寫分離的方法,文中通過示例代碼介紹的很詳細,相信對大家的理解和學習具有一定的參考借鑒價值,藕需要的朋友可以一起學習學習。
    2017-01-01
  • Java使用Redis實現秒殺功能

    Java使用Redis實現秒殺功能

    這篇文章主要為大家詳細介紹了Java使用Redis實現秒殺功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Java設計模式的策略模式簡析

    Java設計模式的策略模式簡析

    這篇文章主要介紹了Java設計模式的策略模式簡析,策略模式中定義了一系列的算法族,算法族指的是類似于一系列的行為、策略,策略模式將一系列的行為封裝成類,既可以說是將每一種相類似的行為都封裝成一個類,也有可能存在特殊的不進行封裝的行為,需要的朋友可以參考下
    2023-12-12
  • java把excel內容上傳到mysql實例代碼

    java把excel內容上傳到mysql實例代碼

    這篇文章主要介紹了java把excel內容上傳到mysql實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 單例模式垃圾回收_動力節(jié)點Java學院整理

    單例模式垃圾回收_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了單例模式垃圾回收的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Spring?Boot整合?NoSQL?數據庫?Redis詳解

    Spring?Boot整合?NoSQL?數據庫?Redis詳解

    這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數據庫?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Spring @Transactional注解的聲明式事務簡化業(yè)務邏輯中的事務管理

    Spring @Transactional注解的聲明式事務簡化業(yè)務邏輯中的事務管理

    這篇文章主要為大家介紹了Spring @Transactional注解的聲明式事務簡化業(yè)務邏輯中的事務管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論

喀什市| 滨海县| 淮北市| 家居| 庄河市| 阿拉善右旗| 梓潼县| 湖南省| 张家港市| 阿克| 偃师市| 尚义县| 霍邱县| 兴文县| 福建省| 南投市| 龙井市| 天祝| 襄樊市| 色达县| 满洲里市| 郁南县| 扶风县| 洛隆县| 康马县| 水富县| 买车| 留坝县| 文水县| 双辽市| 惠州市| 丹江口市| 玉山县| 枣庄市| 瓦房店市| 萨迦县| 若尔盖县| 灵川县| 晋州市| 珠海市| 全椒县|