软件工程概要详细设计说明书.docx
《软件工程概要详细设计说明书.docx》由会员分享,可在线阅读,更多相关《软件工程概要详细设计说明书.docx(16页珍藏版)》请在冰豆网上搜索。
软件工程概要详细设计说明书
《软件工程》课程设计报告
概要、详细设计报告
课程设计题目:
毕业生管理信息系统
项目负责人:
概要设计报告
1引言
1.1编写目的
在本毕业生信息管理系统项目的前一阶段,也就是需求分析阶段中,已经将用户对本系统的需求做了详细的阐述,这些用户需求已经在上一阶段中毕业生信息管理调查中获得,并在需求规格说明书中得到详尽得叙述及阐明。
本阶段已在系统的需求分析的基础上,对信息管理系统做概要设计。
主要解决了实现该系统需求的程序模块设计问题。
包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。
在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。
在下一阶段的详细设计中,程序设计员可参考此概要设计报告,在概要设计对信息管理系统所做的模块结构设计的基础上,对系统进行详细设计。
在以后的软件测试以及软件维护阶段也可参考此说明书,以便于了解在概要设计过程中所完成的各模块设计结构,或在修改时找出在本阶段设计的不足或错误。
1.2范围
毕业生对自己信息录入,修改,查询,学校对大学生毕业,就业信息的查询和核对。
1.3设计说明
由于学校对毕业生信息的管理的需求,该软件开发小组成员根据需求分析,设计毕业生信息管理系统概要分析。
1.4参考资料
1.软件需求工程
2.软件工程概论郑人杰
3.需求规格说明书软件开发小组
2概要设计
2.1项目背景
实现毕业生基本信息和就业信息维护,提高学校毕业生信息查询效率,满足毕业生信息查询的需要。
2.2需求规定
毕业生基本信息维护;
毕业生就业信息维护;
毕业生就业情况查询(不确定查询);
按专业划分的就业情况统计;
用户管理(含用户权限的设置)。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。
2.3运行环境
Windows2000Server以上操作系统
2.4处理流程
毕业生管理系统流程图:
2.5系统结构及模块划分
2.5.1结构
毕业生操作子系统,管理员操作子系统。
2.5.2模块描述
1.管理员数据:
记录管理员用户名和密码。
可以对毕业生的个人信息,进行增,删,改,查高级权限。
2.毕业生数据:
毕业生的编号、姓名、性别、民族、籍贯、毕业时间、专业、政治面貌;毕业生就业信息应该包括:
毕业生的编号、就业时间、工作单位、工作性质、职务、地址等。
毕业生登录名,密码等,这些信息用户可以自己维护,管理员可以根据这些信息了解用户。
3.身份验证:
用户通过登入界面输入用户名、密码和用户验证码,通过用户验证模块,根据相应的用户类型,提供相应的服务模块。
4.系统帮助 :
为毕业生如果觉得自己的有些信息有误可以通过电话方式联系系统管理人员来修改自己的信息。
3接口
3.1内部接口
内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。
具体参数的结构将在下面数据结构设计的内容中说明。
接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。
3.2外部接口
在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。
在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息。
外观上也要做到合理化,考虑到用户多对windows风格较熟悉,应尽量向这一方向靠拢。
3.3软件接口
服务器程序可使用JAVA提供的对SQLSERVER的接口,进行对数据库的所有访问。
服务器程序上可使用SQLSERVER的对数据库的备分命令,以做到对数据的保存。
在网络软件接口方面,使用一种无差错的传输协议,采用滑动窗口方式对数据进行网络传输及接收。
4运行设计
用户接收程序在有输入时启动接收数据模块,通过各模块之间的调用,读入并对输入进行格式化。
在接收数据模块得到充分的数据时,将调用网络传输模块,将数据通过网络送到服务器,并等待接收服务器返回的信息。
接收到返回信息后随即调用数据输出模块,对信息进行处理,产生相应的输出。
服务器程序的接收网络数据模块必须始终处于活动状态。
接收到数据后,调用数据处理/查询模块对数据库进行访问,完成后调用网络发送模块,将信息返回用户接收处。
运行控制将严格按照各模块间函数调用关系来实现。
在各信息模块中,需对运行控制进行正确的判断,选择正确的运行控制路径。
在网络传方面,用户接收处在发送数据后,将等待服务器的确认收到信号,收到后,再次等待服务器发送回答数据,然后对数据进行确认。
服务器在接到数据后发送确认信号,在对数据处理、访问数据库后,将返回信息送回用户接收处,并等待确认。
5系统数据结构的设计
5.1逻辑结构的设计
5.2物理结构的设计
物理数据结构设计主要是设计数据在模块中的表示形式。
数据在模块中都是以结构的方式表示。
1.用户登录信息
2.信息验证
3.错误信息
4.毕业生信息
6系统出错处理设计
6.1出错输出信息
程序在运行时主要会出现两种错误:
1、由于输入信息,或无法满足要求时产生的错误,称为软错误。
2、由于其他问题,如网络传输超时等,产生的问题,称为硬错误。
对于软错误,须在用户输入信息完成后判断及输入数据验证模块由数据进行数据分析,判断错误类型,再生成相应的错误提示语句,送到输出模块中。
对于硬错误,可在出错的相应模块中输出简单的出错语句,并将程序重置。
返回输入阶段。
出错信息必须给出相应的出错原因,例:
登陆超时,网络中断。
6.2出错处理对策
软错误:
重新输入,更新验证码。
硬错误:
要选择较可靠、稳定的服务器机种,保证系统运行时的可靠性。
详细设计报告
1.1编写目的
在前一阶段(概要设计说明书)中,已解决了实现该系统需求的程序模块设计问题。
包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。
在以下的详细设计报告中将对在本阶段中对系统所做的所有详细设计进行说明。
在本阶段中,确定应该如何具体地实现所要求的系统,从而在编码阶段可以把这个描述直接翻译成用具体的程序语言书写的程序。
主要的工作有:
根据在《需求分析说明书》中所描述的数据、功能、运行、性能需求,并依照《概要设计说明书》所确定的处理流程、总体结构和模块外部设计,设计软件系统的结构设计、逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等等)。
1.2背景
实现毕业生基本信息和就业信息维护,提高学校毕业生信息查询效率,满足毕业生信息查询的需要
1.3定义
SQLSERVER:
系统服务器所使用的数据库管理系统(DBMS)。
SQL:
一种用于访问查询数据库的语言
事务流:
数据进入模块后可能有多种路径进行处理。
主键:
数据库表中的关键域。
值互不相同。
外部主键:
数据库表中与其他表主键关联的域。
ROLLBACK:
数据库的错误恢复机制。
1.4参考资料
1.软件需求工程
2.软件工程概论郑人杰
3.需求规格说明书软件开发小组
2程序系统的结构
3程序设计说明
3.1功能
用户登录:
学生及管理人员通过登录进入系统
毕业生基本信息输入:
输入毕业生的基本信息
毕业生就业信息输入:
输入毕业生就业信息
毕业生基本信息查询及修改:
用户可登录系统查询毕业生基本信息,毕业生可对个人信息进行修改
毕业生就业信息查询及修改:
用户可登录系统查询毕业生就业信息,管理员可对毕业生就业信息进行修改
专业就业情况统计:
统计各专业毕业生就业情况
3.2性能
1.在每学年结束时是高峰时间,系统将能适应20000个用户同时使用,平均每个会话估计持续5分钟。
2.系统对用户请求的最大响应时间是2秒钟,在此时间内将响应结果显示在屏幕上
3.3输人项
毕业生基本信息、毕业生就业信息
3.4输出项
毕业生基本信息、毕业生就业信息、各专业就业情况
3.5算法
publicUserAdd(){
add(newJLabel("用户名"));
jTextFiledusername=newJTextField(16);
add(jTextFiledusername);
add(newJLabel("密码"));
jPassword1=newJPasswordField(16);
jPassword1.setEchoChar('■');
add(jPassword1);
add(newJLabel("确认密码"));
jPassword2=newJPasswordField(16);
jPassword2.setEchoChar('■');
add(jPassword2);
add(newJLabel("登录权限"));
StringItem[]={"————请选择————","毕业生","老师","管理员"};
jComboBoxPower=newJComboBox(Item);
add(jComboBoxPower);
JButtonjButtonOK=newJButton("确定");
add(jButtonOK);
JButtonjButtonCancel=newJButton("取消");
add(jButtonCancel);
毕业生基本信息输入:
publicReaderAdd(){
add(newJLabel("学号"));
jTextFieldStuNum=newJTextField(16);
add(jTextFieldStuNum);
add(newJLabel("姓名"));
jTextFieldStuName=newJTextField(16);
add(jTextFieldStuName);
add(newJLabel("性别"));
StringSex[]={"————请选择————","男","女"};
jComboBoxSex=newJComboBox(Sex);
add(jComboBoxSex);
add(newJLabel("名族"));
jTextFieldStuNumee=newJTextField(16);
add(jTextFieldStuNumee);
add(newJLabel("籍贯"));
jTextFieldStuNumee1=newJTextField(16);
add(jTextFieldStuNumee1);
add(newJLabel("院系"));
StringDepartment[]={"————请选择————","计算机与通信工程系","数学系","中文系","音乐系","物理系","美术系","外语系","体育系","化工系","食工系"};
jComboBoxDepartment=newJComboBox(Department);
add(jComboBoxDepartment);
add(newJLabel("班级"));
jTextFieldClass=newJTextField(16);
add(jTextFieldClass);
毕业生就业信息输入:
jTextFieldBookName=newJTextField(16);
add(jTextFieldBookName);
add(newJLabel("编号"));
jTextFiledAuthor=newJTextField(16);
add(jTextFiledAuthor);
add(newJLabel("职务"));
jTextFiledPrice=newJTextField(16);
add(jTextFiledPrice);
add(newJLabel("工作单位"));
jTextFiledPress=newJTextField(16);
add(jTextFiledPress);
add(newJLabel("工作性质"));
jTextFiledAddress=newJTextField(16);
add(jTextFiledAddress);
add(newJLabel("就业时间"));
year=newJSpinner();
year.setValue(now.get(Calendar.YEAR));
month=newJComboBox(mothArray);
dayArray[0]="日";
毕业生基本信息及就业信息查询:
publicReaderUpdate(
add(newJLabel("提示:
输入学号按“查询”定位要修改的记录"));
add(newJLabel("学号"));
jTextFieldStuNum=newJTextField(16);
add(jTextFieldStuNum);
add(newJLabel("姓名"));
jTextFieldStuName=newJTextField(16);
add(jTextFieldStuName);
add(newJLabel("性别"));
StringSex[]={"————请选择————","男","女"};
jComboBoxSex=newJComboBox(Sex);
add(jComboBoxSex);
add(newJLabel("民族"));
jTextFieldStuNumee=newJTextField(16);
add(jTextFieldStuNum);
add(newJLabel("籍贯"));
jTextFieldStuNumee1=newJTextField(16);
add(jTextFieldStuNum);
add(newJLabel("院系"));
StringDepartment[]={"————请选择————","计算机与通信工程系","数学系","中文系","音乐系","物理系","美术系","外语系","体育系","化工系","食工系"};
jComboBoxDepartment=newJComboBox(Department);
add(jComboBoxDepartment);
add(newJLabel("班级"));
jTextFieldClass=newJTextField(16);
add(jTextFieldClass);
JPanelPanel1=newJPanel();
Panel1.setLayout(newFlowLayout(FlowLayout.CENTER,22,0));
JButtonjButtonOK=newJButton("查询");
Panel1.add(jButtonOK);
publicBookUpdate(){
add(newJLabel("提示:
输入毕业生姓名按“查询”定位要修改的记录"));
add(newJLabel("毕业生姓名"));
jTextFieldBookName=newJTextField(16);
add(jTextFieldBookName);
add(newJLabel("编号"));
jTextFiledAuthor=newJTextField(16);
add(jTextFiledAuthor);
add(newJLabel("职务"));
jTextFiledPrice=newJTextField(16);
add(jTextFiledPrice);
add(newJLabel("工作单位"));
jTextFiledPress=newJTextField(16);
add(jTextFiledPress);
add(newJLabel("工作性质"));
jTextFiledAddress=newJTextField(16);
add(jTextFiledAddress);
add(newJLabel("就业时间"));
year=newJSpinner();
year.setValue(now.get(Calendar.YEAR));
month=newJComboBox(mothArray);
dayArray[0]="日";
3.6流程逻辑
3.7接口
本产品的用户一般需要通过终端进行操作,进入主界面后点击相应的窗口,分别进入相应的界面(如:
输入界面、输出界面)。
用户对程序的维护,最好要有备份。
3.8存储分配
为程序当中的数据结构在内存中开辟空间存储,如入到数据库中后在数据库的表中为其开辟存储空间。
3.9限制条件
输入的信息都封装在数据结构当中,不能独立存在,在向数据库中提交数据时必须一起提交而不能逐项提交。
输入数据的类型必须和定义的数据类型相匹配。
估计开发该系统需购买硬件、外部设备,开发工作量约需5个人月工作量
3.10测试计划
单元测试主要是针对编码阶段进行的,对每个功能模块进行测试,采用各种测试用例对模块接口、模块内部数据结构、逻辑路径、出错处理和边界条件进行测试。
如模块内部数据结构的测试,在程序编写过程中就要考虑数据的类型、范围等方面,测试时就要对这些方面进行测试。
输入一些不符合条件的数据,看能不能运行。
模块测试完成后,能保证每个功能模块能够单独地正常工作,但所有模块联结在一起能不能正常工作就是综合测试的任务了。
而在此系统中我采用的是自顶向下集成法,这种测试的优点在于能尽早地对程序的主要控制进行检验,因此能较早地发现错误。