软件详细设计报告_第1页
软件详细设计报告_第2页
软件详细设计报告_第3页
软件详细设计报告_第4页
软件详细设计报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机学院实验中心-Android手机客户端学生姓名:宋同煜 张宗森 指导老师:裴斐 专业:计算机科学与技术 102在移动互联网发展迅猛的今天,在Android完全开源及拥有庞大用户群的环境下,迫切需要为计算机学院实验中心网站开发Andriod手机客户端,方便计算机学院师生随时随地查看实验信息、登记实验等。一、系统分析需求分析查询实验:教师及学生可以查询当周及上一周、下一周实验安排登记实验:教师登录后可以登记实验引言为方便计算机学院教师及学生查询、登记实验,因此开发实验中心Android手机端软件编写目的 本文档对计算机学院实验中心网站手机客户端的功能、用户界面、运行环境等作出详细说明。项目背

2、景软件的开发名称:计算机学院实验中心项目需求单位:计算机学院全体师生项目开发单位:宋同煜 张宗森二、系统设计系统目标1.实现需求分析阶段的所有功能2.主界面清晰、简单、操作易行系统功能预览该软件主要包括查询、登录、登记实验3个功能模块,主要操作如下:(1) 运行软件后,首先检查网络连接是否正常,如果正常,获取当周实验安排信息,显示给用户,效果如图(2) 通过“菜单-登记实验”进入等级实验页面,要求输入用户名密码才可继续点击“登录实验” 后,提示登录后才能继续(3)点击登录进入登录页面,如图正确输入用户名密码后点提交(4)用户名密码输入正确,就可以登记实验了,次页面包含实验名、课程名、班级、机房

3、、第几大节、实验日期等信息的填写,如图 (5)正确填写实验信息后,确认登记后点提交,返回登记结果(6)登记成功后,重新打开软件即可看到刚才登记的实验,如下图(7)用户登录后可保存、清除登录信息,不用每次使用都需要登录,并在软件主界面右上角显示当前用户名,效果如下图:清除登录信息:点击后弹出操作结果(8)通过菜单-上周、下周进行上下周跳转查询,(9)检查更新、反馈等功能软件每日启动都会检查是否存在新版本并提示用户下载反馈暂只通过短信方式反馈(10)软件后台运行因移动网络下蜗牛般的网速,故提供后台运行功能,通过手机上的返回键并没有真正退出而是后台运行了,对于手机网络较慢的用户(非Wifi下及3G用

4、户)是完全有必要的,需要通过菜单里的退出才能真正退出。三、软件页头header部分设计1.包括软件名称,用户登录状态,及提示信息2.XML布局文件 -四、软件主显示部分设计1. 采用Viewpager+Listview 实现滑动显示周一到周日实验信息2. 部分XML布局文件 五、主Activity设计Cslab_listviewActivity.java1. onCreate()窗口生成函数Android 软件运行后首先运行主Activity,一个Activity代表一个窗口(一个类)软件的登录及等级实验分别用一个Activity来处理。每一个Activity都有onCreat()函数,用来生

5、成窗口,本软件的主Activity Cslab_listviewActivity.java的oncreatr()函数设计1、设置布局文件 setContentView(R.layout.main);2、获取系统日期时间 SimpleDateFormat formatter = new SimpleDateFormat (yyyy-MM-dd); SimpleDateFormat timef = new SimpleDateFormat (yyyy年MM月dd日); SimpleDateFormat weeknumber = new SimpleDateFormat (EEE); Date cu

6、rDate = new Date(System.currentTimeMillis();/获取当前时间 String str = formatter.format(curDate); String weeknumberString=weeknumber.format(curDate); zhouji=weeknumberString; time=timef.format(curDate); 3、检查网络情况,判断系统版本 initStrictMode();/判断系统版本,防止出现NetworkOnMainThreadException 异常处理, if (!CheckNetwork() Net

7、Error(); return; 4.从服务器获取当前第几周 GetWeekNumber(); 保存到成员变量中。采用多线程,避免ANRThread t = new Thread() Override public void run() 省略部分代码 ; t.start(); /接收子线程消息 handler = new Handler() Override public void handleMessage(Message msg) case 2:省略部分代码 break; ;5.根据周数获取实验信息private void getExperiment(final String week)并

8、保存String experiment=WebServiceResult(NAMESPACE,Experiment,1,new Stringweeknumber,new Stringweek);JSONObject JsonExperiment = new JSONObject(experiment); ArrayExperiment=JsonExperiment.getJSONArray(ex);6.显示实验信息public boolean showexperiment()experimentlist1 = buildexperimentListForSimpleAdapter(星期一);/

9、填充ListView的数据 notes1 = new MyAdapter(this, experimentlist1, R.layout.experimentinfo, new String section, experiment, new int R.id.section, R.id.experimentinfo); mListView1.setAdapter(notes1); mViews.add(mListView1);7.显示本周实验信息private void LoadThisweekExperiment()private void LoadExperiment() Thread T

10、hnextweek = new Thread() Overridepublic void run() ;Thnextweek.start();nehandler = new Handler() Overridepublic void handleMessage(Message msg) switch (msg.what) case 1: break; ;8.用变量记录程序运行时用户上下周跳转导致的周数变化,并用private void LoadExperiment() 显示实验信息读取用户保存的账号信息private void getusernamefromsetting() service

11、= new PreferencesService(this); Map params = service.getUsername(); usernameString=params.get(username);9.其他六、登录模块设计loginActivity.java1. 用户名密码输入EditText usernameEdit;EditText passwordEdit;2. 处理登录请求,提交给Webservice服务器,并返回登录结果成功或失败private void login()3.返回主界面public class loginActivity extends Activity pr

12、ivate PreferencesService service; private static final String NAMESPACE = /Webservice命名空间private static String URL = / WebService地址String usernameString=;String passwordString=;EditText usernameEdit;EditText passwordEdit;Handler handler; Overridepublic void onCreate(Bundle savedInstanceState) super.

13、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.addTextCh

14、angedListener(new TextWatcher() 省略代码); passwordEdit.addTextChangedListener(new TextWatcher() 省略代码); Button login_button=(Button)findViewById(R.id.signin_button); Button clear=(Button)findViewById(R.id.clear); Button Button01=(Button)findViewById(R.id.Button01); Button01.setOnClickListener(new Button

15、.OnClickListener()Overridepublic void onClick(View arg0) / TODO 自动生成的方法存根省略代码 ); clear.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) 清除账号信息,省略代码); login_button.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) 验证输入是否正确,省略代码else

16、login();); private void login() / TODO 自动生成的方法存根Thread t = new Thread() Overridepublic void run() 新线程 处理登录;t.start();/ 启动线程/ 接收子线程消息handler = new Handler() Overridepublic void handleMessage(Message msg) / TODO Auto-generated method stubswitch (msg.what) case 1: 处理登录结果,并提示用户,省略代码break;/web服务调用的函数publ

17、ic String WebServiceResult(String ns,String method,int arg_number,String arg_name,String arg_value)String re =arg_name0+arg_value0;try SoapObject rpc = new SoapObject(ns, method);if (arg_number != 0)for (int i=0;iarg_number;i+)rpc.addProperty(arg_namei.toString(), arg_valuei.toString();AndroidHttpTr

18、ansport ht = new AndroidHttpTransport(URL);ht.debug = true;SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;envelope.dotNet = true;envelope.setOutputSoapObject(rpc);ht.call(ns + method, envelope);SoapObject result = (SoapObject) envelope.b

19、odyIn;re = result.getProperty(0).toString(); catch (Exception e) e.printStackTrace();return re;七、登记实验模块设计:1. 检查用户是否登录,若登陆继续,否则返回private void checklogin() 2. 文本输入框(EditView)、列表选择框(spanner)、日期控件设置3. 从服务器获取机房信息private void getTestRoom() 4. 提交实验信息并返回处理结果给用户 private void subExperiment()5. 返回主界面public cla

20、ss addexperiment extends Activity private static final String NAMESPACE = /Webservice命名空间private static String URL = / WebService地址Handler handler;private int mYear; private int mMonth; private int mDay; DatePicker dp;String username=;String password=;String room=;String time=;String name=客户端测试;Stri

21、ng numberstring=;String teacher=test;String classString=计科101;String coursenameString=客户端测试;EditText experimentname;EditText experimentteacher;EditText experimentclass;EditText coursename;Spinner number; private PreferencesService service; String usernameString=; String passwordString=; private Spin

22、ner roomSpinner; private List list = new ArrayList(); private List numberlist = new ArrayList(); private ArrayAdapter roomadapter; private ArrayAdapter numberadapter; Overridepublic void onCreate(Bundle savedInstanceState) checklogin(); Calendar c=Calendar.getInstance(); mYear=c.get(Calendar.YEAR);

23、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对象,以

24、init() 设置初始值与onDateChangeListener() */ dp=(DatePicker)findViewById(R.id.dPicker); dp.init(mYear,mMonth,mDay,new DatePicker.OnDateChangedListener() Override public void onDateChanged(DatePicker view,int year, int monthOfYear,int dayOfMonth) mYear=year; mMonth= monthOfYear+1; mDay=dayOfMonth; /*调用upda

25、teDisplay()来改变显示日期*/ time=+mYear+-+mMonth+-+mDay;/updateDisplay(); ); experimentname=(EditText)findViewById(R.id.experimentname); coursename=(EditText)findViewById(R.id.coursename); number = (Spinner)findViewById(R.id.Spinner_number); experimentteacher=(EditText)findViewById(R.id.editText_teacher);

26、experimentclass=(EditText)findViewById(R.id.editText_class); experimentname.addTextChangedListener(new TextWatcher() 省略部分代码); coursename.addTextChangedListener(new TextWatcher() 省略部分代码); experimentclass.addTextChangedListener(new TextWatcher() 省略部分代码); numberlist.add(第一大节); numberlist.add(第二大节); num

27、berlist.add(第三大节); numberlist.add(第四大节); numberlist.add(第五大节); getTestRoom(); roomSpinner = (Spinner)findViewById(R.id.roomSpinner); roomadapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, list); /第三步:为适配器设置下拉列表下拉时的菜单样式。 roomadapter.setDropDownViewResource(android.R.layout.simple_s

28、pinner_dropdown_item); /第四步:将适配器添加到下拉列表上 roomSpinner.setAdapter(roomadapter); /第五步:为下拉列表设置各种事件的响应,这个事响应菜单被选中 roomSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() SuppressWarnings(unchecked) public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) 省略部分代码 ); n

29、umberadapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, numberlist); 省略部分代码 Button button_cancel=(Button)findViewById(R.id.button_cancel); button_cancel.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) finish();); Button button_save=(Button)findV

30、iewById(R.id.button_save); button_save.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) new AlertDialog.Builder(addexperiment.this) .setTitle(确认登记) .setMessage(时间:+time+n+节次:+numberstring+n+ 课程名:+name+n+ 实验名:+coursenameString+n+ 教师:+teacher+n+ 机房:+room+n+ 班级:+class

31、String ) .setIcon(android.R.drawable.ic_dialog_info) .setPositiveButton(确定,new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichButton)/ 编写处理提交实验的代码) .setNegativeButton(取消, new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichBu

32、tton)finish();/ 取消 ) .show();); private void getTestRoom() / TODO 获取机房信息 Thread roomExperiment = new Thread() Overridepublic void run() 多线程处理,避免ANR,省略部分代码;roomExperiment.start();handler = new Handler() Overridepublic void handleMessage(Message msg) switch (msg.what) case 1: 处理登记实验返回结果省略部分代码 ; privat

33、e void checklogin() getusernamefromsetting(); / 检查是否登录 if(usernameString.isEmpty() new AlertDialog.Builder(addexperiment.this) .setTitle(提示) .setMessage(请登陆,再继续! ) .setIcon(android.R.drawable.ic_dialog_info) .setPositiveButton(登录,new DialogInterface.OnClickListener()public void onClick(DialogInterfa

34、ce dialog,int whichButton) finish(); Intent loginIntent=new Intent(); loginIntent.setClass(addexperiment.this, loginActivity.class); startActivity(loginIntent);/finish();/ 编写处理shi的代码).setNegativeButton(返回,new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichButton

35、)finish();/finish();/ 编写处理shi的代码).show(); /* * d登记实验 */ private void subExperiment() Thread ThsubExperiment = new Thread() Overridepublic void run() Message lmsg;String arg_name = username, passwd, coursename, experimentname, classname, snumber, testdate, testroom, testtime, ;String arg_value = user

36、nameString,passwordString,coursenameString,name,classString,time,room,numberstring; lmsg=new Message();try JSONObject jsonreg=new JSONObject(WebServiceResult(NAMESPACE,RegTest,9,arg_name,arg_value);String RegTestResult = jsonreg.getString(result);lmsg.obj = RegTestResult;/String reString=jsonreg.toString();/lmsg.obj=reString;/lmsg.obj = WebServiceResult(NAMESPACE,RegTest,9,arg_name,arg_value);lmsg.what = 1;handler.sendMessage(lmsg); catch (Exception e) / TODO 自动生成的 catch 块e.printStack

温馨提示

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

评论

0/150

提交评论