zoukankan      html  css  js  c++  java
  • 20190318-使用类做一个简单的图书馆管理系统

    要求:使用类的形式做一个图书馆管理系统,实现借书,入库,还书,查书等功能。

    设计思路:

    第一步:先写一个书的类,来存储图书馆中最重要的组成部分书的信息管理,包括书名,书作者,书的所属类别,书的价格等

    class Book():
        '''书类,存储书名,作者,分类,价格等信息'''
        def __init__(self,name,author,classify,price):
            self.name = name
            self.author = author
            self.classify = classify
            self.price = price
        def get_bookinfo(self):
            print('书名:%s
    作者:%s
    分类:%s
    价格:%s'%(self.name,self.author,self.classify,self.price))
        def set_book_name(self,new_name):
            self.name = new_name
        def get_book_name(self):#获取书名
            return self.name
        def get_book_author(self):#获取书作者
            return self.author
        def get_book_classify(self):#获取书分类
            return self.classfiy
        def get_book_price(self):#获取书的价格
            return self.price

    第二步:因为单独一个类管理书籍信息,因此现在写一个图书馆主体类,写3个类变量,分别存储图书馆所有的图书(list)、尚未被借出的图书(list)、已被借出的图书(dict),并且使用序列化来存储信息编写算法如下:

    class Library():
        '''图书馆,实现借书,入库,还书,查书等功能,使用序列化存储书的实例'''
        import pickle as p
        with open(r'C:Users何发奋DesktopPython 习题instanceook_library.txt','rb') as f:#序列化信息存储地址
            try:
                book_total_library = p.load(f)#存储所有的书
                book_in_library =p.load(f)#存储未被借出的书
                out_library = p.load(f)#存储被借出的书的信息,包括借书人以及借书日期
            except:
                book_total_library = []
                book_in_library =[]
                out_library = {}
        def __init__(self,name,location):
            '''初始化图书馆'''
            self.name = name
            self.location = location

    第三步:写借书,入库,还书,查书等功能

    3.1 入库

    def add():
            '''加书'''
            import pickle as p
            book_name = input('请输入书名:')
            author_name = input('请输入author:')
            classify = input('请输入classify:')
            price = input('请输入price:')
            book = Book(book_name,author_name,classify,price)
            Library.book_total_library.append(book)
            Library.book_in_library.append(book)
            #将书籍加入本馆总库以及在库图书列表
            with open(r'C:Users何发奋DesktopPython 习题instanceook_library.txt','wb') as fp:
                p.dump(Library.book_total_library,fp)
                p.dump(Library.book_in_library,fp)
                p.dump(Library.out_library,fp)
            #将修改的数据记录入序列化

    3.2借书,借书的逻辑是

      step1:遍历本馆书库,查看是否有该书籍

      step2:遍历本馆可借书单,查看书籍是否已被借出

      step3:如果本馆有此书,并且未被借出,则出借该书,记录出借记录,否则提示本馆无此书,或者此书已经被出借

    def borrow(self,username,book_name):
            '''借书'''
            import pickle as p
            import time
            current_date = time.strftime('%Y-%m-%d',time.localtime())
            #print(Library.book_in_library)
            #print(Library.out_library)
            for book_object1 in Library.book_total_library:
                if book_object1.get_book_name() == book_name:
                    for book_object2 in Library.book_in_library:
                        #print(book_object2)
                        #print(book_object2.get_book_name())
                        if book_object2.get_book_name() ==book_name:
                            print('object2:',book_object2)
                            #查找图书在本馆,且未被借出
                            Library.out_library[book_object2] = (username,current_date)
                            #记录图书已经被借出,登记出借信息
                            Library.book_in_library.remove(book_object2)
                            #print(Library.book_in_library)
                            #print(Library.out_library)
                            #修改在库图书记录,记录当前图书已被借出,不在库
                            print('借书成功,请及时归还')
                            with open(r'C:Users何发奋DesktopPython 习题instanceook_library.txt','wb') as fp:
                                p.dump(Library.book_total_library,fp)
                                p.dump(Library.book_in_library,fp)
                                p.dump(Library.out_library,fp)
                                #序列化记录修改记录
                            print()
                            return
                    else:#本馆有此书,但是已被借走
                        print('您要的书已被借走,您可通过book_info查看已被借阅的信息')
                        print()
                        return
                    #如果图书在本馆,但是已被借出,提示已被借走
            else:
                print('您所要借阅的书本馆尚无,请去其他图书馆看看')
                print()
                #如果本馆无此图书,提示

    3.3还书,还书的逻辑为先查看出借记录,查看是否有对应的出借记录,如果有则收回书籍,修改在库记录,否则提示报错

    def lend(self,book_name):
            '''还书'''
            import pickle as p
            for book_object in Library.out_library.keys():
                print(book_object.get_book_name())
                if book_name ==book_object.get_book_name():
                    Library.book_in_library.append(book_object)
                    del Library.out_library[book_object]#删除出借记录
                    with open(r'C:Users何发奋DesktopPython 习题instanceook_library.txt','wb') as fp:
                        p.dump(Library.book_total_library,fp)
                        p.dump(Library.book_in_library,fp)
                        p.dump(Library.out_library,fp)
                    print('还书成功!')
                    print()
                    return
                    #如果查到对应的借出记录,则记录归还记录
            else:
                print('未查到借阅记录,请确认是否是在本馆借的书')
                print()
                #如果未查到对应的借出记录不做操作

    3.4查询功能,查书功能分3种,查询本馆所有的图书;查询本馆在库图书;查询本馆已被出借图书

    def info_all(self):#所有书籍
            import pickle as p
            if Library.book_total_library:
                print('*'*80)
                for item in Library.book_total_library:
                    item.get_bookinfo()
                    print('-'*80)
                print(' '*80)
        def info_ready(self):#在库书籍
            if Library.book_in_library:
                print('-'*80)
                for item in Library.book_in_library:
                    item.get_bookinfo()
                    print('-'*80)
                print(' '*80)
            else:
                print('当前无可借书籍')
                print(' '*80)
        def info_borrow(self):#已被出借书籍
            if Library.out_library:
                print('*'*80)
                for item in Library.out_library:
                    item.get_bookinfo()
                    print('-'*80)
                print(' '*80)
            else:
                print('无被借阅记录')
                print(' '*80)

    最后写程序的主体,也就是操作命令如下:

    if __name__ == '__main__':
        #import operator
        while 1:
            command = input('欢迎光临小何图书馆请输入命令:
    add:增加图书
    borrow:借阅图书
    lend:还书
    info_all:查看库中图书列表
    info_ready:查看在库图书列表
    info_borrow:查看借出图书列表
    search:查找图书
    exit:退出
    ')
            if command.strip().lower() == 'add':
                exec('xh_library.add()')
            elif command.strip().lower() == 'borrow':
                user_name = input('请输入用户名:')
                book_name = input('请输入书名:')
                temp = 'xh_library.borrow(%s,%s)'%(user_name,book_name)
                print(temp)
                exec('xh_library.borrow("%s","%s")'%(user_name,book_name))
            elif command.strip().lower() == 'lend':
                book_input = input('请输入要还的书名:')
                exec('xh_library.lend("%s")'% book_input)
            elif command.strip().lower() == 'info_all':
                exec('xh_library.info_all()')
            elif command.strip().lower() == 'info_ready':
                exec('xh_library.info_ready()')
            elif command.strip().lower() == 'info_borrow':
                #print('catch')
                exec('xh_library.info_borrow()')
            elif command.strip().lower() == 'exit':
                break

    尚未完全完善,待后续更新!

  • 相关阅读:
    洛谷P3959 宝藏(状压dp)
    洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
    洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)
    洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)
    洛谷P4768 [NOI2018]归程(克鲁斯卡尔重构树+最短路)
    hive3.1.1 hive-site.xml
    mysql 远程连接数据库的二种方法
    linux彻底干干净净完全卸载 mysql
    jdk环境变量配置
    Eclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10552029.html
Copyright © 2011-2022 走看看