08170201杨静宜 发表于 2024-11-1 23:51:04

选题

图书馆里系统

08170201杨静宜 发表于 2024-11-1 23:55:56

1、系统分析

1.1项目背景

        图书管理系统是为了帮助图书馆或书店更有效地管理他们的图书资源、借阅记录和读者信息而设计的软件系统。该系统可以提供图书检索、借阅、归还、读者管理等功能,从而提高图书管理的效率和便利性。通过数据库存储和后端逻辑处理,系统能够满足用户的图书管理需求,包括图书入库、借阅历史记录、读者信息管理等。
1.2需求分析

1.2.1管理员需求 

管理员可以登录系统 
查询、添加、编辑和删除图书信息
管理读者信息和借阅记录   
1.2.2读者需求 

用户可以登录系统
用户可以注册新账户
用户可以搜索图书、借阅图书、归还图书、预约图书以及缴纳罚款
1.2.3系统功能需求

实现用户登录和注册功能以及管理员登录功能。
实现图书查询功能,通过查询书名来查询整条记录。
实现借书、还书、预约书籍和缴纳罚款等功能。
实现添加、编辑、删减图书功能。
系统需要与MySQL数据库连接,对图书信息、用户信息等进行存储和管理。 
1.3系统可行性分析

1.3.1数据库选择

MySQL数据库是一种成熟且广泛应用的关系型数据库管理系统,能够支持系统的数据存储和管理需求。对于图书管理系统而言,MySQL提供了稳定的数据存储和高效的数据检索功能,因此在技术上是可行的选择。
1.3.2经济可行性 

系统开发、部署和维护的成本相对较低,因为不需要投入大量资源在 UI 界面的设计和开发上。
1.3.3法律与环境可行性 

系统的设计和实施需要符合相关的法律法规,包括数据隐私保护、用户信息安全等方面的合规性。在数据库存储和管理方面需要特别注意数据隐私和安全性。 

08170201杨静宜 发表于 2024-11-9 10:40:09

设计一个图书信息管理系统,实现以下功能:系统以菜单方式工作,图书信息录入功能(图书信息用文件保存) ;图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等;图书信息浏览功能(输出所有图书信息);查询和排序功能:按书名查询(显示所有同名的书),按作者名查询(显示所有该作者的书); 图书信息的删除与修改。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 定义图书信息类
class BookInfo
{
public:
    int ID; // 登录号
    string name; // 书名
    string author; // 作者名
    int category; // 分类号
    string publisher; // 出版单位
    string publishDate; // 出版时间
    double price; // 价格

    // 构造函数
    BookInfo(int id, string n, string a, int c, string p, string pd, double pr)
    {
      ID = id;
      name = n;
      author = a;
      category = c;
      publisher = p;
      publishDate = pd;
      price = pr;
    }

    // 打印图书信息
    void print() {
      cout << "登录号:" << ID << endl;
      cout << "书名:" << name << endl;
      cout << "作者名:" << author << endl;
      cout << "分类号:" << category << endl;
      cout << "出版单位:" << publisher << endl;
      cout << "出版时间:" << publishDate << endl;
      cout << "价格:" << price << endl;
    }

    // 将图书信息转为字符串
    string toString()
    {
      string str = to_string(ID) + "," + name + "," + author + "," + to_string(category) + "," + publisher + "," + publishDate + "," + to_string(price);
      return str;
    }
};

// 定义图书信息管理
class BookManager
{
private:
    vector<BookInfo> books; // 图书信息数组
    string filename; // 保存图书信息的文件名

public:
    // 构造函数
    BookManager(string fn)
    {
      filename = fn;
      loadBooks();
    }

    // 添加图书信息
    void addBook()
    {
      int id, category;
      string name, author, publisher, publishDate;
      double price;
      cout << "请输入登录号:";
      cin >> id;
      cout << "请输入书名:";
      cin >> name;
      cout << "请输入作者名:";
      cin >> author;
      cout << "请输入分类号:";
      cin >> category;
      cout << "请输入出版单位:";
      cin >> publisher;
      cout << "请输入出版时间:";
      cin >> publishDate;
      cout << "请输入价格:";
      cin >> price;
      BookInfo book(id, name, author, category, publisher, publishDate, price);
      books.push_back(book);
      saveBooks();
      cout << "添加成功!" << endl;
    }

    // 查找图书信息
    void findBookByName()
    {
      string name;
      cout << "请输入要查找的书名:";
      cin >> name;
      vector<BookInfo> results;
      for (int i = 0; i < books.size(); i++)
      {
            if (books.name == name)
            {
                results.push_back(books);
            }
      }
      if (results.size() == 0)
      {
            cout << "未找到该书名的图书信息!" << endl;
      }
      else
      {
            cout << "共找到" << results.size() << "本书:" << endl;
            for (int i = 0; i < results.size(); i++)
            {
                results.print();
                cout << endl;
            }
      }
    }

    // 查找图书信息
    void findBookByAuthor()
    {
      string author;
      cout << "请输入要查找的作者名:";
      cin >> author;
      vector<BookInfo> results;
      for (int i = 0; i < books.size(); i++)
      {
            if (books.author == author)
            {
                results.push_back(books);
            }
      }
      if (results.size() == 0)
      {
            cout << "未找到该作者名的图书信息!" << endl;
      }
      else
      {
            cout << "共找到" << results.size() << "本书:" << endl;
            for (int i = 0; i < results.size(); i++)
            {
                results.print();
                cout << endl;
            }
      }
    }

    // 删除图书信息
    void deleteBook()
    {
      int id;
      cout << "请输入要删除的登录号:";
      cin >> id;
      for (int i = 0; i < books.size(); i++)
      {
            if (books.ID == id)
            {
                books.erase(books.begin() + i);
                saveBooks();
                cout << "删除成功!" << endl;
                return;
            }
      }
      cout << "未找到该图书信息!" << endl;
    }

    // 修改图书信息
    void modifyBook()
    {
      int id;
      cout << "请输入要修改的登录号:";
      cin >> id;
      for (int i = 0; i < books.size(); i++)
      {
            if (books.ID == id)
            {
                cout << "请输入新的书名:";
                cin >> books.name;
                cout << "请输入新的作者名:";
                cin >> books.author;
                cout << "请输入新的分类号:";
                cin >> books.category;
                cout << "请输入新的出版单位:";
                cin >> books.publisher;
                cout << "请输入新的出版时间:";
                cin >> books.publishDate;
                cout << "请输入新的价格:";
                cin >> books.price;
                saveBooks();
                cout << "修改成功!" << endl;
                return;
            }
      }
      cout << "未找到该图书信息!" << endl;
    }

    // 按价格排序
    void sortByPrice()
    {
      sort(books.begin(), books.end(), [](BookInfo a, BookInfo b) {
            return a.price < b.price;
            });
      cout << "按价格排序成功!" << endl;
    }

    // 显示所有图书信息
    void showAllBooks()
    {
      for (int i = 0; i < books.size(); i++)
      {
            books.print();
            cout << endl;
      }
    }

    // 显示菜单
    void showMenu()
    {
      cout << "|------------------------------------|" << endl;
      cout << "|||||||||欢迎使用图书管理系统|||||||||" << endl;
      cout << "|------------------------------------|" << endl;
      cout << "|____________________________________|" << endl;
      cout << "|***********1. 添加图书信息**********|" << endl;
      cout << "|***********2. 按书名查询************|" << endl;
      cout << "|***********3. 按作者名查询**********|" << endl;
      cout << "|***********4. 删除图书信息**********|" << endl;
      cout << "|***********5. 修改图书信息**********|" << endl;
      cout << "|***********6. 按价格排序************|" << endl;
      cout << "|***********7. 显示所有图书信息******|" << endl;
      cout << "|***********0. 退出******************|" << endl;
      cout << "|____________________________________|" << endl;
    }

    // 从文件中加载图书信息
    void loadBooks()
    {
      ifstream file(filename);
      if (file.is_open())
      {
            string line;
            while (getline(file, line))
            {
                int id = stoi(line.substr(0, line.find(",")));
                line = line.substr(line.find(",") + 1);
                string name = line.substr(0, line.find(","));
                line = line.substr(line.find(",") + 1);
                string author = line.substr(0, line.find(","));
                line = line.substr(line.find(",") + 1);
                int category = stoi(line.substr(0, line.find(",")));
                line = line.substr(line.find(",") + 1);
                string publisher = line.substr(0, line.find(","));
                line = line.substr(line.find(",") + 1);
                string publishDate = line.substr(0, line.find(","));
                line = line.substr(line.find(",") + 1);
                double price = stod(line);
                BookInfo book(id, name, author, category, publisher, publishDate, price);
                books.push_back(book);
            }
            file.close();
      }
    }

    // 将图书信息保存到文件
    void saveBooks()
    {
      ofstream file(filename);
      if (file.is_open())
      {
            for (int i = 0; i < books.size(); i++)
            {
                file << books.toString() << endl;
            }
            file.close();
      }
    }

    // 运行图书信息管理系统
    void run()
    {
      int choice;
      while (true)
      {
            showMenu();
            cout << "请输入选项:";
            cin >> choice;
            switch (choice)
            {
            case 1:
                addBook();
                break;
            case 2:
                findBookByName();
                break;
            case 3:
                findBookByAuthor();
                break;
            case 4:
                deleteBook();
                break;
            case 5:
                modifyBook();
                break;
            case 6:
                sortByPrice();
                break;
            case 7:
                showAllBooks();
                break;
            case 0:
                cout << "谢谢使用!" << endl;
                return;
            default:
                cout << "无效选项,请重新输入!" << endl;
            }
      }
    }
};

int main()
{
    BookManager manager("books.txt");
    manager.run();
    return 0;
}
本程序的任务是实现一个图书信息管理系统,主要功能包括添加图书信息、按书名查询、按作者名查询、删除图书信息、修改图书信息、按价格排序和显示所有图书信息。输入形式为键盘输入,输入值的范围应符合实际情况。输出形式为控制台输出。程序所能达到的功能应能够满足用户的需求。测试数据应包括正确的输入及其输出结果和含有错误的输入及其输出结果。                             本程序的主程序流程为:显示菜单,根据用户输入的选项执行相应的操作,直到用户选择退出为止。各程序模块之间的层次关系为:主程序调用图书信息管理类中的各个方法。

详细设计包括以下程序模块:

- 图书信息类:定义图书信息的各个属性,包括登录号、书名、作者名、分类号、出版单位、出版时间、价格等,以及相应的构造函数、打印函数和转为字符串函数。

- 图书信息管理类:定义图书信息管理的各个方法,包括添加图书信息、按书名查询、按作者名查询、删除图书信息、修改图书信息、按价格排序和显示所有图书信息,以及从文件中加载图书信息和将图书信息保存到文件中的方法。

- 主程序:显示菜单,根据用户输入的选项执行相应的操作,直到用户选择退出为止。

       在调试过程中,遇到了一些问题,包括文件读写的问题、排序函数的使用问题等。通过仔细排查和查阅相关资料,最终解决了这些问题。在设计和实现过程中,需要注意细节,确保程序的正确性和稳定性。

       使用本程序,首先需要创建一个保存图书信息的文件,文件名可以自定义。然后,根据菜单提示进行操作,包括添加图书信息、按书名查询、按作者名查询、删除图书信息、修改图书信息、按价格排序和显示所有图书信息。

08170201杨静宜 发表于 2024-11-22 22:45:47

3.2安全性约束
3.2.1存储过程的设计
判断并对数据进行插入

create procedure insert_book (in in_auther varchar(20),in in_name varchar(20),in in_price int,in in_leadnum int,in in_buystock int)

begin

    declare exit_bid int;

    select bid into exit_bid from purchase_list where name=in_name and author=in_auther;

    if exit_bid is not null

      then

      update purchase_list set lendnum=lendnum+in_leadnum , buystock=buystock+in_buystock where name=in_name and author=in_auther;

      else

      insert into purchase_list values (null,in_name,in_price,in_auther,in_leadnum,in_buystock);

    end if;

end;

3.2.2触发器设计
防止其归还时间和借阅时间出错

CREATE TRIGGER check_return_time

after INSERT ON lend_record

FOR EACH ROW

BEGIN

    IF NEW.date_return <= NEW.date_lend THEN

      SIGNAL SQLSTATE '45000'

      SET MESSAGE_TEXT = 'Return date cannot be earlier than lend date';

    END IF;

END;

3.3数据库访问设计
总体接口的实现:

<----DAO层---->

@Mapper

public interface AdminDAO {

      //返回所有的管理员信息

    public List<Admin> admins();

}

@Mapper

public interface BookDAO {

      //插入图书数据

    public int inertBook(Book book);

      //根据书籍id查询书籍信息,是其他表通过id访问书籍信息的方法

    public Book selectBookById(@Param("bid") int bid);

}

@Mapper

public interface BuyRecordDAO {

      //插入购买记录

    public int insertRecord(BuyRecord buyRecord);

      //根据uid返回所有购买记录

    public List<HashMap<String,Object>> select_AccordingUser(@Param("uid") String uid);

      //返回所有购买记录

    public List<HashMap<String,Object>> selectAll();

}

@Mapper

public interface LendRecordDAO {

      //插入借阅记录

    public int insertRecord(LendRecord lendRecord);

      //删除插入记录

    public int deleteRecord(@Param("uid") String uid,@Param("bid") int bid);

      //根据uid返回所有借阅记录

    public List<HashMap<String,Object>> select_Map_AccordingUser(@Param("uid") String uid);

      //返回所有借阅记录

    public List<HashMap<String,Object>> selectAll_Map();

}

@Mapper

public interface PurchaseListDAO {

      //插入进货数据

    public int purchaseBook(@Param("book") Book book, @Param("lendnum") int lendnum, @Param("buynum")int buynum);

      //根据book信息查找bid

    public Integer getBidInt(Book book);

      //根据bid返回lendnum

    public int getLendnum(@Param("bid") int bid);

      //根据bid返回buynum

    public int getBuynum(@Param("bid") int bid);

      //更新purchase_list数据

    public int updatedata(@Param("bid")int bid,@Param("lendnum") int lendnum,@Param("buynum") int buynum);

}

@Mapper

public interface RepositoryDAO {

      //根据bid返回lendnum

    public int addBook(@Param("book") Book book, @Param("lendnum") int lendnum, @Param("buynum")int buynum);

      //根据purchase_list的bid更新repository

    public int updateLendstock(@Param("bid") int bid)

      //根据bid减少借阅书籍的数量

    public int removeLendBook(@Param("bid")int id);

      //根据bid减少购买书籍的数量

    public int removeBuyBook(@Param("bid")int id);

      //返回所有repository数据

    public ArrayList<Repository> selectAll();

      //更新库存

    public int updateStock(@Param("bid")int bid, @Param("lendnum") int lendnum,@Param("buynum") int buynum);

}

@Mapper

public interface ReturnRecordDAO {

      //根据bid减少借阅书籍的数量

    public int insertRecord(ReturnRecord returnRecord);

      //返回所有归还记录

    public List<HashMap<String, Object>> selectAll();

      //根据uid返回归还记录

    public List<HashMap<String,Object>> select_AccordingUser(@Param("uid") String id);

}

@Mapper

public interface UserDAO {

      //插入user数据

    public int insertUser(User user);

      //根据uid查询user数据

    public User selectUserByUid(@Param("uid") String uid);

      //返回所有的uid数据

    public List<String> selectAllId();

}

其中一个功能的实现:

<---xml文件--->

Purchase_list.xml:

<!DOCTYPE mapper

      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.library.dao.PurchaseListDAO">

    <resultMap id="purchaseList" type="com.demo.library.dataobject.PurchaseList">

      <id property="bid" column="bid" jdbcType="INTEGER"/>

      <result column="name" property="name" jdbcType="VARCHAR"/>

      <result column="author" property="author" jdbcType="VARCHAR"/>

      <result column="price" property="price" jdbcType="INTEGER"/>

      <result column="lendstock" property="lendnum" jdbcType="INTEGER"/>

      <result column="buystock" property="buynum" jdbcType="INTEGER"/>

    </resultMap>

    <insert id="purchaseBook">

      insert into purchase_list (name, price, author, lendstock, buystock) VALUES

            (#{book.name},#{book.price},#{book.author},#{lendnum},#{buynum});

    </insert>

    <update id="updatedata">

      update purchase_list

      set lendstock=#{lendnum},buystock=#{buynum}

      where bid=#{bid};

    </update>

    <select id="getData" resultType="com.demo.library.dataobject.PurchaseList" >

      select bid as bid, name as name, author as author, price as price, lendstock as lendnum, buystock as buynum from purchase_list

      where name=#{name} and author=#{author};

    </select>

    <select id="getName" resultType="String">

      select name from purchase_list

      where author=#{author} and name=#{name};

    </select>

    <select id="getBidInt" resultType="java.lang.Integer">

      select bid from purchase_list

      where author=#{author} and name=#{name};

    </select>

    <select id="getLendnum" resultType="java.lang.Integer">

      select lendstock from purchase_list where bid=#{bid}

    </select>

    <select id="getBuynum" resultType="java.lang.Integer">

      select buystock from purchase_list where bid=#{bid}

    </select>

</mapper>

3.4登录模块设计
HTML文件:

<!DOCTYPE HTML>

<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>login</title>

    <link rel="stylesheet" href="/css/index.css">

</head>

<body>

    <div style="text-align: center">

    <h1>Welcome to the library system!</h1>

    </div>

<div style="margin-top: 70px;text-align: center">

    <p>tip:游客登录密码为000000,用户id为手机号</p>

</div>

<form action="/UI" method="get">

    <div class="div_id">

      <div>uid</div>

      <input type="text" name="uid" class="id" placeholder="请输入id">

    </div>

    <div class="div_name">

      <div>name</div>

      <input type="text" name="name" class="name" placeholder="请输入姓名">

    </div>

    <div class="div_password">

      <div>password</div>

      <input type="password" name="password" class="password" placeholder="请输入密码">

    </div>

    <div class="button_div">

    <button type="submit" class="button">login</button>

    </div>

</form>

</body>

</html>

CSS文件:

body{

    margin: 0;

    padding: 0;

    background: url("../img/background.png") no-repeat ;

    background-size: cover;

}

h1{

    font-weight: bold;

}

.id{

    width: 200px;

    height: 25px;

}

.password{

    width: 200px;

    height: 25px;

}

.name{

    width: 200px;

    height: 25px;

}

form{

    position: fixed;

    top: 50%;

    left: 50%;

    transform: translate(-50%,-50%);

}

.div_id{

    margin-bottom: 20px;

}

.div_name{

    margin-bottom: 20px;

}

.button_div{

    margin-top: 10px;

    width: 100%;

    text-align: center;

}

.button{

    color:white;

    font-weight: normal;

    background-color: forestgreen;

    width: 80px;

    height: 40px;

    line-height: 30px;

    border-radius: 5px;

}

3.5数据管理功能模块
管理员模块

进货模块:

public void addBook(Book book,int lendNum,int buyNum)

    {

      if(purchaseDAO.getBidInt(book)!=null)

      {

            int bid = purchaseDAO.getBidInt(book);

            book.setBid(bid);

            purchaseDAO.updatedata(bid, purchaseDAO.getLendnum(bid)+lendNum, purchaseDAO.getBuynum(bid)+buyNum );

            repositoryDAO.updateStock(bid, purchaseDAO.getLendnum(bid), purchaseDAO.getBuynum(bid));

      }

      else

      {

            purchaseDAO.purchaseBook(book, lendNum, buyNum);

            int bid = purchaseDAO.getBidInt(book);

            book.setBid(bid);

            repositoryDAO.addBook(book,lendNum,buyNum);

            bookDAO.inertBook(book);

      }

    }

获取库存信息模块:

public List<RepositoryHTML> allBooks()

    {

      ArrayList<RepositoryHTML> arrayList = new ArrayList<>();

      for (Repository repository : Repositorys()) {

            Book book = bookDAO.selectBookById(repository.getBid());

            RepositoryHTML repositoryHTML = new RepositoryHTML(book.getName(), book.getAuthor(), book.getPrice(), repository.getLendstock(), repository.getBuystock());

            arrayList.add(repositoryHTML);

      }

      return arrayList;

    }

查询所有用户的借阅记录模块:

public List<LendRecordHTML> LendRecordsHTML()

    {

      ArrayList<LendRecordHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> lendRecord : LendRecords()) {

            int bid = (int)lendRecord.get("bid");

            String uid = (String)lendRecord.get("uid");

            LocalDateTime date_lend = (LocalDateTime) lendRecord.get("date_lend");

            LocalDateTime date_return = (LocalDateTime) lendRecord.get("date_return");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            LendRecordHTML lendRecordHTML=new LendRecordHTML(bid,user.getName(),book.getName(),date_lend,date_return);

            arrayList.add(lendRecordHTML);

      }

      return arrayList;

    }

查询所有用户的购买记录模块:

public List<BuyRecordsHTML> BuyRecordsHTML()

    {

      ArrayList<BuyRecordsHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> buyRecord : BuyRecords()) {

            int bid = (int)buyRecord.get("bid");

            String uid = (String)buyRecord.get("uid");

            LocalDateTime date_buy = (LocalDateTime)buyRecord.get("date_buy");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            BuyRecordsHTML buyRecordsHTML = new BuyRecordsHTML(bid, user.getName(), book.getName(), date_buy);

            arrayList.add(buyRecordsHTML);

      }

      return arrayList;

    }

查询所有用户的归还记录模块:

public List<ReturnRecordsHTML> ReturnRecordsHTML()

    {

      ArrayList<ReturnRecordsHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> returnRecord : ReturnRecords()) {

            int bid = (int)returnRecord.get("bid");

            String uid = (String)returnRecord.get("uid");

            LocalDateTime date_return = (LocalDateTime)returnRecord.get("date_return");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            ReturnRecordsHTML returnRecordsHTML = new ReturnRecordsHTML(bid, date_return, book.getName(), user.getName());

            arrayList.add(returnRecordsHTML);

      }

      return arrayList;

    }

                                                                           

用户

插入用户数据:

public void insertUser(User user)

    {

      List<String> ids = userDAO.selectAllId();

      for (String id : ids) {

            if(id.equals(user.getUid()))

                return;

      }

      userDAO.insertUser(user);

    }

根据用户id查询所有借阅记录:

public List<LendRecordHTML> LendRecordsHTML(String uid)

    {

      ArrayList<LendRecordHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> lendRecord : lendRecords(uid)) {

            int bid = (int)lendRecord.get("bid");

            LocalDateTime date_lend = (LocalDateTime) lendRecord.get("date_lend");

            LocalDateTime date_return = (LocalDateTime) lendRecord.get("date_return");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            LendRecordHTML lendRecordHTML=new LendRecordHTML(bid,user.getName(),book.getName(),date_lend,date_return);

            arrayList.add(lendRecordHTML);

      }

      return arrayList;

根据用户id查询所有购买记录:

    }

public List<BuyRecordsHTML> BuyRecordsHTML(String uid)

    {

      ArrayList<BuyRecordsHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> buyRecord : BuyRecords(uid)) {

            int bid = (int)buyRecord.get("bid");

            LocalDateTime date_buy = (LocalDateTime) buyRecord.get("date_buy");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            BuyRecordsHTML buyRecordsHTML = new BuyRecordsHTML(bid, user.getName(), book.getName(), date_buy);

            arrayList.add(buyRecordsHTML);

      }

      return arrayList;

    }

根据用户id查询所有归还记录:

    public List<ReturnRecordsHTML> ReturnRecordsHTML(String uid)

    {

      ArrayList<ReturnRecordsHTML> arrayList = new ArrayList<>();

      for (HashMap<String, Object> returnRecord : ReturnRecords(uid)) {

            int bid = (int)returnRecord.get("bid");

            LocalDateTime date_return = (LocalDateTime) returnRecord.get("date_return");

            User user = userDAO.selectUserByUid(uid);

            Book book = bookDAO.selectBookById(bid);

            ReturnRecordsHTML returnRecordsHTML = new ReturnRecordsHTML(bid, date_return, book.getName(), user.getName());

            arrayList.add(returnRecordsHTML);

      }

      return arrayList;

    }

查询所有能被借阅的书:

    public List<Book> booksBeLend()

    {

      ArrayList<Book> arrayList = new ArrayList<>();

      List<Repository> repositories = repositoryDAO.selectAll();

      for (Repository repository : repositories) {

            if(repository.getLendstock()!=0)

            {

                Book book = bookDAO.selectBookById(repository.getBid());

                arrayList.add(book);

            }

      }

      return arrayList;

    }

查询所有能被购买的书:

    public List<Book> booksBeBuy()

    {

      ArrayList<Book> arrayList = new ArrayList<>();

      List<Repository> repositories = repositoryDAO.selectAll();

      for (Repository repository : repositories) {

            if(repository.getBuystock()!=0)

            {

                Book book = bookDAO.selectBookById(repository.getBid());

                arrayList.add(book);

            }

      }

      return arrayList;

    }

查询所有能被归还的书:

    public List<Book> booksBeReturn(String uid)

    {

      ArrayList<Book> arrayList = new ArrayList<>();

      List<HashMap<String, Object>> maps = lendRecordDAO.select_Map_AccordingUser(uid);

      for (HashMap<String, Object> map : maps) {

            int bid = (int) map.get("bid");

            Book book = bookDAO.selectBookById(bid);

            arrayList.add(book);

      }

      return arrayList;

    }

借书模块:

    public void lend_A_Book(String uid,int bid, LocalDateTime lendTime,LocalDateTime returnTime)

    {

      LendRecord lendRecord = new LendRecord(uid, bid, lendTime, returnTime);

      lendRecordDAO.insertRecord(lendRecord);

      repositoryDAO.removeLendBook(bid);

    }

买书模块:

    public void buy_A_Book(String uid,int bid,LocalDateTime buyTime)

    {

      BuyRecord buyRecord = new BuyRecord(uid, bid, buyTime);

      buyRecordDAO.insertRecord(buyRecord);

      repositoryDAO.removeBuyBook(bid);

    }

还书模块:

    public void return_A_Book(String uid,int bid,LocalDateTime returnTime)

    {

      ReturnRecord returnRecord = new ReturnRecord(returnTime, bid, uid);

      returnRecordDAO.insertRecord(returnRecord);

      lendRecordDAO.deleteRecord(uid,bid);

      repositoryDAO.updateLendstock(bid);

    }

08170201杨静宜 发表于 2024-11-29 21:17:14

3.6系统主模块设计
LoginControl

登录模块:

@RequestMapping("/UI")

    public String admin(@RequestParam String uid, @RequestParam String name, @RequestParam String password, Model model)

    {

      if(name.equals("admin"))

      {

            for (Admin admin : adminService.admins()) {

                if(admin.getPassword().equals(password)&&admin.getAid().equals(uid))

                {

                  model.addAttribute("LendRecords",adminService.LendRecordsHTML());

                  model.addAttribute("BuyRecords",adminService.BuyRecordsHTML());

                  model.addAttribute("ReturnRecords",adminService.ReturnRecordsHTML());

                  model.addAttribute("repositorys",adminService.allBooks());

                  return "admin";

                }

            }

      }

      if(password.equals("000000")&&uid.length()==11)

      {

            User user=new User(uid, name, password);

            userService.insertUser(user);

            model.addAttribute("name",name);

            model.addAttribute("LendBooks",userService.booksBeLend());

            model.addAttribute("BuyBooks",userService.booksBeBuy());

            model.addAttribute("ReturnBooks",userService.booksBeReturn(uid));

            model.addAttribute("LendRecords",userService.LendRecordsHTML(uid));

            model.addAttribute("BuyRecords",userService.BuyRecordsHTML(uid));

            model.addAttribute("ReturnRecords",userService.ReturnRecordsHTML(uid));

            return "user";

      }else

      {

            return "loginerror";

      }

    }

                                                                            UserControl

//用户借阅的点击事件

前端JS代码(借书框逻辑,以下买书框和还书框逻辑相同,不再赘述):

      

    lend_bt.addEventListener('click',function (){

      mask.style.display = 'block';

      let lend_main = document.querySelector(".lend_main");

      lend_main.style.display='block';

      let back = document.querySelector(".lend_main img");

      let options = document.querySelectorAll(".lend_main .content");

      let submit = document.querySelector(".lend_main .button_div button");

      back.addEventListener("click",function (){

            options.forEach(option=>{

                option.classList.remove('selected');

            })

            mask.style.display='none';

            lend_main.style.display='none';

      });

      let data={};

      options.forEach(option=>{

            option.addEventListener('click',()=>{

            options.forEach(option=>{

                  option.classList.remove('selected');

            })

                option.classList.add('selected');

            data={

                  'bid':option.children.item(0).innerHTML,

                  'uid':uid,

                  'date':option.querySelector('input').value

            }

                console.log(data);

            })

      })

      submit.addEventListener('click',function (){

            fetch(

                '/lend',

                {

                  method:'POST',

                  body:JSON.stringify(data),

                  headers:{

                        'content-type':'application/json'

                  }

                }

            ).then(console.log("sucesss"))

            mask.style.display = 'none';

            lend_main.style.display = 'none';

            options.forEach(option=>{

                option.classList.remove('selected');

            })

      })

    })

后端java代码:

@RequestMapping("/lend")

    public String lendBook(@RequestBody String data) throws ParseException {

      HashMap<String,String> map = JSON.parseObject(data, HashMap.class);

      String uid = map.get("uid");

      int bid = Integer.parseInt(map.get("bid"));

      //System.out.println(map);

      LocalDateTime now = LocalDateTime.now();

      LocalDate temp = LocalDate.parse(map.get("date"));

      LocalDateTime target = temp.atStartOfDay();

      userService.lend_A_Book(uid,bid,now,target);

      return "user";

    }

//用户购买模块:

    @RequestMapping("/buy")

    public String buyBook(@RequestBody String data)

    {

      HashMap<String,String> map = JSON.parseObject(data, HashMap.class);

      String uid = map.get("uid");

      int bid = Integer.parseInt(map.get("bid"));

      LocalDateTime now = LocalDateTime.now();

      userService.buy_A_Book(uid,bid,now);

      return "user";

    }

//用户归还模块:

    @RequestMapping("/return")

    public String returnBook(@RequestBody String data)

    {

      HashMap<String,String> map = JSON.parseObject(data, HashMap.class);

      String uid = map.get("uid");

      int bid = Integer.parseInt(map.get("bid"));

      LocalDateTime now = LocalDateTime.now();

      userService.return_A_Book(uid,bid,now);

      return "user";

    }

                                                                            AdminControl

//进货功能模块:

前端JS代码:

purchase_bt.addEventListener('click',function ()

    {

      mask.style.display = 'block';

      let addbook_main = document.querySelector(".addbook_main");

      addbook_main.style.display='block';

      let back = document.querySelector(".addbook_main img");

      back.addEventListener("click",function (){

            mask.style.display='none';

            addbook_main.style.display='none';

      })

      submit.addEventListener("click",function (){

            let name=document.querySelector(".name input").value;

            let author=document.querySelector(".author input").value;

            let price=document.querySelector(".price input").value;

            let lendnum=document.querySelector(".lendnum input").value;

            let buynum=document.querySelector(".buynum input").value;

            let data={

                "name":name,

                "author":author,

                "price":price,

                "lendnum":lendnum,

                "buynum":buynum

            };

            fetch(

                '/submit',

                {

                  method:'POST',

                  body:JSON.stringify(data),

                  headers:{

                        'content-type':'application/json'

                  }

                }

            ).then(Response=>console.log(Response.url))

            mask.style.display='none';

            addbook_main.style.display='none';

            console.log("按钮执行    ");

      })

      console.log("模态框执行");

    })

后端java代码:

@PostMapping("/submit")

    public String submit(@RequestBody String data)

    {

      HashMap<String,String> map = JSON.parseObject(data, HashMap.class);

      int lendnum = Integer.parseInt(map.get("lendnum"));

      String name = map.get("name");

      int buynum = Integer.parseInt(map.get("buynum"));

      int price = Integer.parseInt(map.get("price"));

      String author = map.get("author");

      Book book = new Book(name, author, price);

      adminService.addBook(book,lendnum,buynum);

      return "admin";
}
页: [1]
查看完整版本: 选题