超市 java_java项目超市管理系统

本文介绍了一个Java实现的超市购物管理系统,涵盖了商品入库、查询、购买、删除和更新等操作。项目旨在帮助Java初学者了解如何操作数据库,包括数据库连接、实体类创建、数据交互等。通过实际的代码示例展示了如何使用Java连接MySQL数据库,进行数据的增删查改。此外,还提供了项目结构和测试方法。
摘要由CSDN通过智能技术生成

一.概述

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.035

1235衣服123.00

1236篮球200.020

输入y继续/否则退出

y

1.商品入库

2.根据商品编号查询商品

3.商品列表

4.购买商品

5.删除商品

0.退出系统

请输入要执行的操作

4

输入购买商品的编号

1235

输入购买商品的数量

1

此商品库存0 无法购买;

输入y继续购买/输入其他结算

y

输入购买商品的编号

1234

输入购买商品的数量

2

购买成功

输入y继续购买/输入其他结算

1236

编号名称数量总价

1234苹果224.0

总计消费:24.0元

输入y继续/否则退出

y

1.商品入库

2.根据商品编号查询商品

3.商品列表

4.购买商品

5.删除商品

0.退出系统

请输入要执行的操作

5

输入要刪除的商品编号

4564

沒有此商品

输入y继续/否则退出

y

1.商品入库

2.根据商品编号查询商品

3.商品列表

4.购买商品

5.删除商品

0.退出系统

请输入要执行的操作

3

编号名称单价数量

1234苹果12.033

1235衣服123.00

1236篮球200.020

输入y继续/否则退出

y

1.商品入库

2.根据商品编号查询商品

3.商品列表

4.购买商品

5.删除商品

0.退出系统

请输入要执行的操作

4

输入购买商品的编号

1234

输入购买商品的数量

2

购买成功

输入y继续购买/输入其他结算

y

输入购买商品的编号

1234

输入购买商品的数量

2

购买成功

输入y继续购买/输入其他结算

t

编号名称数量总价

1234苹果448.0

总计消费:48.0元

输入y继续/否则退出

三:创建项目

在eclipse创建一个ShopManager项目

177595534_1_20191209052521829_wm

接着我们将数据库驱动jar包引入(可以去官网下载或者在我的公众号java一号  回复  jdbc  即可获取,);

java和这个数据库驱动有什么关系呢?简单理解就是这个数据库驱动是java和数据库中间的桥梁,用于两者通信。

177595534_2_20191209052522172_wm

创建lib的文件夹

177595534_3_20191209052522501_wm

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

177595534_4_20191209052522907_wm

在这个驱动上右键执行

177595534_5_20191209052523344_wm

最后完整的结构

177595534_6_20191209052523532_wm

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

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

177595534_7_20191209052523641_wm

四:连接数据库

因为系统会涉及到多次对数据库中数据的访问,所以我们将连接数据库操作写成一个工具类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);

}

}

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

177595534_8_20191209052523860_wm.png

五:创建实体类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_goodCREATE 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 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()

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 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值