有客自远方来52 2024-04-23 11:59 采纳率: 15.3%
浏览 2
已结题

如何实现页面提示功能?

我想实现同一本书再次借阅会借阅失败并弹出库存量不足的界面,我应该如何具体修改
功能实现

def add(self):
    """
    添加图书信息
    :return:
    """
    bookName = self.bookNameInput.text()
    if bookName.strip() == "":
        self.x = show_custom_message_box("系统提示", "请选择借阅图书!")
        return
    ID = self.idInput.text()
    if ID.strip() == "":
        self.x = show_custom_message_box("系统提示", "图书编号不能为空!")
        return
    author = self.authorInput.text()
    if author.strip() == "":
        self.x = show_custom_message_box("系统提示", "图书作者不能为空!")
        return
    age = self.ageInput.text()
    if age.strip() == "":
        self.x = show_custom_message_box("系统提示", "年龄不能为空!")
        return
    sex = ''
    if self.manRadio.isChecked():
        sex = '男'
    else:
        sex = '女'
    price = self.priceInput.text()
    if price.strip() == "":
        self.x = show_custom_message_box("系统提示", "图书价格不能为空!")
        return
    stock = self.stockInput.text()
    if stock.strip() == "":
        self.x = show_custom_message_box("系统提示", "借阅量不能为空!")
        return
    stock = int(stock)
    if stock == 0 or stock > 10:
        self.x = show_custom_message_box("系统提示", "同本书每人仅限十本借阅!")
        return
    TID = self.bookTypeComboBoX.currentData()
    if bookName == -1:
        self.x = show_custom_message_box("系统提示", "请选择图书类别!")
        return
    bookDesc = self.bookDescInput.toPlainText()
    rbook = Book.my_construtor2(ID, bookName, author, age, sex, price, TID, bookDesc, stock)
    if int(stock) > borrowDao.check1(rbook):
        self.x = show_custom_message_box("系统提示", "借阅量超出,请重新借阅!")
        return
    if bookName == borrowDao.check2(rbook):
        self.x = show_custom_message_box("系统提示", "禁止重复借阅!")
        return
    if borrowDao.add(rbook) > 0:
        self.x = show_custom_message_box("系统提示", "借阅成功!")
        self.resetForm()
        self.initTable()
    else:
        self.x = show_custom_message_box("系统提示", "借阅失败!")

数据库模块

def check2(rbook: Rbook):
    con = dbUtil.getCon()
    cursor = con.cursor()
    # 检查重复借阅
    check_sql_book = f"SELECT bookName FROM borrow WHERE bookName='{rbook.bookName}'"
    cursor.execute(check_sql_book)
    con.commit()
    count_book = cursor.fetchone()
    print(count_book)
    if count_book is not None:
        return 0
    dbUtil.closeCon(con)

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-23 11:59
    关注

    引自免费微信小程序:皆我百晓生

    为了实现同一本书再次借阅会借阅失败并弹出库存量不足的界面,你需要在add方法中添加对已借阅书籍的检查逻辑,并且更新数据库模块中的check2函数。首先,在add方法中,我们需要在调用borrowDao.add(rbook)之前,先执行一个查询,确认用户是否已经借阅过这本书。其次,我们还需要修改check2函数,使其返回当前用户是否已经借阅了这本书。

    以下是修改后的代码:

    main.py

    from PyQt5.QtWidgets import QMessageBox
    
    # ... (其他导入)
    
    class YourClass(QWidget):
        def __init__(self):
            # ... (初始化代码)
    
        def add(self):
            """
            添加图书信息
            :return:
            """
            # ... (现有代码)
    
            # 新增:检查用户是否已经借阅过这本书
            user_id = get_current_user_id()  # 假设get_current_user_id()是获取当前登录用户ID的方法
            sql_check_borrowed = f"SELECT * FROM borrow WHERE bookName='{rbook.bookName}' AND userId={user_id}"
            already_borrowed = borrowDao.check(sql_check_borrowed)
            
            if already_borrowed:
                self.x = show_custom_message_box("系统提示", "您已经借阅过此书,请归还后再借阅!")
                return
            
            # 如果没有借阅过,则继续进行原逻辑
            if int(stock) > borrowDao.check1(rbook):
                self.x = show_custom_message_box("系统提示", "借阅量超出,请重新借阅!")
                return
            if borrowDao.add(rbook) > 0:
                self.x = show_custom_message_box("系统提示", "借阅成功!")
                self.resetForm()
                self.initTable()
            else:
                self.x = show_custom_message_box("系统提示", "借阅失败!")
    
    # ... (其他类定义)
    

    database_module.py

    def check(sql: str):
        con = dbUtil.getCon()
        cursor = con.cursor()
        cursor.execute(sql)
        con.commit()
        result = cursor.fetchone()
        dbUtil.closeCon(con)
        return result
    
    # 删除之前的check2函数,因为不再需要
    # ...
    

    这里假设有一个名为get_current_user_id()的函数用于获取当前登录用户的ID。你需要根据实际情况替换这个函数,从你的登录系统或其他合适的地方获取用户ID。

    这样,当用户试图再次借阅同一本书时,程序会先检查他们是否已经借阅过这本书,如果有则显示提示消息,阻止借阅操作。同时,简化了check2函数,使其不再用于检查重复借阅,而改为通用的SQL查询函数。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求