实验题目: 1、实现通用多级菜单功能(控制台菜单)。菜单是一个树形结构,下图是一个具体实例。 1、数据库设计: 将树形菜单的内容及从属关系存入一个表中,表结构设计如下。 字段名 说明 约束 类型 ItemID 菜单项id 主键唯一自动增长 int ItemNumber 菜单项编号 不为空 int ItemString 菜单项显示内容 不为空 varchar(50) UpNumber 上一级菜单项id 自引用外键 int ItemCommand 选择本菜单执行的命令 不为空 varchar(50),给出python代码实现
时间: 2023-12-14 16:39:53 浏览: 112
以下是实现通用多级菜单功能的Python代码:
```python
import sqlite3
# 连接数据库
conn = sqlite3.connect('menu.db')
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE Menu
(ItemID INTEGER PRIMARY KEY AUTOINCREMENT,
ItemNumber INTEGER NOT NULL,
ItemString TEXT NOT NULL,
UpNumber INTEGER,
ItemCommand TEXT NOT NULL,
FOREIGN KEY(UpNumber) REFERENCES Menu(ItemID))''')
# 插入数据
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (1, '菜单1', NULL, '')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (2, '菜单2', NULL, '')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (3, '菜单3', NULL, '')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (4, '子菜单1', 1, 'python script1.py')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (5, '子菜单2', 1, 'python script2.py')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (6, '子菜单3', 2, 'python script3.py')")
c.execute("INSERT INTO Menu (ItemNumber, ItemString, UpNumber, ItemCommand) VALUES (7, '子菜单4', 3, 'python script4.py')")
# 提交更改并关闭数据库连接
conn.commit()
conn.close()
# 定义打印菜单的函数
def print_menu(menu_items, level=0):
for item in menu_items:
if item[3] == '':
print(' ' * level + str(item[1]) + ': ' + item[2])
else:
print(' ' * level + str(item[1]) + ': ' + item[2] + ' (' + item[4] + ')')
sub_items = [i for i in menu_items if i[3] == item[0]]
if sub_items:
print_menu(sub_items, level + 1)
# 从数据库中读取菜单项
conn = sqlite3.connect('menu.db')
c = conn.cursor()
c.execute("SELECT * FROM Menu")
menu_items = c.fetchall()
conn.close()
# 打印菜单
print_menu([i for i in menu_items if i[3] is None])
```
以上代码中,我们使用 SQLite 数据库存储菜单项,并且使用递归函数 `print_menu()` 打印出整个菜单树形结构。其中 `ItemNumber` 字段是每个菜单项的编号,`ItemString` 字段是显示在控制台上的菜单项内容,`UpNumber` 字段是指向上级菜单项的外键,`ItemCommand` 字段是选择该菜单项时要执行的命令。你可以根据需要修改这些字段的值。
阅读全文