java实现自动售货机

这篇文章主要为大家详细介绍了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  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();     } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持0133技术站。

以上就是java实现自动售货机的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java