软件详细设计报告.docx

上传人:b****6 文档编号:6785768 上传时间:2023-01-10 格式:DOCX 页数:26 大小:2.03MB
下载 相关 举报
软件详细设计报告.docx_第1页
第1页 / 共26页
软件详细设计报告.docx_第2页
第2页 / 共26页
软件详细设计报告.docx_第3页
第3页 / 共26页
软件详细设计报告.docx_第4页
第4页 / 共26页
软件详细设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

软件详细设计报告.docx

《软件详细设计报告.docx》由会员分享,可在线阅读,更多相关《软件详细设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

软件详细设计报告.docx

软件详细设计报告

计算机学院实验中心----Android手机客户端

学生姓名:

宋同煜张宗森

指导老师:

裴斐

专业:

计算机科学与技术102

在移动互联网发展迅猛的今天,在Android完全开源及拥有庞大用户群的环境下,迫切需要为计算机学院实验中心网站开发Andriod手机客户端,方便计算机学院师生随时随地查看实验信息、登记实验等。

一、系统分析

需求分析

查询实验:

教师及学生可以查询当周及上一周、下一周实验安排

登记实验:

教师登录后可以登记实验

引言

为方便计算机学院教师及学生查询、登记实验,因此开发实验中心Android手机端软件

编写目的

本文档对计算机学院实验中心网站手机客户端的功能、用户界面、运行环境等作出详细说明。

项目背景

软件的开发名称:

计算机学院实验中心

项目需求单位:

计算机学院全体师生

项目开发单位:

宋同煜张宗森

二、系统设计

系统目标

1.实现需求分析阶段的所有功能

2.主界面清晰、简单、操作易行

系统功能预览

该软件主要包括查询、登录、登记实验3个功能模块,主要操作如下:

(1)运行软件后,首先检查网络连接是否正常,如果正常,获取当周实验安排信息,显示给用户,效果如图

(2)通过“菜单->登记实验”进入等级实验页面,要求输入用户名密码才可继续

点击“登录实验”后,提示登录后才能继续

(3)点击登录进入登录页面,如图

正确输入用户名密码后点提交

(4)用户名密码输入正确,就可以登记实验了,次页面包含实验名、课程名、班级、机房、第几大节、实验日期等信息的填写,如图

(5)正确填写实验信息后,确认登记后点提交,返回登记结果

(6)登记成功后,重新打开软件即可看到刚才登记的实验,如下图

(7)用户登录后可保存、清除登录信息,不用每次使用都需要登录,并在软件主界面右上角显示当前用户名,效果如下图:

清除登录信息:

点击后弹出操作结果

(8)通过菜单->上周、下周进行上下周跳转查询,

(9)检查更新、反馈等功能

软件每日启动都会检查是否存在新版本并提示用户下载

反馈暂只通过短信方式反馈

(10)软件后台运行

因移动网络下蜗牛般的网速,故提供后台运行功能,通过手机上的返回键并没有真正退出而是后台运行了,对于手机网络较慢的用户(非Wifi下及3G用户)是完全有必要的,需要通过菜单里的退出才能真正退出。

三、软件页头header部分设计

1.包括软件名称,用户登录状态,及提示信息

2.XML布局文件

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"

android:

background="#ff009de4"

android:

orientation="vertical">

android:

layout_width="fill_parent"

android:

layout_height="38.0dp"

android:

background="#ff009de4">

android:

layout_width="fill_parent"

android:

layout_height="wrap_content"

android:

background="#ff009de4">

…省略部分代码…

android:

text="获取网络数据中..."

/>

-->

四、软件主显示部分设计

1.采用Viewpager+Listview实现滑动显示周一到周日实验信息

2.部分XML布局文件

xmlversion="1.0"encoding="utf-8"?

>

--标题-->

layout="@layout/header"

/>

--滑动-->

…省略部分代码…>

…省略部分代码…/>

--滑动结束-->

五、主Activity设计Cslab_listviewActivity.java

1.onCreate()窗口生成函数

Android软件运行后首先运行主Activity,一个Activity代表一个窗口(一个类)软件的登录及等级实验分别用一个Activity来处理。

每一个Activity都有onCreat()函数,用来生成窗口,本软件的主ActivityCslab_listviewActivity.java的oncreatr()函数设计

1、设置布局文件

setContentView(R.layout.main);

2、获取系统日期时间

SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-dd");

SimpleDateFormattimef=newSimpleDateFormat("yyyy年MM月dd日");

SimpleDateFormatweeknumber=newSimpleDateFormat("EEE");

DatecurDate=newDate(System.currentTimeMillis());//获取当前时间

Stringstr=formatter.format(curDate);

StringweeknumberString=weeknumber.format(curDate);

zhouji=weeknumberString;

time=timef.format(curDate);

3、检查网络情况,判断系统版本

initStrictMode();//判断系统版本,防止出现NetworkOnMainThreadException异常处理,

if(!

CheckNetwork()){

NetError();

return;

}

4.从服务器获取当前第几周GetWeekNumber();保存到成员变量中。

采用多线程,避免ANR

Threadt=newThread(){

@Override

publicvoidrun(){

省略部分代码

}

};

t.start();

//接收子线程消息

handler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

case2:

省略部分代码

break;

}

}

};

5.根据周数获取实验信息privatevoidgetExperiment(finalStringweek)并保存

Stringexperiment=WebServiceResult(NAMESPACE,"Experiment",1,newString[]{"weeknumber"},newString[]{week});

JSONObjectJsonExperiment=newJSONObject(experiment);

ArrayExperiment=JsonExperiment.getJSONArray("ex");

6.显示实验信息publicbooleanshowexperiment()

……………………

experimentlist1=buildexperimentListForSimpleAdapter("星期一");//填充ListView的数据

notes1=newMyAdapter(this,experimentlist1,R.layout.experimentinfo,

newString[]{"section","experiment"},newint[]{R.id.section,R.id.experimentinfo});

mListView1.setAdapter(notes1);

mViews.add(mListView1);

…………………

7.显示本周实验信息privatevoidLoadThisweekExperiment()

privatevoidLoadExperiment(){

ThreadThnextweek=newThread(){

@Override

publicvoidrun(){

}};

Thnextweek.start();

nehandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

case1:

break;

}

}};

}

8.用变量记录程序运行时用户上下周跳转导致的周数变化,并用privatevoidLoadExperiment()显示实验信息

读取用户保存的账号信息privatevoidgetusernamefromsetting()

service=newPreferencesService(this);

Mapparams=service.getUsername();

usernameString=params.get("username");

9.其他……………………………

六、登录模块设计loginActivity.java

1.用户名密码输入

EditTextusernameEdit;

EditTextpasswordEdit;

2.处理登录请求,提交给Webservice服务器,并返回登录结果成功或失败privatevoidlogin()

3.返回主界面

publicclassloginActivityextendsActivity{

privatePreferencesServiceservice;

privatestaticfinalStringNAMESPACE="//Webservice命名空间

privatestaticStringURL="//WebService地址

StringusernameString="";

StringpasswordString="";

EditTextusernameEdit;

EditTextpasswordEdit;

Handlerhandler;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.login);

getusernamefromsetting();

usernameEdit=(EditText)findViewById(R.id.username_edit);

passwordEdit=(EditText)findViewById(R.id.password_edit);

usernameEdit.setText(usernameString);

passwordEdit.setText(passwordString);

usernameEdit.addTextChangedListener(newTextWatcher(){

省略代码

});

passwordEdit.addTextChangedListener(newTextWatcher(){

省略代码

});

Buttonlogin_button=(Button)findViewById(R.id.signin_button);

Buttonclear=(Button)findViewById(R.id.clear);

ButtonButton01=(Button)findViewById(R.id.Button01);

Button01.setOnClickListener(newButton.OnClickListener(){

@Override

publicvoidonClick(Viewarg0){

//TODO自动生成的方法存根

省略代码

}

});

clear.setOnClickListener(newButton.OnClickListener(){

@Override

publicvoidonClick(Viewv){

清除账号信息,省略代码

}});

login_button.setOnClickListener(newButton.OnClickListener(){

@Override

publicvoidonClick(Viewv){

验证输入是否正确,省略代码

elselogin();

}

});

}

privatevoidlogin(){

//TODO自动生成的方法存根

Threadt=newThread(){

@Override

publicvoidrun(){

新线程处理登录

}

};

t.start();//启动线程

//接收子线程消息

handler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

//TODOAuto-generatedmethodstub

switch(msg.what){

case1:

处理登录结果,并提示用户,省略代码

break;

}

}

};

}

//web服务调用的函数

publicStringWebServiceResult(Stringns,Stringmethod,intarg_number,String[]arg_name,String[]arg_value){

Stringre=arg_name[0]+arg_value[0];

try{

SoapObjectrpc=newSoapObject(ns,method);

if(arg_number!

=0)

{

for(inti=0;i

rpc.addProperty(arg_name[i].toString(),arg_value[i].toString());

}

AndroidHttpTransportht=newAndroidHttpTransport(URL);

ht.debug=true;

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(

SoapEnvelope.VER11);

envelope.bodyOut=rpc;

envelope.dotNet=true;

envelope.setOutputSoapObject(rpc);

ht.call(ns+method,envelope);

SoapObjectresult=(SoapObject)envelope.bodyIn;

re=result.getProperty(0).toString();

}catch(Exceptione){

e.printStackTrace();

}

returnre;

}

 

七、登记实验模块设计:

1.检查用户是否登录,若登陆继续,否则返回privatevoidchecklogin(){

2.文本输入框(EditView)、列表选择框(spanner)、日期控件设置

3.从服务器获取机房信息privatevoidgetTestRoom(){

4.提交实验信息并返回处理结果给用户privatevoidsubExperiment()

5.返回主界面

publicclassaddexperimentextendsActivity{

privatestaticfinalStringNAMESPACE="//Webservice命名空间

privatestaticStringURL="//WebService地址

Handlerhandler;

privateintmYear;

privateintmMonth;

privateintmDay;

DatePickerdp;

Stringusername="";

Stringpassword="";

Stringroom="";

Stringtime="";

Stringname="客户端测试";

Stringnumberstring="";

Stringteacher="test";

StringclassString="计科101";

StringcoursenameString="客户端测试";

EditTextexperimentname;

EditTextexperimentteacher;

EditTextexperimentclass;

EditTextcoursename;

Spinnernumber;

privatePreferencesServiceservice;

StringusernameString="";

StringpasswordString="";

privateSpinnerroomSpinner;

privateListlist=newArrayList();

privateListnumberlist=newArrayList();

privateArrayAdapterroomadapter;

privateArrayAdapternumberadapter;

@Override

publicvoidonCreate(BundlesavedInstanceState){

checklogin();

Calendarc=Calendar.getInstance();

mYear=c.get(Calendar.YEAR);

mMonth=c.get(Calendar.MONTH);

mDay=c.get(Calendar.DAY_OF_MONTH);

time=""+mYear+"-"+(mMonth+1)+"-"+mDay;

super.onCreate(savedInstanceState);

setContentView(R.layout.editcourse);

/*取得TextView对象,并调用updateDisplay()来设置显示的初始日期时间*/

//tv=(TextView)findViewById(R.id.showTime);

//updateDisplay();

/*取得DatePicker对象,以init()设置初始值与onDateChangeListener()*/

dp=(DatePicker)findViewById(R.id.dPicker);

dp.init(mYear,mMonth,mDay,newDatePicker.OnDateChangedListener(){

@Override

publicvoidonDateChanged(DatePickerview,intyear,intmonthOfYear,intdayOfMonth)

{

mYear=year;

mMonth=monthOfYear+1;

mDay=dayOfMonth;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1