1. 程式人生 > 實用技巧 >實驗二-結構化分析與設計

實驗二-結構化分析與設計

部落格班級 軟體工程
作業連結 第二次實驗
作業要求 完成第二次實驗
學號 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