当前位置:网站首页>图书管理系统
图书管理系统
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课设就只会到这一步不会进一步的改进,有所不好的地方多多包涵
边栏推荐
- 超標量處理器設計 姚永斌 第2章 Cache --2.4 小節摘錄
- 网络连接正常但百度网页打不开显示无法访问此网站解决方案
- The upcoming launch of the industry's first retail digital innovation white paper unlocks the secret of full link digital success
- Huawei equipment configuration h-vpn
- 类和对象(1)
- 动态内存管理(1)
- Leetcode-32- longest valid bracket
- How to use the transaction code sat to find the name trial version of the background storage database table corresponding to a sapgui screen field
- Experiment 10 Bezier curve generation - experiment improvement - interactive generation of B-spline curve
- 快速排序的三种方法
猜你喜欢

ESP32C3 Arduino库使用方法

LaTex实战笔记 3-宏包与控制命令

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

Popular science | what are the types of NFT (Part 1)

Two methods to judge the storage of large and small end

类与对象(3)

206. reverse linked list

How does the chief financial officer of RPA find the "super entrance" of digital transformation?

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

【历史上的今天】6 月 11 日:蒙特卡罗方法的共同发明者出生;谷歌推出 Google 地球;谷歌收购 Waze
随机推荐
「大模型」之所短,「知识图谱」之所长
Why is rpa+ low code a powerful tool to accelerate the digital transformation of finance?
R language book learning 03 "in simple terms R language data analysis" - Chapter 12 support vector machine Chapter 13 neural network
ESP32C3 Arduino库使用方法
Huawei equipment configuration hovpn
常用分页方法总结
Learning bit segment (1)
C语言实现八种排序(2)
Daily question - Roman numeral to integer
In the future, cloud expansion technology is expected to be selected as a specialized, special and new enterprise in Shanghai
EndnoteX9简介及基本教程使用说明
Leetcode-110-balanced binary tree
How to use the transaction code sat to find the name trial version of the background storage database table corresponding to a sapgui screen field
The network connection is normal, but Baidu web page can not be opened and displayed. You can't access this website solution
[niuke.com] ky41 put apples
Top - K problem
LaTex实战笔记 3-宏包与控制命令
打印机无法打印测试页是什么原因
Take off efficiently! Can it be developed like this?
[niuke.com] DP30 [template] 01 Backpack