实验二-结构化分析与设计

博客班级 软件工程
作业链接 第二次实验
作业要求 完成第二次实验
学号 3180701333

一.实验目的

(1)掌握结构化的需求分析方法;

(2)掌握分层数据流图的绘制、数据字典和加工说明的编制;

(3)掌握数据流图映射为软件结构图的方法;

(4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;

(5)掌握测试的基本方法。

二.实验内容

(1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;

(2)绘制系统的分层数据流图,并给出数据字典;

(3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;

(4)为关键模块进行详细设计,如绘制关键模块的流程图;

(5)实现系统部分功能并测试。

【实例1】机票预订系统

参考:

(1)携程网:https://flights.ctrip.com/international/search/domestic

(2)去哪儿:https://www.qunar.com/?ex_track=auto_4e0d874a

为了方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,旅客在飞机起飞前一天凭取票通知和账单交款取票,系统核对无误即印
出机票给顾客

【实例2】教材订购系统

销售系统的工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票、登记并返给教师或学生领书单,教师或学生即可去书库领书。
采购系统的主要工作过程为:若是脱销教材,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书单通知给教材发行人员。

【实例3】图书管理系统

参考:http://lib.ahpu.edu.cn/

三.实验步骤

(1)复习结构化的分析与设计方法的主要过程;

答:结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达 为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。 结构化分析的步骤如下:
                     a.分析当前的情况,做出反映当前物理模型的 DFD; 
                     b.推导出等价的逻辑模型的 DFD; 
                     c.设计新的逻辑系统,生成数据字典和基元描述; 
                     d.建立人机接口,提出可供选择的目标系统物理模型的 DFD; 
                     e.确定各种方案的成本和风险等级,据此对各种方案进行分析;
                     f.选择一种方案; ⑦建立完整的需求规约
   结构化程序设计是进行以模块功能和处理过程设计为主的详 细设计的基本原则。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基 本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程 序设计主要强调的是程序的易读性。

(2)讨论系统存在的用户角色、工作流程图;

  答:以教材订购系统订购系统为例,该系统存在的用户角色有:学生、教师;
                                                     教材发售人员;
                                                     采购人员。
      工作流程图:
                 ![](https://img2020.cnblogs.com/blog/2204061/202012/2204061-20201207222721260-1138153759.png)
                 ![](https://img2020.cnblogs.com/blog/2204061/202012/2204061-20201207222739713-1861073909.png)

(3)对关键功能绘制数据流图,给出数据字典,并反复讨论数据流的合理性;
答:
数据流图:



数据字典:
(1)
名字:定书表
别名:订书单
描述:送给采购员的定书表
定义:购书单=购书单号+ {书名+出版社+价格+数量} +日期+订购名姓名+订购者职务+购书总数+总额
购书单号=DG+年+月+日+4位整数
订购者职务=学生+教师
价格=整数+4位小数
位置:输出到打印机
(2)
名字:领书表
别名:领书单
描述:送给学生或教师的领书报表
定义:领书单=领书单号+订购者姓名+领书日期+购书单号+领书日期+经办人
领书单号-LQ+年+月+日+4位整数
位置:输出到打印机
(3)
名字:缺书表
别名:缺书单
描述:送给相关工作人员的表,用来补充书籍
定义:缺书单=缺书单号+ {书名+出版社}+总数
缺书单号=QS+年+月+日+4位整数
位置:输出到打印机
(4)
名字:进书通知
描述:详细的描述了进书的信息
定义:进书通知=编号+ {书名+出版社+价格+数量) +采购人姓名十采购日期+采购总数+采购总额
编号=JS+年+月+日+4位整数
(5)
名字:审核信息
描述:用于审核信息
定义: 审核信息=教材发行人员名单+审核标志+审核日期
审核标志=TRUE|FALSE
(6)
库存表=记录ID +图书信息+数量
(7)
缺书表=记录ID +图书信息+缺书日期
(8)
进库表=日期+图书信息+数量+采购员+总额
(9)
图书信息二书名+出版社+价格+作者+ISBN+版次
ISBN-10 {数字} 10且能被7整除
记录ID=JC+15 {数字} 15
(10)
名字:发票
别名:
描述:唯一的表述一一次够书或者买书凭证
定义:发票=客户名+日期+ {书名+价格+数量} +总额+开票人+发票号
(11)
名字:出库表
别名:
描述:描述出库的一切信息业业定义:出库表=日期+图书信息+教材发行人员
位置:输出到打印机
(12)
名字:采购信息
别名:
描述:描述采购的信息
定义:采购信息=采购员姓名+日期+图书信息+总数+总额
位置:
(13)
名字:有效订书单
别名:
描述:有效的订书单
定义:有效订书单=购书单+教材发行人员姓名
位置:输出到打印机

(4)对应数据流图,设计系统的功能结构图,关键模块的流程图;

(5)选择对应的结构化程序设计语言,实现并测试部分功能模块
登录页面设计

Private Sub button1_ _Cl ick (ByValsender As System. Object,ByVal2 AsSystem. EventArgs) 
Handles but ton1. Click
Dim str As String
Dim passstr As String
passstr = Trim (CStr (TextBox2. Text))
str = "'" & TextBox1.Text & "'"
Dim sql As String =" select * from adminlist where #KF=" &Trim(str)
‘在数据库中搜索帐号为textbox1. text的数据’
Dim connstr As String ="server=localhost;uid=sa; pwd=;database=book"
Dim myconn As New Sq1Client.SqlConnection(connstr)
Dim da As New Sq1Client.Sq1DataAdapter(sql,myconn)
Dim ds As New DataSet
da.Fill(ds,"adminlist")
Dim dacomm As SqlClient.SqlCommandBui lder=New SqlClient.SqlCommandBuilder(da)
If ds.Tables("adminlist").Rows.Count=1 Then'判断帐号密码是否和数据库匹配'
If passstr=Trim(ds.Tables("adminlist").Rows(0) ("密码")) Then
Response.Redirect("book.aspx")
Else
Response.Write("密码错误!")
End If
Else
Response. Write("用户名不存在!")
End If 
End Sub
End Class

添加记录

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
End Sub
Button Click事件代码
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
Dim str As String
 Dim litem As ListItem
str="'"&TextBox1.Text&"'"
Dim sql As String="select * from book08 where 书号=" & Trim(str)
Dim connstr As String="server=localhost;uid=sa;pwd=;database=book"
Dim myconn As New SqlConnection(connstr)
Dim da As New SqlDataAdapter(sql, myconn)
Dim ds As New DataSet
da.Fill(ds, "book08")
Dim myrow As DataRow
Dim dacomm As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(da)
If ds.Tables("book08").Rows.Count >= 1 Then
Response.Redirect("new.aspx")
Response.Write("书号重复,请重新输入")
End If myrow = ds.Tables("book08").NewRow
myrow("书号") = Trim(TextBox1.Text)
myrow("书名") = Trim(TextBox2.Text)
myrow("作者") = Trim(TextBox3.Text)
myrow("征定时间") = Trim(TextBox4.Text)
myrow("数量") = Trim(TextBox5.Text)
ds.Tables("book08").Rows.Add(myrow)
da.UpdateCommand = dacomm.GetUpdateCommand
da.Update(ds, "book08")
Response.Redirect("book.aspx") 
End Sub 

删除记录

Private Sub Page_Load (ByVal sender As System.0bject,ByVal e As System EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then'用来确认页面是否第一次登录' binddata()
End If
End Sub
Sub binddata() '连接到数据库'
Dim myconnection As New SqlConnection(“initial catalog=book;uid=sa;pwd=")
Const strsql As String="select * from book08 order by 书号"
Dim mycommand As New SqlCommand(strsql.myconnection)
Dim myda As New SqlDataAdapterMyda. 
SelectCommand=mycommand
Dim myds As New DataSet Myda.FillCmyds)
DataGrid1.DataSource=myds
DataGridl.DataBind()
'myda.Update(myds,"book08" )
End Sub
Button_click事件:
Private Sub Buttonl_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)
Handles Buttonl.Click
Dim i As Integer
Dim x As String
Dim item As DataGridItem
For i= 0 To DataGridl.Items.Count - 1
item = DataGridl.Items (i)
Dim bookcheckbox As CheckBox=item.FindControl("checkbox1")
If bookcheckbox.Checked Then '确认数据是否被删除'
x=item.Cells(1).Text 'x为datagrid第二列的数据的内容'
deletedataset (x)
End If
Next
binddata ()
Response.Write(“删除成功!”)
End Sub
Sub deletedataset(ByVal y As String)
Dim con As New SqlConnection("initíal catalog=book;uid=sa;pwd=")
Dim cmd As SqlCommand
Dim qry As String
Con.0pen()
qry=“delete book08 where 书号=‘“& y &”’”
cmd=New SqlClient.SqlCommand(qry,com)
cmd.ExecuteNonQuery()
con.Close()
End Sub
Button_click的重定向事件
Private Sub Button2_Click(ByVal sender As System。Object,ByVal e As System.EventArgs) Handles Button2.Click
Response.Redirect(“book.aspx”) 
End sub
End class

四.思考题

(1)简述需求说明书,概要设计,详细设计说明书的主要内容。
答:软件需求说明书的编制是为了使用户和软件开发者双方对该软件的运行环境、功能和性能需求的初始规定有一个共同的理解,使之成为整个开发工作的基础,为概要设计提供需求说明。
概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程,其结果往往以反映交互控件布置、界面元素分组以及界面整体板式的页面框架图的形式来呈现。这是一个在用户研究和设计之间架起桥梁,使用户研究和设计无缝结合,将对用户目标与需求转换成具体界面设计解决方案的重要阶段。
详细设计说明书又可称程序设计说明书。编制目的是说明一个软件系统各个层次中的每一个程序 (每个模块或子程序)的设计考虑,如果一个软件系统比较简单,层次很少,本文件可以不单独编写,有关内容合并入概要设计说明书。

(2)结构化分析方法与面向对象分析方法有无本质上的不同?
答:结构化系统分析方法是采用自顶向下,由外到内,逐层分解的思想对复杂的系统进行分解化简,从而有效地控制了系统分析每步的难度, 并运用数据流图、加工说明和数据字典作为表达工具的一种系统分析技术。
面向对象的分析方法则是通过将数据和逻辑结构抽象成为对象,运用对象属性和方法等来操作和处理业务数据和逻辑的系统分析方法。
区别在于:当软件项目较小、系统分析员能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型,结构化方法对复杂问题的帮助有限,而面向对象的分析方法提供了一种方便的、可持续观测和扩展系统的机制,通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,对于需求变化频繁的系统,可以用面向对象软件系统的方法。

(3)对数据流图进行审查有何意义?
答:有助于程序员总结数据,对一些关键细目及其之中的关系进行审查,能及时的发现错误。

(4)给出一次完整的会议讨论纪要,包括议题,最终结果。

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 30
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 5 10
Development 开发 120 360
Analysis 需求分析(包括学习新技术) 10 30
Design Spec 生成设计文档 15 40
Design Review 设计复审 5 5
Coding Standard 代码规范 3 3
Design 具体设计 10 50
Coding 具体编码 100 300
Code Review 代码复审 5 10
Test 测试(自我测试,修改代码,提交修改) 10 10
Reporting 报告 10 10
Test Report 测试报告 3 2
Size Measurement 计算工作量 3 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
原文地址:https://www.cnblogs.com/hukoutian123/p/14037080.html