当前位置:网站首页>图书管理系统
图书管理系统
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课设就只会到这一步不会进一步的改进,有所不好的地方多多包涵
边栏推荐
- Leetcode - 第2天
- Matlab: solution of folder locking problem
- Endnotex9 introduction and basic tutorial instructions
- 2022-02-28(1)
- Why is rpa+ low code a powerful tool to accelerate the digital transformation of finance?
- Leetcode-32- longest valid bracket
- 学习位段(1)
- Classes and objects (1)
- Top - k问题
- RPA+低代码为何是加速财务数字化转型之利器?
猜你喜欢

R语言相关文章、文献整理合集(持续更新)

Huawei equipment configuration hovpn

超标量处理器设计 姚永斌 第2章 Cache --2.4 小节摘录

科普 | NFT的类型有哪些(上)

Leetcode - 第2天

On the night of the joint commissioning, I beat up my colleagues

类和对象(4)

Nmap performs analysis of all network segment IP survivals in host detection

Building a custom CNN model: identifying covid-19
![[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?
随机推荐
Static PVC with CEPH CSI
JVM | runtime data area; Program counter (PC register);
[v2.1] automatic update system based on motion step API (repair bug, increase completion display, support disconnection reconnection and data compensation)
69. x的平方根
In the future, cloud expansion technology is expected to be selected as a specialized, special and new enterprise in Shanghai
每日一题 -- 验证回文串
Internet of things development practice 18 scenario linkage: how does an intelligent light perceive light? (I) (learning notes)
超標量處理器設計 姚永斌 第2章 Cache --2.4 小節摘錄
Servlet get form data
Flink error: multiple tasks are started, and only one task is executed
The upcoming launch of the industry's first retail digital innovation white paper unlocks the secret of full link digital success
The same efficiency tool for leading enterprises to promote smart finance. Let's have a quick look?
Addition without addition, subtraction, multiplication, Division
Huawei equipment configuration h-vpn
[niuke.com] DP30 [template] 01 Backpack
Top - k问题
Collection of articles and literatures related to R language (continuously updated)
C language to achieve eight sorts (2)
Optimization of quick sort
All features of polymorphism