基于Python的图书馆管理系统的开发

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

开发工具:python3.10

图书馆管理系统python,数据库

数据库:Python内置的SQLite3数据库,SQLite是一种嵌入式数据库,体积很小,它的数据库就是一个文件。本文建立了Library数据库,存储系统内的管理员、图书、读者、借阅相关信息。

1  绪论

        传统人工方式管理文件档案存在着许多缺点,如:效率低、保密性差等,而且随着时间的积累,将产生大量的文件和数据,这对于查找、更新和维护都带来了不便。随着科学技术的不断提高,互联网与计算机技术的日渐成熟,为我们共享数据提供了前所未有的方便。作为计算机应用的一部分,使用计算机对图书馆进行管理具有手工管理无法比拟的优点,如:检索迅速、查找方便、可靠性高,存储量大、保密性好、寿命长、成本低等,这些优点能够极大的提高图书信息、读者信息管理的效率,也是科学化、正规化的体现。

        本次开发的图书馆管理系统主要包括以下四大模块:(1)个人信息管理,包括查看个人信息以及修改个人信息,可对登录密码等个人信息进行修改。(2)图书信息管理,可对图书信息进行增、删、改、查、浏览操作。(3)读者信息管理,涉及读者信息的增、删、改、查、浏览操作。(4)查看借阅信息,可查看借阅时间、借阅读者借书证号等信息。

2  需求分析

2.1  功能分析

根据用户调查,系统应有以下功能需求:

(1)管理员使用工作证号进行注册,完成注册后可根据工作证号和密码登录系统。

(2)管理员查看、修改个人信息,包括手机号、家庭住址、登录密码等。

(3)图书的信息管理:包括添加、删除、信息修改、浏览、查询等。

(4)读者的信息管理:包括添加、删除、信息修改、浏览、查询等。

(5)查看借阅信息,并可分别依据图书ID、借书证号、借阅时间、归还时间进行查询;也可以依据图书ID和借书证号的组合查询相关纪录。

2.2  技术分析

        系统采用Python语言设计实现,使用python3.10为开发工具,利用Python内置的SQLite3数据库建立了Library数据库。使用Python自带的tkinter模块,tkinter模块是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。使用了os模块,os模块提供了各种 Python 程序与操作系统进行交互的接口,通过os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。

3  总体设计

3.1  功能设计

图书馆管理系统python,数据库

3.2  数据库设计

图书馆管理系统python,数据库

4  详细设计

4.1  注册模块程序流程图

图书馆管理系统python,数据库

4.2  登录模块程序流程图

图书馆管理系统python,数据库

5  系统实现

5.1  登录、注册功能

(1)注册测试:

图书馆管理系统python,数据库

(2)登录测试:

图书馆管理系统python,数据库

(3)相关代码如下:

path = os.getenv('temp')
filename = os.path.join(path, 'info.txt')

# 在窗口上创建标签组件

labelname = tkinter.Label(self.window, text='账号', font=('华文中宋', 16))
labelname.place(x=200, y=120, width=80, height=30)

# 创建字符串变量和文本框组件,同时设置关联的变量

global varname
varname = tkinter.StringVar(self.window, value='')
self.account = tkinter.Entry(self.window, width=30, font=tkinter.font.Font(size=16), bg='Ivory',
                             textvariable=varname)
self.account.place(x=300, y=120, width=160, height=30)

labelpwd = tkinter.Label(self.window, text='密码', font=('华文中宋', 16))
labelpwd.place(x=200, y=180, width=80, height=30)

# 创建密码文本框
global varpwd
varpwd = tkinter.StringVar(self.window, value='')
self.password = tkinter.Entry(self.window, width=30, font=tkinter.font.Font(size=16), bg='Ivory', show='*',
                              textvariable=varpwd)
self.password.place(x=300, y=180, width=160, height=30)

# 尝试自动填写用户名和密码
try:
    with open(filename) as fp:
        n, p = fp.read().strip().split(',')
        varname.set(n)
        varpwd.set(p)
except:
    pass

# 记住我,复选框
global rememberme
rememberme = tkinter.IntVar(self.window, value=1)
# 选中时变量值为1,未选中时变量值为0,默认选中
checkremember = tkinter.Checkbutton(self.window,
                                    text='自动保存',
                                    font=tkinter.font.Font(size=12),
                                    variable=rememberme,
                                    onvalue=1, offvalue=0)
checkremember.place(x=200, y=240, width=100, height=20)

# 登录按钮
Button(self.window, text='登录', width=8, font=tkinter.font.Font(size=12), command=self.login).place(x=200, y=300)                                                                                           
                                                                                                                        
# 登录按钮事件处理函数

def login(self):
    # _password = None
    # 获取账号和密码
    global account
    account = self.account.get()
    pwd = self.password.get()

    # 数据库操作 查询管理员信息表
    with sqlite3.connect("Library.db") as conn:  # 创建连接
        cursor = conn.cursor()  # 获取游标对象
        cursor.execute('SELECT * FROM Administrator')
        li = cursor.fetchall()

    p = 0
    for i in li:
        if account == i[0] and pwd == i[2]:
            tkinter.messagebox.showinfo(title='恭喜',
                                        message='登录成功!')
            ActionSelectionInterface(self.window)  # 进入操作选择页面
            if rememberme.get() == 1:
                # 把登录成功的信息写入临时文件
                with open(filename, 'w') as fp:
                    fp.write(','.join((account, pwd)))
            else:
                try:
                    os.remove(filename)
                except:
                    pass
            p = 1
            break
        # else:

    if p == 0:
        tkinter.messagebox.showerror('警告', message='用户名或密码错误')


# 注册按钮
Button(self.window, text='注册', width=8, font=tkinter.font.Font(size=12), command=self.regi).place(x=400, y=300)


# 注册按钮事件处理函数

def regi(self):
    # 获取账号和密码
    global account
    account = self.account.get()
    pwd = self.password.get()

    # 将数据插入数据库
    with sqlite3.connect("Library.db") as conn:
        cur = conn.cursor()
        cur.execute('SELECT * FROM Administrator')
        li = cur.fetchall()
        flag = 0
        for i in li:
            if account == i[0]:
                tkinter.messagebox.showerror('警告', message='该账号已存在!')
                flag = 1
                break

        if flag == 0:
            cur.execute("insert into Administrator(A_ID, Apassword) values (?, ?)", (account, pwd))
            tkinter.messagebox.showinfo(title='恭喜',
                                        message='注册成功!')

5.2  添加功能

该功能主要完成图书信息、读者信息的添加。

(1)添加图书信息功能测试:

图书馆管理系统python,数据库

(2)添加读者信息功能测试:

图书馆管理系统python,数据库

(3)相关代码如下(以添加读者信息为例):

# 添加读者信息按钮事件

def buttonAddClick():
    # 检查ID
    global rid
    rid = entryId.get().strip()
    if rid == '':
        tkinter.messagebox.showerror(title='很抱歉', message='必须输入ID')
        return

    # ID不能重复
    with sqlite3.connect("Library.db") as conn:
        cur = conn.cursor()
        cur.execute('SELECT COUNT(R_ID) from Reader where R_ID="' + rid + '"')
        c = cur.fetchone()[0]

    if c != 0:
        tkinter.messagebox.showerror(title='很抱歉', message='ID不能重复')
        return

    # 检查姓名
    name = entryName.get().strip()
    if name == '':
        tkinter.messagebox.showerror(title='很抱歉', message='必须输入姓名')
        return

    # 检查性别
    sex = entrySex.get()
    if sex not in ('男', '女'):
        tkinter.messagebox.showerror(title='很抱歉', message='性别不合法')
        return

    # 检查出生日期
    birth = entryBirth.get().strip()
    if birth == '':
        tkinter.messagebox.showerror(title='很抱歉', message='必须输入出生日期')
        return

    # 检查电话号码
    telephone = entryTelephone.get().strip()
    if telephone == '' or (not telephone.isdigit()):
        tkinter.messagebox.showerror(title='很抱歉', message='电话号码必须是数字')
        return

    # 检查家庭住址
    address = entryAddress.get().strip()
    if address == '':
        tkinter.messagebox.showerror(title='很抱歉', message='必须输入家庭住址')
        return

    # 所有输入都通过检查,插入数据库
    # print(rid, name, sex, birth, telephone, address)
    sql = 'INSERT INTO Reader(R_ID, Rname, "Rsex", Rbirth, Rtelephone, Raddress) VALUES("' \
          + rid + '","' + name + '","' + sex + '","' + birth + '","' \
          + telephone + '","' + address + '")'
    doSql(sql)
    tkinter.messagebox.showinfo('恭喜', '添加成功')

    # 添加记录后,更新表格中的数据
    bindData()

buttonAdd = tkinter.Button(self.window, text='添加', command=buttonAddClick)
buttonAdd.place(x=50, y=130, width=80, height=20)

5.3  删除功能

该功能主要完成图书信息删除、读者信息删除。

(1)删除功能测试(以删除一条读者信息为例):

图书馆管理系统python,数据库

(2)相关代码如下(以删除读者信息为例):

def doSql(sql):
    # 用来执行SQL语句,尤其是INSERT和DELETE语句
    with sqlite3.connect("Library.db") as conn:
        cur = conn.cursor()
        cur.execute(sql)
        conn.commit()

# 定义Treeview组件的左键单击事件,并绑定到Treeview组件上
# 单击鼠标左键,设置变量nameToDelete的值,然后可以使用“删除”按钮来删除
idToDelete = tkinter.StringVar()  #

def treeviewClick(event):
    if not treeAddressList.selection():
        return
    item = treeAddressList.selection()[0]
    idToDelete.set(treeAddressList.item(item, 'values')[0])

treeAddressList.bind('<Button-1>', treeviewClick)

# 删除读者信息按钮事件

def buttonDeleteClick():
    rid = idToDelete.get()
    if rid == '':
        tkinter.messagebox.showerror(title='很抱歉', message='请选择一条记录')
        return

    # 如果已经选择了一条信息,执行SQL语句将其删除
    sql = 'DELETE FROM Reader WHERE R_ID="' + rid + '"'
    doSql(sql)
    tkinter.messagebox.showinfo('恭喜', '删除成功')

    # 重新设置变量为空字符串
    idToDelete.set('')

    # 更新表格中的数据
    bindData()

buttonDelete = tkinter.Button(self.window, text='删除', command=buttonDeleteClick)
buttonDelete.place(x=170, y=130, width=80, height=20)

5.4  修改功能

该功能主要完成管理员、图书、读者信息的修改

(1)修改信息测试(以修改读者信息为例:)

        选中待修改信息,点击“修改”按钮;

图书馆管理系统python,数据库

        获取到待修改信息后,即可在输入框进行修改,修改完成点击“保存修改”按钮(此次测试修改了性别、出生日期);

图书馆管理系统python,数据库

图书馆管理系统python,数据库

(2)相关代码如下(以修改读者信息为例)

# 修改读者信息

def buttonEditClick():
    ide = idToDelete.get()
    if ide == '':
        tkinter.messagebox.showerror(title='很抱歉', message='请选择一条要修改的记录')
        return

    with sqlite3.connect("Library.db") as conn:  # 创建连接
        cursor = conn.cursor()  # 获取游标对象
        sql = 'SELECT * FROM Reader where R_ID ="' + ide + '"'
        cursor.execute(sql)
        lli = cursor.fetchall()
        name = lli[0][1]
        sex = lli[0][2]
        birth = lli[0][3]
        telephone = lli[0][4]
        address = lli[0][5]

    varRid.set(ide)
    varName.set(name)
    varSex.set(sex)
    varBirth.set(birth)
    varTelephone.set(telephone)
    varAddress.set(address)

    tkinter.messagebox.showinfo('恭喜', '获取成功')

buttonEdit = tkinter.Button(self.window, text='修改', command=buttonEditClick)
buttonEdit.place(x=410, y=130, width=80, height=20)

# 保存修改

def buttonSaveClick():

    rde = entryId.get().strip()
    name = entryName.get().strip()
    sex = entrySex.get().strip()
    birth = entryBirth.get().strip()
    telephone = entryTelephone.get().strip()
    address = entryAddress.get().strip()

    sql = "update Reader set Rname = '%s', Rsex = '%s', Rbirth = '%s', Rtelephone = '%s', Raddress = '%s' WHERE R_ID = '%s'" % (
    name, sex, birth, telephone, address, rde)
    doSql(sql)
    tkinter.messagebox.showinfo('恭喜', '修改保存成功')
    # 修改记录后,更新表格中的数据
    bindData()

buttonEdit = tkinter.Button(self.window, text='保存修改', command=buttonSaveClick)
buttonEdit.place(x=530, y=130, width=80, height=20)

5.5  查询功能

(1)查询功能测试如下:

        按性别查询读者信息:

图书馆管理系统python,数据库

        按书名作者查询图书信息:

图书馆管理系统python,数据库

        按书名作者查询图书信息:

图书馆管理系统python,数据库

(2)查询相关代码(以查询图书为例)

# 查询

def buttonSeekClick():
    # 获取
    bid = entryId.get()
    name = entryName.get()
    author = entryAuthor.get()
    publish = entryPublish.get()
    state = entryState.get()

    # 数据库操作 查询图书信息表
    with sqlite3.connect("Library.db") as conn:  # 创建连接
        cursor = conn.cursor()  # 获取游标对象
        cursor.execute('SELECT * FROM Books')
        results = cursor.fetchall()
        flag = 0
        if bid == "" and name == "" and author == "" and publish == "" and state == "":
            tkinter.messagebox.showerror(title='很抱歉', message='请至少输入一条查询信息')
        else:
            for row in results:
                if bid == row[0] and name == row[1] and author == row[2] and publish == row[3] and state == row[6]:
                    sql = "SELECT * FROM Books where (B_ID = '%s') and (Bname = '%s') and (Bauthor = '%s') and (Bpublish = '%s' and (Bstate == '%s'))" % (
                    bid, name, author, publish, state)
                    bindDatas(sql)
                    flag = 1
                    break
                elif bid == row[0] and name == row[1] and author == row[2] and publish == row[3]:
                    sql = "SELECT * FROM Books where (B_ID = '%s') and (Bname = '%s') and (Bauthor = '%s') and (Bpublish = '%s')" % (
                    bid, name, author, publish)
                    bindDatas(sql)
                    flag = 1
                    break
                elif bid == row[0] and name == row[1] and author == row[2]:
                    sql = "SELECT * FROM Books where (B_ID = '%s') and (Bname = '%s') and (Bauthor = '%s')" % (
                    bid, name, author)
                    bindDatas(sql)
                    flag = 1
                    break
                elif bid == row[0] and name == row[1]:
                    sql = "SELECT * FROM Books where (B_ID = '%s') and (Bname = '%s')" % (bid, name)
                    bindDatas(sql)
                    flag = 1
                    break
                elif bid == row[0]:
                    sql = "SELECT * FROM Books where B_ID = '%s'" % (bid)
                    bindDatas(sql)
                    flag = 1
                    break
                elif name == row[1]:
                    sql = "SELECT * FROM Books where Bname = '%s'" % (name)
                    bindDatas(sql)
                    flag = 1
                    break
                elif author == row[2]:
                    sql = "SELECT * FROM Books where Bauthor = '%s'" % (author)
                    bindDatas(sql)
                    flag = 1
                    break
                elif publish == row[3]:
                    sql = "SELECT * FROM Books where Bpublish = '%s'" % (publish)
                    bindDatas(sql)
                    flag = 1
                    break
                elif state == row[6]:
                    sql = "SELECT * FROM Books where Bstate = '%s'" % (state)
                    bindDatas(sql)
                    flag = 1
                    break

            if flag == 0:
                tkinter.messagebox.showerror(title='很抱歉', message='未找到符合条件的图书!')

buttonSeek = tkinter.Button(self.window, text='查询', command=buttonSeekClick)
buttonSeek.place(x=520, y=130, width=80, height=20)

6  总结

        在本次基于Python的图书馆管理系统开发中,经过系统需求分析、功能需求分析、数据库物理结构设计、系统功能设计和数据库初始装载、python程序代码设计,最终编译并运行成功。实现了管理员的注册、登录,个人信息的查看与修改、图书与读者信息的管理以及查看借阅信息的功能,提高了图书馆管理员的管理效率。

        对于界面的设计,在设计方面采取的是简约原则,并未过度追求设计感,但是充分考虑了用户的使用体验,最终所实现的界面虽然简单,但是功能齐全。开发过程中我不断完善本系统功能,将知识学以致用,取得了很大的收获,也对Python程序开发有了更多的兴趣。

ps:任何建议和想法欢迎评论交流~文章来源地址https://www.toymoban.com/news/detail-762118.html

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

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

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

相关文章

  • java毕业设计——基于java+Java Swing+sqlserver的图书馆书库管理系统设计与实现(毕业论文+程序源码)——图书馆书库管理系统

    大家好,今天给大家介绍基于java+Java Swing+sqlserver的图书馆书库管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 毕业

    2024年02月03日
    浏览(51)
  • [N-117]基于微信小程序图书馆管理系统

    开发工具:IDEA、微信小程序 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:vue、uniapp 服务端技术:springboot+mybatis-plus 本系统分微信小程序和管理后台两部分,项目采用前后端分离 系统主要分为两个角色:管理员和普通用户。 1.普通用户(小程序):登录、

    2024年01月15日
    浏览(61)
  • 33基于Java简单实现图书馆借书管理系统设计与实现

    本章节给大家介绍一个基于Java简单实现图书馆借书管理系统的设计与实现 项目总体分为俩种角色,分别是管理员和阅读者,管理员可以登录系统中,进行图书管理,上架下架图书,对用户进行管理、对读者进行管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息

    2024年02月03日
    浏览(65)
  • 基于微信小程序的图书馆管理系统设计与实现

                                                                         摘要 在当今社会,互联网已经开始成为时代的主流,随着信息技术的发展,人们开始越来越依赖网络。互联网也逐渐成为我们生活中必不可少的一部分,它的出现也重新定义了人们获取信息资源的

    2024年02月12日
    浏览(53)
  • [N-116]基于微信小程序图书馆座位预约管理系统

    开发工具:IDEA、微信小程序 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:vue、uniapp 服务端技术:springboot+mybatis 本系统分微信小程序和管理后台两部分,项目采用前后端分离 项目功能描述:  1.微信小程序:登录、注册、主页、公告、轮播图、图书馆预

    2024年02月03日
    浏览(51)
  • 数据库课程设计-图书馆管理系统(3. 用户软件,基于QT)

    如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是)  (骗一下数据,说不定以后面试就过了,拜谢) 用户软件的实现根据自己所用语言选择对应开发工具,c++ 较常用的是QT或者MFC。这里使用QT做个示例,但博主前端属实现学现卖,也就是能用级别,可以参考一下

    2024年02月09日
    浏览(49)
  • 基于Java的图书馆借阅管理系统的设计与实现--毕业开题报告

    基于Java的图书馆借阅管理系统的设计与实现–开题报告 这个先写一版开题报告,后续有时间给大家提供论文 。 题目:基于Java的图书馆借阅管理系统的设计与实现 图书馆是一个信息系统,它收集、处理、组织、存储、选择、控制、转换重要的信息和知识载体,并将其传递给

    2024年02月03日
    浏览(118)
  • 基于MFC的图书馆图书管理系统 VC++操作Excel文档的方法,读取,查询,写入,修改,删除

    VS2017加装MFC以及创建第一个MFC程序_赵满刚的博客-CSDN博客 MFC读取Excel文件+数据处理+写入Excel_土豪gold的博客-CSDN博客 VS2013 MFC连接Access数据库(ADO)详细版实例操作(含Combo Box读取数据库内容,附源码)_土豪gold的博客-CSDN博客_mfc连接access数据库 MFC 导入EXCEL到数据库_weixin_338

    2024年02月06日
    浏览(48)
  • 基于MFC的图书馆图书管理系统 VC++操作Excel文档的方法,读取,查询,写入,修改,删除

    VS2017加装MFC以及创建第一个MFC程序_赵满刚的博客-CSDN博客 MFC读取Excel文件+数据处理+写入Excel_土豪gold的博客-CSDN博客 VS2013 MFC连接Access数据库(ADO)详细版实例操作(含Combo Box读取数据库内容,附源码)_土豪gold的博客-CSDN博客_mfc连接access数据库 MFC 导入EXCEL到数据库_weixin_338

    2024年02月06日
    浏览(50)
  • 数据库课程设计-图书馆管理系统(2.数据库实现-基于mysql)

    如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是)  (骗一下数据,说不定以后面试就过了,拜谢) 好像有读者说现在不要积分的资源也要vip才能下,如果下不了可以留邮箱到评论区或者私聊,我也把资源放到github了,地址如下: https://github.com/goLSX/library_mana

    2024年02月06日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包