JAVA基础练手项目—自动售货机

要求:

简易售货机

流程:

【投币】—>【显示货物清单】—>【选择一个商品编号购买】—>【提示出货】—>【找钱】

功能要求:

1. 使用mysql数据库,将所有货物存储在数据库中(货物应至少具有编号、名称、数量、价格等基本信息,可自行增加其他属性以完善程序)。

2. 要有友好的客户提示,例如:请输入购买商品的编号。

3. 清单要求包含每种商品的剩余数量。

4. 出货后,可以选择【找钱】,也可以选择【继续购买】,而不直接找钱

以下为解题思路及答案(略过数据库建表操作):

首先要先将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(){

//结果集封装

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

}

}

- 最后的最后,求大佬讲解markdown和GitHub的使用方法 …..

简易售货机JAVA sql_JAVA基础---简易自动售货机相关推荐

  1. verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告

    前言 随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要.经过人工设计.制作实验板.调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的 ...

  2. c语言自动售货机实验报告,c语言自动售货机实验报告(15页)-原创力文档

    课 程 设 计 课程名称C 语言高级程序设计 学院xxx 小组成员 1XXX 小组成员 2XXX 小组成员 3XXX 任课教师XXX 2016--2017学年第 1学期 所选题目与要求 自动售货机 问 ...

  3. 自动售货机软件工程课设_自动售货机软件工程.doc

    自动饮料售货机 --软件工程课程设计报告 目录 1引言2 1.1目的2 1.2 背景2 1.3 定义2 1.4 问题描述2 1.5 参考资料2 2.项目概述3 2.1 系统功能3 2.2 业务描述3 ...

  4. 自动售货机 顺序图_UML饮料自动售货机系统设计.doc

    UML饮料自动售货机系统设计 基于UML的饮料自动售货机系统设计 问题描述 1.1 关于自动售货机 自动售货机像磁卡电话.银行柜员机一样,以方便.新颖.文明.昼夜服务等特点,成为发达国家不可缺少的便民 ...

  5. 自动售货机 顺序图_饮料自动售货机系统的分析与设计

    饮料自动售货机系统的分析与设计 1. 系统的分析 1.1 需求分析描述 自动售货机像磁卡电话.银行柜员机一样,以方便.新颖.文明.昼夜服务等特点,成为便民配套设施.如 今的自动售货机可以为顾客提供多种 ...

  6. 自动售货机 顺序图_基于自动售货机的软件工程(精)

    基于自动售货机的软件工程(精) 面向对象分析实践大作业(40% 下面是自动售货机系统的需求陈述,请你: 1. 编写分析和设计报告; 2. 报告分需求分析.系统设计和对象设计三部分编撰, 各部分应按相应 ...

  7. 基于java自动售货机 课程设计_JAVA-案例-自动售货机.pdf

    package LevelSecond; public class Construct { public void drinksType () //添加说明 为了使用方便 单独定义 { System ...

  8. c语言自动售货机实验报告,c语言自动售货机实验报告

    #includefloat M;//M为投入的钱数 int A=1,B=1,t; //A为数量标记,B为金钱标记,1表示有,0表示没有,t用于标记售货机是否能完成退款 int i,n,v=100; / ...

  9. 【程序设计与实践】实验三:自动售货机

    实验三:自动售货机 题目: 图所示为简易自动售货机,物品架1.2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,如下图: 用户购买商品的操作方法如下. 1.售货机物品架上共有10样商品 ...

最新文章

  1. 给初学者们讲解人工神经网络(ANN)
  2. 寻找峰值(局部最大、局部最小)——二分查找
  3. (*长期更新)软考网络工程师学习笔记——Section 14 Linux服务器配置
  4. 软件开发能力成熟度模型CMM介绍
  5. 【机器学习】无监督学习--(聚类)Mini Batch K-Means
  6. FAT16和FAT32文件系统的区别和对比
  7. python后退快捷键_IntelliJ IDEA的后退快捷键是什么?
  8. webpack5 + webpack-chain 构建一个大型应用系列 2(附 vscode 跟 prettier 配置)
  9. CSS几种定位的使用
  10. live.com与live.cn邮箱收不到QQ绑定激活信的解决方法
  11. 【学习笔记之Linux】工具之gcc/g++
  12. tl494组成的超声波发射电路_由TL494构成的恒流闭环控制电路的设计与实现 - 全文...
  13. 从玩法、叙事、主题三个角度浅要谈谈《死亡搁浅》的好与坏
  14. python多进程爬取上海房价并画出热力图分析
  15. 科技赋能农业变革:“大数据+农业”重新定义产业体系
  16. dotnet 读 WPF 源代码笔记 WriteableBitmap 的渲染和更新是如何实现
  17. 一个月捞偏门可挣20万?来看看!
  18. pb反编译工具 常见问题集
  19. MOD04_3K数据处理
  20. Ignorance bless you! 无知是福

热门文章

  1. Python基础学习笔记-6.函数
  2. 鸡声茅店月,人迹板桥霜;莫道君行早,更有早行人
  3. C语言 9:f(x)g(x)模式运用数学函数pow sqrt abs
  4. 使用显着性检测对可见光和红外图像进行双尺度图像融合笔记
  5. HTML+CSS+JS实操京东购物车
  6. MallBook推出二维码收款分账,开启简单分账新篇章
  7. 《一周搞定模电》—集成运算放大器
  8. 使用工作流Workflow规则更新机会Opportunity的可能性
  9. 【BiSeNet】《BiSeNet:Bilateral Segmentation Network for Real-time Semantic Segmentation》
  10. python turtle库制作可爱的假向日葵