预期功能

  1.本系统包括登录主界面、管理系统主界面以及各功能分支界面。
  2.登录界面可以实现用户注册、用户登录和退出程序的功能。
  3.管理系统主界面可以实现增加书籍、删除书籍、查阅书籍信息、修改书籍信息、查看所有书籍信息、返回登录界面和退出程序的功能。其中书籍信息包括书名、作者、出版社、定价和数目。

用户的注册和登录

  在编写程序之前,我们需要导入sys库,并且创建两个空列表booksusers,用来存储书籍和用户的信息。除此之外,我们还需要设置一个标志flag,用来判断用户是否成功登录系统。

import sys

books = []
users = []
flag = False

  我们编写两个函数login()register(),分别用来实现用户的注册和登录的功能。
  函数login()代码如下:

def login():
    print('请输入用户名:', end='')
    username = input()
    print('请输入密码:', end='')
    password = input()
    if [username, password] in users:
        print('\033[0;32m登录成功!\033[0m')
        flag = True
        fun()
    else:
        print('\033[0;31m用户名或密码错误!请重新登录!\033[0m')

  函数register()代码如下:

def register():
    print('请输入用户名:', end='')
    username = input()
    print('请输入密码:', end='')
    password = input()
    users.append([username, password])
    print('\033[0;32m注册成功!\033[0m')

注:上述代码中的\033[0;32m及类似代码表示设定字体样式和颜色,语法为\033[显示方式;前景色;背景色m。函数login()中调用了函数fun(),后者是管理系统主界面函数,会在下面提到。

登录主界面

  登录界面中,我们需要考虑到用户的错误输入的相关处理。最好的方法是使用try-except语句。代码如下所示:

def main():
    while True:
        print('\n\n')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        print('*************欢迎来到图书管理系统*************')
        print('************Made by Chen Chunhan************')
        print('********************************************')
        print('*************** 1.Log in     ***************')
        print('*************** 2.Register   ***************')
        print('*************** 0.Exit       ***************')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        try:
            num = int(input('请输入对应的数字:'))
            if num == 1:
                login()
            elif num == 2:
                register()
            elif num == 0:
                print('\033[0;36m再见!\033[0m')
                sys.exit(0)
            else:
                print('\033[0;31m输入错误!请重新输入!\033[0m')
        except ValueError:
            print('\033[0;31m输入错误!请重新输入!\033[0m')

管理系统主界面

  管理系统中有增加书籍、删除书籍、查阅书籍信息、修改书籍信息、查看所有书籍信息、返回登录界面和退出程序七大功能。我们之前提到,书籍的信息是通过列表来存储的,在管理系统主界面函数中,这一点将得到很好的体现。程序的代码实现比较简单,在此不再赘述。
  我们定义管理系统主界面的函数fun()。因为main()已经被用过了,我也想不出有什么更好的名字,姑且用fun()来将就一下。在fun()中,我们也要用到try-except语句来对可能出现的用户错误输入进行处理。
  其中,在“查看所有书籍信息”的时候,我们需要把所有书籍信息按表格的形式输出,这样显得更加简洁直观。为实现这个功能,我们在程序开头导入第三方库prettytable中的PrettyTable模块:

from prettytable import PrettyTable

在这里,笔者使用的是Anaconda。对于第三方库prettytable的安装,我们在开始菜单中找到Anaconda Prompt,单击鼠标右键→更多→以管理员身份运行,输入命令pip install prettytable,等待安装完成即可。安装后,我们可以运行代码import prettytable,如果没有报错即为安装成功。

  函数fun()代码如下:

def fun():
    while True:
        print('\n\n')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        print('**********  1.More Books          **********')
        print('**********  2.Delete Books        **********')
        print('**********  3.Search for Books    **********')
        print('**********  4.Change Information  **********')
        print('**********  5.View All Books      **********')
        print('**********  6.Back to Main Menu   **********')
        print('**********  0.Exit                **********')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        try:
            num = int(input('请输入对应的数字:'))
            print('\n')
            if num == 1:
                bookname = input('请输入书名:')
                author = input('请输入作者:')
                press = input('请输入出版社:')
                price = input('请输入书籍定价:')
                amount = input('请输入书籍数目:')
                books.append([bookname, author, press, price, amount])
                print('\n\033[0;32m添加书籍成功!\033[0m')
            elif num == 2:
                bookname = input('请输入书名:')
                author = input('请输入作者:')
                press = input('请输入出版社:')
                price = input('请输入书籍定价:')
                amount = input('请输入书籍数目:')
                if [bookname, author, press, price, amount] in books:
                    books.remove([bookname, author, press, price, amount])
                    print('\n\033[0;32m删除书籍成功!\033[0m')
                else:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
            elif num == 3:
                bookname = input('请输入书名:')
                j = 0
                for i in books:
                    if i[0] == bookname:
                        j = 1
                        print('书名:', i[0])
                        print('作者:', i[1])
                        print('出版社:', i[2])
                        print('定价:', i[3])
                        print('数目:', i[4])
                if j == 0:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
                print('\n查找结束\n')
            elif num == 4:
                bookname = input('请输入要修改的书名:')
                author = input('请输入要修改的作者:')
                press = input('请输入要修改的出版社:')
                price = input('请输入要修改的书籍定价:')
                amount = input('请输入要修改的书籍数目:')
                if [bookname, author, press, price, amount] in books:
                    books.remove([bookname, author, press, price, amount])
                    bookname = input('请输入修改后的书名:')
                    author = input('请输入修改后的作者:')
                    press = input('请输入修改后的出版社:')
                    price = input('请输入修改后的书籍定价:')
                    amount = input('请输入修改后的书籍数目:')
                    books.append([bookname, author, press, price, amount])
                    print('\n\033[0;32m修改书籍成功!\033[0m')
                else:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
            elif num == 5:
                table = PrettyTable(['书名', '作者', '出版社', '定价', '数目'])
                for i in books:
                    table.add_row(i)
                print(table)
            elif num == 6:
                main()
            elif num == 0:
                print('\033[0;36m再见!\033[0m')
                sys.exit(0)
            else:
                print('\033[0;31m输入错误!请重新输入!\033[0m')
        except ValueError:
            print('\033[0;31m输入错误!请重新输入!\033[0m')

  到此,对于这个程序的所有功能,我们都编写了对应的函数来实现。

完整的图书管理系统代码

import sys
from prettytable import PrettyTable

books = []
users = []
flag = False


def login():
    print('请输入用户名:', end='')
    username = input()
    print('请输入密码:', end='')
    password = input()
    if [username, password] in users:
        print('\033[0;32m登录成功!\033[0m')
        flag = True
        fun()
    else:
        print('\033[0;31m用户名或密码错误!请重新登录!\033[0m')


def register():
    print('请输入用户名:', end='')
    username = input()
    print('请输入密码:', end='')
    password = input()
    users.append([username, password])
    print('\033[0;32m注册成功!\033[0m')


def main():
    while True:
        print('\n\n')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        print('*************欢迎来到图书管理系统*************')
        print('************Made by Chen Chunhan************')
        print('********************************************')
        print('*************** 1.Log in     ***************')
        print('*************** 2.Register   ***************')
        print('*************** 0.Exit       ***************')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        try:
            num = int(input('请输入对应的数字:'))
            if num == 1:
                login()
            elif num == 2:
                register()
            elif num == 0:
                print('\033[0;36m再见!\033[0m')
                sys.exit(0)
            else:
                print('\033[0;31m输入错误!请重新输入!\033[0m')
        except ValueError:
            print('\033[0;31m输入错误!请重新输入!\033[0m')


def fun():
    while True:
        print('\n\n')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        print('**********  1.More Books          **********')
        print('**********  2.Delete Books        **********')
        print('**********  3.Search for Books    **********')
        print('**********  4.Change Information  **********')
        print('**********  5.View All Books      **********')
        print('**********  6.Back to Main Menu   **********')
        print('**********  0.Exit                **********')
        print('********************************************')
        print('********************************************')
        print('********************************************')
        try:
            num = int(input('请输入对应的数字:'))
            print('\n')
            if num == 1:
                bookname = input('请输入书名:')
                author = input('请输入作者:')
                press = input('请输入出版社:')
                price = input('请输入书籍定价:')
                amount = input('请输入书籍数目:')
                books.append([bookname, author, press, price, amount])
                print('\n\033[0;32m添加书籍成功!\033[0m')
            elif num == 2:
                bookname = input('请输入书名:')
                author = input('请输入作者:')
                press = input('请输入出版社:')
                price = input('请输入书籍定价:')
                amount = input('请输入书籍数目:')
                if [bookname, author, press, price, amount] in books:
                    books.remove([bookname, author, press, price, amount])
                    print('\n\033[0;32m删除书籍成功!\033[0m')
                else:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
            elif num == 3:
                bookname = input('请输入书名:')
                j = 0
                for i in books:
                    if i[0] == bookname:
                        j = 1
                        print('书名:', i[0])
                        print('作者:', i[1])
                        print('出版社:', i[2])
                        print('定价:', i[3])
                        print('数目:', i[4])
                if j == 0:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
                print('\n查找结束\n')
            elif num == 4:
                bookname = input('请输入要修改的书名:')
                author = input('请输入要修改的作者:')
                press = input('请输入要修改的出版社:')
                price = input('请输入要修改的书籍定价:')
                amount = input('请输入要修改的书籍数目:')
                if [bookname, author, press, price, amount] in books:
                    books.remove([bookname, author, press, price, amount])
                    bookname = input('请输入修改后的书名:')
                    author = input('请输入修改后的作者:')
                    press = input('请输入修改后的出版社:')
                    price = input('请输入修改后的书籍定价:')
                    amount = input('请输入修改后的书籍数目:')
                    books.append([bookname, author, press, price, amount])
                    print('\n\033[0;32m修改书籍成功!\033[0m')
                else:
                    print('\n\033[0;31m该书籍不存在!自动返回...\033[0m')
            elif num == 5:
                table = PrettyTable(['书名', '作者', '出版社', '定价', '数目'])
                for i in books:
                    table.add_row(i)
                print(table)
            elif num == 6:
                main()
            elif num == 0:
                print('\033[0;36m再见!\033[0m')
                sys.exit(0)
            else:
                print('\033[0;31m输入错误!请重新输入!\033[0m')
        except ValueError:
            print('\033[0;31m输入错误!请重新输入!\033[0m')


main()

  这里不便给出运行实例,大家可以自己试一试。

写在最后

  以上就是用Python编写一个简易的图书管理系统的全部内容。这个管理系统还有很多需要优化的地方,我会在后续逐渐改良。