当前位置:   article > 正文

python实现图书管理系统BookManager类_路飞学城 python图书管理系统bookmanager类

路飞学城 python图书管理系统bookmanager类

项目场景:

图书管理系统的编写:
图书类Book:
​ 属性:书名name 作者author 是否借出isborrow 书籍ID bookID 书籍类型category
​ 注意:书籍ID不能重复
图书管理系统BookManager类
​ 存放图书的工具使用列表
​ 方法:
​ 1.添加图书
​ 2.借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出
​ 3.还书
4.查询书籍 (根据名字查询, 根据类别查询)
5.修改书籍信息(根据书籍ID修改)
6.本地化保存数据信息(json格式)

代码设计核心思想

设计两个类,图书类Book,图书管理系统BookManager类(需要存储book对象)/以及每一次json文件的数据列表。
代码需要自己创建一个json文件
保存代码,创建一个book.json文件在这里插入图片描述

代码设计


"""
图书管理系统的编写:
图书类Book:
​    属性:书名name 作者author 是否借出isborrow 书籍ID bookID 书籍类型category
​    注意:书籍ID不能重复
图书管理系统BookManager类
​ 存放图书的工具使用列表
​ 方法:
​ 1.添加图书
​ 2.借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出
​ 3.还书
 4.查询书籍 (根据名字查询, 根据类别查询)
 5.修改书籍信息(根据书籍ID修改)
 6.本地化保存数据信息(json格式)

"""

import json


class Book(object):
    """该类为图书的类"""

    def __init__(self, name, author, isborrow, bookID, category):
        self.name = name
        self.author = author
        self.isborrow = isborrow
        self.bookID = bookID
        self.category = category


class BookManager(object):
    book_list = []  # 存储book的对象列表
    json_list = []  # 读取json文件,并且战时存储json数据的列表
    category_list = []  #存储category类别的数据信息

    def __init__(self):
        """初始化读取json,放入json_list中"""
        try:
            self.json_read()
        except Exception as e:
            return

    def json_read(self):
        """封装读取json文件的函数"""
        with open('book.json', mode='r', encoding='utf-8') as file_object:
            self.json_list = json.load(file_object)

    def json_write(self):
        """封装写入json文件数据"""
        with open('book.json', mode='w', encoding='utf-8') as file_object:
            json.dump(self.json_list, file_object)

    @staticmethod
    def is_empty_file():
        """json文件中是否存在图书,返回布尔类型"""
        with open("book.json", "r", encoding="utf-8") as f:
            is_exist_book = bool(f.readline())
        return is_exist_book

    def add_book(self, book_object):
        """增加图书,写入json中,初始化读取json,放入json_list中"""
        self.book_list.append(book_object)
        dic = {'id': book_object.bookID,
               'name': book_object.name,
               'author': book_object.author,
               'isborrow': False,
               'category': book_object.category}
        self.json_list.append(dic)
        self.json_write()

    def borrow_book(self, book_name):
        """借书的函数"""
        flag = 0
        while flag < len(self.json_list):
            """判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
            if book_name in self.json_list[flag].values():
                if self.json_list[flag]["isborrow"] == False:
                    print("可以借书")
                    data = {"id": self.json_list[flag]["id"],
                            "name": self.json_list[flag]["name"],
                            "author": self.json_list[flag]["author"],
                            "isborrow": True,
                            "category": self.json_list[flag]["category"]}
                    self.json_list[flag] = data  # 修改对应列表的索引值
                    self.json_write()  # 每一次修改,要提交重新写入
                    print("借书成功!")
                else:
                    print("该图书已经被借出")
                break
            elif book_name not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
                # 不存在,并且到最后一个了,返回没有该图书
                print("没有该图书")
            flag += 1

    def review_book(self, book_name):
        """该函数为还书的操作,执行借书的逆向操作,原理相同"""
        flag = 0
        while flag < len(self.json_list):
            """判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
            if book_name in self.json_list[flag].values():
                if self.json_list[flag]["isborrow"] == True:
                    data = {"id": self.json_list[flag]["id"],
                            "name": self.json_list[flag]["name"],
                            "author": self.json_list[flag]["author"],
                            "isborrow": False,
                            "category": self.json_list[flag]["category"]}
                    self.json_list[flag] = data  # 修改对应列表的索引值
                    self.json_write()  # 每一次修改,要提交重新写入
                    print("还书成功!")
                else:
                    print("该图书已经被还")
                break
            elif book_name not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
                # 不存在,并且到最后一个了,返回没有该图书
                print("没有该图书")
            flag += 1

    def search_book(self):
        """查询书籍,先判断是否存在图书"""
        is_exist_book = self.is_empty_file()
        if is_exist_book:
            select = input("请选择查询方式:(1.图书名查询)(2.图书类别查询[文学,科学])")
            if select == "1":
                book_name = input("输入查询的图书名")
                v = self.search_name_book(book_name) #获取图书名的索引
                if v == None:
                    #none则代表没有返回索引,即无图书信息
                    print("无图书信息")
                else:
                    print("图书id\t图书名\t图书作者\t是否可借\t图书类别")
                    book = self.json_list[v]
                    id = book["id"]
                    name = book["name"]
                    author = book["name"]
                    isborrow = None
                    if book["isborrow"]:
                        isborrow = "否"
                    else:
                        isborrow = "是"
                    category = book["category"]
                    print("{}\t\t{}\t\t{}\t\t{}\t\t{}".format(id, name, author, isborrow, category))
            elif select == "2":
                book_category = input("输入查询的图书类别")
                self.search_category_book(book_category)
                #将类别的列表打印出来
                for book in self.category_list:
                    id = book["id"]
                    name = book["name"]
                    author = book["name"]
                    isborrow = None
                    if book["isborrow"]:
                        isborrow = "否"
                    else:
                        isborrow = "是"
                    category = book["category"]
                    print("{}\t\t{}\t\t{}\t\t{}\t\t{}".format(id, name, author, isborrow, category))
                    self.category_list = []  #每一次查询完,将暂存数据的列表至为空
            else:
                print("输入错误")
        else:
            print("没有图书信息,请添加图书")

    def search_name_book(self, book_name):
        """依据图书姓名查询"""
        flag = 0
        while flag < len(self.json_list):
            """判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
            if book_name  == self.json_list[flag]["name"]:
                return flag
            flag += 1

    def search_category_book(self,category):
        flag = 0
        while flag < len(self.json_list):
            """判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
            if category == self.json_list[flag]["category"]:
                self.category_list.append(self.json_list[flag])
            flag += 1

    def update_book(self, ID):
        """该函数为修改图书"""
        flag = 0
        while flag < len(self.json_list):
            """判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
            if ID in self.json_list[flag].values():
                if self.json_list[flag]["id"] == ID:
                    # 输入修改的图书,依据图书id修改
                    name = input("添加的书名")
                    author = input("添加的作者")
                    isborrow = bool(int(input("图书是否被借出,输入:(0代表未借出,1代表借出)")))
                    category = input("请输入图书种类:文学,科学")
                    # 将修改后的值赋值给json_list,并提交
                    self.json_list[flag]["name"] = name
                    self.json_list[flag]["author"] = author
                    self.json_list[flag]["isborrow"] = isborrow
                    self.json_list[flag]["category"] = category
                    self.json_write()  # 每一次修改,要提交重新写入
                    print("修改成功!")
                    break
            elif ID not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
                # 不存在,并且到最后一个了,返回没有该图书ID
                print("没有该图书ID")
            flag += 1


if __name__ == '__main__':
    print("欢迎来到图书管理系统")
    bm = BookManager()
    while True:
        id = int(input("请输入你的选择,1.添加图书;2.借书;3.还书;4.查询书籍;5.修改书籍;"))
        if id == 1:
            bookID = input("请输入ID")
            name = input("添加的书名")
            author = input("添加的作者")
            isborrow = False
            category = input("请输入图书种类:文学,科学")
            book = Book(name, author, isborrow, bookID, category)
            bm.add_book(book)
        elif id == 2:
            """借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出 """
            book_name = input("请输入借书的书名")
            bm.borrow_book(book_name)
        elif id == 3:
            review_name = input("请输入还书的书名")
            bm.review_book(review_name)
            pass
        elif id == 4:
            bm.search_book()
        elif id == 5:
            update_ID = input("请修改的书名ID")
            bm.update_book(update_ID)
        else:
            print("输入格式错误重新输入")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/556024
推荐阅读
相关标签
  

闽ICP备14008679号