您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)java如何實(shí)現(xiàn)自動(dòng)售貨機(jī),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。
簡(jiǎn)易售貨機(jī)
【投幣】—>【顯示貨物清單】—>【選擇一個(gè)商品編號(hào)購(gòu)買(mǎi)】—>【提示出貨】—>【找錢(qián)】
1. 使用mysql數(shù)據(jù)庫(kù),將所有貨物存儲(chǔ)在數(shù)據(jù)庫(kù)中(貨物應(yīng)至少具有編號(hào)、名稱(chēng)、數(shù)量、價(jià)格等基本信息,可自行增加其他屬性以完善程序)。
2. 要有友好的客戶(hù)提示,例如:請(qǐng)輸入購(gòu)買(mǎi)商品的編號(hào)。
3. 清單要求包含每種商品的剩余數(shù)量。
4. 出貨后,可以選擇【找錢(qián)】,也可以選擇【繼續(xù)購(gòu)買(mǎi)】,而不直接找錢(qián)
以下為解題思路及答案(略過(guò)數(shù)據(jù)庫(kù)建表操作):
1、首先要先將JDBC鏈接包加入路徑,這一步在之前的博客中已經(jīng)講過(guò),這里就直接略過(guò)了。然后就是在代碼中將驅(qū)動(dòng)器打開(kāi):
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ù)庫(kù) private String url = "jdbc:mysql://localhost:3306/database"; //數(shù)據(jù)庫(kù)用戶(hù)名 private String user = "root"; //數(shù)據(jù)庫(kù)密碼 private String password = "123456"; /**打開(kāi)JDBC驅(qū)動(dòng)器 * 如果打開(kāi)不成功,要拋出異常 * @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ù)庫(kù)驅(qū)動(dòng)不存在?。?quot;); } catch (SQLException e) { throw new SQLException("數(shù)據(jù)庫(kù)連接異常!"); } } /** * 關(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è)類(lèi),用來(lái)定義自動(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; //投入金錢(qián) 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)行購(gòu)買(mǎi) public void buyByCode(){ System.out.println("請(qǐng)輸入您想購(gòu)買(mǎi)的商品編號(hào):"); int code = scanner.nextInt(); //如果購(gòu)買(mǎi)成功,則商品數(shù)量減一,該商品銷(xiāo)售所得金額增加自身價(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("購(gòu)買(mǎi)成功!"); //操作成功則手動(dòng)提交 //conn.commit(); //后續(xù)操作:找零或繼續(xù)購(gòu)買(mǎi) 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); } } //檢查投入金額是否足夠購(gòu)買(mǎi)商品 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()){ //對(duì)余額進(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("請(qǐng)選擇找零(0)或繼續(xù)購(gòu)買(mǎi)(1):"); int n = scanner.nextInt(); switch(n){ case 0: System.out.println("剩余零錢(qián):" + SimpleVendingMachine.balance + "已退回!"); break; case 1: this.money = SimpleVendingMachine.balance; buyByCode(); break; } } }
3 . 之后定義售貨機(jī)服務(wù)菜單,讓用戶(hù)進(jìn)行投幣、購(gòu)買(mǎi)及后續(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)備購(gòu)買(mǎi)商品 System.out.println("請(qǐng)輸入您要投入的金額:"); 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(); } }
1. 簡(jiǎn)單,只需理解基本的概念,就可以編寫(xiě)適合于各種情況的應(yīng)用程序;2. 面向?qū)ο螅?. 分布性,Java是面向網(wǎng)絡(luò)的語(yǔ)言;4. 魯棒性,java提供自動(dòng)垃圾收集來(lái)進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。;5. 安全性,用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須防止病毒的入侵。6. 體系結(jié)構(gòu)中立,只要安裝了Java運(yùn)行時(shí)系統(tǒng),就可在任意處理器上運(yùn)行。7. 可移植性,Java可以方便地移植到網(wǎng)絡(luò)上的不同機(jī)器。8.解釋執(zhí)行,Java解釋器直接對(duì)Java字節(jié)碼進(jìn)行解釋執(zhí)行。
以上就是java如何實(shí)現(xiàn)自動(dòng)售貨機(jī),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。