JAVASE——图书管理系统

JAVASE图书管理系统

        主要业务有:管理员(增删改查),会员(借书还书查看记录)

                              管理员主要有:查看图书,增加图书,修改图书,会员管理,删除图书,

                              会员主要有:查看图书,借书,还书,查看记录,返回登陆

项目分层

beans:实体类层

controller:控制层

dao:数据层

service:业务层

impl:实现层
test:测试层

lib:JDBC包

util:工具类

具体代码

beans Book:

                        

package com.xszx.beans;
//实体类层
public class Book {private int id;private  String name;private  String authon;private    int num;public Book(int id, String name, String authon, int num) {this.id = id;this.name = name;this.authon = authon;this.num = num;}public Book() {}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 String getAuthon() {return authon;}public void setAuthon(String authon) {this.authon = authon;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}@Overridepublic String toString() {return "Book{" +"id=" + id +", name='" + name + '\'' +", authon='" + authon + '\'' +", num=" + num +'}';}
}
beans JieBook:
package com.xszx.beans;import java.sql.Timestamp;
import java.util.Date;public class JieBook {private int id;private int uid;private int bid;private Date jdate;private Date hdate;public JieBook() {}public JieBook(int id, int uid, int bid, Date jdate, Date hdate) {this.id = id;this.uid = uid;this.bid = bid;this.jdate = jdate;this.hdate = hdate;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public int getBid() {return bid;}public void setBid(int bid) {this.bid = bid;}public Date getJdate() {return jdate;}public void setJdate(Timestamp jdate) {this.jdate = jdate;}public Date getHdate() {return hdate;}public void setHdate(Timestamp hdate) {this.hdate = hdate;}@Overridepublic String toString() {return "JieBook{" +"id=" + id +", uid=" + uid +", bid=" + bid +", jdate='" + jdate + '\'' +", hdate='" + hdate + '\'' +'}';}
}

beans User:

package com.xszx.beans;public class User {private  int id;private String account;//账号private String pwd;//密码private int role;public User(int id, String account, String pwd, int role) {this.id = id;this.account = account;this.pwd = pwd;this.role = role;}public User() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getRole() {return role;}public void setRole(int role) {this.role = role;}@Overridepublic String toString() {return "User{" +"id=" + id +", account='" + account + '\'' +", pwd='" + pwd + '\'' +", role=" + role +'}';}
}

controller  BookController:

package com.xszx.controller;import com.xszx.beans.Book;
import com.xszx.beans.JieBook;
import com.xszx.beans.User;
import com.xszx.service.BookService;
import com.xszx.service.impl.BookServiceImpl;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;//控制层
public class BookController {Scanner sc = new Scanner(System.in);//控制层要告诉业务层,因为不能直接new接口所以要new接口实现类BookService bookService = new BookServiceImpl();//主方法public void show(){System.out.println("【1】查看图书【2】添加图书【3】修改图书【4】删除图书【5】会员管理【6】返回上一层");int n = sc.nextInt();if (n == 1){showbook();}else if (n == 2){addbook();}else if (n == 3){update();}else if (n == 4){delete();}else if (n == 5){huiyuanguanli(null);}else if (n == 6){new UserController().register();}}void huiyuanguanli(User us) {System.out.println("【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录");int n =sc.nextInt();if (n == 1){lookbook(us);}else if (n == 2){// jiebook(us);addjbook(us);}else if (n == 3){upjbook(us);// huanbook(us);}else if (n == 4){// lookjilu1(us);getjbooksuser(us);}else if (n == 5){new UserController().register();}}//还书private void upjbook(User us) {System.out.println("请输入你要还书的编号");int bid = sc.nextInt();//判断图书是否需要归还   uid bid hdateint id =bookService.getjbookuidbid(us,bid);if (id>0){bookService.updatejbook(id,bid);System.out.println("还书成功");huiyuanguanli(us);}else{System.out.println("这本书不需要还");huiyuanguanli(us);}}//借书private void addjbook(User us) {System.out.println("请输入你要借的图书编号");int bid =sc.nextInt();int i = bookService.getbookid(bid);if (i == 1){int id =bookService.getjbookuidbid(us,bid);if (id>0){System.out.println("当前这本书借了没有还");huiyuanguanli(us);}else{bookService.addjbook(us,bid);System.out.println("借书成功");huiyuanguanli(us);}}else{System.out.println("图书不存在");huiyuanguanli(us);}}//查看借书记录private void getjbooksuser(User us) {List<JieBook>  jiebookList = bookService.getjboosuser(us);for (JieBook j : jiebookList){System.out.println(j);}huiyuanguanli(us);}private void lookjilu1(User us) {System.out.println("【1】查看所有【2】查看已经归还的完成的借书记录【3】查看没有归还的【4】返回上一层");int n = sc.nextInt();if (n == 1){lookjilu(us);}else if (n == 2){lookyihuan(us);}else if (n == 3){lookguihuan(us);}else if (n == 4){huiyuanguanli(us);}}//查看已经归还的借书记录private void lookyihuan(User us) {List<JieBook> jlist = bookService.look();for (JieBook jb : jlist){System.out.println(jb);huiyuanguanli(us);}}//查看没有归还的借书记录private void lookguihuan(User us) {List<JieBook> huanlist = bookService.getlookbook();for (JieBook jb : huanlist){System.out.println(jb);}huiyuanguanli(us);}//查看记录private void lookjilu(User us) {List<JieBook> jlist = bookService.look();for (JieBook jb : jlist){System.out.println(jb);huiyuanguanli(us);}}//会员查看图书查看图书private void lookbook(User us) {List<Book> list = bookService.getbooks();for (Book book : list){System.out.println(book);}huiyuanguanli(us);}//删除图书private void delete() {System.out.println("请输入你要删除的图书编号");int id = sc.nextInt();bookService.delbook(id);System.out.println("删除成功");show();}//修改图书private void update() {Book book = new Book();System.out.println("请输入你要修改的图书名字");book.setName(sc.next());//提前判断图书名字是否存在,存在则修改,不存在则不修改boolean b = bookService.getbookname(book);if (b){Book book1 = new Book();System.out.println("请输入你要修改后的图书名字");book1.setName(sc.next());System.out.println("请输入你要修改后的图书作者");book1.setAuthon(sc.next());System.out.println("请输入你要修改后的图书数量");book1.setNum(sc.nextInt());//传入两个值,一个判断的值一个修改的值bookService.updatebook(book,book1);System.out.println("修改完成");show();}else{System.out.println("你要修改的图书不存在");show();}}//添加图书private void addbook() {//控制曾告诉业务层,用list调用业务层来创建addbooks抽象方法Book book = new Book();System.out.println("请输入你要添加的图书名字");book.setName(sc.next());//提前判断图书名字是否存在,存在则不添加,不存在则继续添加boolean b = bookService.getbookname(book);if (b){System.out.println("添加的图书你名字冲突");show();}else {System.out.println("请输入你要添加的图书作者");book.setAuthon(sc.next());System.out.println("请输入你要添加的图书数量");book.setNum(sc.nextInt());//后台添加完成是否成功int i = bookService.addbook(book);if (i == 1){System.out.println("添加成功");show();}else{System.out.println("添加失败");show();}}}//查看图书private void showbook() {//控制层告诉业务层,用list调用业务层来创建getbooks抽象方法List<Book> list = bookService.getbooks();for (Book book : list){System.out.println(book);}show();}}

controller  UserControlle:

{Scanner sc = new Scanner(System.in);UserService userService = new UserServiceImpl();public void register(){System.out.println("【1】登录【2】注册");int n = sc.nextInt();if (n == 1){denglu();}else if (n == 2){zhuce();}}//注册private void zhuce() {User user = new User();System.out.println("请输入你要注册的账号");user.setAccount(sc.next());System.out.println("请输入你要注册的密码");user.setPwd(sc.next());//判断账号是否重复 如果重复就停止添加,如果不重复就继续添加boolean b = userService.getzhanghao(user);if (b){System.out.println("您输入的账号重复请重新注册");register();}else{userService.zhuce(user);System.out.println("注册成功,请登录");register();}}//登录private void denglu() {User user = new User();System.out.println("请输入你的账号");user.setAccount(sc.next());System.out.println("请输入你的密码");user.setPwd(sc.next());User us = userService.getzm(user);if (us == null){System.out.println("你的账号密码错误");denglu();}else{System.out.println("登陆成功");//判断是管理员还是用户if (us.getRole() == 1){new BookController().show();}else{new BookController().huiyuanguanli(us);}}}
}

service BookService:

package com.xszx.service;import com.xszx.beans.Book;
import com.xszx.beans.JieBook;
import com.xszx.beans.User;
import com.xszx.dao.BookDao;import java.util.List;//业务层
public interface BookService {//创建查看的抽象方法由BookServiceImpl来实现List<Book> getbooks();int addbook(Book book);boolean getbookname(Book book);void updatebook(Book book, Book book1);void delbook( int id);List<JieBook> look();List<JieBook> getlookbook();List<JieBook> getjboosuser(User us);int getbookid(int bid);int getjbookuidbid(User us, int bid);void addjbook(User us, int bid);void updatejbook(int id,int bid);}

service UserService:

package com.xszx.service;import com.xszx.beans.User;public interface UserService {boolean getzhanghao(User user);User getzm(User user);void zhuce(User user);}

serviceimpl  BookServiceImpl:

package com.xszx.service.impl;import com.xszx.beans.Book;
import com.xszx.beans.JieBook;
import com.xszx.beans.User;
import com.xszx.dao.BookDao;
import com.xszx.service.BookService;import java.util.List;public class BookServiceImpl implements BookService {//应为要调用数据层,所以new一个数据层的对象BookDao bookDao = new BookDao();//添加public int addbook(Book book) {return bookDao.addbook(book);}@Overridepublic boolean getbookname(Book book) {return bookDao.getbookname(book);}@Overridepublic void updatebook(Book book, Book book1) {bookDao.updatebook( book,book1);}@Overridepublic void delbook(int id) {bookDao.delbook(id);}@Overridepublic List<JieBook> look() {return bookDao.look();}@Overridepublic List<JieBook> getlookbook() {return bookDao.getlookbook();}@Overridepublic List<JieBook> getjboosuser(User us) {return bookDao.getjboosuser(us);}@Overridepublic int getbookid(int bid) {return bookDao.getbookid(bid);}@Overridepublic int getjbookuidbid(User us, int bid) {return bookDao.getjbookuidbid(us,bid);}@Overridepublic void addjbook(User us, int bid) {//添加借书记录bookDao.addjbook(us,bid);//图书数量-1bookDao.delbooksum(bid);}@Overridepublic void updatejbook(int id,int bid) {bookDao.updatejbook(id);//还书bookDao.addbooksum(bid);//+1}//实现查看方法@Overridepublic List<Book> getbooks() {//创建数据层的查看方法,返回一个listList<Book> list = bookDao.getbooks();return list;}}

service UserServiceImpl:

package com.xszx.service.impl;import com.xszx.beans.User;
import com.xszx.dao.UserDao;
import com.xszx.service.UserService;public class UserServiceImpl implements UserService {UserDao userDao = new UserDao();@Overridepublic User getzm(User user) {return userDao.getzm(user);}@Overridepublic void zhuce(User user) {userDao.zhuce(user);}@Overridepublic boolean getzhanghao(User user) {return userDao.getzhanghao(user);}
}

test Test:

package com.xszx.test;
import com.xszx.controller.UserController;//启动方法
public class Test {public static void main(String[] args) {System.out.println("欢迎来到**的图书管");new UserController().register();}}

util      (数据库需要自己创建)

package com.xszx.util;import java.sql.*;public class JDBCUtil {static String url = "jdbc:mysql://localhost:3306/work";static String user = "root";static String password = "root";static {//加载驱动try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取连接public static Connection getConnection() {Connection conn = null;try {conn = DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}return conn;}public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {try {if (conn != null) {conn.close();}if (ps != null) {ps.close();}if (rs != null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}}
}

JDBC需要连接数据库,数据库以及内容需要自己创建

运行结果展示

管理员运行结果:省略

会员运行结果:

欢迎来到**的图书管
【1】登录【2】注册
2
请输入你要注册的账号
777
请输入你要注册的密码
777
注册成功,请登录
【1】登录【2】注册
1
请输入你的账号
777
请输入你的密码
777
登陆成功
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
1
Book{id=1, name='三国演义', authon='罗贯中', num=9}
Book{id=2, name='西游记', authon='吴承恩', num=9}
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
2
请输入你要借的图书编号
1
借书成功
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
1
Book{id=1, name='三国演义', authon='罗贯中', num=8}
Book{id=2, name='西游记', authon='吴承恩', num=9}
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
4
JieBook{id=2, uid=13, bid=1, jdate='2024-07-15 10:32:05.0', hdate='null'}
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
3
请输入你要还书的编号
1
还书成功
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
1
Book{id=1, name='三国演义', authon='罗贯中', num=9}
Book{id=2, name='西游记', authon='吴承恩', num=9}
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录
4
JieBook{id=2, uid=13, bid=1, jdate='2024-07-15 10:32:05.0', hdate='2024-07-15 10:32:12.0'}
【1】查看图书【2】借书【3】还书【4】查看借书记录【5】返回登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第22天|GAN图像生成

今天是参加昇思25天学习打卡营的第22天&#xff0c;今天打卡的课程是“GAN图像生成”&#xff0c;这里做一个简单的分享。 1.简介 今天来学习“GAN图像生成”&#xff0c;这是一个基础的生成式模型。 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种…

Bug:时间字段显示有问题

Bug&#xff1a;时间字段显示有问题 文章目录 Bug&#xff1a;时间字段显示有问题1、问题2、解决方法一&#xff1a;添加注解3、解决方法二&#xff1a;消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候&#xff0c;发现前端的时间显示有问题…

[Spring] Spring Web MVC案例实战

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

AV1技术学习:Translational Motion Compensation

编码块根据运动矢量在参考帧中找到相应的预测块&#xff0c;如下图所示&#xff0c;当前块的左上角的位置为(x0, y0)&#xff0c;在参考帧中找到同样位置(x0, y0)的块&#xff0c;根据运动矢量移动到目标参考块&#xff08;左上角位置为&#xff1a;(x1, y1)&#xff09;。 AV1…

前端a-tree遇到的问题

在使用a-tree时候&#xff0c;给虚拟滚动的高度&#xff0c;然后展开a-tree滑动一段距离 比如这样 随后你切换页面&#xff0c;在返回这个页面的时候 就会出现这样的bug 解决方法&#xff1a; onBeforeRouteLeave((to, from, next) > {// 可以在路由参数变化时执行的逻辑ke…

白山云荣获信通院“算网安全行业应用优秀案例”奖

日前&#xff0c;在由中国通信标准化协会算网融合产业及标准推进委员会与信通院共同组织召开的“2024年算网融合产业发展大会”上&#xff0c;白山云凭借创新的SD-WAN算网融合方案&#xff0c;荣获“算网安全行业应用优秀案例”奖。 算网融合是多元异构、海量泛在的算力设施&am…

path模块和HTTP协议

一。path模块常用API ./相对路径&#xff0c;/绝对路径 二&#xff0c;HTTP协议 1.请求报文 1.请求行 URL的组成 2.请求头 3.请求体 可以是空&#xff1a;GET请求 可以是字符串&#xff0c;还可以是json&#xff1a;POST请求 2.响应报文 1.响应行 HTTP / 1.1 200 OK H…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥&#xff0c;不带pub是私钥&#xff0c;打死都不能给别人。复制公钥 拿到公钥后&#xff0c;来到远程服务器 vim ~/.ss…

Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())

2024每日刷题&#xff08;144&#xff09; Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…

人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解1

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解。在深度学习领域,循环神经网络(RNN)因其处理序列数据的能力而备受关注。然而,传统的RNN存在梯度消失和梯度爆炸的问题,这使得它在长序列任务中的表现不尽…

MySQL--C_C++语言连接访问

Connector/C的使用 首先需要在mysql官网下载C接口库 解压指令 tar -zxvf 压缩包名 下载并解压好后 但是还有比这更优的做法。 这样子手动安装不仅麻烦&#xff0c;还可能存在兼容性的问题。 其实在我们使用yum安装mysql时&#xff0c;大概率会自动帮我们把其他的环境都安装…

【Datawhale AI夏令营】电力需求预测挑战赛 Task01

整个学习活动&#xff0c;将带你从 跑通最简的Baseline&#xff0c;到了解竞赛通用流程、深入各个竞赛环节&#xff0c;精读Baseline与进阶实践 文章目录 一、赛题背景二、赛题任务三、实践步骤学习规划分析思路常见时序场景 task01codecode 解读 一、赛题背景 随着全球经济的…

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符&#xff0c;类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称&#xff0c;本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…

昇思25天学习打卡营第12天|munger85

基于MindSpore通过GPT实现情感分类 这个实现情感分类意思就是通过一些电影的数据最后知道他对于这个电影的评价&#xff0c;最后知道他对于这个电影的评价到底是好还是不好&#xff0c;零就是不好&#xff0c;一就是好。首先我们肯定是按安装这些依赖包了为了今天这个模型我们…

【Apache Doris】周FAQ集锦:第 14 期

【Apache Doris】周FAQ集锦&#xff1a;第 14 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…

深度加速器 为游戏而生

使用深度加速器的基本步骤如下 首先&#xff0c;访问深度加速器的官方网站或授权下载渠道&#xff0c;下载最新版本的深度加速器客户端。 下载完成后&#xff0c;电脑版直接双击打开免安装&#xff0c;将深度加速器安装到您的计算机或移动设备上。 注册与登录&#xff1a; 打…

如何构建全生命周期的安全体系架构来确保容器的安全?

容器技术在云原生应用和微服务架构中得到了广泛应用&#xff0c;其轻量、灵活和高效的特点使其成为现代IT环境中的重要工具。然而&#xff0c;尽管容器带来了许多优势&#xff0c;但其安全性问题也不容忽视。接下来跟随博主一起探索如何构建全生命周期的安全体系架构以确保容器…

Vue3 子组件像父组件传递数据 自定义事件 defineEmits

介绍 很多情况下子组件都需要像父组件去传递一些数据&#xff0c;Vue3和Vue2传递值的写法不太一样。 例子 很常见的一个案例&#xff0c;弹出一个商品对话框&#xff0c;用户选择商品后把商品信息返回给父组件&#xff0c;使用自定义事件去做。 子组件 选择商品对话框 &…

数据库操作太复杂?Python Shelve模块让你轻松存储,一键搞定!

目录 1、基本操作入门 &#x1f4da; 1.1 安装Shelve模块 1.2 创建与打开Shelve文件 2、存储与读取数据 &#x1f510; 2.1 写入键值对 2.2 读取存储的数据 3、高级功能探索 &#x1f9ed; 3.1 使用Shelve迭代键和值 3.2 键的管理&#xff1a;添加、删除与更新 4、异…

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链

​​发表时间&#xff1a;2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑&#xff0c;意在显著增强其性能&#xff0c;运行效率和可扩容。该概念于2018年提出&#xff0c;其战略落地将使BSV区块链顺利过渡&#xff0c;从现有的基于单一集成功能组件的网络拓扑结构&am…