嘿,朋友们!今天咱们来聊一聊怎么用Python写个“科研信息管理系统”的小玩意儿,而且还要和“烟台”扯上点关系。听起来是不是有点高大上?别担心,我就是那种喜欢把技术讲得特别接地气的人。
首先,咱们先说说什么是“科研信息管理系统”。简单来说,它就是一个用来管理科研项目、人员、成果、经费这些信息的系统。比如说,一个大学或者研究所可能有几十个项目,每个项目都有负责人、时间、预算、成果等等。这时候,如果手动记录,那肯定是个灾难。所以,搞个系统来管理就很有必要了。
不过今天咱们不搞复杂的,咱就做个最基础的版本,然后把它导出成.docx文件。这样大家一看就知道是怎么回事了。而且,咱们还特意结合一下“烟台”,因为烟台也有不少高校和科研机构,比如烟台大学、山东工商学院之类的,说不定有人正好需要这个。
为什么选Python?
为啥选Python呢?因为Python真的太好用了,特别是对于这种数据处理和文档生成的场景。你想想,Python有丰富的库,比如docx、pandas、sqlite3,这些都能帮我们快速实现功能。
另外,Python语法简单,写起来轻松,适合新手入门。就算你是刚接触编程的朋友,也能看懂我们的代码。
项目结构
整个项目大概分为几个部分:
1. 数据存储:用SQLite数据库保存科研信息;
2. 数据操作:增删改查;
3. 导出为.docx文件;
4. 简单的命令行界面(CLI)。
咱们一步步来,先从数据库开始。
第一步:创建数据库
首先,我们需要一个数据库来存数据。我们可以用Python内置的sqlite3模块来操作数据库。
下面是一段代码,用来创建一个名为“research.db”的数据库,并在其中建立一个“projects”表,用于存储科研项目的信息。
import sqlite3
# 连接到数据库
conn = sqlite3.connect('research.db')
# 创建游标
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
researcher TEXT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
budget REAL NOT NULL,
description TEXT
)
''')
# 提交更改
conn.commit()
# 关闭连接
conn.close()
这段代码的意思是:如果数据库中没有“projects”这张表,就新建一张表。表里包括项目的标题、负责人、起止日期、预算、描述等字段。
接下来,我们就可以插入一些数据试试看。
第二步:插入数据
现在我们来写一段代码,往数据库里添加几条数据,模拟一个科研项目。
import sqlite3
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
# 插入数据
cursor.execute('INSERT INTO projects (title, researcher, start_date, end_date, budget, description) VALUES (?, ?, ?, ?, ?, ?)',
('烟台海洋生态保护研究', '张伟', '2024-03-01', '2025-02-28', 200000.0, '研究烟台周边海域生态变化'))
cursor.execute('INSERT INTO projects (title, researcher, start_date, end_date, budget, description) VALUES (?, ?, ?, ?, ?, ?)',
('烟台智能制造技术应用', '李娜', '2024-04-01', '2025-03-31', 150000.0, '推动烟台制造业智能化升级'))
conn.commit()
conn.close()
运行完这段代码后,数据库里就有了两条记录。你可以用数据库查看工具(比如DB Browser for SQLite)看看数据是否正确。
第三步:查询数据
接下来,我们写一段代码,从数据库中读取所有数据,看看能不能正常显示出来。
import sqlite3
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
# 查询所有数据
cursor.execute('SELECT * FROM projects')
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
运行之后,你会看到类似这样的输出:
(1, '烟台海洋生态保护研究', '张伟', '2024-03-01', '2025-02-28', 200000.0, '研究烟台周边海域生态变化')
(2, '烟台智能制造技术应用', '李娜', '2024-04-01', '2025-03-31', 150000.0, '推动烟台制造业智能化升级')

看起来没问题,那我们就继续下一步。
第四步:导出为.docx文件
现在,我们想把这些数据导出成一个.docx文件,方便打印或分享。这里我们用到的是python-docx这个库。
首先,安装这个库:
pip install python-docx
然后,我们写一段代码,把数据库里的数据写入.docx文件。
from docx import Document
import sqlite3
# 创建一个新的文档
doc = Document()
# 添加标题
doc.add_heading('烟台科研项目列表', 0)
# 连接数据库
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
# 查询数据
cursor.execute('SELECT * FROM projects')
rows = cursor.fetchall()
# 添加表格
table = doc.add_table(rows=len(rows)+1, cols=6)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'ID'
hdr_cells[1].text = '项目名称'
hdr_cells[2].text = '负责人'
hdr_cells[3].text = '开始日期'
hdr_cells[4].text = '结束日期'
hdr_cells[5].text = '预算'
for i, row in enumerate(rows):
row_cells = table.rows[i+1].cells
row_cells[0].text = str(row[0])
row_cells[1].text = row[1]
row_cells[2].text = row[2]
row_cells[3].text = row[3]
row_cells[4].text = row[4]
row_cells[5].text = f'{row[5]:,.2f} 元'
# 保存文档
doc.save('research_projects.docx')
conn.close()
运行这段代码后,会生成一个叫“research_projects.docx”的文件。打开它,你会看到一个表格,里面包含了之前插入的数据。
这个功能挺实用的,特别是当你需要把数据整理成一份报告时,直接导出为Word文档就能省下不少时间。
第五步:添加简单的命令行交互
为了让这个程序更友好一点,我们再加一个简单的命令行界面,让用户可以自己选择要执行的操作。
import sqlite3
from docx import Document
def create_db():
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
researcher TEXT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
budget REAL NOT NULL,
description TEXT
)
''')
conn.commit()
conn.close()
print("数据库已创建")
def add_project():
title = input("请输入项目名称: ")
researcher = input("请输入负责人: ")
start_date = input("请输入开始日期 (YYYY-MM-DD): ")
end_date = input("请输入结束日期 (YYYY-MM-DD): ")
budget = float(input("请输入预算: "))
description = input("请输入项目描述: ")
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO projects (title, researcher, start_date, end_date, budget, description) VALUES (?, ?, ?, ?, ?, ?)',
(title, researcher, start_date, end_date, budget, description))
conn.commit()
conn.close()
print("项目已添加")
def view_projects():
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM projects')
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
def export_to_docx():
doc = Document()
doc.add_heading('烟台科研项目列表', 0)
conn = sqlite3.connect('research.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM projects')
rows = cursor.fetchall()
table = doc.add_table(rows=len(rows)+1, cols=6)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'ID'
hdr_cells[1].text = '项目名称'
hdr_cells[2].text = '负责人'
hdr_cells[3].text = '开始日期'
hdr_cells[4].text = '结束日期'
hdr_cells[5].text = '预算'
for i, row in enumerate(rows):
row_cells = table.rows[i+1].cells
row_cells[0].text = str(row[0])
row_cells[1].text = row[1]
row_cells[2].text = row[2]
row_cells[3].text = row[3]
row_cells[4].text = row[4]
row_cells[5].text = f'{row[5]:,.2f} 元'
doc.save('research_projects.docx')
print("文档已生成: research_projects.docx")
conn.close()
def main():
create_db()
while True:
print("\n请选择操作:")
print("1. 添加项目")
print("2. 查看项目")
print("3. 导出为.docx")
print("4. 退出")
choice = input("请输入选项: ")
if choice == '1':
add_project()
elif choice == '2':
view_projects()
elif choice == '3':
export_to_docx()
elif choice == '4':
break
else:
print("无效选项,请重新输入。")
if __name__ == '__main__':
main()
这段代码是一个完整的命令行程序,用户可以通过输入数字选择不同的操作。比如,添加新项目、查看已有项目、导出为.docx文件。
结语
好了,今天的分享就到这里。我们用Python做了一个简单的“科研信息管理系统”,并把它导出成了.docx文件,还结合了“烟台”的背景。虽然这个系统比较简单,但已经能完成基本的科研项目管理任务。
如果你对Python感兴趣,或者正在学习编程,建议你动手试试看。代码很简单,而且可以扩展很多功能,比如添加更多字段、支持搜索、导出为PDF等等。
最后,希望这篇文章能对你有所帮助,也欢迎你在评论区留言,告诉我你对这个系统的看法,或者你有什么想法可以加进来。
