軟件項目詳細設計文檔模板.doc_第1頁
軟件項目詳細設計文檔模板.doc_第2頁
軟件項目詳細設計文檔模板.doc_第3頁
軟件項目詳細設計文檔模板.doc_第4頁
軟件項目詳細設計文檔模板.doc_第5頁
免費預覽已結束,剩余38頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

研發(fā)生產中心文檔編號版本A1密級商密A項目名稱Xx系統(tǒng)項目來源QR-RD-022(Ver1.2) XXX系統(tǒng)詳細設計說明書 (內部資料 請勿外傳)編 寫:日 期:檢 查:日 期:審 核:日 期:批 準:日 期:XX公司版權所有 不得復制文檔變更記錄序號變更(+/-)說明作者版本號日期批準12目 錄1. 引言41.1 編寫目的和范圍41.2 術語表41.3 參考資料41.4 使用的文字處理和繪圖工具42. 全局數據結構說明52.1 常量52.2 變量52.3 數據結構53. 模塊設計53.1 用例圖53.2 功能設計說明53.2.1 模塊153.2.2 模塊264. 接口設計74.1 內部接口74.2 外部接口74.2.1 接口說明74.2.2 調用方式85. 數據庫設計86. 系統(tǒng)安全保密設計86.1 說明86.2 設計86.2.1 數據傳輸部分86.2.2 IP過濾分部86.2.3 身份驗證部分87. 系統(tǒng)性能設計98. 系統(tǒng)出錯處理91. 引言1.1 編寫目的和范圍說明寫這份詳細設計說明書的目的。本詳細設計說明書編寫的目的是說明程序模塊的設計考慮,包括程序描述、輸入/輸出、算法和流程邏輯等,為軟件編程和系統(tǒng)維護提供基礎。本說明書的預期讀者為系統(tǒng)設計人員、軟件開發(fā)人員、軟件測試人員和項目評審人員。1.2 術語表定義系統(tǒng)或產品中涉及的重要術語,為讀者在閱讀文檔時提供必要的參考信息。序號術語或縮略語說明性定義1PMProject Manager,項目經理21.3 參考資料列出有關資料的名稱、作者、文件編號或版本等。參考資料包括:a需求說明書、架構設計說明書等;b本項目的其他已發(fā)表的文件;c引用文件、資料、軟件開發(fā)標準等。 資料名稱作者文件編號、版本資料存放地點1.4 使用的文字處理和繪圖工具文字處理軟件:word office繪圖工具: Visio2. 全局數據結構說明本章說明本程序系統(tǒng)中使用的全局數據常量、變量和數據結構。2.1 常量static String SERVER_ADDRESS 服務器地址boolean loginFlag 登錄狀態(tài)2.2 變量BlueUserInfo用戶賬戶結構體2.3 數據結構包括數據結構名稱,功能說明,具體數據結構說明(定義、注釋、取值)等。3. 模塊設計3.1 用例圖3.2 功能設計說明3.2.1 登錄模塊模塊1主要分為以下幾個子模塊:子模塊1、子模塊2和子模塊N。 設計圖 功能描述此模塊的主要功能是登錄驗證功能,保證程序的安全性問題。用戶需要驗證用戶和密碼是否正確才能進行下一部操作。 輸入數據變量名類型說明userNameString用戶名(必填)passwordString密碼(必填)STOPSPLASHint開場動畫標志位SPLASHTIMElong消息發(fā)送延遲時間LOGINBUTTONint 登錄按鈕是否能夠點擊標志位 輸出數據字段說明code結果,0表示失敗,1表示成功,2表示該養(yǎng)殖場地不存在,3表示該Rfid已存在userName用戶名PassWord密碼userRoleld用戶權限,1代表系統(tǒng)用戶,2 代表人事部,3代表育苗場,4代表生產部,5代表加工廠,6 代表市場部,7代表捕撈管理員 表現形式為:code= 流程圖 源程序文件說明 函數說明對密碼進行MD5加密:md5(密碼)將用戶的賬號密碼暫時保存等下次登錄時可以不用再次輸入:saveUserInfo(Activity名,用戶名,密碼) 限制條件必須在有網的條件下能使用登錄功能。3.2.2 人員管理 設計圖 功能描述通過手持設備掃描員工的RFID號,并在員工工號的輸入框手動輸入員工工號,并將兩條數據上傳到服務器中的數據庫。將員工工號與RFID號相互綁定。 輸入數據變量名屬性說明numberstring 員工的員工號(必填)rfidstring員工的RFID號(必填)如:E2005032530B0187144085E3在檢測數據的有效性是像是判斷數據是否為空,當向服務器發(fā)送消息時服務器會對數據進行有效性檢測,顯示判斷員工的員工號是否存在,員工的RFID號是否已被其他工作人員應將綁定。這些數據的獲取離不開具有RFID掃描功能的手持設備,對員工的RFID卡進行掃描獲取RFID號。才實現此功能 輸出數據變量名屬性說明numberstring 員工的員工號rfidstring員工的RFID號flagint 數據存儲狀態(tài)的標志位 業(yè)務算法和流程 數據設計給出本程序中的局部數據結構說明,包括數據結構名稱,功能說明,具體數據結構說明(定義、注釋設計、取值)等。相關數據庫表,數據存儲設計(具體說明需要以文件方式保存的數據文件名、數據存儲格式、數據項及屬性等。) 源程序文件說明package com.blueocean.BlueOceanSource.ui;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import cn.pda.hf.Util;import com.blueocean.BlueOceanSource.R;import com.blueocean.BlueOceanSource.entity.BlueOceanEmployee;import com.blueocean.BlueOceanSource.service.BlueOceanEmployeeService;import com.blueocean.BlueOceanSource.service.UploadService;import com.blueocean.BlueOceanSource.utility.RfidScan;/引入RFID掃描的開發(fā)包/* * Created by zhouxingguo on 2015/7/15. */public class EmployeeActivity extends Activity private Button scan; private Button saveMessage;/保存員工信息 private EditText inputNumber;/員工編號、卡號 private TextView inputRfid;/員工RFID信息 private String number;/獲取得到的卡號、編號 private String rfid;/獲取得到的RFID private RfidScan rfidScan; private String rfidget; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_employee); Util.initSoundPool(this); init();/獲取RFID號和員工工號并保存到本地數據庫 /初始化控件 private void init() inputNumber = (EditText) findViewById(R.id.input_employee_number); inputRfid = (TextView) findViewById(R.id.input_employee_rfid); saveMessage = (Button) findViewById(R.id.save_message_employee); scan=(Button)findViewById(R.id.scan_rfid); MyListener listener = new MyListener(this); saveMessage.setOnClickListener(listener); scan.setOnClickListener(listener);/ datareceive = getIntent().getExtras();/ dataflag=datareceive.getInt(dataflag);/ /0代表從主界面跳轉,1代表從掃描接口跳轉/ if(dataflag=0)/ inputRfid.setText(請掃描員工卡號);/ else if(dataflag=1)/ rfidget = datareceive.getString(rfid);/0代表從員工錄入跳轉,1代表從快遞跳轉/ inputRfid.setText(rfidget);/ private class MyListener implements View.OnClickListener private Context context; public MyListener(Context context) this.context = context; Override public void onClick(View view) switch (view.getId() case R.id.scan_rfid: rfidScan=new RfidScan(); rfidget=rfidScan.scan(); if(rfidget!=null) inputRfid.setText(rfidget); else Toast.makeText(getApplicationContext(),R.string.scan_rfid_fail, Toast.LENGTH_SHORT).show(); break; case R.id.save_message_employee:/保存員工信息按鈕到數據庫,保存成功之后清空editText /要保證輸入的信息不能全部為空 if (!TextUtils.isEmpty(inputNumber.getText() & !TextUtils.isEmpty(inputRfid.getText() number = inputNumber.getText().toString().trim(); rfid = inputRfid.getText().toString().trim(); BlueOceanEmployeeService employeeService = new BlueOceanEmployeeService(context); BlueOceanEmployee boe = new BlueOceanEmployee(); int flag = 0;/0表示保存到本地數據庫, 1表示本地數據庫數據待刪除 boe.setFlag(flag); boe.setNumber(number); boe.setRfid(rfid); employeeService.insert(boe); inputNumber.setText(); inputRfid.setText(); Toast.makeText(getApplicationContext(), R.string.bind_success, Toast.LENGTH_LONG).show(); /開辟一個新線程上傳數據 new Thread(networkTask).start(); Toast.makeText(getApplicationContext(), R.string.save_success_toast, Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(), R.string.employee_rfid_number_not_null, Toast.LENGTH_LONG).show(); break; Runnable networkTask = new Runnable() Override public void run() / TODO / 在這里進行 http request.網絡請求相關操作 UploadService uploadService = new UploadService(); uploadService.upload(getApplicationContext(); ; 函數說明大掃描RFID就成功時發(fā)出提示音:Util.initSoundPool(activity名稱);程序的主體:init();開啟數據上傳線程:networkTask 限制條件要實現此功能必須要具備可以掃描RFID功能的手持設備,不然無法掃描員工的RFID號。3.2.3 池塘管理 設計圖 功能描述此模塊主要實現的功能是掃描池塘的RFID,并手動輸入池塘編號,并將其保存到本地數據庫。并等到有網的條件下,將此條信息上傳到服務器端的數據庫。實現池塘RFID號與池塘編號的綁定。 輸入數據變量名屬性說明numberstring 池塘編號(必填)如:育苗池1rfidstring池塘的RFID號(必填) :E2005032530B0187144085E3在檢測數據有效性時,需要檢測數據是否為空。這些數據的獲取離不開具有RFID掃描功能的手持設備,對池塘的RFID卡進行掃描獲取RFID號。才實現此功能 輸出數據變量名屬性說明numberstring 池塘編號rfidstring池塘的RFID號flagInt數據存儲標志位 業(yè)務算法和流程 數據設計給出本程序中的局部數據結構說明,包括數據結構名稱,功能說明,具體數據結構說明(定義、注釋設計、取值)等。相關數據庫表,數據存儲設計(具體說明需要以文件方式保存的數據文件名、數據存儲格式、數據項及屬性等。) 源程序文件說明package com.blueocean.BlueOceanSource.ui;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import cn.pda.hf.Util;import com.blueocean.BlueOceanSource.R;import com.blueocean.BlueOceanSource.entity.BlueOceanPond;import com.blueocean.BlueOceanSource.service.BlueOceanPondService;import com.blueocean.BlueOceanSource.service.UploadService;import com.blueocean.BlueOceanSource.utility.RfidScan;/* * Created by zhouxingguo on 2015/7/15. */public class PondActivity extends Activity private Button scanPond;/點擊掃描池塘 private Button bindPond;/綁定池塘編號和RFID信息 private EditText pondNumber;/池塘編號、卡號 private TextView pondRfid;/池塘RFID信息 private String number;/獲取得到的卡號、編號 private String rfid;/獲取得到的RFID private RfidScan rfidScan; private String rfidget; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_pond); Util.initSoundPool(this); init(); /初始化控件 private void init() pondNumber = (EditText) findViewById(R.id.input_pond_number); pondRfid = (TextView) findViewById(R.id.input_pond_rfid); scanPond=(Button)findViewById(R.id.scan_pond_rfid); bindPond = (Button) findViewById(R.id.bind_pond); MyListener listener = new MyListener(this); scanPond.setOnClickListener(listener); bindPond.setOnClickListener(listener); private class MyListener implements View.OnClickListener private Context context; public MyListener(Context context) this.context = context; Override public void onClick(View view) Log.d(aa,進入點擊); switch (view.getId() case R.id.scan_pond_rfid: rfidScan=new RfidScan(); rfidget=rfidScan.scan(); if(rfidget!=null) pondRfid.setText(rfidget); else Toast.makeText(getApplicationContext(),R.string.scan_rfid_fail, Toast.LENGTH_SHORT).show(); break; case R.id.bind_pond:/保存員工信息按鈕到數據庫,保存成功之后清空editText /要保證輸入的信息不能全部為空 if (!TextUtils.isEmpty(pondNumber.getText() & !TextUtils.isEmpty(pondRfid.getText() number = pondNumber.getText().toString().trim(); rfid = pondRfid.getText().toString().trim(); BlueOceanPondService pondService = new BlueOceanPondService(context); BlueOceanPond boe = new BlueOceanPond(); int flag = 0;/0表示保存到本地數據庫, 1表示本地數據庫數據待刪除 boe.setFlag(flag); boe.setNumber(number); boe.setRfid(rfid); pondService.insert(boe); pondNumber.setText(); pondRfid.setText(); Toast.makeText(getApplicationContext(), R.string.bind_success, Toast.LENGTH_LONG).show(); /開辟一個新線程上傳數據 new Thread(networkTask).start(); else Toast.makeText(getApplicationContext(), R.string.pond_rfid_number_not_null, Toast.LENGTH_LONG).show(); break; Runnable networkTask = new Runnable() Override public void run() / TODO / 在這里進行 http request.網絡請求相關操作 UploadService uploadService = new UploadService(); uploadService.upload(PondActivity.this); ; 函數說明當掃描RFID就成功時發(fā)出提示音:Util.initSoundPool(activity名稱);程序的主體:init();開啟數據上傳線程:networkTask 限制條件要實現此功能必須要具備可以掃描RFID功能的手持設備,不然無法掃描員工的RFID號。3.2.4 育苗管理 設計圖 功能描述本功能主要是對員工對育苗池的操作進行記錄,顯示掃描員工RFID、池塘RFID。還要掃描海產品的批次二維碼,當員工對池塘進行操作時,需要記錄操作類型,并且記錄池塘的溫度。經這些信息記錄到本地數據庫。 輸入數據變量名屬性說明rfidgetUserstring 員工的RFID (必填) 如:E2005032530B0187144085E3rfidgetPoolstring池塘的RFID號(必填) 如:E2005032530B017318305B53BatchString批次二維碼(必填) /show.html?id=18FC90BE5B8124AF983421D29BFC4352getEvenTypeString操作類型(必填) ,包括:喂食、換水、測溫、入池、投放tempString 溫度(非必填)如:10timeString 時間(必填)如:201603110922在檢測數據有效性時,需要檢測rfidgetUser與rfidgetPool兩個輸入變量是否為空。這些數據的獲取離不開具有RFID掃描功能及二維碼掃描的手持設備,對池塘的RFID卡進行掃描并獲取RFID號并且對池塘上的產品批次二維碼進行掃描,獲取產品批次二維碼。 輸出數據變量名屬性說明rfidgetUserstring 員工的RFID rfidgetPoolstring池塘的RFID號DataString批次二維碼,如:getEvenTypeString操作類型tempString溫度:10flagint數據存儲標志位 業(yè)務算法和流程 數據設計給出本程序中的局部數據結構說明,包括數據結構名稱,功能說明,具體數據結構說明(定義、注釋設計、取值)等。相關數據庫表,數據存儲設計(具體說明需要以文件方式保存的數據文件名、數據存儲格式、數據項及屬性等。) 源程序文件說明package com.blueocean.BlueOceanSource.ui;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Handler;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.inputmethod.EditorInfo;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import com.blueocean.BlueOceanSource.R;import com.blueocean.BlueOceanSource.entity.BlueOceanEvent;import com.blueocean.BlueOceanSource.service.BlueOceanEventService;import com.blueocean.BlueOceanSource.service.UploadService;import com.blueocean.BlueOceanSource.utility.DateDefined;import com.blueocean.BlueOceanSource.utility.RfidScan;import java.util.ArrayList;import java.util.List;import cn.pda.hf.Util;import cn.pda.scan.ScanThread;/*保苗階段activity * Created by zhouxingguo on 2015/7/15. */public class YouthActivity extends Activity private Button scanUser;/掃描員工rfid private Button scanPond;/掃描池塘RFID private Button saveButton;/保存信息 private Button scanQrcode;/掃描池塘二維碼批次信息 private TextView userRfid;/員工RFID信息 private EditText poolRfid;/池子RFID信息 private TextView pondQrcode;/池塘二維碼包含的批次信息 private EditText temperature;/輸入池塘溫度 private String rfidUser;/獲取得到的RFID private RfidScan rfidScanUser;/rfid掃描user 類 private String rfidgetUser;/獲取得到的userRfid private String rfidPool;/獲取得到的池子RFID private RfidScan rfidScanPool;/rfid掃描池子 類 private String rfidgetPool;/獲取得到的poolRfid private String batch;/獲取池子標簽上的批次二維碼信息 private Spinner spinner;/操作類型下拉控件 private List eventList;/操作類型數據源 private ArrayAdapter adapter;/適配器適配操作類型列表 private String getEventType; private String poolTemp=;/池子溫度,暫時用不到 private String data; private BroadcastReceiver receive; private ScanThread scanThread; private Handler mHandler = new Handler() public void handleMessage(android.os.Message msg) if (msg.what = ScanThread.SCAN) data = msg.getData().getString(data); Log.d(acc_data,data); Util.play(1, 0); pondQrcode.setText(data); ; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_youth); Util.initSoundPool(this); init_spinner(); init(); /* * 開啟二維碼掃描線程 * */ try scanThread = new ScanThread(mHandler); catch (Exception e) Toast.makeText(getApplicationContext(), serialport init fail, 0).show(); return; scanThread.start(); receive = new FunkeyListener(); /代碼注冊廣播接收者 IntentFilter filter = new IntentFilter(); filter.addAction(ent.action.FUN_KEY); registerReceiver(receive, filter); Util.initSoundPool(getApplication(); private class FunkeyListener extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) boolean defaultdown=false; int keycode = intent.getIntExtra(keycode, 0); boolean keydown = intent.getBooleanExtra(keydown, defaultdown); if(keycode = 134 & keydown) scanThread.scan(); /初始化控件 private void init() userRfid = (TextView)findViewById(R.id.input_baomiao_user); poolRfid = (EditText)findViewById(R.id.input_baomiao_pond); pondQrcode = (TextView)findViewById(R.id.input_baomiao_pond_qrcode); temperature = (EditText)findViewById(R.id.input_temperature); temperature.setInputType(EditorInfo.TYPE_CL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論