首页 > 编程语言 >创建一个基于Java的图书馆管理系统

创建一个基于Java的图书馆管理系统

时间:2024-10-31 22:16:16浏览次数:5  
标签:Java 管理系统 Book public 图书馆 book user import id

1. 需求分析

明确系统的主要功能需求,例如:

  • 用户注册与登录
  • 图书信息管理(增删改查)
  • 借阅管理
  • 归还管理
  • 用户管理
  • 管理员管理功能

2. 技术选型

确定使用的技术栈:

  • 后端:Spring, Spring MVC, MyBatis
  • 前端:HTML, CSS, JavaScript (可选框架如Vue.js或React.js)
  • 数据库:MySQL
  • 服务器:Tomcat

3. 数据库设计

设计数据库模型,比如用户表、图书表、借阅记录表等。这里以用户表、图书表和借阅记录表为例:

user
CREATE TABLE `user` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(50) NOT NULL UNIQUE,
  `password` VARCHAR(100) NOT NULL,
  `email` VARCHAR(100),
  `phone` VARCHAR(20),
  `role` VARCHAR(50) DEFAULT 'user',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
);
book
CREATE TABLE `book` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `title` VARCHAR(255) NOT NULL,
  `author` VARCHAR(255),
  `publisher` VARCHAR(255),
  `publication_date` DATE,
  `isbn` VARCHAR(13),
  `category` VARCHAR(100),
  `available` BOOLEAN DEFAULT TRUE,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
);
borrow_record
CREATE TABLE `borrow_record` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `book_id` INT NOT NULL,
  `borrow_date` DATE,
  `due_date` DATE,
  `return_date` DATE,
  `status` VARCHAR(50),
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
  FOREIGN KEY (`book_id`) REFERENCES `book`(`id`)
);

4. 创建项目结构

使用IDE(如IntelliJ IDEA或Eclipse)创建一个新的Maven项目,并添加必要的依赖项到pom.xml文件中。

5. 配置Spring和MyBatis

src/main/resources目录下创建配置文件,如applicationContext.xmlmybatis-config.xml,用于配置Spring和MyBatis。

applicationContext.xml 示例
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/library?useSSL=false&serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.library.mapper"/>
</bean>

6. 编写Mapper接口

定义MyBatis的Mapper接口来操作数据库。例如,为用户表和图书表创建UserMapper.javaBookMapper.java

UserMapper.java
package com.library.mapper;

import com.library.entity.User;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE username = #{username}")
    User findByUsername(@Param("username") String username);

    @Insert("INSERT INTO user(username, password, email, phone, role) VALUES(#{username}, #{password}, #{email}, #{phone}, #{role})")
    int insert(User user);
}
BookMapper.java
package com.library.mapper;

import com.library.entity.Book;
import org.apache.ibatis.annotations.*;

@Mapper
public interface BookMapper {
    @Select("SELECT * FROM book")
    List<Book> findAll();

    @Select("SELECT * FROM book WHERE id = #{id}")
    Book findById(@Param("id") int id);

    @Insert("INSERT INTO book(title, author, publisher, publication_date, isbn, category, available) VALUES(#{title}, #{author}, #{publisher}, #{publication_date}, #{isbn}, #{category}, #{available})")
    int insert(Book book);

    @Update("UPDATE book SET title=#{title}, author=#{author}, publisher=#{publisher}, publication_date=#{publication_date}, isbn=#{isbn}, category=#{category}, available=#{available} WHERE id=#{id}")
    int update(Book book);

    @Delete("DELETE FROM book WHERE id=#{id}")
    int delete(@Param("id") int id);
}

7. 实现Service层

编写服务层来处理业务逻辑。例如,创建一个UserService.javaBookService.java

UserService.java
package com.library.service;

import com.library.entity.User;
import com.library.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User login(String username, String password) {
        User user = userMapper.findByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return user;
        }
        return null;
    }

    public void register(User user) {
        userMapper.insert(user);
    }
}
BookService.java
package com.library.service;

import com.library.entity.Book;
import com.library.mapper.BookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookService {
    @Autowired
    private BookMapper bookMapper;

    public List<Book> getAllBooks() {
        return bookMapper.findAll();
    }

    public Book getBookById(int id) {
        return bookMapper.findById(id);
    }

    public void addBook(Book book) {
        bookMapper.insert(book);
    }

    public void updateBook(Book book) {
        bookMapper.update(book);
    }

    public void deleteBook(int id) {
        bookMapper.delete(id);
    }
}

8. 控制器层

使用Spring MVC编写控制器来处理HTTP请求。例如,创建一个UserController.javaBookController.java

UserController.java
package com.library.controller;

import com.library.entity.User;
import com.library.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
        User user = userService.login(username, password);
        if (user != null) {
            // 登录成功后的处理
            return "redirect:/home";
        } else {
            // 登录失败后的处理
            return "login";
        }
    }

    @PostMapping("/register")
    public String register(@ModelAttribute User user) {
        userService.register(user);
        return "redirect:/login";
    }
}
BookController.java
package com.library.controller;

import com.library.entity.Book;
import com.library.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    @GetMapping("/list")
    public String listBooks(Model model) {
        List<Book> books = bookService.getAllBooks();
        model.addAttribute("books", books);
        return "bookList";
    }

    @GetMapping("/view/{id}")
    public String viewBook(@PathVariable("id") int id, Model model) {
        Book book = bookService.getBookById(id);
        model.addAttribute("book", book);
        return "bookView";
    }

    @GetMapping("/add")
    public String showAddForm(Model model) {
        model.addAttribute("book", new Book());
        return "bookAdd";
    }

    @PostMapping("/add")
    public String addBook(@ModelAttribute Book book) {
        bookService.addBook(book);
        return "redirect:/book/list";
    }

    @GetMapping("/edit/{id}")
    public String showEditForm(@PathVariable("id") int id, Model model) {
        Book book = bookService.getBookById(id);
        model.addAttribute("book", book);
        return "bookEdit";
    }

    @PostMapping("/edit/{id}")
    public String editBook(@PathVariable("id") int id, @ModelAttribute Book book) {
        book.setId(id);
        bookService.updateBook(book);
        return "redirect:/book/list";
    }

    @GetMapping("/delete/{id}")
    public String deleteBook(@PathVariable("id") int id) {
        bookService.deleteBook(id);
        return "redirect:/book/list";
    }
}

9. 前端页面

根据需要设计前端页面,可以使用Thymeleaf作为模板引擎。例如,创建一个简单的登录页面login.html和图书列表页面bookList.html

login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login Page</title>
</head>
<body>
<form th:action="@{/user/login}" method="post">
    <label>Username:</label><input type="text" name="username"/><br/>
    <label>Password:</label><input type="password" name="password"/><br/>
    <button type="submit">Login</button>
</form>
</body>
</html>
bookList.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<table border="1">
    <tr>
        <th>ID</th>
        <th>Title</th>
        <th>Author</th>
        <th>Publisher</th>
        <th>Publication Date</th>
        <th>ISBN</th>
        <th>Category</th>
        <th>Available</th>
        <th>Actions</th>
    </tr>
    <tr th:each="book : ${books}">
        <td th:text="${book.id}"></td>
        <td th:text="${book.title}"></td>
        <td th:text="${book.author}"></td>
        <td th:text="${book.publisher}"></td>
        <td th:text="${book.publication_date}"></td>
        <td th:text="${book.isbn}"></td>
        <td th:text="${book.category}"></td>
        <td th:text="${book.available}"></td>
        <td>
            <a th:href="@{/book/view/{id}(id=${book.id})}">View</a>
            <a th:href="@{/book/edit/{id}(id=${book.id})}">Edit</a>
            <a th:href="@{/book/delete/{id}(id=${book.id})}">Delete</a>
        </td>
    </tr>
</table>
<a href="/book/add">Add New Book</a>
</body>
</html>

标签:Java,管理系统,Book,public,图书馆,book,user,import,id
From: https://blog.csdn.net/BABA8891/article/details/143419073

相关文章

  • SpringBoot社团管理系统9haeo--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,社长,社团信息,我的社团,社团活动,活动报名开题报告内容一、课题背景随着高校社团活动的蓬勃发展,社团管理成为一项复杂而重要的任务。传统的手工管理方式......
  • Java基础篇(四)(超详细整理,建议收藏!!!)
    目录 五、数组5.1 数组的概念5.2 数组声明5.3 数组创建与初始化5.3.1 使用new创建数组5.3.2 创建数组的三种方式5.3.3 创建数组需要注意的问题5.4 数组操作5.5 数组排序5.5.1 排序(冒泡)5.5.2 Arrays.sort() 5.6  Arrays工具类5.6.1排序(s......
  • Java多线程--Thread类的那些事3.--线程的6中状态和sleep()和 join()
      一.sleep()方法  首先在Thead类中有一个静态的sleep()方法,可以让线程进入到休眠状态即TEMD-WAITING状  在调用sleep()方法时需要注意的是在哪个线程里面调用sleep()方法,哪个线程就会进入阻塞状态.,在这个线程中的其他线程不会发生阻塞,只有当休眠时间到来这个......
  • 【面试题系列Java】Java基础面试题
    对于Java开发工程师而言,掌握Java基础、数据库、框架、Java虚拟机、Java并发编程等知识是必不可少的。以下是一些常见的Java开发工程师面试题及答案,供大家参考。博主介绍上海交大毕业,大厂资深Java后端工程师《Java全套学习资料》作者专注于系统架构设计和高并发解决方......
  • java字符串中得到某个字符,字符串的遍历,截取,替换
    有点详细,请耐心找您需要的看,谢谢!1得到某个字符2:字符串的遍历3:字符串的截取4:字符串的替换//以上根据实际需要输入字符常量时别忘了带""变量就直接输入;......
  • Java进阶学习笔记64——IO流
    IO流:输入输出流,就是读写数据的。IO流的应用场景:怎么去学习IO流?1、先搞清楚IO流的分类、体系?2、再挨个学习每个IO流的作用、用法。IO流的分类:按流的方向分为:按流中数据的最小单位,分为: IO流总体上来看就有四大流:字节输入流: 把磁盘或网络中的数据以一个个......
  • Java进阶学习笔记63——字符集
    常见字符集介绍:美国人:英文字母(大小写)数字、标点符号、特殊字符。标准字符集:ASCII码:标准ASCII字符集:ASCII:美国信息交换标准代码,包括了英文、符号等。标准ASCII使用1个字节存储一个字符,首位是0,总共表示128个字符,对美国人老说完全够用。中国人自己的字符集:GBK(汉字内......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现二
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下,快递柜......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现一
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下,快递柜......
  • 基于SpringBoot+Vue+uniapp的宿舍管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......