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("编号\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的对象PreparedStatement PreparedStatement pst = con.prepareStatement(sql); pst.setInt(1, good.getNum()-num);//更新库存 pst.setInt(2, id); if(pst.executeUpdate()==1){ //存入购买商品的荟萃goods Good 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循环也ok goods.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