1. 实验目的和要求
(1)熟悉结构化设计的基本概念和原则。
(2)掌握依据分析阶段E-R图得到设计阶段数据库表的方法。
(3)掌握流程图的符号、规范和绘制规则,使用流程图对系统方法和功能进行设计。
(3)掌握使用流程图进行结构化设计中的业务流程分析方法。
2. 实验原理与提示
在Visio2016集成开发环境下使用开展实验,利用相应的结构化设计方法,绘制E-R图并设计数据库表。结合系统功能绘制流程图,练习程序结构和流程。
结构化设计的任务是从软件需求规格说明书出发,设计软件系统的整体结构、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案,解决"怎么做"的问题。
在软件设计期间我们所做出的决策,将最终决定软件开发能否成功,更重要的是,这些设计决策将决定软件维护的难易程度。软件设计之所以如此重要,是因为设计是软件开发过程中决定软件产品质量的关键阶段。
3. 实验内容
在Visio2016集成开发环境下使用开展实验,利用相应的结构化设计方法,结合"在线购物系统"内容分别进行数据分析与设计、过程设计。
在线购物系统相关实体有:用户、管理员、商品、订单。
①用户属性:user_id,username, password, email, register_time。
②管理员属性:admin_id,admin_name, admin_password, permission_level。
③商品属性:product_id,product_name, price, stock, add_time。
④订单:order_id,total_amount, order_time, status
(1)使用结果化分析方法,确定实体之间存在的关系,并画出该系统的E-R图

(2)根据E-R图转换为关系模式时,实体之间1:1 的关系通过选择任一方主键作为外键嵌入另一方属性表;1:N的关系将少的一方主键作为外键嵌入多的一方属性表;N:M的关系可以通过创建关系表实现。根据E-R图,请给出数据库表,包含字段、类型、描述、外键。
示例:
- 用户表
|---------------|--------------|-----------------------|----------------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| user_id | INT | 主键 | - |
| username | VARCHAR(50) | 唯一,非空 | - |
| password | VARCHAR(255) | 非空(加密存储) | - |
| email | VARCHAR(100) | 唯一,非空 | - |
| register_time | DATETIME | 默认值 CURRENT_TIMESTAMP | - |
| admin_id | INT | 关联管理员(1:N关系) | Admin.admin_id |
②管理员表
|------------------|--------------|---------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| admin_id | INT | 主键 | - |
| admin_name | VARCHAR(50) | 唯一,非空 | - |
| admin_password | VARCHAR(255) | 非空(加密存储) | - |
| permission_level | TINYINT | 非空(1,普通,2.超级) | - |
③商品表
|--------------|--------------|-----------------------|----------------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| product_id | INT | 主键 | - |
| product_name | VARCHAR(50) | 唯一,非空 | - |
| stock | INT | 非空(加密存储) | - |
| price | DECIMAL(5,2) | 非空 | - |
| add_time | DATETIME | 默认值 CURRENT_TIMESTAMP | - |
| admin_id | INT | 关联管理员(1:N关系) | Admin.admin_id |
④订单表
|--------------|---------------|--------------------------------|----------------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| order_id | INT | 主键 | - |
| total_amount | DECIMAL(10,2) | 非空 | - |
| order_time | DATETIME | 默认值CURRENT_TIMESTAMP | - |
| status | ENUM | 非空('pending','paid','shipped') | - |
| user_id | INT | 关联用户(1:N关系) | User.user_id |
| admin_id | INT | 关联管理员(1:N关系) | Admin.admin_id |
⑤订单-商品关联表
|------------|-----------------------|-------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| order_id | INT | 主键之一,关联订单表(N:M关系) | - |
| product_id | INT | 主键之一,关联商品表(N:M关系) | - |
| 主键 | (order_id,product_id) | 联合主键 | |
⑥用户-商品关联表
|------------|----------------------|-------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| user_id | INT | 主键之一,关联拥护表(N:M关系) | - |
| product_id | INT | 主键之一,关联商品表(N:M关系) | - |
| 主键 | (user_id,product_id) | 联合主键 | |
(3)请绘制流程图描述用户注册的流程。
用户注册账号的流程如下:
- 用户通过点击"注册"按钮进入信息填写页面。
- 填写用户名/账号:需要唯一性校验。如已被占用重新进入信息填写页面。
- 输入密码:需符合复杂度要求(如长度、大小写字母、特殊字符)。如不符合要求进入信息填写页面。
- 再次输入密码:需与首次输入密码相同。如与首次输入不同重新进入信息填写页面。
- 点击"提交"或"注册"按钮后,完成注册。


在线编程教育平台:
应用场景:在线教育平台的个性化学习路径推荐
系统相关实体有:学生、教师、课程、学习路径、评估。
学生属性:student_id,username, password, email, register_time。
教师属性:teacher_id,teacher_name, teacher_password。
课程属性:course_id,course_name, course_description, difficulty_level, tag_id。
学习路径:path_id,path_name, path_difficulty,recommended_courses。
评估:assessment_id,assessment_type,questions,answers
数据分析:

数据设计:
①学生表
|---------------|--------------|-----------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| student_id | INT | 主键 | - |
| username | VARCHAR(50) | 唯一,非空 | - |
| password | VARCHAR(255) | 非空(加密存储) | - |
| email | VARCHAR(100) | 唯一,非空 | - |
| register_time | DATETIME | 默认值 CURRENT_TIMESTAMP | - |
②教师表
|------------------|--------------|----------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| teacher_id | INT | 主键 | - |
| teacher_name | VARCHAR(50) | 唯一,非空 | - |
| Teacher_password | VARCHAR(255) | 非空(加密存储) | - |
③课程表
|--------------------|-------------|-----------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| course_id | INT | 主键 | - |
| course_name | VARCHAR(50) | 唯一,非空 | - |
| course_description | TEXT | 非空 | - |
| difficulty_level | ENUM | 非空('初级', '中级', '高级' ) | - |
| Tag_id | TEXT | | - |
④学习路径表:
|---------------------|--------------|-----------------------|------|
| 字段名 | 数据类型 | 约束/描述 | 外键关联 |
| path_id | INT | 主键,自增 | - |
| path_name | VARCHAR(255) | 非空 | - |
| recommended_courses | TEXT | | - |
| path_difficulty | ENUM | 非空('初级', '中级', '高级' ) | |
⑤评估表:
|-----------------|------|----------------------|--------------------|
| 字段名 | 数据类型 | 约束/描述 | 外键关联 |
| assessment_id | INT | 主键,自增 | - |
| assessment_type | ENUM | 非空('测试', '作业', '考试') | - |
| questions | TEXT | | - |
| answers | TEXT | | - |
| course_id | INT | 关联课程(1:N关系) | courses(course_id) |
- 学生课程关联表
|------------|-----------------------|-------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| student_id | INT | 主键之一,关联学生表(N:M关系) | - |
| course_id | INT | 主键之一,关联课程表(N:M关系) | - |
| 主键 | (student_i,course_id) | 联合主键 | |
⑦教师课程关联表用户-商品关联表
|------------|------------------------|-------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| teacher_id | INT | 主键之一,关联教师表(N:M关系) | - |
| course_id | INT | 主键之一,关联课程表(N:M关系) | - |
| 主键 | (teacher_id,course_id) | 联合主键 | |
⑧学生-学习路径关联表
|------------|----------------------|---------------------|------|
| 字段 | 数据类型 | 约束/描述 | 外键关联 |
| student_id | INT | 主键之一,关联学生表(N:M关系) | - |
| path_id | INT | 主键之一,关联学习路径表(N:M关系) | - |
| 主键 | (student_id,path_id) | 联合主键 | |
学生选课的流程如下:

4.实验小结
通过本次结构化设计实验,我系统掌握了从需求分析到系统设计的完整实践流程。在实验过程中,我首先复习了结构化设计的核心原则,明确了模块化设计与高内聚低耦合的重要性,这为后续操作奠定了理论基础。实际操作环节,我以Visio2016为工具完成了两项关键任务:一是基于给定的E-R图进行数据库表设计,通过分析实体属性及关联关系,合理确定了主键设置与数据表结构,这个环节让我深刻理解了逻辑模型向物理模型转换的规范要求;二是运用流程图符号体系绘制系统业务流程,严格按照国家标准规范选择了判断框、处理框等图形元素,特别注重了流程线走向的逻辑连贯性,最终形成了符合结构化设计规范的完整流程图。在实验原理应用方面,我重点把握了软件设计阶段的关键决策价值。通过对比需求文档与设计成果,体会到设计阶段对软件可维护性的决定性作用。例如在数据库设计时,我主动增加了外键约束说明字段,这种细节处理虽然超出基本要求,但有效提升了表间关联的可读性。在绘制流程图过程中,我采用分层设计思路,将主流程与异常处理分支分开呈现,既保证了整体结构清晰,又避免了单张图纸的过度复杂化。实验中遇到的典型问题包括E-R图向数据库表转换时的属性拆分争议,以及流程图判断节点命名规范性问题。通过查阅教材和小组讨论,我明确了多值属性应拆分为独立关联表的转换规则,并总结出判断节点需采用"动词+条件"的标准化命名方式。这些实践反思让我认识到,结构化设计不仅需要掌握工具操作,更要培养严谨的工程化思维。最终完成的数据库设计文档包含5张规范化的数据表,流程图作品通过教师组互评获得优秀等级,验证了本次实验的实践成效。本次实验使我认识到,结构化设计是连接需求分析与代码实现的桥梁,每个设计决策都直接影响着软件质量。未来在参与实际项目时,我将更加注重设计阶段的可验证性,通过建立设计评审检查表等手段,提前规避潜在的实现风险。