软件项目详细设计文档模板.doc_第1页
软件项目详细设计文档模板.doc_第2页
软件项目详细设计文档模板.doc_第3页
软件项目详细设计文档模板.doc_第4页
软件项目详细设计文档模板.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

。研发生产中心文档编号版本A1密级商密A项目名称Xx系统项目来源QR-RD-022(Ver1.2) XXX系统详细设计说明书 (内部资料 请勿外传)编 写:日 期:检 查:日 期:审 核:日 期:批 准:日 期: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. 系统安全保密设计86.1 说明86.2 设计86.2.1 数据传输部分86.2.2 IP过滤分部86.2.3 身份验证部分87. 系统性能设计98. 系统出错处理91. 引言1.1 编写目的和范围说明写这份详细设计说明书的目的。本详细设计说明书编写的目的是说明程序模块的设计考虑,包括程序描述、输入/输出、算法和流程逻辑等,为软件编程和系统维护提供基础。本说明书的预期读者为系统设计人员、软件开发人员、软件测试人员和项目评审人员。1.2 术语表定义系统或产品中涉及的重要术语,为读者在阅读文档时提供必要的参考信息。序号术语或缩略语说明性定义1PMProject Manager,项目经理21.3 参考资料列出有关资料的名称、作者、文件编号或版本等。参考资料包括:a需求说明书、架构设计说明书等;b本项目的其他已发表的文件;c引用文件、资料、软件开发标准等。 资料名称作者文件编号、版本资料存放地点1.4 使用的文字处理和绘图工具文字处理软件:word office绘图工具: Visio2. 全局数据结构说明本章说明本程序系统中使用的全局数据常量、变量和数据结构。2.1 常量static String SERVER_ADDRESS 服务器地址boolean loginFlag 登录状态2.2 变量BlueUserInfo用户账户结构体2.3 数据结构包括数据结构名称,功能说明,具体数据结构说明(定义、注释、取值)等。3. 模块设计3.1 用例图3.2 功能设计说明3.2.1 登录模块模块1主要分为以下几个子模块:子模块1、子模块2和子模块N。 设计图 功能描述此模块的主要功能是登录验证功能,保证程序的安全性问题。用户需要验证用户和密码是否正确才能进行下一部操作。 输入数据变量名类型说明userNameString用户名(必填)passwordString密码(必填)STOPSPLASHint开场动画标志位SPLASHTIMElong消息发送延迟时间LOGINBUTTONint 登录按钮是否能够点击标志位 输出数据字段说明code结果,0表示失败,1表示成功,2表示该养殖场地不存在,3表示该Rfid已存在userName用户名PassWord密码userRoleld用户权限,1代表系统用户,2 代表人事部,3代表育苗场,4代表生产部,5代表加工厂,6 代表市场部,7代表捕捞管理员 表现形式为:code= 流程图 源程序文件说明 函数说明对密码进行MD5加密:md5(密码)将用户的账号密码暂时保存等下次登录时可以不用再次输入:saveUserInfo(Activity名,用户名,密码) 限制条件必须在有网的条件下能使用登录功能。3.2.2 人员管理 设计图 功能描述通过手持设备扫描员工的RFID号,并在员工工号的输入框手动输入员工工号,并将两条数据上传到服务器中的数据库。将员工工号与RFID号相互绑定。 输入数据变量名属性说明numberstring 员工的员工号(必填)rfidstring员工的RFID号(必填)如:E2005032530B0187144085E3在检测数据的有效性是像是判断数据是否为空,当向服务器发送消息时服务器会对数据进行有效性检测,显示判断员工的员工号是否存在,员工的RFID号是否已被其他工作人员应将绑定。这些数据的获取离不开具有RFID扫描功能的手持设备,对员工的RFID卡进行扫描获取RFID号。才实现此功能 输出数据变量名属性说明numberstring 员工的员工号rfidstring员工的RFID号flagint 数据存储状态的标志位 业务算法和流程 数据设计给出本程序中的局部数据结构说明,包括数据结构名称,功能说明,具体数据结构说明(定义、注释设计、取值)等。相关数据库表,数据存储设计(具体说明需要以文件方式保存的数据文件名、数据存储格式、数据项及属性等。) 源程序文件说明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扫描的开发包/* * 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就成功时发出提示音:Util.initSoundPool(activity名称);程序的主体:init();开启数据上传线程:networkTask 限制条件要实现此功能必须要具备可以扫描RFID功能的手持设备,不然无法扫描员工的RFID号。3.2.3 池塘管理 设计图 功能描述此模块主要实现的功能是扫描池塘的RFID,并手动输入池塘编号,并将其保存到本地数据库。并等到有网的条件下,将此条信息上传到服务器端的数据库。实现池塘RFID号与池塘编号的绑定。 输入数据变量名属性说明numberstring 池塘编号(必填)如:育苗池1rfidstring池塘的RFID号(必填) :E2005032530B0187144085E3在检测数据有效性时,需要检测数据是否为空。这些数据的获取离不开具有RFID扫描功能的手持设备,对池塘的RFID卡进行扫描获取RFID号。才实现此功能 输出数据变量名属性说明numberstring 池塘编号rfidstring池塘的RFID号flagInt数据存储标志位 业务算法和流程 数据设计给出本程序中的局部数据结构说明,包括数据结构名称,功能说明,具体数据结构说明(定义、注释设计、取值)等。相关数据库表,数据存储设计(具体说明需要以文件方式保存的数据文件名、数据存储格式、数据项及属性等。) 源程序文件说明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就成功时发出提示音: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数据存储标志位 业务算法和流程 数据设计给出本程序中的局部数据结构说明,包括数据结构名称,功能说明,具体数据结构说明(定义、注释设计、取值)等。相关数据库表,数据存储设计(具体说明需要以文件方式保存的数据文件名、数据存储格式、数据项及属性等。) 源程序文件说明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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论