用Python编写一个简易的图书管理系统

预期功能

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

用户的注册和登录

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

1
2
3
4
5
import sys

books = []
users = []
flag = False

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

1
2
3
4
5
6
7
8
9
10
11
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()代码如下:

1
2
3
4
5
6
7
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语句。代码如下所示:

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
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模块:

1
from prettytable import PrettyTable

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

  函数fun()代码如下:

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
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')

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

完整的图书管理系统代码

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
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编写一个简易的图书管理系统的全部内容。这个管理系统还有很多需要优化的地方,我会在后续逐渐改良。如果有什么好的想法,欢迎与我联系!
  我的邮箱:1398635912@qq.com