涵盖医院全部科研活动的全方位科研项目管理系统
小明:最近我在研究一个科研项目管理系统,想了解一下在新乡地区有没有类似的系统可以参考?
李老师:新乡作为河南省的重要城市,也有不少高校和科研机构,他们对科研项目的管理需求很强烈。不过,大多数系统都是定制开发的,没有统一的标准。你打算怎么做呢?
小明:我想自己做一个简单的科研项目管理系统,用Python来实现,这样既方便维护,又容易扩展。
李老师:不错,Python确实是一个很好的选择。那你可以先从数据库设计开始,然后考虑用户权限、项目信息录入、进度跟踪等功能。
小明:是的,我打算用SQLite作为数据库,因为它轻量且易于部署,适合中小型项目。
李老师:好,那我们可以一步步来。首先,你需要定义数据库表结构。比如,一个项目可能有名称、负责人、起止时间、状态等字段。
小明:明白了,那我可以先写一个创建数据库的脚本。
李老师:对,下面是一段示例代码,用来创建数据库和项目表。
import sqlite3
# 连接数据库
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
# 创建项目表
cursor.execute('''
CREATE TABLE IF NOT EXISTS projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
leader TEXT NOT NULL,
start_date DATE NOT NULL,
end_date DATE,
status TEXT DEFAULT '未开始'
)
''')
# 提交更改并关闭连接
conn.commit()
conn.close()
小明:这段代码看起来很清晰,那接下来我应该怎么添加数据呢?
李老师:你可以编写一个函数,用来插入新的项目信息。例如:
def add_project(title, leader, start_date, end_date=None):
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO projects (title, leader, start_date, end_date) VALUES (?, ?, ?, ?)',
(title, leader, start_date, end_date))
conn.commit()
conn.close()
# 示例调用
add_project("智能农业系统", "张伟", "2025-01-01", "2026-12-31")
小明:好的,那如何查询所有项目呢?
李老师:可以用SELECT语句来查询。下面是查询所有项目的函数:
def get_all_projects():
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM projects')
rows = cursor.fetchall()
conn.close()
return rows
# 示例调用
projects = get_all_projects()
for project in projects:
print(project)
小明:这样就能看到所有的项目信息了。那如果我要更新某个项目的状态呢?
李老师:你可以使用UPDATE语句。例如,将某个项目的状态改为“进行中”:
def update_project_status(project_id, new_status):
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('UPDATE projects SET status = ? WHERE id = ?', (new_status, project_id))
conn.commit()
conn.close()
# 示例调用
update_project_status(1, "进行中")
小明:太好了,这已经能完成基本的增删改查了。接下来是不是要考虑用户权限?
李老师:是的,用户权限管理是系统的重要部分。你可以再建一个users表,包含用户名、密码、角色等信息。
小明:那我可以先设计这个表的结构。
李老师:好的,下面是创建用户表的代码:
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
role TEXT DEFAULT 'user'
)
''')
小明:那登录功能该怎么实现呢?
李老师:你可以编写一个login函数,验证用户名和密码是否匹配。
def login(username, password):
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
user = cursor.fetchone()
conn.close()
return user
# 示例调用
user = login("admin", "123456")
if user:
print("登录成功")
else:
print("用户名或密码错误")

小明:这样就实现了基本的登录功能。那如果用户没有权限操作某些功能怎么办?
李老师:你可以根据用户的角色来判断权限。比如,管理员可以管理所有项目,普通用户只能查看自己的项目。
小明:那我可以增加一个函数来获取用户的项目列表。
李老师:没错,下面是一个示例函数:
def get_user_projects(user_id):
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM projects WHERE leader = ?', (user_id,))
projects = cursor.fetchall()
conn.close()
return projects
# 示例调用
user_projects = get_user_projects(1)
for proj in user_projects:
print(proj)
小明:看来我已经有了一个初步的系统框架。接下来是不是需要考虑界面设计?
李老师:是的,你可以用Flask或者Django搭建一个Web界面,让用户更方便地操作。
小明:那我可以尝试用Flask做一个简单的网页版系统。
李老师:很好,下面是一个简单的Flask应用示例,用于显示项目列表:
from flask import Flask, render_template
import sqlite3
app = Flask(__name__)
def get_projects():
conn = sqlite3.connect('research_project.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM projects')
projects = cursor.fetchall()
conn.close()
return projects
@app.route('/')
def index():
projects = get_projects()
return render_template('index.html', projects=projects)
if __name__ == '__main__':
app.run(debug=True)

小明:那我还需要一个HTML模板文件来展示这些项目。
李老师:是的,你可以创建一个templates文件夹,并在里面放一个index.html文件,内容如下:
科研项目管理系统
科研项目列表
{% for project in projects %}
- {{ project[1] }} - {{ project[3] }}
{% endfor %}
小明:这样就完成了前端展示部分。整个系统现在看起来已经比较完整了。
李老师:是的,虽然还比较简单,但已经具备了基本的功能。你可以继续扩展,比如加入任务分配、进度提醒、报表生成等功能。
小明:感谢您的指导,我会继续完善这个系统。
李老师:加油!如果你遇到问题,随时可以来问我。
Copyright © 医院科研管理系统