一、引言
a) 编写目的
闽南师大软件工程专业的学生们在大二的时候都要做一份数据结构课程设计来检验自己的水平。为了凸显自己的能力,同学们所选的题目也是五花八门,令老师们看的头痛不已。开发者特此开发出了这个软件,既可以快速浏览目前所有的课题和学生信息,也可以对课题进行编辑修改,同时自带统计管理功能。该软件的使用者为该系统的开发者和负责课程设计的老师们。
b) 项目背景
该项目名称初步命名为:课程设计管理系统。分为六个模块:系统模块、数据插入模块、数据删除模块、数据修改模块、数据查询模块、数据库模块、数据模块和数据库连接模块。本项目的提出者和开发者均为计算机学院16级软件2班姚兴业。
c) 术语说明
一级界面:指菜单界面
二级界面:指所有直接通过一级界面进入的界面,基本为信息类别选择界面
三级界面:指所有直接通过二级界面进入的界面,基本为详细信息输入界面
d) 参考资料
无
二、 任务概述
a) 目标
本软件将提供一个既可以对数据进行快速查看,又可以进行简单的数据内容修改的工具型软件。
b) 运行环境
i. 硬件环境
一般的市面上的微机或者是更高档的微机、笔记本电脑。
运行时所需内存:4MB;安装时所需硬盘空间:2MB
ii. 软件环境:Windows XP/7/8.1/10,Microsoft Access 2007或以上版本
c) 需求概述
本软件具备以下功能:
i. 添加功能:通过系统向用户提供的选择界面来正确的添加学生信息或课程设计信息。在添加时将会限定学号和编号的唯一性,即当添加的学生学号或添加的课题编号重复时,系统将给出适当的提示并要求用户重新输入信息。
ii. 删除功能:通过系统向用户提供的选择界面来帮助用户删除指定编号的信息。
iii. 修改功能:用户将可以通过学号或编号来找到指定的学生或课题信息(如果它们存在的话),并通过系统提供的选择界面来对信息进行修改。
iv. 查询功能:用户可以通过学号或编号来查询学生或者课题的信息,如果信息不存在,系统将会给出适当的提示。
v. 显示全部功能:一键选择显示全部的学生信息或课题信息。
vi. 统计功能:用户可以通过系统提供的选择界面来对当前已有的信息进行统计。
vii. 读取功能:允许用户通过该功能向指定的Access数据库文件读取数据。
viii. 保存功能:将当前数据保存至本地Access数据库文件中。
d) 条件与限制
本系统旨在方便老师们对数据的管理,同时为了能更有效地执行任务,用户应先将存在excel中的输入导入至Access数据库中以方便系统读取。
三、 总体设计
a) 处理流程
系统启动后将会直接进入主界面中,用户可以根据自己需要输入指令执行相应功能,在事务处理完毕后,用户可以通过退出指令退出系统。
b) 总体结构和模块
系统总体结构如下图所示:
c) 功能分配
i. 系统功能
初始化系统
刷新一级界面
关闭系统
ii. 添加功能
进入二级界面
根据指令打开三级界面
输入数据
返回一级界面
iii. 删除功能
进入二级界面
根据指令打开三级界面
确认编号/学号后删除数据
返回一级界面
iv. 修改功能
进入二级界面
根据指令打开三级界面
选择要修改的信息
执行修改
返回一级菜单
v. 查询功能
进入二级菜单
根据指令打开三级菜单
根据编号/学号显示对应的信息
返回一级菜单
vi. 显示全部功能
进入二级菜单
根据指令显示全部学生信息或课题信息
vii. 统计功能
进入二级菜单
根据指令进入三级菜单
根据指令给出相关统计数据
循环执行功能
返回一级菜单
viii. 保存功能
刷新界面
确认是否保存
执行相应功能
返回一级菜单
ix. 读取功能
刷新界面
从Access数据库文件中读取数据
刷新一级菜单
四、 接口设计
a) 外部接口
i. 用户界面:采用经典的Windows指令台风格,通过最简单的指令输入形式执行相应功能。
ii. 软件接口:运行于Windows XP/7/8.1/10且具有Win32指令台的操作系统
iii. 硬件接口:支持市面上常见的或更高档的微机和笔记本电脑。
b) 内部接口
i. 系统模块:系统启动时自动调用,初始化界面后等待用户输入
ii. 数据插入模块:由系统模块调用,启动后调用数据模块的增加功能
iii. 数据删除模块:由系统模块调用,启动后调用数据模块的删除和查询功能
iv. 数据修改模块:由系统模块调用,启动后调用数据模块的修改和查询功能
v. 数据查询模块:由系统模块调用,启动后调用数据模块的查询功能
vi. 数据库模块:由系统模块调用,启动后调用数据库连接模块。
vii. 数据库连接模块:由数据库模块调用,启动后调用打开拦截、SQL语句查询、关闭连接等功能。
viii. 数据模块:可由数据插入模块、数据删除模块、数据修改模块、数据查询模块等模块调用,启动后可根据需要调用增加、删除、修改、查询等功能。
五、 数据结构设计
a) 类结构设计
i. BinaryNode(二叉树节点)
Public
a) data : DataType ….// 数据域
b) *leftNode : BinaryNode
// 左子树的根节点
c) *rightNode : BinaryNode
// 右子树的根节点
d) BinaryNode() .// 无参构造函数
e) BinaryNode(DataType &element)
// 含参构造函数
ii. BinaryTree(二叉排序树)
Private
a) *root : BinaryNode ………// 根节点
b) findMin(BinaryNode *bt) : DataType
// 查找bt的最小值
c) Release(BinaryNode *bt) : void
// 释放指针
d) PreOrder(BinaryNode *bt) : void
// 树的前序遍历
e) BinaryNode *bt
// 树的中序遍历
f) PostOrder(BinaryNode *bt) : void
// 树的后序遍历
g) isFind(DataType &element, BinaryNode *bt) :
*BinaryNode
// 查找节点,如果找到则返回该节点
h) Delete(DataType &element, BinaryNode *bt) :
void
// 删除节点
i) Length : int ……// 树的节点个数
Public
a) BinaryTree() ……..// 构造函数
b) ~BinaryTree() . // 析构函数
c) Release() : void … ..// 释放节点
d) PreOrder() : void …….// 前序遍历
e) InOrder() : void …….// 中序遍历
f) PostOrder() : void …….// 后序遍历
g) Insert(DataType &element) : void
// 插入新节点
h) isFind(DataType &element) : DataType
// 查找节点的data值
i) Delete(DataType &element) : void
// 删除节点
j) get_length() : int … . .// 获取length的值
iii. CurriculumDesign(课程设计题目)
Private
a) sub_info_ID : string // 项目编号
b) sub_info_name : string // 项目名称
c) sub_info_dataStruct : string // 实现技术
Public
a) CurriculumDesign() // 无参构造函数
b) CurriculumDesign(string sub_info_ID, string sub_info_name, string sub_info_subject)
// 含参构造函数
c) CurriculumDesign(const CurriculumDesign &element)
// 含参构造函数
d) ~CurriculumDesign() . .// 析构函数
e) Edit(string type_info, string new_element) : void
// 修改课题信息
f) operator < (const CurriculumDesign &left, const CurriculumDesign &right) : friend bool
g) operator > (const CurriculumDesign &left, const CurriculumDesign &right) : friend bool
h) operator == ( const CurriculumDesign &left, const CurriculumDesign &right ) : friend bool
i) operator = (CurriculumDesign &right) : void
j) 所有私有数据成员的Getter和Setter。
iv. Student(学生类)
Private
a) stu_info_name : string .. ..// 学生姓名
b) stu_info_ID : string ….// 学生学号
c) stu_info_class : string ..// 学生班级
d) stu_info_subject : string .// 学生专业
Public
a) Student(string stuID, string stuName, string stuClass, string stuSubject)
// 构造函数
b) Student(const Student &element) .// 构造函数
c) operator < (const Student&left, const Student &right) : friend bool
d) operator > (const Student&left, const Student &right) : friend bool
e) operator == (const Student&left, const Student &right) : friend bool
f) operator << (ostream &out, Student &temp) : friend ostream
g) operator = (Student &right) : void
h) saveToText() : void // 用于将信息保存至文本中
i) Edit(string type_info, string new_element)
// 修改学生信息
j) 所有私有数据成员的Getter和Setter。
k) individualResume() : string ..// 返回学生的基本信息
v. Management(管理类)
Private
a) *design : BinaryTree
// 课程设计树指针
b) *student : BinaryTree // 学生树指针
Public
a) Management() // 构造函数
b) ~Management() .. // 析构函数
c) InsertDesign(CurriculumDesign &element)
// 插入新的课题信息
d) InsertStudent(Student &element) . . // 插入新的学生信息
e) DeleteDesign(CurriculumDesign &element)
// 删除一个课题信息
f) DeleteStudent(Student &element) . // 删除一个学生信息
g) SearchDesign(string sub_info_ID) : CurriculumDesign
// 查找一个指定编号的课题
h) SearchStudent(string stu_info_ID) : Student
// 查找一个指定学号的学生
i) EditDesign(string sub_info_id, string type_info, string new_element):void
// 修改一个课题的信息
j) EditStudent(string stu_info_ID, string type_info, string new_element) : void
// 修改一个学生的信息
k) ShowDesign() : void . // 显示全部课题信息
l) ShowStudent() : void . // 显示全部学生信息
m) num_design() : int .. // 返回当前课题的数量
n) num_student() : int // 返回当前学生的数量
vi. CurriculumDesignManagement (main函数所在文件)
全局变量:
a) admin : Management // 用于调用Management的函数
b) cmd : string // 用于接收用户输入的指令
c) token : bool // 控制循环
全局函数:
a) Delay() …. // 用于刷新
b) title() // 用于显示标题,同时调用Delay()刷新界面
c) footer() …. // 用于显示结尾
d) InsertStudent() … // 插入新的学生信息
e) InsertDesign() . . // 插入新的课题信息
f) EditStudent() . // 编辑学生信息
g) EditDesign() // 编辑课题信息
h) DeleteStudent() … // 删除学生信息
i) DeleteDesign() .// 删除课题信息
j) SearchStudent() . // 查找一个学生
k) SearchDesign() . // 查找一个课题
l) ShowStudent() // 显示所有的学生
m) ShowDesign() .// 显示所有的课题
b) 理结构设计w
数据库采用Access。
c) 数据结构与程序的关系
i. 系统模块:调用全局变量admin,根据用户输入的指令cmd来调用相应的函数
ii. 数据插入模块:根据指令cmd调用admin中的两条插入函数。
iii. 数据删除模块:根据指令cmd调用admin中的两条删除函数。
iv. 数据查询模块:根据指令cmd调用admin中的四条查询函数。
v. 数据修改模块:根据指令cmd调用admin中的两条编辑函数。
六、 运行设计
a) 运行模块的组合
所有类与函数均用英文全称命名,类内参数采用“[类名缩写][信息类型][数据名]”的格式来命名。如:学生的基本信息姓名的参数名为“stu_info_name”。
b) 运行控制
本软件控制流程如下:首先由用户启动软件,之后根据屏幕上的提示输入指令,系统根据指令触发事件及调用相关模块。
c) 运行时间
每个功能都快的感受不出来
七、 出错设计处理
a) 本软件在系统关键处采用try-catch代码块将危险代码包围起来,保证用户触发异常时系统可以正常运行下去。
b) 在用户执行删除或修改等破坏性操作时,系统将会提供确认机制。
八、 安全保密设计
目前本软件的1.0.0版本尚未加入安全设计,如果有需要将在未来加入。
九、 维护设计
本软件完全依照RUP过程开发并充分考虑了软件的可维护性,详细编写了概要设计文档,以利于未来的二次开发。