欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)自動(dòng)售貨機(jī)

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

JAVA基礎(chǔ)練手項(xiàng)目—自動(dòng)售貨機(jī),供大家參考,具體內(nèi)容如下

要求:

簡易售貨機(jī)

流程:

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

功能要求:

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

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

1、首先要先將JDBC鏈接包加入路徑,這一步在之前的博客中已經(jīng)講過,這里就直接略過了。然后就是在代碼中將驅(qū)動(dòng)器打開:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {

? ? //定義JDBC包導(dǎo)入路徑
? ? private String dbDriver = "com.mysql.jdbc.Driver";
? ? //連接要操作的數(shù)據(jù)庫
? ? private String url = "jdbc:mysql://localhost:3306/database";
? ? //數(shù)據(jù)庫用戶名
? ? private String user = "root";
? ? //數(shù)據(jù)庫密碼
? ? private String password = "123456";

? ? /**打開JDBC驅(qū)動(dòng)器
? ? ?* 如果打開不成功,要拋出異常
? ? ?* @return
? ? ?* @throws Exception
? ? ?*/
? ? public Connection getDBConn() throws Exception{

? ? ? ? try {
? ? ? ? ? ? Class.forName(dbDriver);
? ? ? ? ? ? return DriverManager.getConnection(url, user, password);
? ? ? ? } catch (ClassNotFoundException e) {
? ? ? ? ? ? throw new ClassNotFoundException("數(shù)據(jù)庫驅(qū)動(dòng)不存在??!");
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? throw new SQLException("數(shù)據(jù)庫連接異常!");
? ? ? ? }
? ? }

? ? /**
? ? ?* 關(guān)閉Connection,
? ? ?* 如果關(guān)閉不成功要拋出異常
? ? ?*/
? ? public void close(Connection conn){

? ? ? ? try {
? ? ? ? ? ? if(conn != null){
? ? ? ? ? ? ? ? conn.close();
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }

? ? /**
? ? ?* 關(guān)閉Statement,
? ? ?* 如果關(guān)閉不成功要拋出異常
? ? ?*/
? ? public void close(Statement stat){

? ? ? ? try {
? ? ? ? ? ? if(stat != null){
? ? ? ? ? ? ? ? stat.close();
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }

? ? /**
? ? ?* 關(guān)閉ResultSet,
? ? ?* 如果關(guān)閉不成功要拋出異常
? ? ?*/
? ? public void close(ResultSet rs){

? ? ? ? try {
? ? ? ? ? ? if(rs != null){
? ? ? ? ? ? ? ? rs.close();
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }

}

2、操作完JDBC之后,新建一個(gè)類,用來定義自動(dòng)售貨機(jī)具有的各個(gè)屬性及方法:

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 {

? ? //實(shí)例化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;
? ? }

? ? //顯示當(dāng)前商品的信息
? ? public void displayAllGoods(){

? ? ? ? //結(jié)果集封裝
? ? ? ? ArrayList<String[]> rsList = new ArrayList<String[]>();?

? ? ? ? String[] strTemp = null;


? ? ? ? //sql顯示操作
? ? ? ? String sql = "SELECT `Code`, `Name`, Number, Price FROM goods";

? ? ? ? try {
? ? ? ? ? ? //驅(qū)動(dòng)器加載
? ? ? ? ? ? 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{
? ? ? ? ? ? //關(guān)閉連接
? ? ? ? ? ? dbu.close(rs);
? ? ? ? ? ? dbu.close(stat);
? ? ? ? ? ? dbu.close(conn);
? ? ? ? }
? ? }

? ? //進(jìn)行購買
? ? public void buyByCode(){

? ? ? ? System.out.println("請輸入您想購買的商品編號:");
? ? ? ? int code = scanner.nextInt();

? ? ? ? //如果購買成功,則商品數(shù)量減一,該商品銷售所得金額增加自身價(jià)格
? ? ? ? String sql = "update Goods set Number = Number - 1, Gain = Gain + Price where Code = " + code;

? ? ? ? try {
? ? ? ? ? ? //驅(qū)動(dòng)器加載
? ? ? ? ? ? conn = dbu.getDBConn();

? ? ? ? ? ? //手動(dòng)提交
? ? ? ? ? ? //conn.setAutoCommit(false);

? ? ? ? ? ? stat = conn.createStatement();
? ? ? ? ? ? //操作影響行數(shù)
? ? ? ? ? ? int affectedRows = stat.executeUpdate(sql);

? ? ? ? ? ? //檢查余額是否足夠
? ? ? ? ? ? if(checkMoney(code, stat, this.money)){

? ? ? ? ? ? ? ? if(affectedRows > 0){
? ? ? ? ? ? ? ? ? ? System.out.println("購買成功!");

? ? ? ? ? ? ? ? ? ? //操作成功則手動(dòng)提交
? ? ? ? ? ? ? ? ? ? //conn.commit();

? ? ? ? ? ? ? ? ? ? //后續(xù)操作:找零或繼續(xù)購買
? ? ? ? ? ? ? ? ? ? this.proceed();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? System.out.println("金額不足!");

? ? ? ? ? ? ? ? //回到驅(qū)動(dòng)器加載的位置
? ? ? ? ? ? ? ? //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()){
? ? ? ? ? ? ? ? //對余額進(jìn)行更改
? ? ? ? ? ? ? ? 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 . 之后定義售貨機(jī)服務(wù)菜單,讓用戶進(jìn)行投幣、購買及后續(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("---------------------------");

? ? ? ? //投入金額準(zhǔn)備購買商品
? ? ? ? System.out.println("請輸入您要投入的金額:");
? ? ? ? svm.slot(scanner.nextDouble());

? ? ? ? svm.buyByCode();

? ? }

}

4、最后就是在主方法中將SVMService 實(shí)例化并進(jìn)行調(diào)用:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法

    Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法

    這篇文章主要介紹了Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • java Nio使用NioSocket客戶端與服務(wù)端交互實(shí)現(xiàn)方式

    java Nio使用NioSocket客戶端與服務(wù)端交互實(shí)現(xiàn)方式

    這篇文章主要介紹了java Nio使用 NioSocket 客戶端與服務(wù)端交互實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例

    Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例

    這篇文章主要介紹了Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot項(xiàng)目jar和war打包部署方式詳解

    SpringBoot項(xiàng)目jar和war打包部署方式詳解

    這篇文章主要為大家介紹了SpringBoot項(xiàng)目jar和war打包部署方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • SpringBoot四大神器之Actuator的使用小結(jié)

    SpringBoot四大神器之Actuator的使用小結(jié)

    這篇文章主要介紹了SpringBoot四大神器之Actuator的使用小結(jié),詳細(xì)的介紹了Actuator的使用和端點(diǎn)的使用,有興趣的可以了解一下
    2017-11-11
  • Java中的Optional類詳細(xì)解讀

    Java中的Optional類詳細(xì)解讀

    這篇文章主要介紹了Java中的Optional類詳細(xì)解讀,Optional是Java中的一個(gè)類,它的作用是用于解決空指針異常的問題,它提供了一些有用的方法,可以幫助我們避免顯式進(jìn)行空值檢測,需要的朋友可以參考下
    2023-08-08
  • idea不能搜索任何插件的問題解決

    idea不能搜索任何插件的問題解決

    本文主要介紹了idea不能搜索任何插件的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式

    SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式

    在spring上傳文件中,一般都使用了MultipartFile來接收,但是有需要用到File的地方,本文主要介紹了SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式,感興趣的可以了解一下
    2022-04-04
  • springboot使用nacos的示例詳解

    springboot使用nacos的示例詳解

    這篇文章主要介紹了springboot使用nacos的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • SpringBoot屬性注入的兩種方法

    SpringBoot屬性注入的兩種方法

    這篇文章主要介紹了SpringBoot屬性注入的兩種方法,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11

最新評論