一.概述

1.三哥前面有写过java项目超市管理系统项目,传送门

2.收到很多朋友私信给我,也很感谢老铁们的反馈和交流,前面这个项目只是对java基础知识和面向对象的思想练习,但是没有涉及到java如何操作数据库,如何通过java将数据从数据库拿出来,如果存进去这些问题。对于java新手来说,这些问题不知道从何处下手。有很多刚入门的java新手建议我写个java操作数据库的实战项目供入门者参考,希望帮助他们少花点时间出坑,整理一下思路,今天就抽时间写个超市购物管理系统.....go go go

3.超市购物管理系统涉及到的知识:java基础语法,java面向对象的开发思想,java如何操作数据库,集合方面的知识

4.适合java入门,不知道java如何操作数据库

5.基本所有的代码三哥会打上注释,方便阅读

6.因为是java操作数据库的实战项目,不会详细讲解java环境搭建,数据库安装,sql语法这些知识。太多了,我写一周不见得写完.....或者可以去三哥站 查看相关文章。所以开始之前你总的把java开发环境安装好吧、数据库安装好吧、

7.开发工具eclipse;jdk是1.8;数据库用的是mysql5.5 (当然sqlserver数据库完全可以)

8.源码获取:我会将核心代码粘贴出来,所有的代码关注公众号  程序三两行  实战项目中会给出

二:效果演示

=================欢迎使用超市购物管理系统=================
1.商品入库
2.根据商品编号查询商品
3.商品列表
4.购买商品
5.删除商品
6.更新商品
0.退出系统
请输入要执行的操作3
编号  名称  单价  数量
1234    苹果  12.0    35
1235    衣服  123.0   0
1236    篮球  200.0   20
输入y继续/否则退出
y
1.商品入库
2.根据商品编号查询商品
3.商品列表
4.购买商品
5.删除商品
0.退出系统
请输入要执行的操作
4
输入购买商品的编号
1235
输入购买商品的数量
1
此商品库存0  无法购买;
输入y继续购买/输入其他结算
y
输入购买商品的编号
1234
输入购买商品的数量
2
购买成功
输入y继续购买/输入其他结算
1236
编号  名称  数量  总价
1234    苹果  2   24.0
总计消费:24.0元
输入y继续/否则退出
y
1.商品入库
2.根据商品编号查询商品
3.商品列表
4.购买商品
5.删除商品
0.退出系统
请输入要执行的操作
5
输入要刪除的商品编号
4564
沒有此商品
输入y继续/否则退出
y
1.商品入库
2.根据商品编号查询商品
3.商品列表
4.购买商品
5.删除商品
0.退出系统
请输入要执行的操作
3
编号  名称  单价  数量
1234    苹果  12.0    33
1235    衣服  123.0   0
1236    篮球  200.0   20
输入y继续/否则退出
y
1.商品入库
2.根据商品编号查询商品
3.商品列表
4.购买商品
5.删除商品
0.退出系统
请输入要执行的操作
4
输入购买商品的编号
1234
输入购买商品的数量
2
购买成功
输入y继续购买/输入其他结算
y
输入购买商品的编号
1234
输入购买商品的数量
2
购买成功
输入y继续购买/输入其他结算
t
编号  名称  数量  总价
1234    苹果  4   48.0
总计消费:48.0元
输入y继续/否则退出

三:创建项目

在eclipse创建一个ShopManager项目

接着我们将数据库驱动jar包引入(可以去官网下载或者在我的公众号 程序三两行  回复  jdbc  即可获取,);java和这个数据库驱动有什么关系呢?简单理解就是这个数据库驱动是java和数据库中间的桥梁,用于两者通信。

创建lib的文件夹

将我们准备好的驱动复制到这个lib中

在这个驱动上右键执行

最后完整的结构

创建项目结构,很重要,很重要,很重要,这些都是开发要注意的,对于这些小项目而言,完全可以将所有的代码类都放在src下,但是以后项目越来越大,所有的类成千上百个,都放在src,没有分包的的话,项目项目其他开发者看到代码什么承受多少点伤害。

这个系统中比较简单,下面四个包就可以,其中app包用于放系统主入口类,pojo放系统涉及的实体类,service放系统业务,utils放系统中的工具类;test临时测试类

四:连接数据库

因为系统会涉及到多次对数据库中数据的访问,所以我们将连接数据库操作写成一个工具类DbUtil,不要每次涉及到操作数据库就写重复的连接代码。

package com.javayihao.top.utils;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** @date 2019-12-9* @Description 连接数据库工具类* @author com.javayihao.top*/
public class DbUtil {//把几个用于连接数据库的字符串定义成常量,不必每次去创建private static final String USER = "root";//数据库用户名private static final String UPWD = "root";//数据库密码//本地数据库shopprivate static final String URL = "jdbc:mysql://localhost:3306/shop";//驱动private static final String DRIVER = "com.mysql.jdbc.Driver";//注册驱动static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}//得到数据库连接对象Connection的函数public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, UPWD);}//关闭连接和 执行 的打开资源public static void close(Connection connection, Statement statement) {if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}//关闭所有的打开资源public static void close(Connection connection, Statement statement, ResultSet rs) {if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}}

测试

package com.javayihao.top.test;import java.sql.Connection;
import java.sql.SQLException;import com.javayihao.top.utils.DbUtil;/*** @date 2019-12-9* @Description 测试数据库连接类* @author com.javayihao.top*/
public class DbUtilTest {public static void main(String[] args) throws SQLException {Connection con = DbUtil.getConnection();System.out.println(con);}
}

如下,说明数据库连接成功

五:创建实体类

package com.javayihao.top.pojo;
/*** @date 2019-12-9* @Description 商品实体* @author com.javayihao.top*/
public class Good {//商品编号private int id;//商品名称private String name;//商品价格(价格可能涉及到小数,这里使用float,当然真正大型购物平台不会使用float,有兴趣的朋友可以上网了解)private float price;//库存private int num;//空参构造public Good() {super();}//打印方法@Overridepublic String toString() {return "Good [id=" + id + ", name=" + name + ", price=" + price + ", num=" + num + "]";}//有参构造,方便初始化对象public Good(int id, String name, float price, int num) {super();this.id = id;this.name = name;this.price = price;this.num = num;}//set get方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}
}

六:数据库

本地创建数据库shop,创建表t_good

CREATE TABLE `t_good` (`id` int(5) NOT NULL,`name` varchar(25) NOT NULL,`price` float(10,2) NOT NULL,`num` int(5) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

七.核心业务

package com.javayihao.top.service;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;import com.javayihao.top.pojo.Good;
import com.javayihao.top.utils.DbUtil;/*** @date 2019-12-9* @Description 系统主界面* @author com.javayihao.top*/
public class ShopView {//获取键盘输入对象Scanner input = new Scanner(System.in);/** 系统运行方法*/public void ShopStart() {System.out.println("=================欢迎使用超市购物管理系统=================");//是否继续的标志量,默认是String isGo="y";do{//调用菜单那展示的函数showMenu();System.out.println("请输入要执行的操作");//接受键盘的输入,这里使用String,一次性处理数字和字符输入,不建议使用int类型数字String select =input.next();//根据输入的选择执行对应的方法switch (select) {//执行商品入库方法case "1":insertGood();break;//执行商品查詢方法case "2":System.out.println("输入要查询的商品编号");int goodId = input.nextInt();//调用查询商品的方法,Good good = searchGoodById(goodId);//存在if(good!=null){System.out.println("商品编号:"+goodId+" 商品名称:"+good.getName()+"  商品价格:"+good.getPrice()+"  商品数量:"+good.getNum());}else{System.out.println("此商品不存在");}break;//执行商品列表方法case "3":getGoodList();break;//执行商品购买方法case "4":buyGood();break;//执行商品购买方法case "5":System.out.println("输入要刪除的商品编号");int id = input.nextInt();//调用查询商品的方法,if(searchGoodById(id)!=null){deleteGood(id);}else{System.out.println("沒有此商品");}break;case "6":updateGood();break;//退出系统case "0":System.out.println("*************欢迎下次使用 再见!*************");//终止程序System.exit(0);default:System.err.println("输入有误 请重新输入!");continue;}System.out.println("输入y继续/否则退出");isGo = input.next();}while(isGo.equals("y"));System.out.println("*************欢迎下次使用 再见!*************");}/*** 更新商品操作* 1.先查询当前要更新的商品存不存在* 2.如果存在更新即可,不存在提示*/private void updateGood() {System.out.println("输入要修改的商品id");int gid = input.nextInt();Good good = searchGoodById(gid);System.out.println("商品信息如下");if(good!=null){System.out.println("商品编号:"+gid+" 商品名称:"+good.getName()+"  商品价格:"+good.getPrice()+"  商品数量:"+good.getNum());System.out.println("修改商品名称");String name = input.next();System.out.println("修改商品单价");float price = input.nextFloat();System.out.println("修改商品库存");int num = input.nextInt();String sql="update t_good set name=?,price=?,num=? where id=? ";try {//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的执行对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);//给占位符设置值pst.setString(1, name);pst.setFloat(2, price);pst.setInt(3, num);pst.setInt(4, gid);//如果是查询的话execute()返回true,如果是更新或插入的话就返回falseif(!pst.execute()){System.out.println("更新成功");}//关闭连接DbUtil.close(con, pst);} catch (Exception e) {e.printStackTrace();System.out.println("更新异常"+e.getMessage());}}else{System.out.println("此商品不存在");}}//用于展示系统界面菜单的方法private void  showMenu() {System.out.println("1.商品入库");System.out.println("2.根据商品编号查询商品");System.out.println("3.商品列表");System.out.println("4.购买商品");System.out.println("5.删除商品");System.out.println("6.更新商品");System.out.println("0.退出系统");}/** 刪除商品* 1.首先得判断该商品存在* 2.根据商品编号id删除*/private void deleteGood(int id) {String sql = "delete from t_good where id=?";try {//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的执行对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);//给占位符设置值pst.setInt(1, id);//如果是查询的话execute()返回true,如果是更新或插入的话就返回falseif(!pst.execute()){System.out.println("刪除成功");}//关闭连接DbUtil.close(con, pst);} catch (Exception e) {e.printStackTrace();System.out.println("删除异常"+e.getMessage());}}/** 商品入库* 这里只处理编号不能重复的逻辑,* 关于输入的编号是不是数字这里就不做判断,有兴趣的朋友可以试试*/private void insertGood(){//商品编号int id=0;System.out.println("输入商品编号");while(true){id= input.nextInt();//判断当前输入的编号重复没有,重复重新输入if(searchGoodById(id)==null){break;}System.err.println("编号重复,请重新输入商品编号");}System.out.println("输入商品名称");String name = input.next();System.out.println("输入商品单价");float price = input.nextFloat();System.out.println("输入商品数量");int num = input.nextInt();//要执行的sql语句,这里使用占位符防止sql入侵String sql = "insert into t_good()values(?,?,?,?)";try {//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的执行对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);//给占位符设置值pst.setInt(1, id);pst.setString(2, name);pst.setFloat(3, price);pst.setInt(4, num);//执行sql语句if(!pst.execute()){System.out.println("入库成功");}//关闭连接DbUtil.close(con, pst);} catch (Exception e) {e.printStackTrace();System.out.println("入库异常"+e.getMessage());}}/*商品查询* 返回的是一个商品对象,没有此商品返回null*/private Good searchGoodById(int id) {//执行的sql语句String sql="select id,name,price,num from t_good where id=?";try {//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);pst.setInt(1, id);ResultSet rs = pst.executeQuery();if(rs.next()){//有结果,将查到的数据通过构造函数封装成一个商品对象Good good = new Good(rs.getInt("id"), rs.getString("name"), rs.getFloat("price"), rs.getInt("num"));return good;}//关闭连接DbUtil.close(con, pst);} catch (SQLException e) {e.printStackTrace();}return null;}//商品列表private void getGoodList(){//执行的sql语句String sql="select id,name,price,num from t_good";try {//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);ResultSet rs = pst.executeQuery();System.out.println("编号\t"+"名称\t"+"单价\t"+"数量\t");if(rs.wasNull()){System.out.println("没有商品");}else{while(rs.next()){//有结果,打印//通过rs.getxxx("yy")方法参数是数据库列名System.out.println(rs.getInt("id")+"\t"+rs.getString("name")+"\t"+rs.getFloat("price")+"\t"+rs.getInt("num")+"\t");}}//关闭连接DbUtil.close(con, pst);} catch (SQLException e) {e.printStackTrace();}}//购买商品public void buyGood() {//用来存储购买商品的集合ArrayList<Good> goods = new ArrayList<>();//是否继续购买标记String flag = "y";do{System.out.println("输入购买商品的编号");int id = input.nextInt();Good good = searchGoodById(id);if(good!=null){System.out.println("输入购买商品的数量");int num = input.nextInt();if(good.getNum()<num){System.out.println("此商品库存"+good.getNum()+"  无法购买;");}else{try{String sql="update t_good set num=? where id=?";//创建一个操作数据库的对象Connection con = DbUtil.getConnection();//创建执行sql的对象PreparedStatementPreparedStatement pst = con.prepareStatement(sql);pst.setInt(1, good.getNum()-num);//更新库存pst.setInt(2, id);if(pst.executeUpdate()==1){//存入购买商品的集合goodsGood g = new Good(id,good.getName(),good.getPrice(),num);if(goods.size()>0){for (int i = 0; i < goods.size(); i++) {if(goods.get(i).getId()==id){//如果购物车中有该商品 数量加即可goods.get(0).setNum(num+goods.get(0).getNum());}else{//如果购物车中没有该商品 数量加即可goods.add(g);}}}else{//购物车中没有商品,加入到购物车中goods.add(g);}System.out.println("购买成功");}else{System.out.println("购买失敗");}}catch(Exception e){e.printStackTrace();System.out.println("购买异常"+e.getMessage());}}System.out.println("输入y继续购买/输入其他结算");flag = input.next();if(!flag.equals("y")){//结算account(goods);}}else{System.out.println("没有此商品");}}while(flag.equals("y"));}//结算购物车private void account(ArrayList<Good> goods) {System.out.println("编号\t"+"名称\t"+"数量\t"+"总价");//lambda表达式遍历集合,当然是用for循环也okgoods.forEach(in->System.out.println(in.getId()+"\t"+in.getName()+"\t"+in.getNum()+"\t"+in.getNum()*in.getPrice()));//合计float sum=0;for (int i = 0; i < goods.size(); i++) {//对总价求和sum += (goods.get(i).getNum())*(goods.get(i).getPrice());}System.out.println("总计消费:"+sum+"元");}
}

总结

至此,项目已经完成了,当然项目本身还是存在不足,比如,在接受键盘输入的合法性判断。对于java操作数据库而言可以参考,

源码我放在了公众号  程序三两行  有需要的自提

不是在搬砖,就是搬砖的路上,希望你的程序永无bug

java项目超市购物管理系统相关推荐

  1. (附源码)springboot基于java的超市购物管理系统 毕业设计 271611

    基于springboot超市购物管理系统小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱 ...

  2. Java项目:超市购物商城管理系统(java+SSM+JSP+jQuery+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目分为前后台,分为普通用户.管理员两种角色.前台普通用户登录,后台管理员登录: 管理员角色包含以下功能: 登录页面,用户查 ...

  3. SSM毕设项目超市会员卡管理系统dq469(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目超市会员卡管理系统dq469(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilder ...

  4. java超市收银项目答辩ppt_基于Java的超市货物管理系统的设计与实现毕业论文+开题报告+源码及数据库+答辩PPT+运行说明...

    基于Java的超市货物管理系统的设计与实现 摘要:在超市日常管理中,商品的进.销.存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足.随着超市形态的高速发展,其经营管理也 ...

  5. java毕业设计超市购物系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计超市购物系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计超市购物系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  6. 项目 我行我素购物管理系统 0913

    项目 我行我素购物管理系统 0913 界面情况 01 登陆阶段流程图 视频 01 https://www.ixigua.com/i6871792537858736654/ 02 游戏类的定义与入口方法 ...

  7. Java项目01-菜谱管理系统控制台实现

    Java项目01-菜谱管理系统控制台实现: 源代码及展示视频请到资源处下载,也可私聊本人提供免积分百度云下载,另外后续还有Java Swing+数据库实现的界面项目哦! 系统主界面: Java Swi ...

  8. Java实现超市会员管理系统

    Java实现超市会员管理系统 定义实体类 User.java public class User {private String name;private String cardId;private ...

  9. 完成我的第一个java项目“评标人才库管理系统”——环境配置+创项目

    完成我的第一个java项目"评标人才库管理系统"--环境配置+创项目 idea配置maven环境 创建第一个Spring项目 idea配置maven环境 1.下载maven htt ...

  10. Java项目实战---歌曲管理系统

    Java项目实战-歌曲管理系统 声明:本人仅整理了代码,方便大家进行调试优化,功能上还存在很多纰漏,欢迎大家评论区讨论 代码原地址放于文章末尾 一.实验目的: 掌握类的定义,JAVA应用程序的设计与实 ...

最新文章

  1. 在线作图|如何绘制带分组的散点图
  2. 四个步骤实现层级清晰的导航栏
  3. 开发加速使用maven国内源,感谢阿里技术团队,良心团队!
  4. GNU make manual 翻译( 一百二十四)
  5. 解决Maven报错“Cannot resolve com.lowagie:itext:2.1.7.js7”
  6. 查看MySQL数据库占用空间大小
  7. ubuntu16.04出现重复进入登陆界面问题
  8. 随机游走模型 matlab,随机游走matlab程序
  9. 微分方程_偏微分方程
  10. c++中引用作为函数参数
  11. php jsp显示数据排序,JSP_SQL数据库开发中的一些精典代码,1.按姓氏笔画排序: select * From T - phpStudy...
  12. Session超时管理以及Session实现自动登录——java web实验
  13. Windows 查看端口是否已打开
  14. [GXYCTF2019]禁止套娃--详解
  15. ROS系统下webots安装
  16. 01-如何选购CPU散热器?小白装机通俗易懂的水冷/风冷CPU散热器知识
  17. UBUNTU14.04 的rabbitvcs问题
  18. Arduino-LED亮度渐变
  19. 【已解决】什么是心跳包?
  20. 合肥工业大学《系统硬件综合设计》(《计算机组成原理》,CPU)课程设计报告(2020)

热门文章

  1. 盘点 | 2018年IoT蓄势待发
  2. 不知道如何做好精益生产管理?可能是你的企业还没有进行工时分析
  3. NC文件按时序维度拆分
  4. 学术论文撰写(逻辑清晰,浅显易懂,套用模板)
  5. linux用独显运行steam,修复在Linux系统上与Nvidia不兼容的Steam游戏
  6. 关于高德地图自定义地图样式只显示中国的解决方案
  7. Vue相关易忘点记录
  8. 2017百度之星资格赛总结
  9. 常见路由器初始密码合集
  10. ubuntu安装QQ教程