当前位置: 首页 > news >正文

【JDBC实战】水果库存系统 [设计阶段]

CSDN话题挑战赛第2期
参赛话题:学习笔记

在这里插入图片描述
在这里插入图片描述

JDBC专栏

(点击进入专栏)
【1】idea添加mysql-jar包
【2】使用IDEA连接数据库,执行增删改操作。
【3】IDEA连接数据库,执行查询操作,返回结果集并输出。
【4】JDBC实战 水果库存系统 [设计阶段]


JDBC实战,实现水果库存系统

  • JDBC专栏
  • 前言
  • 一、水果库存系统介绍
  • 二、结构设计:
    • 1).Fruit类
    • 2).Menu类
    • 3).Client类
    • 4).DAO设计理念
      • ①提供抽象接口FruitDAO
      • ②接口实现类FruitDAOImpl


前言

JDBC专栏,我们在前面的文章中学习了mysql-jar包的导入,使用JDBC规范连接数据库,以及JDBC对数据库进行等常规操作。
接下来,就到检验学习成果的时刻了,我们将运用JDBC一系列常规操作,实现一个水果库存系统,将之前学到的知识融会贯通在一起…


一、水果库存系统介绍

水果库存系统的需求是实现以下几个功能:

  • 查看水果库存列表;
  • 添加水果库存信息;
  • 查看特定水果库存信息;
  • 水果下架;
  • 退出;

只要是更新或者是查看信息的功能,都需要我们去使用JDBC规范连接数据库来实现。
在一开始,我们先不考虑代码是否冗余的问题,第一目标是 实现需求,基本功能实现之后再对代码进行优化


二、结构设计:

1).Fruit类

在项目工程中,我们需要创建一个Fruit类,用于存放库存系统中每一种水果的信息;
每种水果都包含以下属性

  1. 编号;
  2. 水果名称;
  3. 水果单价;
  4. 库存数量;
  5. 备注;

因此,在Fruit类中,我们需要为其设置对应的属性构造方法Get()Set()方法,以及重写toString()方法从而方便在需要查看水果库存信息时输出…

Fruit类的代码:

/**
 * @author .29.
 * @create 2022-09-22 22:15
 */
public class Fruit {
    //属性
    private Integer fid;   //水果编号
    private String fname;  //水果名称
    private Integer price; //水果单价
    private Integer fcount;//库存数量
    private String remark; //备注
    
    //构造方法
    public Fruit() {
    }

    public Fruit(int fid, String fname, int price, int fcount, String remark) {
        this.fid = fid;
        this.fname = fname;
        this.price = price;
        this.fcount = fcount;
        this.remark = remark;
    }

    //对象get、set方法
    public Integer getFid() {
        return fid;
    }

    public void setFid(Integer fid) {
        this.fid = fid;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Integer getFcount() {
        return fcount;
    }

    public void setFcount(Integer fcount) {
        this.fcount = fcount;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
    
    //重写toString方法
    @Override
    public String toString() {
        return fid +"\t\t\t"+ fname +"\t\t\t"+ price +"\t\t\t"+ fcount +"\t\t\t"+ remark;
    }
}



2).Menu类

准备好Fruit类之后,我们还需要准备一个菜单类Menu,在菜单类中,需要显示菜单的方法,还有需求实现的方法。
有了这些方法,才能实现水果库存系统的功能:

  • 菜单显示:showMainMenu()
  • 查看水果库存信息:showFruitList()
  • 添加水果库存信息:addFruit()
  • 查看指定水果库存信息:showFruitInfo()
  • 水果下架:delFruit()
  • 退出:exit()

在设计阶段,我们先准备好需要的结构,具体的功能代码实现可以放在下一阶段进行。

Menu类初版的代码(未实现功能):

/**
 * @author .29.
 * @create 2022-09-22 22:19
 *
 */

//菜单类
public class Menu {
    //显示主菜单
    public int showMainMenu(){
        System.out.println("==================水果库存界面=================");
        System.out.println("1.查看水果库存列表");
        System.out.println("2.添加水果库存信息");
        System.out.println("3.查看特定水果库存信息");
        System.out.println("4.水果下架");
        System.out.println("5.退出");
        System.out.println("==============================================");
        System.out.print("请选择:");

        int input = scan.nextInt();
        return input;    
    }

    //查看水果库存列表
    public void showFruitList(){
        return;
    }

    //添加水果库存信息--- 业务方法:添加库存记录
    public void addFruit(){
       return;
    }

    //查看指定水果库存信息
    public void showFruitInfo(){
       return;
    }

    //水果下架
    public void delFruit(){
       return;
    }

    //退出方法
    public boolean exit(){
        return true;
    }
    
}



3).Client类

水果库存系统的使用,是需要客户通过选择菜单功能选项,系统再运行客户需要使用的功能。所以我们还需要一个客户类Client,实现先选择再运行:

Client类设计代码:

import com.haojin.fruit.controller.Menu;//导入项目工程中设计的Menu类

/**
 * @author .29.
 * @create 2022-09-22 22:21
 */
public class Client {
    public static void main(String[] args) {
        Menu m = new Menu();   //创建Menu类的对象

        boolean flag = true;
        while(flag){
            //显示主菜单
            int slt = m.showMainMenu();
            switch(slt){
                case 1:
                    //查看列表
                    m.showFruitList();
                    break;
                case 2:
                    //添加
                    m.addFruit();
                    break;
                case 3:
                    //查看指定信息
                    m.showFruitInfo();
                    break;
                case 4:
                    //下架
                    m.delFruit();
                    break;
                case 5:
                    //退出
                    flag = m.exit();
                    break;
                default:
                    System.out.println("系统没有此项功能,请重新选择吧...");
                    break;
            }
        }
        
        System.out.println("感谢使用");

    }
}



4).DAO设计理念

DAO(Data Access Object)是一个为数据库或其他持久化机制提供抽象接口的对象,在不暴露底层持久化实现细节的前提下提供各种数据访问操作

具体来说,就是设计一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且创建接口实现类

①提供抽象接口FruitDAO

在接口中,我们需要准备抽象方法,对应了JDBC对数据库的不同操作:

  • 查询库存列表:getFruitList();
  • 新增库存:addFruit(Fruit fruit);
  • 修改库存:UpdateFruit(Fruit fruit);
  • 查询指定库存:getFruitByFname(String fname);
  • 删除库存:DelFruit(String fname);
import com.haojin.fruit.pojo.Fruit;
import java.util.List;

/**
 * @author .29.
 * @create 2022-09-23 17:38
 */
public interface FruitDAO {

    //查询库存列表
    List<Fruit> getFruitList();

    //新增库存
    boolean addFruit(Fruit fruit);

    //修改库存
    boolean UpdateFruit(Fruit fruit);

    //删除库存
    boolean DelFruit(String fname);

    //查询指定库存
    Fruit getFruitByFname(String fname);
}

②接口实现类FruitDAOImpl

实现接口FruitDAO,重写接口中的抽象方法,重写方法中包含了底层持久化实现细节,这里,实现类方法都是单精度方法,方法的颗粒密度不能再被划分了。

上文设计的Menu类中的方法实现中,需要引用这里的实现类方法,使用当中JDBC连接,操作数据库的功能。

FruitDAOImpl实现类代码(不包含实现代码):


import com.haojin.fruit.dao.FruitDAO;
import com.haojin.fruit.pojo.Fruit;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author .29.
 * @create 2022-09-23 17:56
 */
public class FruitDAOImpl implements FruitDAO {

    @Override
    public List<Fruit> getFruitList() {
        return null;
    }

    @Override
    public boolean addFruit(Fruit fruit) throws SQLException {
        return false;
    }

    @Override
    public boolean UpdateFruit(Fruit fruit) {
        return false;
    }

    @Override
    public boolean DelFruit(String fname) {
        return false;
    }

    @Override
    public Fruit getFruitByFname(String fname) {
        return null;
    }
}

至此,水果库存系统的 结构 就设计完成啦,接下来就是功能代码的实现。

求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔
您的点赞收藏以及关注是对作者最大的鼓励喔 ~~

在这里插入图片描述

相关文章:

  • 【前端之旅】JavaScript进阶笔记
  • JVM运行时参数
  • 【Android】-- 数据存储(二)(存储卡上读写文件、Application保存数据)
  • 消息队列|RabbitMQ入门概述
  • 并发(5)线程之间的协作
  • Vue 新手期练手出现问题记录与解决方案——Vue练手项目“小问题“,强迫症患者福音——持续更新ing
  • 公钥密码学中的简单数学基础
  • docker简洁版
  • 牛客网面试必刷TOP101之——判断某种二叉树以及寻找最近公共祖先节点
  • leetcode——最长回文子串——百日算法成就第五天5%
  • Java_Stream流式计算
  • 微雪树莓派PICO笔记——4. ADC(模拟数字转换器)
  • 网课查题公众号接口使用
  • 使用并查集处理树的路径
  • 【Go语言入门指南】零基础入门 go 语言 | Golang 入门指南
  • [译]CSS 居中(Center)方法大合集
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ES6系列(二)变量的解构赋值
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • jquery ajax学习笔记
  • js数组之filter
  • Laravel Telescope:优雅的应用调试工具
  • Laravel 中的一个后期静态绑定
  • LeetCode18.四数之和 JavaScript
  • Mysql数据库的条件查询语句
  • Next.js之基础概念(二)
  • PHP 小技巧
  • Sequelize 中文文档 v4 - Getting started - 入门
  • spring boot下thymeleaf全局静态变量配置
  • Vue 重置组件到初始状态
  • 面试总结JavaScript篇
  • 你不可错过的前端面试题(一)
  • 十年未变!安全,谁之责?(下)
  • 使用SAX解析XML
  • 手机端车牌号码键盘的vue组件
  • 微服务框架lagom
  • 进程与线程(三)——进程/线程间通信
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​secrets --- 生成管理密码的安全随机数​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #100天计划# 2013年9月29日
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #HarmonyOS:Web组件的使用
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (02)Hive SQL编译成MapReduce任务的过程
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (七)理解angular中的module和injector,即依赖注入
  • (区间dp) (经典例题) 石子合并