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

这篇具有很好参考价值的文章主要介绍了图书管理系统(含完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

课题背景

一、主要研究内容

二、需求分析

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.存储用户信息

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

代码如下(示例):文章来源地址https://www.toymoban.com/news/detail-463091.html

# 登录
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()

到了这里,关于图书管理系统(含完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 期末大作业图书管理系统(c++)源代码

    功能展示 运行效果 : 主界面: 图书管理界面: 读者管理界面: 借还书管理界面:

    2024年02月11日
    浏览(62)
  • PHP-MySQL图书管理系统(附源代码)

    本系统采用phpstudy开发平台,采用PHP和MySQL数据库进行开发,开发工具为HBuilder。phpStudy是一个PHP调试环境的程序集成最新的 Apache+PHP+MySQL+phpMyAdmin,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。(其他平台均可)@@@文末有获取方式 功能: 图书部分: 图书录入

    2024年02月11日
    浏览(44)
  • 数据库原理课程设计/图书借阅管理系统代码与word(sql server)

    图 书 借 阅 管 理 系 统 ——数据库实践课程设计实验 注:图为word插入自带的,表格为excel表格先制作后复制粘贴到word的,代码为高亮处理后的代码块 目录 第一章  设计背景与需求分析 1.1  设计需求 1.2  设计背景 1.2.1  图书管理的现状   1.2.2  选题的目的、意义    1.3

    2024年02月06日
    浏览(62)
  • django的简易的图书管理系统jsp书店进销存源代码MySQL

    本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 django的简易的图书管理系统 系统有1权限:管理员 用所技术 python3.10 django mysql5.6 注册登录和书籍信息的增删

    2024年02月11日
    浏览(52)
  • 【大学生体质】图书管理系统(Vue+SpringBoot2)-完整部署教程【课设OR毕设提供API接口文档、数据库文件、README.MD、部署视频】

    本项目拥有完整的API后台接口文档(文尾) 项目部署视频正在录制 如果项目对您有所帮助,可以Star⭐一下,受到鼓励的我会继续加油。 项目在线演示地址 项目前端地址 项目后端地址 项目部署视频 ☃️前端主要技术栈 技术 作用 版本 Vue 提供前端交互 2.6.14 Vue-Router 路由式编

    2024年01月18日
    浏览(54)
  • 基于java的图书借阅管理系统设计与实现(源代码+数据库+部署文档+部署视频)

           图书管理系统 该系统对数据进行保存、修改、删除等管理。为用户提供了一个友好、简单快捷的运行操作平台。该统对数据进行保存、修改、删除等管理,为用户提供了一个友好、简单快捷的运行操作平台。本系统的各界面设计友好、流程正确、功能也较为完善,

    2024年02月03日
    浏览(55)
  • 【Java】学生管理系统-登录、注册、CRUD(附完整代码)

    为学生管理系统书写一个登陆、注册、忘记密码的功能。 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。 采取控制台的方式去书写学生管理系统。 属性:id、姓名、年龄、家庭住址 属性:用户名、密码、身份证号码、手机号码 1,用户名需要满足以

    2024年02月03日
    浏览(45)
  • 使用C++实现的学生成绩管理系统(附完整代码)

    学生成绩管理系统可以录入、查询、修改学生的成绩,它包括:信息条目序号、学生姓名、课程名称、课程学分数、学生该课程的成绩(百分制成绩, 等级制成绩,绩点)。学生成绩管理系统能够提供以下功能: 1)录入学生的成绩信息:从键盘输入数据,依次输入:学生姓

    2024年02月06日
    浏览(38)
  • 前后端分离项目-基于springboot+vue的图书馆管理系统的设计与实现(内含代码+文档+报告)

    博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅 由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。 🍅 2023年

    2024年02月07日
    浏览(48)
  • C语言课程设计|通讯录管理系统(含完整代码)

    目录 菜单功能 录入联系人信息功能 查看系统中全部信息功能 查看单个信息功能 删除全部信息功能 删除单个信息功能 修改信息功能 完整代码 在长达一个多月的学习过程中,终于将C语言学完,因此专门写一个C语言课程设计来检验这一个多月的学习成果,由于写的比较急,

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包