admin管理员组

文章数量:1794759

图书管理系统(含完整代码)

图书管理系统(含完整代码)

目录

课题背景

一、主要研究内容

二、需求分析

1.功能性需求分析

2.非功能性需求分析

三、系统整体架构设计

四、相关代码

1.文件存储

1.1.存储用户信

1.2.存储图书信

2.密码保护

五、完整代码

1.图书借阅管理系统.py

 2.user.py

3.manager.py




课题背景

基于Python开发的一款图书借阅管理系统。


一、主要研究内容

本文的主要研究内容包括下面两个部分。

(1)文件存储

利用文件实现对用户信和图书信进行存储,管理员可以更直观的了解到用户信,而用户也可以查询到每本图书的动向。

(2)管理员

对管理员的密码进行了保护,在管理员输入密码的时候,可以实现一边输入密码,一边将输入的密码显示为星号。

二、需求分析 1.功能性需求分析

图书借阅管理系统有用户和管理员两个角色。这两个角色共用一个登录模块,这个登录模块会自动识别登录者的身份。

管理员角色只能有一个,用户角色可以有多个。

在登录成功后,如果角色是管理员,可以对用户信进行增删查改;退出程序。

在登录成功后,如果角色是用户,可以借阅图书,查看图书,归还图书;退出程序。

图书借阅管理系统可以将系统使用过程中产生的数据保存到文件中。

如果登录失败,则重新尝试登录。

(1)管理员

可以增加用户信,删除用户信,修改用户信,查询用户信。

(2)用户

可以借阅图书,归还图书,查询图书。

2.非功能性需求分析

本系统只能进行简单的进行用户增删查改和图书的借阅归还查看,而不能精确到具体那个人借了那本书。

三、系统整体架构设计

(1)登录

管理员和用户都可以进行登录,并且系统会对管理员密码进行加密处理,而用户密码则会不会被加密。

(2)注册

只能注册新用户而不能注册管理员,如果是该用户第一次使用该系统,那么该用户可以通过注册相关信从而实现登录系统。

(3)管理员登录

只有管理员才可以使用该功能,登录进去可以实现对用户信的增删查改

(4)图书界面

用户登录该界面后,可以在该界面选择相应的功能来实现借阅图书,归还图书和查看图书。

(5)用户界面

管理员登录到该界面后,可以选择在该界面选择相应的功能来实现增加用户信,删除用户信,修改用户信,查看用户信。

四、相关代码 1.文件存储 1.1.存储用户信

代码如下(示例):

# 登录 class DL: @staticmethod def EntryInfo(): flag = 3 while flag: print("----------登录界面:----------") name = input("账号:") pwd = input("密码:") q = 0 userlist.append(readallusers()) pwdlist.append(readallusers()) for a in range(len(userlist)): if name == userlist[a]: a1 = 1 for a2 in range(len(pwdlist)): if pwd == pwdlist[a]: b2 = 1 if a1 == 1 and b2 == 1: q += 1 print("登录成功!") user.YCD.menu2() return CD.menu() if q == 0: print("错误的账号或密码") flag -= 1 print("你还有", flag, "次机会") if flag == 0: sys.exit() # 注册 class ZC: @staticmethod def register(): global userlist name_data = ['傻', '蠢', '笨', '呆', '愚'] print("------------------注册界面------------------") name = str(input("注册的账号:")) # 检测账号中是否出现敏感词汇! while 1: a = 0 for p in name_data: for j in name: if j in p: newname = name.replace(j, '*') a += 1 print("账号", newname, "出现敏感词汇,请重新输入:") name = str(input("注册的账号:")) else: break # 检测密码是否符合要求! pwd = input("注册的密码:") while 1: # 检测密码长度是否合格! n = 0 if len(pwd) <= 6: d = 0 print("密码应不少于六位数!", end='') else: d = 1 # 检测密码的强度! for m in range(len(pwd)): if '0' <= pwd[m] <= '9': n += 1 if n < len(pwd): n = 0 else: print("密码强度不够!") k = pwd.isalpha() l = 0 if k: print("密码强度不够!") else: l += 1 if d == 1 and n == 0 and l != 0: with open('./yh.txt', 'a+', encoding='utf-8') as fp: fp.write(f'{name}:{pwd}\\n') fp.close() print(f'注册成功:用户名:{name}') CD.menu() pwd = input("注册的密码:") 1.2.存储图书信

代码如下(示例):

class GH: @staticmethod def GuiHuan(): h = str(input("请用户输入要归还的图书名称:")) with open('book.txt', 'a+', encoding='utf-8') as yhfile: yhfile.write(h + '\\n') print("添加成功!") 2.密码保护

代码如下(示例):

class GL: @staticmethod def manager1(): global userlist name1 = str(input("请输入管理员账号:")) print('请输入管理员密码:', end='', flush=True) li = [] while 1: ch = msvcrt.getch() # 回车 if ch == b'\\r': msvcrt.putch(b'\\n') # print('输入的密码是:%s' % b''.join(li).decode()) break # 退格 elif ch == b'\\x08': if li: li.pop() msvcrt.putch(b'\\b') msvcrt.putch(b' ') msvcrt.putch(b'\\b') # Esc elif ch == b'\\x1b': break else: li.append(ch) msvcrt.putch(b'*') # os.system('pause') while 1: if name1 == '张三' and li == [b'1', b'2', b'3', b'4', b'5', b'6']: print("登录成功!") if manager.GCD.menu1(): return CD.menu() else: print("登录页面调用出错") else: print("账号或密码错误,请重新输入:") return GL.manager1() 五、完整代码 1.图书借阅管理系统.py import sys import msvcrt # import os import manager import user userlist = [] # 存放所有的用户名 pwdlist = [] # 存放所有的用户密码 # 读取所有数据的方法 def readallusers(): # 读取所有的注册信 使用a+模式打开文件,在调整指针位置,防止文件不存在时报错 with open('./yh.txt', 'a+', encoding='utf-8') as fp: fp.seek(0) # 调整当前的的指针位置到文件头部 res = fp.readlines() # 按照每一行读取所有的用户数据 for i in res: # 循环读取的每一行数据 r = i.strip() # 处理每一个换行 admin:123\\n ==> admin:123 arr = r.split(':') # admin:123 ==> ['admin','123'] userlist.append(arr[0]) # 把用户名追加到 用户名列表中 pwdlist.append(arr[1]) # 把用户对应的密码 追加到 用户密码 列表中 fp.close() # 登录 class DL: @staticmethod def EntryInfo(): flag = 3 while flag: print("----------登录界面:----------") name = input("账号:") pwd = input("密码:") q = 0 userlist.append(readallusers()) pwdlist.append(readallusers()) for a in range(len(userlist)): if name == userlist[a]: a1 = 1 for a2 in range(len(pwdlist)): if pwd == pwdlist[a]: b2 = 1 if a1 == 1 and b2 == 1: q += 1 print("登录成功!") user.YCD.menu2() return CD.menu() if q == 0: print("错误的账号或密码") flag -= 1 print("你还有", flag, "次机会") if flag == 0: sys.exit() # 注册 class ZC: @staticmethod def register(): global userlist name_data = ['傻', '蠢', '笨', '呆', '愚'] print("------------------注册界面------------------") name = str(input("注册的账号:")) # 检测账号中是否出现敏感词汇! while 1: a = 0 for p in name_data: for j in name: if j in p: newname = name.replace(j, '*') a += 1 print("账号", newname, "出现敏感词汇,请重新输入:") name = str(input("注册的账号:")) else: break # 检测密码是否符合要求! pwd = input("注册的密码:") while 1: # 检测密码长度是否合格! n = 0 if len(pwd) <= 6: d = 0 print("密码应不少于六位数!", end='') else: d = 1 # 检测密码的强度! for m in range(len(pwd)): if '0' <= pwd[m] <= '9': n += 1 if n < len(pwd): n = 0 else: print("密码强度不够!") k = pwd.isalpha() l = 0 if k: print("密码强度不够!") else: l += 1 if d == 1 and n == 0 and l != 0: with open('./yh.txt', 'a+', encoding='utf-8') as fp: fp.write(f'{name}:{pwd}\\n') fp.close() print(f'注册成功:用户名:{name}') CD.menu() pwd = input("注册的密码:") # 退出 class TC: @staticmethod def exit1(): print("退出成功!") sys.exit() # 管理员登录 class GL: @staticmethod def manager1(): global userlist name1 = str(input("请输入管理员账号:")) print('请输入管理员密码:', end='', flush=True) li = [] while 1: ch = msvcrt.getch() # 回车 if ch == b'\\r': msvcrt.putch(b'\\n') # print('输入的密码是:%s' % b''.join(li).decode()) break # 退格 elif ch == b'\\x08': if li: li.pop() msvcrt.putch(b'\\b') msvcrt.putch(b' ') msvcrt.putch(b'\\b') # Esc elif ch == b'\\x1b': break else: li.append(ch) msvcrt.putch(b'*') # os.system('pause') while 1: if name1 == '张三' and li == [b'1', b'2', b'3', b'4', b'5', b'6']: print("登录成功!") if manager.GCD.menu1(): return CD.menu() else: print("登录页面调用出错") else: print("账号或密码错误,请重新输入:") return GL.manager1() # 菜单 class CD: @staticmethod def menu(): print("----------图书借阅管理系统----------") print("--------------1.登录--------------") print("--------------2.注册--------------") print("--------------3.退出--------------") print("------------4.管理员登录-----------") choice = int(input("请用户选择操作:")) if choice == 1: DL.EntryInfo() elif choice == 2: ZC.register() elif choice == 3: TC.exit1() else: GL.manager1() CD.menu()  2.user.py # 用户菜单 class YCD: @staticmethod def menu2(): print("--------%图书借阅界面%--------") print("--------1.借阅已有书籍--------") print("--------2.归还借阅书籍--------") print("--------3.查看现有书籍--------") print("--------4.退出用户界面--------") choice = int(input("请用户选择操作:")) if choice == 1: JY.borrow() return YCD.menu2() elif choice == 2: GH.GuiHuan() return YCD.menu2() elif choice == 3: CK.Check() return YCD.menu2() else: pass # 借阅 class JY: @staticmethod def borrow(): f = open('book.txt', 'r', encoding='utf-8') q = f.read() print(q) q = str(input("\\n请用户选择要借阅的图书:")) with open("book.txt", "r", encoding="utf-8") as f: lines = f.readlines() # print(lines) with open("book.txt", "w", encoding="utf-8") as f_w: for line in lines: if q in line: continue f_w.write(line) # 归还 class GH: @staticmethod def GuiHuan(): h = str(input("请用户输入要归还的图书名称:")) with open('book.txt', 'a+', encoding='utf-8') as yhfile: yhfile.write(h + '\\n') print("添加成功!") # 查看 class CK: @staticmethod def Check(): f = open('book.txt', 'r', encoding='utf-8') q = f.read() print(q) print("查询成功!") # YCD.menu2() 3.manager.py list1 = {'张三', '李四', '王五'} # 管理员菜单 class GCD: @staticmethod def menu1(): s2 = "欢迎使用图书馆借阅管理系统V2.10" print(s2.center(32, '-')) s3 = "--用户信维护页--" print(s3.center(36, ' ')) s4 = "1.添加用户信" print(s4.center(35, ' ')) s5 = "2.删除用户信" print(s5.center(35, ' ')) s6 = "3.修改用户信" print(s6.center(35, ' ')) s7 = "4.显示用户信" print(s7.center(35, ' ')) s8 = "5.退出系统" print(s8.center(36, ' ')) chose = int(input("请管理员选择操作:")) if chose == 1: TJ.Add() return GCD.menu1() elif chose == 2: SC.Delete() return GCD.menu1() elif chose == 3: XG.Alter() return GCD.menu1() elif chose == 4: XS.Show() return GCD.menu1() else: pass return True # 添加 class TJ: @staticmethod def Add(): print("------------添加用户信界面------------") a1 = str(input("请输入用户姓名:")) with open('yh1.txt', 'a+', encoding='utf-8') as yhfile: yhfile.write(a1 + '\\n') print("添加成功!") # 删除 class SC: @staticmethod def Delete(): print("------------删除用户信界面------------") a2 = str(input("请输入要删除的用户姓名:")) with open("yh1.txt", "r", encoding="utf-8") as f: lines = f.readlines() # print(lines) with open("yh1.txt", "w", encoding="utf-8") as f_w: for line in lines: if a2 in line: continue f_w.write(line) # 修改 class XG: @staticmethod def Alter(): print("------------添加修改信界面------------") a3 = str(input("请输入要修改的用户姓名:")) a4 = str(input("请输入修改后的用户姓名:")) with open("yh1.txt", "r", encoding="utf-8") as f: lines = f.readlines() # print(lines) with open("yh1.txt", "w", encoding="utf-8") as f_w: f_w.write(a4 + '\\n') for line in lines: if a3 in line: continue f_w.write(line) print("修改成功!") # 显示 class XS: @staticmethod def Show(): print("------------查询用户信界面------------") f = open('yh1.txt', 'r', encoding='utf-8') q = f.read() print(q) print("查询成功!") # GCD.menu1()

本文标签: 完整图书管理系统代码