Python面向对象实现图书管理系统

# _*_coding:utf-8 _*_
"""
name: book1
date: 2018-07-23 8:05 AM  (无敌热的一天,40度,没空调没风扇)
author: jay
desc: 

功能描述:
   1.图书管理系统中的用户分为三类:管理员,已注册学生和未注册学生
   2.进入图书管理系统后首先选择身份,并且进行密码验证
     管理员的密码唯一且给定;
     学生的用户名和密码提前存储在字典中,以键和键值(键值对)的形式;
     输入密码错误提示重新输入;
     未注册学生先注册帐号,再进行登陆。
   3.管理员的功能有(1)显示所有图书(2)增加图书(3)退出,可以循环输入操作
   4.学生的功能有(1)显示所有图书(2)借书(3)还书(4)退出,可以循环输入操作

   面向对象,类,对象,描述:
   1.定义书类,保存书名,书的作者,书的数量(书的初始数量自由设定,大于0表示还有)和书所在的楼层
   2.定义identity类,定义两种用户的认证方法
   3.定义Menu类,定义两种用户的功能(静态方法),不用实例化对象就可调用
     管理员用户有(1)查看所有图书(2)查找图书(3)增加图书(4)退出系统 4个功能
     学生用户有 (1)查看所有图书(2)借阅图书(3)归还图书(4)退出系统 4个功能
   4.定义choice类,里边保存管理员和用户的各种方法(全部定义为静态)
   5.实例化书的对象,调用identity类中的方法
"""

class Book(object):
    def __init__(self, name, author, count, place):
        # 定义属性书名
        self.name = name
        # 定义属性书的作者
        self.author = author
        # 定义书的数量
        self.count = count
        # 定义书的位置,便于读者找到
        self.place = place

    def __str__(self):
        if self.count == 0:
            count = 'OUT'
        else:
            count ='IN'
        return '%s' %(self.name)


class identity(object):
    # 定义存储用户名和密码的字典
    StudentDict = {'lily': '123',
                   'lucy': '456',
                   'jay': '789'}

    # 定义静态方法选择身份
    @staticmethod
    def Choice():
        print '*' * 50
        print '\033[5;31;2m\t\t\t\t欢迎使用图书管理系统\033[0m\n'
        answer = raw_input('  请选择您的身份:[1] 管理员 [2] 学生帐号 [3] 注册帐号\n')
        if answer == '1':
            # 如果选择是1,调用管理员的验证函数
            identity.ManagerIdentity()
        elif answer == '3':
            # 如果选择是3,选择注册一个新的学生帐号,并调用验证函数登陆
            name = raw_input('注册新用户———请输入您的姓名:')
            code = raw_input('注册新用户———请输入您的密码:')
            identity.StudentDict[name] = code
            print '***您已成功注册图书管理系统学生用户,请登陆:***'
            identity.StudentIdentity()
        elif answer =='2':
            # 如果选择是2,调用学生用户的验证函数
            identity.StudentIdentity()
        else:
            print '***您的选择错误,不能登陆!***'

    # 定义类方法验证管理员信息,管理员的密码是123456,身份唯一
    @classmethod
    def ManagerIdentity(cls):
        # 管理员的验证函数
        passwd1 = raw_input('请输入您的密码:')
        print ''
        print '*' * 50
        if passwd1 == '123456':
            print '\033[5;31;2m\t\t您的身份是管理员,欢迎进入图书管理系统\033[0m'
            Menu.ManagerMenu()
        else:
            print '您的密码错误!请重新输入:'
            cls.ManagerIdentity()

    # 定义类方法验证学生信息
    @classmethod
    def StudentIdentity(cls):
        # 学生信息的验证函数
        username =raw_input('请输入您的帐号:')
        passwd2 = raw_input('请输入您的密码:')
        print ' '
        print '*' * 50
        for key in cls.StudentDict:
            if (key == username and cls.StudentDict[key] == passwd2):
                print '\033[5;31;2m\t\t您的身份是学生,欢迎您进入图书管理系统\033[0m'
                Menu.StudentMenu()
                return
        print '您的用户名或身份不正确!请重新输入:'
        cls.StudentIdentity()


class Menu(object):
    # 定义菜单类,学生和管理员有不同的选择
    @staticmethod
    def StudentMenu():
        # 定义学生选择菜单函数,这是静态方法,不用实例化对象即可调用
        print ''
        print '[1]查看所有藏书\n'
        print '[2]借阅图书\n'
        print '[3]归还图书\n'
        print '[0]退出系统\n'
        while True:
            studentchoice = raw_input('请选择您要进行的操作:')
            if studentchoice == '1':
                # 学生查看所有图书部分
                choice.StudentSee()
            elif studentchoice =='2':
                # 学生借书部分
                choice.StudentBorrow()
            elif studentchoice == '3':
                choice.StudentGive()
            elif studentchoice =='0':
                # 学生退出菜单部分
                print ''
                print '\033[5;31;2m***欢迎再次使用图书管理系统***\033[0m'
                break
            else:
                print '您的输入不正确,请输入[1]查看所有藏书[2]借书[3]还书[0]退出系统\n'


    @staticmethod
    def ManagerMenu():
        # 定义管理员选择菜单函数
        print ''
        print '[1]查看所有藏书\n'
        print '[2]查询图书\n'
        print '[3]增加图书\n'
        print '[0]退出系统\n'
        while True:
            managerchoice = raw_input('请选择您要进行的操作:')
            if managerchoice == '1':
                # 管理员查看图书部分
                choice.StudentSee()
            elif managerchoice == '2':
                # 管理员查询图书部分
                choice.ManagerFind()
            elif managerchoice == '3':
                # 管理员增加图书部分
                choice.ManagerAdd()
            elif managerchoice == '0':
                # 退出菜单部分
                print ''
                print '\033[5;31;2m***欢迎再次使用图书管理系统***\033[0m'
                break
            else:
                print '您的输入不正确,请输入[1]查看所有图书[2]查询图书[3]增加图书[0]退出系统\n'



class choice(object):

    # 增加图书
    @staticmethod
    def ManagerAdd():
        name = raw_input('请输入书籍的名称:')
        author = raw_input('请输入书的作者:')
        count = raw_input('请输入书的数量:')
        place = raw_input('请输入书所在的楼层:')

        BookList.append(Book(name, author, count, place))
        print '%s 添加成功!' % name
        print ''
        print '图书馆所有的书籍有:'
        # 调用StudentSee方法,显示图书馆中所有的书
        choice.StudentSee()

    # 查询图书
    @staticmethod
    def ManagerFind():
        name = raw_input('请输入要查询的书名:')
        for book in BookList:
            if name == book.name :
                print '《%s》 作者:%s  数量:%s  楼层:%s!' % (name,book.author,book.count,book.place)
                return book
        else:
            print '《%s》没有找到!' % name
            return None
    # 遍历图书馆中的所有书
    @staticmethod
    def StudentSee():
        print '图书馆中所有的书有:'
        for book in BookList:
            print '《%s》 作者:%s \t数量:%s \t楼层:%s '% (book,book.author,book.count,book.place)

    # 学生借书部分
    @staticmethod
    def StudentBorrow():
        name = raw_input('请输入您想借阅的书名:')
        BookResult = choice.ManagerFind()
        if BookResult:
            if BookResult.count == 0 or BookResult.count < 0:
                print '***该书已经被借出,请稍后再来!***'
            else:
                BookResult.count > 0
                print '您已成功借到《%s》...' % (name)
                BookResult.count  -= 1

        else:
            print '抱歉,图书馆暂时没有《%s》这本书...' % name

    # 学生还书部分
    @staticmethod
    def StudentGive():
        name = raw_input('请输入您要归还的书名:')
        BookResult1 = choice.ManagerFind()
        BookResult1.count += 1
        print '您的书已经归还成功,欢迎下次使用...'

# 类外主程序部分
# 定义一个存放书籍信息的列表
BookList = []

# 实例化初始书籍信息,存放在列表中
book1 = BookList.append(Book('C语言设计','齐朝怡',5,'1Floor'))
book2 = BookList.append(Book('人机交互','周杰伦',2, '2Floor'))
book3 = BookList.append(Book('数据库','方文山',1,'3Floor'))

# 调用identity类中的静态方法
identity.Choice()

如果有看到我博客的小可爱,觉得这个管理系统有任何不足之处,可以给我留言呦~

猜你喜欢

转载自blog.csdn.net/jay_youth/article/details/81185320