跳到主要内容

2.6 小型信息系统的组建

知识点​

1.什么是"小型"信息系统​

小型信息系统指规模小、用户少、功能相对单一、开发周期短的信息系统,通常服务一个班级、一个社团、一家小店或一个家庭。

判断标准(三条满足即可):

  1. 用户规模——几十到几百人,不追求高并发;
  2. 功能范围——解决一个明确业务(借书、测温、点单),不追求大而全;
  3. 资源投入——一两人即可开发,用现成技术栈,成本低。

典型例子:班级图书借阅系统、教室环境监测系统、社团报名系统、小店点单系统、宿舍报修系统。

为什么要学"小型"系统:它是信息系统的完整缩影——需求、设计、数据库、编码、测试、部署、运维,一个环节都不少,只是规模缩小。学会了小型系统,大系统的框架是一样的。

2.开发的完整流程(七步,必背)​

步骤做什么产出
1. 需求分析搞清楚"给谁用、解决什么问题"需求清单、功能列表
2. 可行性分析判断"能不能做、值不值得做"可行性结论
3. 方案设计定架构、定技术、定数据库、画界面系统方案、原型图
4. 开发实现建库、写后端、做前端、接硬件可运行的版本
5. 系统测试验证功能对不对、能不能扛住测试报告、缺陷清单
6. 部署上线放到真实环境让别人用可访问的地址
7. 运维与迭代修问题、加功能、做备份版本更新记录

一句话记法:要什么 → 能不能 → 怎么做 → 做出来 → 试试看 → 用起来 → 养下去。

最重要的经验:需求分析做不好,后面全在返工。这是所有项目的第一规律。

3.第一步:需求分析​

要回答四个问题:

问题说明举例(班级图书借阅系统)
谁用(用户角色)列出所有角色及权限学生(借还、查询)、管理员(录入、统计)
做什么(功能需求)每个角色要做哪些事扫码借书、到期提醒、按书名搜索
什么要求(性能需求)速度、并发、容量、可用性页面 2 秒内打开、支持 50 人同时用
什么限制(约束条件)预算、时间、技术、设备两周完成、零预算、只能用学校机房

功能需求要写成"可验收"的句子:

  • 差的写法:"能管理图书"——太模糊,做完无法判断对错;
  • 好的写法:"管理员能录入图书(书名、作者、ISBN、册数),学生能按书名或作者模糊搜索,借书后 30 天内未还将收到提醒"——明确、可测。

用户故事的常用句式:

"作为(某角色),我希望(做某事),以便(达成某目的)。"

例:作为学生,我希望按书名搜索图书,以便快速知道能不能借到。

4.第二步:可行性分析​

维度要判断什么
技术可行性现有技术与人员能力能否实现
经济可行性成本(设备、软件、人力)是否可接受
操作可行性用户是否愿意用、会不会用
时间可行性能否在规定周期内完成
法律与伦理可行性是否涉及隐私、版权、数据合规问题

结论不一定是"做"——也可能"缩小范围做"或"用现成产品代替"。能判断"不该做",也是一种能力。

小型项目最常踩的坑:功能贪多。先做"最小可用版本"(MVP)——只实现最核心的一条业务闭环,跑通后再加功能。

5.第三步:方案设计​

(1)选架构:B/S 还是 C/S

对比B/S(浏览器/服务器)C/S(客户端/服务器)
安装免安装,有浏览器就行每台设备都要装客户端
升级只改服务器,用户无感客户端要逐台更新
跨平台好(电脑手机都能用)差(要分别开发)
性能与体验一般更好,能调用本地资源
适用小型系统首选专业软件、需硬件交互

结论:小型信息系统优先选 B/S,因为维护成本最低。

(2)划分功能模块(自顶向下)

以班级图书借阅系统为例:

模块子功能
图书管理录入、修改、下架、分类
借阅管理借书、还书、续借、逾期计算
查询统计按书名/作者搜索、借阅排行、逾期名单
用户管理学生名册导入、权限分配
提醒通知到期提醒、逾期通知

模块划分原则:高内聚、低耦合——一个模块内部的事紧密相关,模块之间尽量少依赖。这样改一个模块不至于牵连全局。

(3)设计数据库(第3单元会详细展开,这里先建表)

表名主要字段
bookid、书名、作者、ISBN、册数、在架数
readerid、学号、姓名、班级
borrowid、图书id、学号、借出日期、应还日期、归还日期

设计要点:用 id 做主键,表之间用 id 关联,不要用"书名"当关联字段(书名会重复、会改)。

(4)画界面原型

用纸笔或原型工具画出主要页面:登录页、图书列表页、借阅页、统计页。先画再做,能省掉大量返工。

6.第四步:开发实现​

(1)常见技术选型(小型系统够用就好)

层次可选技术说明
前端HTML+CSS+JavaScript、Bootstrap做页面与交互
后端Python Flask/Django、PHP、Node.js处理业务逻辑与接口
数据库SQLite(零配置、单文件)、MySQL小系统用 SQLite 足够
硬件掌控板、Arduino、树莓派、USB 摄像头采集现场数据
部署校园服务器、云服务器、树莓派本地看访问范围

选型原则:用自己最熟的,不用最时髦的;能跑起来比架构漂亮重要。

(2)后端的最小骨架(以 Flask 为例)

from flask import Flask, request, jsonify

app = Flask(__name__)

# 模拟数据存储,实际应写入数据库
books = []

@app.route("/api/books", methods=["GET"])
def list_books():
return jsonify(books)

@app.route("/api/books", methods=["POST"])
def add_book():
data = request.get_json()
books.append({"id": len(books) + 1, "name": data["name"]})
return jsonify({"ok": True})

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)

这段代码说明了三件事:

  1. 路由决定"访问哪个地址执行哪段代码";
  2. 接口用 JSON 传数据,前后端靠它对接;
  3. 数据要落库——示例里的列表只是演示,真实系统必须写数据库,否则重启就丢。

(3)硬件接入(如果是物联网类系统)

采集端循环执行"读—判—传":

import time

def loop():
while True:
value = read_sensor() # 读:采集数据
if value > 30: # 判:与阈值比较
upload(value, "alarm") # 传:上报并可触发告警
else:
upload(value, "normal")
time.sleep(60) # 每 60 秒一次

三个工程细节:

  1. 加异常捕获——传感器读不到时不能让程序崩掉;
  2. 加上报失败重试——网络不稳定是常态;
  3. 控制采集频率——太频繁耗电、占带宽,太稀疏会漏掉异常。

7.第五步:系统测试​

测试不是"点几下看看",而是有方法、有记录。

测试类型目的举例
功能测试每个功能是否符合需求借书后"在架数"是否减 1
边界测试极端输入是否正常借第 0 本、借超过馆藏数、空书名
异常测试出错时是否优雅处理断网、断电、数据库被占用
性能测试多少人同时用会卡50 人同时查询响应时间
兼容测试不同设备能否正常用手机、平板、电脑浏览器
安全测试有无越权与注入风险学生能否直接访问管理页面

测试用例的写法(四要素):

要素内容
前置条件已登录为学生账号
操作步骤搜索"Python"→ 点击"借阅"
预期结果提示借阅成功,在架数减 1
实际结果与预期一致/不一致(记录缺陷)

边界值举例(最能发现问题):

  • 借书数量上限是 3 本 → 测 2 本、3 本、4 本;
  • 借期 30 天 → 测第 29 天、第 30 天、第 31 天;
  • 输入框限 20 字 → 测 19 字、20 字、21 字。

8.第六步:部署上线​

三种常见部署方式:

方式适用要点
本机运行单人使用、演示电脑关机即停,不能长期服务
校园服务器/机房主机校内使用需固定 IP、开机自启、定时备份
云服务器校外也能访问需配置安全组、域名、HTTPS

上线的四个必做动作:

  1. 改掉默认口令,数据库不用空密码;
  2. 配置开机自启与进程守护(崩了能自动拉起);
  3. 设置定时备份(数据库每天备份到另一块盘或云端);
  4. 打开日志(谁访问了、报了什么错,都要留痕)。

部署 ≠ 完工:真正的考验从"别人开始用"那一刻开始。

9.第七步:运维与迭代​

工作内容
日常监控服务是否在线、磁盘是否写满、有无异常报错
数据备份定期备份并验证能否恢复(只备份不验证等于没备份)
问题修复收集用户反馈,按影响面排序处理
功能迭代按"最小可用"原则小步增加
文档维护更新使用说明、部署说明、数据库结构说明

版本管理建议:每次发布记录"改了什么、什么时候、谁改的",出问题能快速回退。

用户培训常被忽略:系统再好,没人会用等于零。一份三页的图文操作说明,往往比多加三个功能更有价值。

10.完整案例:教室环境监测系统​

(1)需求

  • 每 5 分钟采集温度、湿度、光照;
  • 教师可在网页查看当天曲线与实时值;
  • 温度高于 30 ℃ 或湿度低于 30% 时在页面标红提醒。

(2)方案

项选择
架构B/S
采集端掌控板+温湿度传感器+光敏传感器
通信校园 Wi-Fi,MQTT 上报
后端Flask 接收数据并提供接口
数据库SQLite,表 env_data(时间、温度、湿度、光照)
前端网页表格+折线图

(3)关键设计点

  1. 时间是主键的一部分——按时间查询是最高频操作,要建索引;
  2. 数据量估算——每 5 分钟一条,一天 288 条,一学期约 3 万条,SQLite 完全够用;
  3. 阈值放在配置里,不写死在代码中,方便调整;
  4. 异常要留痕——传感器离线也记一条"缺测",否则曲线会"骗人"。

(4)测试要点

  • 拔掉传感器 → 页面应显示"离线"而不是显示上一次的旧值;
  • 断电重启 → 应自动恢复上报;
  • 把系统时间改错 → 检查数据时间是否正常(时间同步很重要)。

(5)价值

把"凭感觉"变成"看数据":什么时候教室最闷、哪个时段光照不足、空调开到几点最合适——这些结论只有连续数据才能给出。

11.速查表​

序号考点结论
1小型系统判断标准用户少、功能单一、周期短、成本低
2开发七步需求 → 可行 → 设计 → 开发 → 测试 → 部署 → 运维
3最关键的一步需求分析(做不好全返工)
4需求四问谁用、做什么、什么要求、什么限制
5需求写法要求可验收,避免"能管理"这类模糊表述
6可行性五维技术、经济、操作、时间、法律伦理
7最小可用版本MVP,先跑通核心闭环
8小型系统首选架构B/S(免安装、易升级)
9模块划分原则高内聚、低耦合
10数据库关联字段用 id 主键,不用名称
11小系统数据库SQLite 足够
12选型原则用最熟的,不用最时髦的
13接口数据格式JSON
14采集程序三动作读 → 判 → 传
15采集频率权衡太频耗电占带宽,太疏漏异常
16测试类型功能、边界、异常、性能、兼容、安全
17测试用例四要素前置条件、步骤、预期结果、实际结果
18最易发现问题的测试边界值测试
19上线必做改口令、自启守护、定时备份、开日志
20备份的关键验证能否恢复
21运维常被忽略用户培训与操作文档
22部署不等于完工真正考验从用户使用开始

12.课堂提示(讲课参考)​

  • 本节的落点是"做一遍",不是背流程。建议用 4~6 课时做一个真实小项目(班级图书借阅或教室测温),学生分组承担需求、数据库、后端、前端、测试五类角色,两周一迭代。
  • "需求写不清楚"要现场演示后果:教师给出"做一个图书系统"这一句话,让三组学生各自理解并画出功能清单,结果必然各不相同——顺势讲"可验收的需求"怎么写。这个活动十分钟,效果极好。
  • B/S 与 C/S 别讲架构图,讲"改一次功能要动几台机器":B/S 只改服务器,C/S 要跑遍每台电脑升级。学生立刻明白为什么小系统选 B/S。
  • 测试环节建议"互相找茬":两组交换系统,各写 10 条测试用例去挑对方的错,包括边界值(借第 4 本、输 21 个字、把书名输成空格)。学生会发现"自己觉得没问题的功能,别人一试就崩"。
  • 务必强调备份与日志:很多教学项目上线后数据一丢就全白做。让学生亲手做一次"删库→用备份恢复"的演练,比讲十遍"要备份"都管用。