快好知 kuaihz订阅观点

 

java项目超市管理系统

一.概述

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一号 查看相关文章。所以开始之前你总的把java开发环境安装好吧、数据库安装好吧、

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

8.源码获取:我会将核心代码粘贴出来,所有的代码关注鹏哥公众号  java一号  实战项目中会给出

二:效果演示

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

三:创建项目

在eclipse创建一个ShopManager项目

接着我们将数据库驱动jar包引入(可以去官网下载或者在我的公众号 java一号  回复  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";//数据库密码 //本地数据库shop private 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(); } //打印方法 @Override public 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的执行对象PreparedStatement PreparedStatement pst = con.prepareStatement(sql); //给占位符设置值 pst.setString(1, name); pst.setFloat(2, price); pst.setInt(3, num); pst.setInt(4, gid); //如果是查询的话execute()返回true,如果是更新或插入的话就返回false if(!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的执行对象PreparedStatement PreparedStatement pst = con.prepareStatement(sql); //给占位符设置值 pst.setInt(1, id); //如果是查询的话execute()返回true,如果是更新或插入的话就返回false if(!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的执行对象PreparedStatement PreparedStatement 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的对象PreparedStatement PreparedStatement 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的对象PreparedStatement PreparedStatement pst = con.prepareStatement(sql); ResultSet rs = pst.executeQuery(); System.out.println("编号 "+"名称 "+"单价 "+"数量 "); if(rs.wasNull()){ System.out.println("没有商品"); }else{ while(rs.next()){//有结果,打印 //通过rs.getxxx("yy")方法参数是数据库列名 System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+ rs.getFloat("price")+" "+rs.getInt("num")+" "); } } //关闭连接 DbUtil.close(con, pst); } catch (SQLException e) { e.printStackTrace(); } } //购买商品 public void buyGood() { //用来存储购买商品的集合 ArrayListgoods = 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()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(ArrayListgoods) { System.out.println("编号 "+"名称 "+"数量 "+"总价"); //lambda表达式遍历集合,当然是用for循环也ok goods.forEach(in->System.out.println(in.getId()+" "+in.getName()+ " "+in.getNum()+" "+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项目超市管理系统  管理系统  管理系统词条  超市  超市词条  项目  项目词条  java  java词条