1. 程式人生 > 實用技巧 >3190704115-李自林-實驗二

3190704115-李自林-實驗二

部落格班級 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19
作業要求 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11540
作業目標 (1)掌握結構化的分析方法、分層資料流圖的繪製、資料字典和加工說明的編制等...
學號 3190704115
一.實驗目的

(1)掌握結構化的需求分析方法;

(2)掌握分層資料流圖的繪製、資料字典和加工說明的編制;

(3)掌握資料流圖對映為軟體結構圖的方法;

(4)掌握需求說明書和設計說明。書的主要內容,學習軟體需求說明書和設計說明書的編寫;

(5)掌握測試的基本方法。

二.實驗內容

(1)參考一個熟悉的系統,如,機票預訂系統/教材訂購系統/ATM自動取款機,討論其使用者需求、系統需求和業務需求;

需求:

業務需求
機票預訂系統

使用者需求
使用者能夠預訂機票,退訂機票,查詢航班,印表機票

    航空公司要求能夠自動生成乘客名單資訊,安排航班飛行,處理使用者需求

系統需求
實現預訂機票,退訂機票,查詢航班,印表機票功能,並且實時更新航班資訊和相關資料

(2)繪製系統的分層資料流圖,並給出資料字典;

https://img2020.cnblogs.com/blog/2184414/202012/2184414-20201208182607578-749991960.png

https://img2020.cnblogs.com/blog/2184414/202012/2184414-20201208182630064-966651067.png

(3)將系統的分層資料流圖對映為軟體結構圖,繪製軟體結構圖;

https://img2020.cnblogs.com/blog/2184414/202012/2184414-20201208182643806-746689582.png

(4)為關鍵模組進行詳細設計,如繪製關鍵模組的流程圖;

https://img2020.cnblogs.com/blog/2184414/202012/2184414-20201208182702422-1829626838.png

(5)實現系統部分功能並測試。

1 #include
2 #include <stdio.h>
3 #include
4 #include <stdlib.h>
5 #include <windows.h>
6 using namespace std;
7 #define N 100 //該系統可輸入的上限人數
8 static int x = 0; //記錄已經輸入的賬號
9 static int now = 0; //記錄當前在執行賬號的下標
10
11 struct node
12 {
13 string account; //賬號
14 string password; //密碼
15
16 }accounts[N];
17
18
19 void OpenAccount();
20 void LogInCheck();
21 void LogIn();
22 void window();
23 void bookTicket();
24 void returnTicket();
25 void checkFlight();
26 void printTicket();
27
28 void OpenAccount(){
29 system("cls");
30 string str1,str2,oaccount;
31 bool flag;
32 int i;
33 do{
34 printf("\n\n 請輸入手機號作為你的賬號名:"); //擴充套件:一、加入檢查功能,非手機號要重新輸入
35 cin>>oaccount;
36 for(i=0;i<x;i++){
37 if(accounts[i].accountoaccount){
38 flag=true;
39 printf(" 您輸入的賬號已存在,請重新輸入!\n\n");
40 break;
41 }
42 }
43 if(ix){
44 flag=false;
45 }
46
47 }
48 while(flag);
49
50 accounts[x].account=oaccount;
51
52 printf("\n\n 請輸入密碼:"); //擴充套件:密碼顯示隱蔽;密碼不能太簡單,需要格式限制
53 cin>>str1;
54 printf("\n 請再次輸入密碼:");
55 cin>>str2;
56 while(str1!=str2)
57 {
58 printf(" 兩次密碼不一致,請重新輸入!!!\n\n");
59 printf("\n 請輸入密碼:\n");
60 cin>>str1;
61 printf("\n 請再次輸入密碼:\n");
62 cin>>str2;
63 }
64 accounts[x].password=str1;
65 x++;
66 printf("\n 該賬號註冊成功!") ;
67 Sleep(600);
68 window();
69 }
70
71
72
73
74
75 void LogInCheck(){
76 system("cls");
77 string saccount,spassword;
78 int i;
79 bool flag=false;
80 do{
81 printf("\n\n 請輸入登入賬號:");
82 cin>>saccount;
83 for(i=0;i<x;i++){
84 if(accounts[i].accountsaccount){
85 flag=false;
86 break;
87 }
88 }
89 if(ix){
90 printf("\n 您輸入的賬號不存在,請重新輸入!\n");
91 flag=true;
92 }
93 }
94 while(flag); //goto語句和do...while語句的轉換
95
96 do{
97 printf("\n\n 請輸入密碼:");
98 cin>>spassword;
99 if(accounts[i].password!=spassword){
100 printf("\n 您輸入的密碼不正確,請重新輸入!\n");
101 flag=true;
102 }else{
103 flag=false;
104 }
105 }while(flag);
106 now=i;
107 printf("\n 恭喜你成功登入!!!");
108 Sleep(600);
109 LogIn();
110 }
111
112
113 void bookTicket(){
114 system("cls");
115 printf("\n\n\n 預訂機票成功!!\n");
116 printf(" 相關檔案改寫成功!!");
117 Sleep(600);
118 LogIn();
119 }
120
121 void returnTicket(){
122 system("cls");
123 printf("\n\n\n 退訂機票成功!!\n");
124 printf(" 相關檔案改寫成功!!");
125 Sleep(600);
126 LogIn();
127 }
128
129 void checkFlight(){
130 system("cls");
131 printf("\n\n\n 查詢航班成功!!\n");
132 printf(" 相關檔案改寫成功!!");
133 Sleep(600);
134 LogIn();
135 }
136
137 void printTicket(){
138 system("cls");
139 printf("\n\n\n 印表機票成功!!\n");
140 Sleep(600);
141 LogIn();
142 }
143
144
145 void LogIn(){
146 system("cls");
147 int m;
148 printf("\n\n WELCOME, MY LOVELY ACCOUNT!!!");
149 printf("\n\n choose the function:\n\n");
150 printf(" 1.預定機票\n");
151 printf(" 2.退訂機票\n");
152 printf(" 3.查詢航班\n");
153 printf(" 4.印表機票\n");
154 printf(" 0.exit(退出)\n");
155 printf("------------------------------------------\n");
156 printf("請輸入想要執行的功能:\n");
157 scanf("%d",&m);
158 while(m)
159 {
160 switch(m)
161 {
162 case 1:bookTicket();break;
163 case 2:returnTicket();break;
164 case 3:checkFlight();break;
165 case 4:printTicket();break;
166 default:printf("\n此功能不存在,請重新輸入!\n");
167 }
168 scanf("%d",&m);
169 }
170
171 window();
172
173 }
174
175
176
177
178 void window(){
179 system("cls");
180 int n; //記錄需要被執行的功能
181 printf("\n\n WELCOME TO USE THIS ATM SYSTEM!!!!!\n\n");
182 printf(" choose the function:\n\n");
183 printf(" 1.open account(註冊)\n");
184 printf(" 2.log in(登入)\n");
185 printf(" 0.exit(退出)\n");
186 printf("------------------------------------------\n");
187 printf("請輸入想要執行的功能:\n");
188 scanf("%d",&n);
189 while(n)
190 {
191 switch(n)
192 {
193 case 1:OpenAccount();break;
194 case 2:LogInCheck();break;
195 default:printf("\n此功能不存在,請重新輸入!\n");
196 }
197 scanf("%d",&n);
198 }
199
200 exit(0);
201 }
202
203
204
205
206 int main(){
207 window();
208
209 return 0;
210 }

【例項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)複習結構化的分析與設計方法的主要過程;

(2)討論系統存在的使用者角色、工作流等;

(3)對關鍵功能繪製資料流圖,給出資料字典,並反覆討論資料流的合理性;

(4)對應資料流圖,設計系統的功能結構圖,關鍵模組的流程圖;

(5)選擇對應的結構化程式設計語言,實現並測試部分功能模組

四.思考題

(1)簡述需求說明書,概要設計,詳細設計說明書的主要內容。

《軟體需求規格說明書》的一般結構
正文的第一章內容是1.概述,包含
1.1.編寫目的;1.2.術語與定義;1.3.參考資料;三個部分
第二章要給出該專案的標準和規範,在文件的後續內容編寫中以及專案開發過程中必須遵照這個標準和規範進行。
第三章應該說明該專案的相關假設、限制和一些依賴條件,在後續系統部署的過程中可以有參考意義。
第四章“功能規格”是重點,重點介紹這個系統的角色,介面設計思路,系統的功能檢視和功能點清單,以及系統的需求用例。這個內容必須詳細描述,這樣才能對後續的開發和測試提供指導意義。
第五章“非功能規格”要對專案的效能、安全、資料的備份恢復等內容解釋解釋說明,一個專案除了功能完整之外,還要考慮效能、安全等相應的要求。
第六章“附錄”,是對軟體需求規格說明書的一些補充說明文件,其中的“軟體需求跟蹤矩陣”是重點,這份文件是對後續需求的完善程度進行了嚴格的控制。
《概要設計說明書》的一般結構:
總述:需求或目標(講一下事情的起源)、環境、侷限;
總體設計:從全域性的角度說一下 組織結構、功能、處理流程、有哪些模組、模組間的關係,執行環境等。
外部介面:總體說明外部使用者、軟、硬體介面(可用資源);
模組設計:每個模組“做什麼”、簡要說明“怎麼做”(輸入、輸出、處理邏輯、與其它模組或系統的介面),處在什麼邏輯位置、物理位置。
模組設計,可以寫以下內容:
模組描述:說明哪些模組實現了哪些功能;
模組層次結構:可以使用某個視角的軟體框架圖來表達;
模組間的關係:模組間依賴關係的描述,通訊機制描述;
模組的核心介面:說明模組傳遞的資訊、資訊的結構
處理方式設計:說一些滿足功能和效能的演算法;
資料結構:邏輯結構、物理結構。
容災設計:出錯資訊、出錯處理。(可選)
監控設計:執行模組組合、控制、時間。(可選)
使用者介面設計:(可選)。
安全設計:(可選)。
其它設計:(可選)。
制定規範(附錄): 設計原則,程式碼規範、介面規約、命名規則。
《詳細設計說明書》的一般結構:
引言,包含:編寫目的,背景,參考資料,術語定義及說明
設計概述,包含:任務和目標,需求概述,執行環境概述, 條件與限制,詳細設計方法和工具
系統詳細需求分析,包含:詳細需求分析,詳細系統執行環境及限制條件分析介面需求分析
總體方案確認,包含: 系統總體結構確認, 系統詳細介面劃分
系統詳細設計,包含: 系統結構設計及子系統劃分,系統功能模組詳細設計(採用HIPO圖進行功能分解與模組描述,,用IPO或結構圖描述各模組的組成結構、演算法、模組間的介面關係,以及需求、功能和模組三者之間的交叉參照關係。), 系統介面詳細設計
資料庫系統設計

(2)結構化分析方法與面向物件分析方法有無本質上的不同?

結構化分析方法
分析問題的過程中各個環節聯絡緊密,環環相扣。主要用來分析系統的功能,是一種直接根據資料流劃分功能層次的分析方法,該方法較為傳統,主要適用於資料處理。主要幫助開發人員定義系統需要做什麼,系統需要儲存和使用那些資料,系統需要什麼樣的輸入和輸出,以及如何把這些功能結合在一起來完成任務。面向過程分析的主要工具是資料流圖(DFD)。

面向物件分析方法
定義在系統中工作的所有型別的物件,且物件之間相互獨立,互不影響,但通過整體性的協調和相互作用完成任務,構成完整的體系。面向物件的方法關注的是事件、重用和繼承,關注的多型,它自己有一整套獨特的思維方式,這和麵向過程方法是根本不同的。但相對於結構化分析方法而言呢,其各個部分或者環節是可以經過修改的,而且不會對其他部分造成多餘的影響。 面向物件分析方法主要分為問題分析和應用分析兩個方面。面向物件分析方法則是根據獲得的需求資訊從中抽象出類與物件並分析他們之間的靜態關係,再結合實際問題,確定物件的動態行為以及物件間的資訊傳遞,以此建立需求模型。主要工具是統一建模語言(UML)。

(3)對資料流圖進行審查有何意義?

      資料流圖,是描述系統資料流程的工具,它將資料獨立抽象出來,通過圖形方式描述資訊的來龍去脈和實際流程。

      所以對於資料流圖進行審查是為了保證在程式設計與分析時,大方向不出現差錯,避免做無用功,對於大型團隊合作時有巨大的幫助。

(4)給出一次完整的會議討論紀要,包括議題,最終結果。

      我們主要討論了關於選訂哪個系統以及分工合作的問題,最後決定三個人分工三個分層流程圖,其他的靠自行發揮。

      這次的合作主要存在於確定系統和整體構思方面,繪圖方面主要靠自己親力親為,所以每個人的工程量會比較大,但這樣也更好地鍛鍊了每個人的時間管理能力和對於visio的操作水平也有了進一步的提升,同時對於分層流程圖、軟體結構圖和資料字典也有了更深的瞭解。大家收穫頗豐