用Python实现一个图书管理系统(附带源码)

目录

一、题目信息

二、分析

三、主函数

四、总结


一、题目信息

实现一个图书管理系统,要求有学生信息管理、图书信息管理和图书借阅管理三大功能。

二、分析

创建一个LMS类

class LMS():
    def __init__(self, Lname):
        self.Lname = Lname
        self.Student = []
        self.Books = {}
        self.BowBooks = {}
        print(Lname, '开馆了')

1.学生信息管理:具有添加学生和删除学生两个功能,并将学生存在Student列表中。在删除学生时,如果学生还有未归还书籍则无法删除。

# 学生信息管理
def AddStudent(self, Sname):
    if Sname in self.Student:
        print('学生已存在')
    else:
        self.Student.append(Sname)
        print('学生', Sname, '已添加成功')

def DelStudent(self, Sname):
    if Sname in self.BowBooks.keys():
        print('该学生还未归在本馆借阅的图书!')
        return
    if Sname not in self.Student:
        print('学生不存在!')
    else:
        self.Student.remove(Sname)
        print('学生', Sname, '已删除成功')

2.图书信息管理:具有添加图书和删除图书两个功能,并将图书存在Books字典中。添加和删除图书时都需要输入书名和书的数量。

# 图书信息管理
def AddBook(self, Bname, num=1):
    num = int(num)
    if Bname in self.Books.keys():
        self.Books[Bname] += num
    else:
        self.Books[Bname] = num
    print('已成功添加', num, '本', Bname)

def DelBook(self, Bname, num):
    num = int(num)
    if Bname in self.Books.keys():
        if self.Books[Bname] <= num or num == -1:
            self.Books.pop(Bname)
            print('图书', Bname, '已删除成功')
        else:
            self.Books[Bname] -= num
            print('已成功删除', num, '本', Bname)
            print('图书', Bname, '现有库存', self.Books[Bname], '本')
    else:
        print('图书', Bname, '不存在')

3.图书借阅管理:具有借阅图书和归还图书两个功能,并将借阅人、借阅图书、借阅数量都存在BowBooks字典中。借书时,学生输入自己的姓名、所借书名和借书数量,然后系统会检查图书馆中是否记录了这个学生,如果系统中没有这个学生,那么该学生就不能借书。学生结束成功后,系统会将学生记录到BowBooks字典中,当学生还书后会自动删除。

# 图书借阅管理
def BowBook(self, Sname, Bname, num):
    num = int(num)
    if Sname not in self.Student:
        print('学生未添加')
        return
    if Bname in self.Books.keys():
        if self.Books[Bname] < num:
            print('库存不足!')
        else:
            self.Books[Bname] -= num
            if Sname in self.BowBooks.keys():
                if Bname in self.BowBooks[Sname].keys():
                    self.BowBooks[Sname][Bname] += num
                else:
                    self.BowBooks[Sname][Bname] = num
            else:
                self.BowBooks[Sname] = {
                    Bname: num
                }
            print(Sname, '已成功借出', num, '本', Bname)
            if self.Books[Bname] == 0:
                self.Books.pop(Bname)
                print('图书', Bname, '已全部借出')
            else:
                print('图书', Bname, '现有库存', self.Books[Bname], '本')
    else:
        print('图书', Bname, '不存在')

def GiveBook(self, Sname, Bname, num):
    num = int(num)
    if Sname not in self.BowBooks.keys():
        print('您未在本图书馆借过书')
        return
    if Bname in self.BowBooks[Sname].keys():
        if Bname in self.Books.keys():
            self.Books[Bname] += num
            print(Sname, '已成功归还', num, '本', Bname)
        else:
            self.Books[Bname] = num
            print(Sname, '已成功归还', num, '本', Bname)
        self.BowBooks[Sname][Bname] -= num
        if self.BowBooks[Sname][Bname] == 0:
            self.BowBooks[Sname].pop(Bname)
        if len(self.BowBooks[Sname]) == 0:
            self.BowBooks.pop(Sname)
    else:
        print('您没有在本图书馆借过这本书')

4.查看功能:通过Look函数使用者可以查看当前图书馆的在馆学生、图书库存和借阅人信息。

# 查看
def Look(self):

    if len(self.Student) == 0:
        print('当前没有学生在馆内。')
    else:
        print('当前在馆学生:')
        print(self.Student)
        print('共', len(self.Student), '人')
    if len(self.Books) == 0:
        print('当前没有藏书。')
    else:
        print('当前馆藏图书:')
        print(self.Books)
    if len(self.BowBooks) == 0:
        print('当前未外借图书')
    else:
        print('当前已借阅图书:')
        print(self.BowBooks)

5.错误捕获,当使用者输入不符合不正确的命令时,系统会报错,并给出相应的提示。

三、主函数

if __name__ == '__main__':
    HeNanLibrary = LMS('HeNanLibrary')
    while True:
        try:
            cont = input('请输入操作命令:')
            if cont == 'AddBook':
                Bname = input('请输入书名:')
                num = input('请输入增加的数目:')
                HeNanLibrary.AddBook(Bname, num)
            elif cont == 'DelBook':
                Bname = input('请输入想要删除的书名:')
                num = int(input('请输入删除的数目:'))
                HeNanLibrary.DelBook(Bname, num)
            elif cont == 'AddStudent':
                Sname = input('请输入学生姓名:')
                HeNanLibrary.AddStudent(Sname)
            elif cont == 'DelStudent':
                Sname = input('请输入学生姓名:')
                HeNanLibrary.DelStudent(Sname)
            elif cont == 'BowBook':
                Sname = input('请输入借书人姓名:')
                Bname = input('请输入书名:')
                num = input('请输入借书数目:')
                HeNanLibrary.BowBook(Sname, Bname, num)
            elif cont == 'GiveBook':
                Sname = input('请输入还书人姓名:')
                Bname = input('请输入书名:')
                num = input('请输入还书数目:')
                HeNanLibrary.GiveBook(Sname, Bname, num)
            elif cont == 'Look':
                HeNanLibrary.Look()
            elif cont == 'exit':
                break
            else:
                print('请输入正确的操作命令!')
        except Exception:
            print('输入错误!')

四、总结

        设计系统时采用面向对象的思想会大幅度减轻工作量。就拿图书馆系系统来说,采用面向对象的设计方法会清楚的将系统分为三个模块:学生信息管理、图书信息管理和图书借阅管理,然后再依次实现各个模块的功能。三个主要功能实现之后可以再添加一些小功能来丰富系统。比如通过添加异常捕获来提高系统的健壮性。

  • 25
    点赞
  • 298
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐喽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值