当前位置:网站首页>图书管理系统
图书管理系统
2022-06-11 21:45:00 【yjhklxx】
目录
1. 课程设计概述
1.1题目简介
根据python课程的要求以及个人的偏向,做出了一个大致的图书借阅管理系统,通过对学生和书籍信息的管理,让同学们能够接到相应的书籍
1.2设计目标
根据题目“图书借阅管理系统”,大致模拟的通过管理员,学生两个方向对信息进行操作,并可以是该系统可以完成题目所需要求,以及利用文件来对系统中的所有信息进行保存。
2.问题分析
2.1系统需求的描述:
由于本次程序是一个《图书管理系统》,所以要考虑登录与注册的功能,以及管理员,学生不同的身份登录可以执行那些操作。作为管理员要实现对书籍与学生所有信息的增删改查,同时将程序中所有的人员和书籍信息进行储存,将其存放在文件中。
2.2系统功能的确定

所有函数方法名称以及它的作用
其他的就不展示了
3.代码实现:
-*- coding:utf-8 -*- # 解决python Non-UTF-8的问题
import sys
import time
class Stu: # 学生信息的类
def __init__(self, number, name, sex, age): # 初始化
self.number = number
self.name = name
self.sex = sex
self.age = age
def __str__(self):
return f"\n姓名:{self.name}\n学号:{self.number}\n性别:{self.sex}\n年龄:{self.age}"
class Student: # 对学生信息进行修改的类
students = [] # 保存学生的信息类的列表
stu = []
name = []
number = []
sex = []
age = []
# 保存学生信息
def stu_save(self):
f = open("学生", 'w')
for i in self.students:
f.write(str(i))
f.close()
# 读取学生信息
def stu_du(self):
f = open("学生", 'r')
stu1 = f.read()
f.close()
stu1 = stu1.split()
for i in stu1:
stu2 = (i.split(':'))
self.stu.append(stu2[1])
self.name = self.stu[0::4]
self.number = self.stu[1::4]
self.sex = self.stu[2::4]
self.age = self.stu[3::4]
n = len(self.name)
for i in range(0, n):
b = Stu(self.number[i], self.name[i], self.sex[i], self.age[i])
self.students.append(b)
# 学生学号查重
def repeat(self, number):
for i in self.students:
if number == i.number:
number = input("该学号已有,请重新输入:")
number = self.repeat(number)
else:
return number
# 添加学生信息
def add(self):
while True:
number = input("需要添加学生的学号:")
number = self.repeat(number)
name = input("需要添加学生的姓名:")
sex = input("需要添加学生的性别:")
age = input("需要添加学生的年龄:")
self.students.append(Stu(number, name, sex, age))
print(f"学生{name}添加成功!")
print("是否继续:1.继续 0.不添加")
i = int(input("请输入:"))
if i == 0:
break
deng_stu()
# 删除学生信息
def det(self):
number = input("输入要删除学生的学号:")
for n in self.students:
if n.number == number:
self.students.remove(n)
print("删除成功")
break
else:
print("查无此学生")
deng_stu()
# 修改学生信息
def gai(self):
number = input("输入要修改学生的学号:")
for n in self.students:
if n.number == number:
name = input("需要添加学生的姓名:")
sex = input("需要添加学生的性别:")
age = input("需要添加学生的年龄:")
n.name = name
n.sex = sex
n.age = age
print("修改完成")
break
else:
print("查无此学生")
deng_stu()
# 查找学生信息
def cha(self):
number = input("输入要查找学生的学号:")
for n in self.students:
if n.number == number:
print(n)
break
else:
print("查无此学号")
deng_stu()
# 显示学生
def xian(self):
for n in self.students:
print(n)
deng_stu()
class Book: # 书的信息类
def __init__(self, name, author, state):
self.name = name
self.author = author
self.state = state # 判断书的状态0:借出 1:未借出
def __str__(self):
return f"书名:{self.name},作者:{self.author},状态:{self.state},"
class BookXiuGai: # 对书的信息进行修改的类
books = [] # 保存书的信息类的列表
book_list = []
name = []
aut = []
sta = []
# 保存书籍信息
def b_save(self):
f = open("书籍", 'w')
for i in self.books:
f.write(str(i))
f.close()
# 读取书籍信息
def b_du(self):
f = open("书籍", 'r')
book1 = f.read()
f.close()
book1 = book1.split(',')
while '' in book1:
book1.remove('')
for i in book1:
book2 = i.split(':')
self.book_list.append(book2[1])
self.name = self.book_list[0::3]
self.aut = self.book_list[1::3]
self.sta = self.book_list[2::3]
n = len(self.name)
for i in range(0, n):
b = Book(self.name[i], self.aut[i], self.sta[i])
self.books.append(b)
# 查看借的书
def look_book(self):
print("所借的书籍有:")
for book in self.books:
# book是Book类创建的对象
if book.state == '0':
print(f"《{book.name}》")
deng_book2()
# 添加书籍
def addBook(self):
name = input("需要添加书籍的名字:")
self.books.append(Book(name, input("作者:"), 1))
print(f"图书{name}添加成功!")
deng_book1()
# 删除书籍
def det(self):
name = input("需要删除书籍的名字")
for book in self.books:
if name == book.name:
self.books.remove(book)
break
deng_book1()
# 修改书籍
def gai(self):
name = input("需要修改的书籍的名字")
for book in self.books:
if name == book.name:
name = input("输入修改的名字:")
author = input("输入修改的作者:")
state = input("输入修改后的状态1(未借出)或0(借出)")
book.name = name
book.author = author
book.state = state
break
deng_book1()
# 查看书籍信息
def kan(self):
for book in self.books:
print(book)
deng_book1()
# 借书
def borrowBook(self):
name = input("借阅书籍名称:")
Books = self.checkBook(name)
print(Books)
# 判断书的状态
if Books:
if Books.state == '0':
print(f"书籍《{name}》已经借出!")
elif Books.state == '1':
print(f"书籍《{name}》借阅成功!")
Books.state = '0'
else:
print(f"书籍《{name}》不存在!")
deng_book2()
# 归还书籍
def return_book(self):
name = input("归还书籍名称:")
Books = self.checkBook(name)
if Books:
if Books.state == '1':
print(f"你没有借此书籍《{name}》!")
elif Books.state == '0':
print(f"书籍《{name}》归还成功!")
Books.state = '1'
else:
print(f"书籍《{name}》与借出的不一致!")
deng_book2()
def checkBook(self, name):
# 查找书籍是否存在
for book in self.books:
if book.name == name:
return book
else:
return print(f"你查询的书籍《{name}》不在系统中!请重新输入!")
def pan_save1():
print("正在对学生信息和书籍信息进行保存")
a = Student()
b = BookXiuGai()
for i in range(0, 15):
time.sleep(0.3)
print(">", end='')
a.stu_save()
b.b_save()
def pan_save2():
print("正在保存书籍信息")
b = BookXiuGai()
for i in range(0, 15):
time.sleep(0.3)
print(">", end='')
b.b_save()
def save(a, b): # 将注册的账号信息保存到文件里
f = open("账号", "a")
f.write(a + '\n')
f.write(b + '\n')
f.close()
def du(): # 读取文件里的账号信息
f = open("账号", "r")
text = f.read().split()
p = 1
for i in text:
if p % 2 != 0:
storage_name.append(i)
p += 1
else:
for n in storage_name:
if n not in storage_user:
storage_user[n] = i
p += 1
storage_name.clear()
f.close()
def zhu_ce(): # 系统注册界面
yi = True
while yi:
pan = True
while pan:
name = input('请输入用户名:')
name_list = list(name)
for i in name_list:
if i in s:
print("用户名不合法请重新输入:")
pan = True
break
else:
pan = False
password = input("输入密码不少于6位,需要有数字和字母:")
pan = True
while pan:
a = len(password)
if a < 6:
password = input("请重新输入密码不少于6位,需要有数字和字母:")
else:
if password.isdigit() or password.isalpha():
password = input("密码不能为纯数字或纯字母,请重新输入:")
else:
pan = False
storage_name.append(name)
for item in storage_name:
if item not in storage_user:
storage_user[item] = password
yi = False
save(name, password)
else:
print("用户名重复")
print("注册失败")
storage_name.clear()
break
deng_lu()
def deng_lu(): # 系统登陆界面
print("----------登入账号----------")
n1 = 0 # 记录密码错误次数
n2 = 0 # 记录账号错误次数
name = input('请输入用户名:')
pan = True
while pan:
if name in storage_user:
key = input('请输入密码:')
while pan:
if storage_user[name] == key:
print('登录成功')
pan = False
break
else:
n1 += 1
if n1 >= 3:
print("错误次数过多,强制退出此系统")
sys.exit()
print("密码错误,还有%d次机会" % (3 - n1))
key = input("请重新输入:")
else:
n2 += 1
if n2 >= 3:
print("错误次数过多,强制退出此系统")
sys.exit()
print("用户名错误,还有%d次机会" % (3 - n2))
name = input("请重新输入:")
def jie_begin(): # 系统开始界面
print("-" * 35)
print('----------欢迎您使用本系统------------')
print("-" * 35)
print("选择你的身份:1.学生 2.管理员 ")
i = int(input("请输入:"))
while True:
if i == 1:
student()
break
elif i == 2:
teacher()
break
else:
print("未知身份,请重新输入:")
def deng_xuan(): # 管理员对修改信息选择界面
print("请选择内容1.学生信息 2.书籍信息")
i = int(input("请输入:"))
while True:
if i == 1:
deng_stu()
break
elif i == 2:
deng_book1()
break
else:
i = int(input("无法识别,重新输入:"))
def deng_book1(): # 管理员对书的修改选择界面
print("选择:1.增 2.删 3.改 4.显 5.返回选择界面 0.退")
i = int(input("请输入:"))
while True:
if i == 1:
books.addBook()
break
elif i == 2:
books.det()
break
elif i == 3:
books.gai()
break
elif i == 4:
books.kan()
break
elif i == 5:
deng_xuan()
break
elif i == 0:
pan_save1()
print("退出成功")
break
else:
print("输入错误,请重新输入:")
def deng_book2(): # 学生关于书的选择界面
print("选择:1.借书 2.还书 3.查看借阅的书 0.退")
i = int(input("请输入:"))
while True:
if i == 1:
books.borrowBook()
break
elif i == 2:
books.return_book()
break
elif i == 3:
books.look_book()
break
elif i == 0:
pan_save2()
print("退出成功")
break
else:
print("输入错误,请重新输入:")
def deng_stu(): # 管理员修改学生信息选择界面
print("选择:1.增 2.删 3.改 4.查 5.显 6.返回选择界面 0.退")
i = int(input("请输入:"))
while True:
if i == 1:
w.add()
break
elif i == 2:
w.det()
break
elif i == 3:
w.gai()
break
elif i == 4:
w.cha()
break
elif i == 5:
w.xian()
break
elif i == 6:
deng_xuan()
break
elif i == 0:
pan_save1()
print("退出成功")
break
else:
print("输入错误,请重新输入:")
def student(): # 学生登陆界面
print("请选择:1.登录 2.注册 3.退出程序")
i = int(input("请输入:"))
while True:
if i == 1:
deng_lu()
deng_book2()
break
elif i == 2:
zhu_ce()
deng_book2()
break
elif i == 3:
print("退出成功")
break
else:
print("输入错误,请重新输入:")
def teacher(): # 管理员登录界面
print("请选择:1.登录 2.注册 3.退出程序")
i = int(input("请输入:"))
while True:
if i == 1:
deng_lu()
deng_xuan()
break
elif i == 2:
zhu_ce()
deng_xuan()
break
elif i == 3:
print("退出成功")
break
else:
print("输入错误,请重新输入:")
storage_name = [] # 用列表储存用户名
storage_user = {'yuan': 'yuan111'} # 用字典将用户名设为建 密码为值
s = ['傻', '蠢', '笨', '呆', '愚'] # 不能出现的字
du() # 读取文件里的账号信息
books = BookXiuGai()
books.b_du() # 输入基本书籍信息
w = Student()
w.stu_du() # 输入基本人物信息
jie_begin()4.运行结果
首先我们要先运行代码
进入程序,首先进入程序的选择界面然后进行登录

学生
总过有三次机会,全部用完会强制退出程序

注册也是同理输入三次不符合要求强制退出
登陆成功后进入功能选择界面


系统里的书是保存在文件里的书


退出是会保存书籍状态文件里的也会改变

管理员
登录与注册同上登陆成功后进入信息选择界面

信息的增加


因为文件里有学生信息所以系统里也有要防止学号重复
信息的删除和显示




信息的改变和查找



信息的保存
只要正常退出程序就能保存信息
管理员是对信息的保存

学生是对书籍信息的保存(书籍状态)

5.结论与不足
由于时间紧促不能写的很好有许许多多的问题望包涵,这里我没有对账号进行分类,管理员新增的学生信息,也不会让该学生的学号变成自己的账号,赋予初始密码学生在改等等一系列问题,也没有使用pyqt来编辑登录界面。有大量的不足。
因为我不打算主攻python所以这个python课设就只会到这一步不会进一步的改进,有所不好的地方多多包涵
边栏推荐
- Learning bit segment (1)
- 每日一题-删除有序数组的重复项
- Cdr2022 serial number coreldraw2022 green key
- 多态的所有特征
- The upcoming launch of the industry's first retail digital innovation white paper unlocks the secret of full link digital success
- Look for leap years and see how many leap years I have had since I was born (I have had five)
- RPA super automation | nongnongji and cloud expansion accelerate financial intelligent operation
- 每日一题 - 罗马数字转整数
- On the night of the joint commissioning, I beat up my colleagues
- [academic related] under the application review system, how difficult is it to study for a doctoral degree in a double first-class university?
猜你喜欢

Building a custom CNN model: identifying covid-19

Huawei equipment configuration h-vpn

Daily question - Roman numeral to integer

【历史上的今天】6 月 11 日:蒙特卡罗方法的共同发明者出生;谷歌推出 Google 地球;谷歌收购 Waze
![[academic related] under the application review system, how difficult is it to study for a doctoral degree in a double first-class university?](/img/cd/e7ffecbee13596f2298ee8c0a5b873.jpg)
[academic related] under the application review system, how difficult is it to study for a doctoral degree in a double first-class university?

JVM | virtual machine stack (local variable table; operand stack; dynamic link; method binding mechanism; method call; method return address)

Classes and objects (2)

Why is rpa+ low code a powerful tool to accelerate the digital transformation of finance?

Add anti debugging function to game or code (application level)

206.反转链表
随机推荐
Huawei equipment configuration hovpn
R language book learning 03 "in simple terms R language data analysis" - Chapter 12 support vector machine Chapter 13 neural network
JVM | local method interface; Native Method Stack
C language to achieve eight sorts (2)
go encoding包
67. 二进制求和
每日一题-删除有序数组的重复项
Parker plunger pump pv180r1k1t1nmmc
Custom implementation offsetof
win11怎么看电脑显卡信息
238.除自身以外数组的乘积
Leetcode-32- longest valid bracket
189. 轮转数组
效率起飞啊!还能这样开发的?
类和对象(4)
C语言实现八种排序(3)
Superscalar processor design yaoyongbin Chapter 2 cache -- Excerpt from subsection 2.4
Sword finger offer 29 Print matrix clockwise
【历史上的今天】6 月 11 日:蒙特卡罗方法的共同发明者出生;谷歌推出 Google 地球;谷歌收购 Waze
不使用加减乘除做加法