使用Python采用数据库存储数据做一个学校教材管理系统实现增删查改以及排序、统计并且交互式界面设计直观体现系统功能并可循环调用

时间: 2024-01-29 11:02:24 浏览: 27
好的,以下是一个使用Python和SQLite实现增删查改、排序、统计以及交互式界面设计的学校教材管理系统示例。 #### 1. 安装必要的库 ```python pip install sqlite3 pip install prettytable pip install PySimpleGUI ``` #### 2. 创建数据库和表 我们将创建一个名为 `textbooks.db` 的SQLite数据库,并在其中创建一个名为 `textbooks` 的表。 ```python import sqlite3 # 连接到数据库并创建一个游标 conn = sqlite3.connect('textbooks.db') c = conn.cursor() # 创建表 c.execute('CREATE TABLE IF NOT EXISTS textbooks (id INTEGER PRIMARY KEY, title TEXT, author TEXT, publisher TEXT, year INTEGER)') # 提交更改并关闭连接 conn.commit() conn.close() ``` #### 3. 实现增删查改功能 ```python import sqlite3 # 连接到数据库并创建一个游标 conn = sqlite3.connect('textbooks.db') c = conn.cursor() # 添加教材 def add_textbook(title, author, publisher, year): c.execute('INSERT INTO textbooks (title, author, publisher, year) VALUES (?, ?, ?, ?)', (title, author, publisher, year)) conn.commit() # 删除教材 def delete_textbook(id): c.execute('DELETE FROM textbooks WHERE id = ?', (id,)) conn.commit() # 搜索教材 def search_textbook(title): c.execute('SELECT * FROM textbooks WHERE title LIKE ?', ('%' + title + '%',)) return c.fetchall() # 更新教材 def update_textbook(id, title, author, publisher, year): c.execute('UPDATE textbooks SET title = ?, author = ?, publisher = ?, year = ? WHERE id = ?', (title, author, publisher, year, id)) conn.commit() # 关闭连接 conn.close() ``` #### 4. 实现排序和统计功能 ```python import sqlite3 from prettytable import PrettyTable # 连接到数据库并创建一个游标 conn = sqlite3.connect('textbooks.db') c = conn.cursor() # 获取所有教材 def get_all_textbooks(): c.execute('SELECT * FROM textbooks') return c.fetchall() # 按标题排序 def sort_by_title(): c.execute('SELECT * FROM textbooks ORDER BY title') return c.fetchall() # 按出版年份排序 def sort_by_year(): c.execute('SELECT * FROM textbooks ORDER BY year') return c.fetchall() # 统计教材数量 def count_textbooks(): c.execute('SELECT COUNT(*) FROM textbooks') return c.fetchone()[0] # 关闭连接 conn.close() ``` #### 5. 实现交互式界面 我们将使用 PySimpleGUI 库来创建一个简单的GUI,以便用户可以轻松地使用学校教材管理系统。 ```python import PySimpleGUI as sg # 定义GUI布局 layout = [ [sg.Text('学校教材管理系统', font=('Arial', 20), justification='center', size=(30, 1))], [sg.Text('标题:'), sg.InputText(key='title')], [sg.Text('作者:'), sg.InputText(key='author')], [sg.Text('出版社:'), sg.InputText(key='publisher')], [sg.Text('出版年份:'), sg.InputText(key='year')], [sg.Button('添加', key='add'), sg.Button('删除', key='delete'), sg.Button('搜索', key='search'), sg.Button('更新', key='update')], [sg.Button('按标题排序', key='sort_by_title'), sg.Button('按出版年份排序', key='sort_by_year'), sg.Button('统计教材数量', key='count')], [sg.Table(values=[], headings=['ID', '标题', '作者', '出版社', '出版年份'], key='table')], [sg.Text('操作结果:'), sg.Text('', key='result', size=(50, 1))] ] # 创建GUI窗口 window = sg.Window('学校教材管理系统', layout) # 消息循环 while True: event, values = window.Read() # 添加教材 if event == 'add': if values['title'] == '' or values['author'] == '' or values['publisher'] == '' or values['year'] == '': window.Element('result').Update('请输入完整的教材信息!') else: add_textbook(values['title'], values['author'], values['publisher'], values['year']) window.Element('result').Update('添加成功!') # 删除教材 elif event == 'delete': selected_rows = window.Element('table').GetSelectedRows() if len(selected_rows) == 0: window.Element('result').Update('请先选择要删除的教材!') else: for row in selected_rows: delete_textbook(window.Element('table').GetCellValue(row, 0)) window.Element('result').Update('删除成功!') # 搜索教材 elif event == 'search': if values['title'] == '': window.Element('result').Update('请输入要搜索的教材标题!') else: textbooks = search_textbook(values['title']) if len(textbooks) == 0: window.Element('result').Update('没有找到相关教材!') else: table_data = [[str(textbook[0]), textbook[1], textbook[2], textbook[3], str(textbook[4])] for textbook in textbooks] window.Element('table').Update(values=table_data) window.Element('result').Update('搜索成功!') # 更新教材 elif event == 'update': selected_rows = window.Element('table').GetSelectedRows() if len(selected_rows) == 0: window.Element('result').Update('请先选择要更新的教材!') elif len(selected_rows) > 1: window.Element('result').Update('一次只能更新一本教材!') else: row = selected_rows[0] update_textbook(window.Element('table').GetCellValue(row, 0), values['title'], values['author'], values['publisher'], values['year']) window.Element('result').Update('更新成功!') # 按标题排序 elif event == 'sort_by_title': textbooks = sort_by_title() table_data = [[str(textbook[0]), textbook[1], textbook[2], textbook[3], str(textbook[4])] for textbook in textbooks] window.Element('table').Update(values=table_data) window.Element('result').Update('按标题排序成功!') # 按出版年份排序 elif event == 'sort_by_year': textbooks = sort_by_year() table_data = [[str(textbook[0]), textbook[1], textbook[2], textbook[3], str(textbook[4])] for textbook in textbooks] window.Element('table').Update(values=table_data) window.Element('result').Update('按出版年份排序成功!') # 统计教材数量 elif event == 'count': count = count_textbooks() window.Element('result').Update(f'教材数量为:{count}本') # 关闭窗口 elif event == sg.WIN_CLOSED: break # 关闭窗口 window.Close() ``` 运行上述代码,您将看到一个交互式的GUI窗口,您可以使用它来添加、删除、搜索、更新、排序和统计教材。

相关推荐

最新推荐

recommend-type

Python操作mysql数据库实现增删查改功能的方法

主要介绍了Python操作mysql数据库实现增删查改功能的方法,涉及Python针对mysql数据库的连接、增删改查等相关操作技巧,需要的朋友可以参考下
recommend-type

python小练习——图书管理系统(增加数据存储)

上一次我们做了一个小的图书馆里系统,用来学习python基础部分的:函数、模块、列表、字典、循环、判断 现在我们在上一次的基础上增加一个功能,将写入系统的书籍存放起来,这样才是一个真正意义上的系统,毕竟没有...
recommend-type

使用Python实现 学生学籍管理系统

主要介绍了使用Python实现 学生学籍管理系统,代码大致分为五个函数组成,具体内容详情本文给大家介绍的非常详细,需要的朋友可以参考下
recommend-type

Python实现学校管理系统

主要为大家详细介绍了Python实现学校管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Java与Python之间使用jython工具类实现数据交互

今天小编就为大家分享一篇关于Java与Python之间使用jython工具类实现数据交互,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。