简介:这份资源是江西财经大学软件工程课程期末大作业《图书销售网管理系统》的完整考核报告,面向软件工程专业学生及需要撰写课程设计文档的读者,帮助理解从需求分析到系统测试的全流程规范。包内仅含1个docx文档,压缩包约271KB,内容按引言、需求分析、软件设计、实现、测试等章节组织,结构完整。报告详细记录了开发背景与目的、经济/技术/操作三项可行性分析、分层DFD与数据字典、基于OOA/OOD的详细设计、面向对象实现及单元与集成测试等环节,并配有类图、动态模型等图示说明。目前已有2597人学习下载,适合作为软件工程导论课程报告的参考模板,也可用于学习如何将需求、设计、编码与测试串联成一份规范的课程文档。
1. 从一份 2015 年的图书销售网大作业说起:它到底能帮你省下多少事
如果你正在为软件工程导论期末大作业发愁,或者需要一份结构完整的课程设计参考,这份《图书销售网管理系统》文档大概率能让你少熬两个通宵。它不是零散的代码片段,而是一份从引言、需求分析、可行性论证、分层 DFD、数据字典,一路写到总体设计、详细设计、OOP 实现和测试用例的完整报告。开发环境写得很具体:Windows 7、JDK 1.4.2、Tomcat 6.01、Access 2003、MyEclipse 6.51,技术栈是 JAVA WEB 加数据库加网页制作。适合谁?一是正在做同类课程设计、需要对照章节结构的人;二是想看看一份合格的软件工程文档到底该包含哪些图、哪些表、哪些字段定义的人。我翻完这份文档最大的感受是:它的价值不在代码有多复杂,而在于把“需求到设计到测试”这条链路走通了,每一步都有可验证的产出物。
2. 需求分析怎么落地:分层 DFD 与数据字典的拆解方法
2.1 可行性分析不是走过场,三个维度各有各的写法
很多同学写可行性分析就是三句话带过,但这份文档给了可抄的框架。经济可行性从“中小型电子商务管理系统”定位出发,论证不需要高额费用支出,同时能节省人力财力物力、加速物流资金流信息流运转。技术可行性列了七条:开发技术是 JAVA WEB 加数据库加网页制作,开发工具 Eclipse,开发人员分编程组、UI 界面组、数据库开发组、网页制作组、架构组、信息系统开发组、网络和通信技术组,硬件要求存储量大运行速度快,操作系统 Windows 2000 及以上,浏览器 IE 7.0 及以上,管理人员需要短时间培训。操作可行性强调界面设计充分考虑管理人员和用户习惯,数据录入迅速规范可靠,统计准确,适应力强容易扩充。
这三段的结构值得直接借鉴:经济讲投入产出比,技术讲工具链和人员配置,操作讲用户接受度和易用性。每一条都不是空话,都有具体的支撑点。我一般会建议把技术可行性里的“开发人员”部分改成你实际的分工,哪怕只有三个人,也要写清楚谁负责哪块,这样答辩时不会被问倒。
2.2 分层 DFD 怎么画:顶层图到用户部分到管理员部分
文档里的 DFD 分了三层。顶层数据流图只有三个元素:网上图书销售管理系统、用户、发货员。用户部分的数据流图展开后,出现了订单信息表、退单信息表、管理员、图书信息、供应商信息、用户信息表、图书信息表。管理员部分的数据流图则对应管理员的各项操作。
画 DFD 的常见做法是:先定外部实体,再定数据存储,最后画数据流。顶层图只画系统与外部实体的交互,不画内部细节。第二层展开时,把用户和管理员分开画,因为这两类角色的数据流方向完全不同。用户是“浏览→下单→退单→评价”,管理员是“登录→管理图书→处理订单→处理退单→回复评价”。分开画的好处是逻辑清晰,不会把两股数据流搅在一起。
提示:DFD 里的数据存储名称要和数据字典里的数据流名称对得上,否则答辩时容易被追问“这个表从哪来的”。
2.3 数据字典的字段定义:六张表的完整清单
文档给出了六类数据字典,我整理成表格方便对照:
| 数据字典 | 包含字段 |
|---|---|
| 管理员 | 编码、姓名、通行证号、密码 |
| 客户 | 编码、姓名、联系电话、收货地址、银行账号、密码 |
| 图书信息 | 出版社、作者/主编、库存量、图像 |
| 订单信息 | 订单编码、订单日期、客户编码、购买图书信息 |
| 退单信息 | 退购图书信息、管理员退购处理信息 |
| 评价信息 | 购买图书名称、客户评价 |
这份字典的字段粒度不算细,比如图书信息里没有单独列书名和 ISBN,但作为课程设计够用了。如果你要扩展,建议把图书信息补全为:图书编码、书名、类别、单价、出版日期、版次、出版社、作者/主编、库存量、图像。订单信息补上客户姓名和客户地址,退单信息补上单据编码和单据日期。这些在后面的类图里其实都出现了,数据字典和类图保持一致是加分项。
3. 从 DFD 到类图:总体设计与详细设计的衔接
3.1 系统功能模块图:前台六个模块、后台六个模块
总体设计依据 DFD 把系统分成两类角色:购书者和图书销售系统管理员。购书者部分(前台)有六个模块:用户登录和注册、图书选购、收藏夹、购物车、订单信息查询及管理、图书评价。管理员部分(后台)也有六个模块:管理员注册和登录、公告管理、图书管理、订单信息处理、退单信息处理、评价信息处理。
这个划分方式很标准,前台围绕“买书”这个核心动作展开,后台围绕“管书管单”展开。每个模块的功能描述都很具体,比如用户注册时必须提供用户名、密码、电子邮件、安全提示问题、安全答案;图书选购支持按名称、种类、价格、厂家组合查询;购物车显示书名、单价、折扣。这些细节在写需求规格说明书时可以直接引用。
3.2 类图设计:参与者类与系统类的关系
详细设计部分基于 OOA 和 OOD,先定义了系统中参与者的类。账号类有账号、姓名、地址、电话、密码五个属性和对应的设置方法。管理员类继承账号类,增加了银行账号属性和公告管理、图书信息管理、订单管理、退单管理、评价管理等方法。顾客类也继承账号类,增加了查找图书、收藏夹、购物车、订单、评价、退单等方法。
系统其他的类包括图书类(图书编码、名称、类别、单价、出版日期、版次、出版社、作者/主编、库存量)、评价类(客户账号、购买图书名称、客户评价)、订单/配送单类(单据编码、单据日期、客户账号、客户姓名、购买图书信息、客户地址、客户电话)。类之间的关系用关系图表示,顾客与订单、评价、退单关联,管理员与图书、订单、退单、评价关联。
这里有个设计上的小问题:图书类里没有“图书编码”作为主键,但订单信息里引用了“购买图书信息”,实际实现时需要补一个图书 ID 来建立外键关联。我一般会在类图阶段就把主键标出来,不然后面写 SQL 建表时容易漏。
3.3 动态模型:三张时序图把交互流程说清楚
文档创建了三张时序图。顾客订购时序图:用户登录→登录模块保存客户 ID 到缓存→提交给商品查询模块→客户输入查询条件→显示商品列表→客户提交商品 ID→订购模块生成订单→提交数据模块保存→提示订购成功。顾客退订时序图:用户登录→保存客户 ID→提交给订单查询模块→显示当前所有订单→客户选择需要删除的商品 ID→订单处理模块提交删除信息给数据模块→保存→提示删除成功。管理员处理订单时序图:管理员登录→保存管理员 ID→提交给订单处理模块→显示未处理列表→管理员提交商品 ID→查询库存→库存充足则接受订单→提交数据模块更新→返回成功信息→提示操作成功。
这三张时序图的画法可以直接套用。注意每个步骤都要有明确的模块名称和数据流向,不能只写“用户操作→系统响应”。时序图的价值在于把“谁在什么时候把什么数据交给谁”说清楚,这也是后面写测试用例的基础。
4. 实现与测试:OOP 落地和五组测试用例的写法
4.1 基于 OOP 的软件实现思路
文档在实现部分提到,基于总体设计的各个功能模块和详细设计已经建立的各个类及类关系,运用 Dreamweaver 和 Eclipse 对相应功能区进行代码填充。虽然文档没有贴出完整代码,但给出了实现路径:先有类图,再有类的方法定义,最后在 Eclipse 里写 Java 代码,在 Dreamweaver 里做前端页面。
如果你要照着实现,我一般会按这个顺序来:先建数据库表(Access 2003 或换成 MySQL),再写实体类(Account、Admin、Customer、Book、Order、Evaluation),然后写 DAO 层做数据库操作,接着写 Service 层做业务逻辑,最后写 Servlet 或 JSP 做页面交互。前端用 HTML/CSS/JavaScript,后端用 Java,数据库用 Access 或 MySQL,这是 2015 年前后课程设计最常见的组合。
// 实体类示例:Book.java public class Book { private String bookId; // 图书编码,主键 private String name; // 书名 private String category; // 类别 private double price; // 单价 private String publishDate; // 出版日期 private String edition; // 版次 private String publisher; // 出版社 private String author; // 作者/主编 private int stock; // 库存量 private String image; // 图像路径 // 构造方法 public Book() {} public Book(String bookId, String name, double price, int stock) { this.bookId = bookId; this.name = name; this.price = price; this.stock = stock; } // getter 和 setter 省略 public String getBookId() { return bookId; } public void setBookId(String bookId) { this.bookId = bookId; } public int getStock() { return stock; } public void setStock(int stock) { this.stock = stock; } }这段代码的逻辑说明:Book 类对应数据字典里的图书信息表,每个字段都有明确的类型。bookId 作为主键,stock 用 int 类型方便做库存增减。参数说明:bookId 是字符串类型,因为课程设计里常用“B001”这种格式;price 用 double 支持小数;stock 用 int 因为库存是整数。实际建表时,bookId 设为主键,name 和 category 建索引方便模糊查询。
4.2 测试用例的设计:注册、查看、购买、评论、管理
文档给出了五组测试用例,每组都按“测试内容→前置条件→基本路径→扩展→结果→结论”的结构写。注册新账号的测试路径有十步,从选择注册功能到输入用户名密码、再次输入密码、输入验证码、系统检查验证码、检查用户名是否被注册、核对两次密码、输入个人资料、检查资料合法性、新增账号并通知成功。扩展部分列了五种异常情况:取消注册、验证码错误、用户名已注册、密码不一致或过短、个人资料不合法。
图书查看功能分三个子测试:按分类查找、搜索关键字、查看详细信息。购买图书测试覆盖了购买、收藏、预约三种操作。图书评论测试有八步基本路径和四种扩展。图书信息管理功能分添加和删除两个子测试,添加图书信息时要求输入商品编号、封面图片、图书信息、价格信息、销售信息、内容信息,然后输入分类,系统保存并告知成功。
这套测试用例的写法值得直接抄作业。每个用例都有前置条件,基本路径按步骤编号,扩展部分覆盖异常分支,最后给出结果和结论。我一般会建议在“扩展”部分至少写三种异常,这样测试覆盖率看起来更完整。
-- 建表语句示例:图书信息表 CREATE TABLE book ( book_id VARCHAR(20) PRIMARY KEY, -- 图书编码,主键 name VARCHAR(100) NOT NULL, -- 书名,非空 category VARCHAR(50), -- 类别 price DECIMAL(10,2), -- 单价,保留两位小数 publish_date VARCHAR(20), -- 出版日期 edition VARCHAR(20), -- 版次 publisher VARCHAR(100), -- 出版社 author VARCHAR(50), -- 作者/主编 stock INT DEFAULT 0, -- 库存量,默认0 image VARCHAR(200) -- 图像路径 ); -- 插入测试数据 INSERT INTO book VALUES ('B001', '软件工程导论', '教材', 45.00, '2015-01', '第6版', '某出版社', '张某某', 100, '/images/b001.jpg'); INSERT INTO book VALUES ('B002', 'Java Web开发', '技术', 59.00, '2014-08', '第2版', '某出版社', '李某某', 50, '/images/b002.jpg');这段 SQL 的逻辑说明:book 表对应图书信息数据字典,字段类型根据实际数据特征选择。book_id 用 VARCHAR 因为编码可能包含字母;price 用 DECIMAL 避免浮点误差;stock 用 INT 并设默认值 0。参数说明:VARCHAR(20) 足够存“B001”这类编码;DECIMAL(10,2) 表示总共 10 位、小数 2 位,最大 99999999.99;image 存路径而不是图片本身,这是常见做法。
5. 避坑与排查:这份文档在实际使用中的五个常见问题
5.1 数据字典和类图字段对不上
现象:数据字典里图书信息只有出版社、作者、库存量、图像四个字段,但类图里图书类有九个属性。原因:文档在不同章节由不同部分拼合,数据字典写得简略,类图写得详细。解决:以类图为准补全数据字典,或者以数据字典为准精简类图,两者必须一致。我一般会以类图为最终标准,因为类图直接对应代码实现。
5.2 DFD 里的数据存储没有对应数据字典
现象:用户部分的数据流图里出现了“订单信息表”“退单信息表”“用户信息表”“图书信息表”,但数据字典只定义了六类数据流,没有明确这些表的字段。原因:DFD 和数据字典是分开写的,没有做交叉检查。解决:每个数据存储都要在数据字典里有对应的条目,字段可以简略但不能缺失。答辩时如果被问到“这个表里有什么”,要能答出来。
5.3 开发环境版本过旧导致无法运行
现象:文档写的 JDK 1.4.2、Tomcat 6.01、Access 2003、MyEclipse 6.51,这些版本现在很难找到,而且和新系统不兼容。原因:文档写于 2014 年 12 月,当时的环境就是如此。解决:换成 JDK 8 或 11、Tomcat 8 或 9、MySQL 5.7 或 8.0、Eclipse 或 IntelliJ IDEA。代码逻辑不用大改,主要是数据库连接和 Servlet 配置需要调整。常见做法是把 Access 换成 MySQL,因为 Access 不支持并发,而且 JDBC 驱动不好找。
5.4 测试用例缺少预期结果
现象:文档的测试用例写了基本路径和扩展,但没有明确写“预期结果”这一栏,只在最后写了“结果:注册成功”“结论:测试成功”。原因:课程设计的测试部分通常简化处理。解决:补上预期结果列,每一步操作后系统应该显示什么、数据库应该发生什么变化,都要写清楚。比如注册成功后,用户信息数据库应该新增一条记录,且密码字段是加密存储的。
5.5 时序图和代码实现脱节
现象:时序图画得很详细,但实现部分只有一句话“运用 Dreamweaver 和 Eclipse 对相应功能区进行代码填充”,没有给出具体的类方法调用关系。原因:文档的重点在分析和设计,实现部分写得简略。解决:把时序图里的每个步骤映射到具体的方法调用。比如“登录模块保存客户 ID 到缓存”对应session.setAttribute("customerId", customerId),“订购模块生成订单”对应orderService.createOrder(customerId, bookId, quantity)。这样代码写起来就有据可依。
6. 进阶用法:把这份文档改造成可运行的课程设计项目
如果你不满足于只交一份文档,想把这份报告变成能跑起来的系统,我一般会按这个路径来。第一步,把数据字典和类图合并,整理出完整的数据库表结构,至少包含用户表、管理员表、图书表、订单表、退单表、评价表六张表。第二步,用 MySQL 建库建表,把文档里的测试数据插进去。第三步,用 Java 写实体类和 DAO 层,DAO 层用 JDBC 连接数据库,每个实体类对应一张表。第四步,写 Service 层实现业务逻辑,比如用户注册时检查用户名是否重复、密码是否一致、验证码是否正确。第五步,用 Servlet 加 JSP 做页面,或者用 Spring Boot 加 Thymeleaf 做前后端。第六步,把文档里的五组测试用例跑一遍,记录实际结果和预期结果的差异。
# 项目目录结构建议 book-sales-system/ ├── src/ │ ├── com/book/entity/ # 实体类:Book, Customer, Admin, Order, Evaluation │ ├── com/book/dao/ # DAO层:BookDao, CustomerDao, OrderDao │ ├── com/book/service/ # Service层:BookService, OrderService │ └── com/book/servlet/ # Servlet:LoginServlet, BookServlet, OrderServlet ├── WebContent/ │ ├── css/ # 样式文件 │ ├── js/ # JavaScript文件 │ ├── images/ # 图书封面图片 │ └── WEB-INF/ │ ├── web.xml # Servlet配置 │ └── lib/ # 依赖jar包:mysql-connector-java.jar └── sql/ └── init.sql # 建表语句和测试数据这个目录结构是 Java Web 项目的常见做法。entity 放实体类,dao 放数据库操作,service 放业务逻辑,servlet 放请求处理。WebContent 下放前端资源和配置。sql 目录放初始化脚本。参数说明:mysql-connector-java.jar 的版本要和 MySQL 版本匹配,MySQL 8.0 需要 8.0 以上的驱动。web.xml 里配置 Servlet 的映射路径,比如/login对应 LoginServlet。
验证方法:启动 Tomcat 后,先访问注册页面,注册一个新用户,看数据库里是否新增记录。然后登录,搜索图书,加入购物车,下单,看订单表是否新增记录。最后用管理员账号登录,处理订单,看订单状态是否更新。每一步都要对照文档里的测试用例,确认基本路径和扩展路径都能走通。
注意:文档里的“银行账号”字段在测试用例中没有用到,实际实现时可以保留但不必做支付功能,课程设计通常不要求真实支付接口。
从那以后我每次拿到这类课程设计文档,都会先做一件事:把数据字典、类图、测试用例三部分交叉比对一遍,字段对不上的地方当场标记,不然后面写代码时一定会翻车。这份 2015 年的图书销售网管理系统文档,结构完整、章节清晰、测试用例写得规范,作为软件工程导论的期末大作业参考,它的价值在于让你看到一份合格的报告应该长什么样。希望帮到你。
本文还有配套的精品资源,点击获取