请使用python编写一款人机交互软件,能够实现存取记录管理与可视化
时间: 2023-12-03 14:44:13 浏览: 32
好的,我可以为你提供一个基于Python的人机交互软件,使用SQLite数据库进行记录管理,并使用Matplotlib库实现数据可视化。
首先,需要安装相应的库:
```python
pip install sqlite3
pip install matplotlib
```
接下来,我们来设计交互界面。在本例中,我们使用命令行界面,用户可以通过输入指令来进行操作。
```python
def main():
print("欢迎使用记录管理系统!")
while True:
print("请输入指令:")
print("1. 新增记录")
print("2. 查看记录")
print("3. 删除记录")
print("4. 统计数据")
print("5. 退出系统")
# 获取用户输入指令
command = input("请输入指令编号:")
if command == "1":
add_record()
elif command == "2":
show_record()
elif command == "3":
delete_record()
elif command == "4":
statistics()
elif command == "5":
print("谢谢使用!")
break
else:
print("无效指令,请重新输入!")
```
接下来,我们来实现具体的操作函数。首先,我们需要连接到SQLite数据库。
```python
import sqlite3
# 连接数据库
conn = sqlite3.connect('record.db')
c = conn.cursor()
```
1. 新增记录
```python
def add_record():
print("请输入新增记录的信息:")
title = input("标题:")
content = input("内容:")
date = input("日期(YYYY-MM-DD):")
# 插入数据到数据库
c.execute("INSERT INTO records (title, content, date) VALUES (?, ?, ?)", (title, content, date))
conn.commit()
print("新增记录成功!")
```
2. 查看记录
```python
def show_record():
print("请输入查询条件:")
keyword = input("关键词(标题或内容):")
start_date = input("起始日期(YYYY-MM-DD):")
end_date = input("结束日期(YYYY-MM-DD):")
# 查询数据
c.execute("SELECT * FROM records WHERE (title LIKE ? OR content LIKE ?) AND date BETWEEN ? AND ?", ('%'+keyword+'%', '%'+keyword+'%', start_date, end_date))
results = c.fetchall()
if len(results) == 0:
print("没有找到符合条件的记录!")
else:
for row in results:
print("ID:", row[0])
print("标题:", row[1])
print("内容:", row[2])
print("日期:", row[3])
```
3. 删除记录
```python
def delete_record():
record_id = input("请输入待删除记录的ID:")
# 删除数据
c.execute("DELETE FROM records WHERE id=?", (record_id,))
conn.commit()
print("删除成功!")
```
4. 统计数据
```python
import matplotlib.pyplot as plt
def statistics():
print("请输入统计条件:")
start_date = input("起始日期(YYYY-MM-DD):")
end_date = input("结束日期(YYYY-MM-DD):")
# 查询数据
c.execute("SELECT COUNT(*), date FROM records WHERE date BETWEEN ? AND ? GROUP BY date", (start_date, end_date))
results = c.fetchall()
if len(results) == 0:
print("没有找到符合条件的记录!")
else:
# 绘制柱状图
x = [row[1] for row in results]
y = [row[0] for row in results]
plt.bar(x, y)
plt.xlabel("日期")
plt.ylabel("记录数")
plt.title("记录统计")
plt.show()
```
最后,别忘了关闭数据库连接。
```python
# 关闭数据库连接
conn.close()
```
完整代码如下:
```python
import sqlite3
import matplotlib.pyplot as plt
# 连接数据库
conn = sqlite3.connect('record.db')
c = conn.cursor()
# 创建表格
c.execute('''CREATE TABLE IF NOT EXISTS records
(id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL,
date TEXT NOT NULL)''')
conn.commit()
def main():
print("欢迎使用记录管理系统!")
while True:
print("请输入指令:")
print("1. 新增记录")
print("2. 查看记录")
print("3. 删除记录")
print("4. 统计数据")
print("5. 退出系统")
# 获取用户输入指令
command = input("请输入指令编号:")
if command == "1":
add_record()
elif command == "2":
show_record()
elif command == "3":
delete_record()
elif command == "4":
statistics()
elif command == "5":
print("谢谢使用!")
break
else:
print("无效指令,请重新输入!")
# 新增记录
def add_record():
print("请输入新增记录的信息:")
title = input("标题:")
content = input("内容:")
date = input("日期(YYYY-MM-DD):")
# 插入数据到数据库
c.execute("INSERT INTO records (title, content, date) VALUES (?, ?, ?)", (title, content, date))
conn.commit()
print("新增记录成功!")
# 查看记录
def show_record():
print("请输入查询条件:")
keyword = input("关键词(标题或内容):")
start_date = input("起始日期(YYYY-MM-DD):")
end_date = input("结束日期(YYYY-MM-DD):")
# 查询数据
c.execute("SELECT * FROM records WHERE (title LIKE ? OR content LIKE ?) AND date BETWEEN ? AND ?", ('%'+keyword+'%', '%'+keyword+'%', start_date, end_date))
results = c.fetchall()
if len(results) == 0:
print("没有找到符合条件的记录!")
else:
for row in results:
print("ID:", row[0])
print("标题:", row[1])
print("内容:", row[2])
print("日期:", row[3])
# 删除记录
def delete_record():
record_id = input("请输入待删除记录的ID:")
# 删除数据
c.execute("DELETE FROM records WHERE id=?", (record_id,))
conn.commit()
print("删除成功!")
# 统计数据
def statistics():
print("请输入统计条件:")
start_date = input("起始日期(YYYY-MM-DD):")
end_date = input("结束日期(YYYY-MM-DD):")
# 查询数据
c.execute("SELECT COUNT(*), date FROM records WHERE date BETWEEN ? AND ? GROUP BY date", (start_date, end_date))
results = c.fetchall()
if len(results) == 0:
print("没有找到符合条件的记录!")
else:
# 绘制柱状图
x = [row[1] for row in results]
y = [row[0] for row in results]
plt.bar(x, y)
plt.xlabel("日期")
plt.ylabel("记录数")
plt.title("记录统计")
plt.show()
# 关闭数据库连接
conn.close()
if __name__ == '__main__':
main()
```
运行代码后,你将会得到一个基于命令行的记录管理系统,能够方便地进行记录管理和数据可视化。