Android课程设计报告模板

时间:2024.4.20

移动互联网开发

课程设计报告

学生姓名:           学 号:   k081241139          

专    业:  计算机科学与技术班 级: k0312415            

设计题目:   口袋微博                    

学年学期:  2014            季学期

指导教师:   张华          

                                        

目      录  (示例)

一、      设计题目................................................................................................................................... 1

二、      设计目的................................................................................................................................... 1

三、      设计原理及方案....................................................................................................................... 1

1     使用的软件工具和环境........................................................................................................... 1

2     需求分析与概要设计............................................................................................................... 1

3     数据库设计(若有)............................................................................................................... 1

4     详细设计和关键问题............................................................................................................... 1

四、      实现效果................................................................................................................................... 1

五、      设计体会................................................................................................................................... 1

参 考 文 献............................................................................................................................................ 3

 


一、       设计题目

Android社交分享平台——口袋微博 设计目的

二、       设计原理及方案

首先要实现以下这些功能:

Android端登录和注册模块的实现

Android端个人中心模块的实现

Android端快速发布模块的实现

Android端查看联系人模块的实现

Android端管理日志模块的实现

Android端管理相册模块的实现

1    使用的软件工具和环境

1)PC计算机

2)JDK安装包

3)Eclipse安装包

4)Android SDK安装包

5)ADT插件

2    需求分析与概要设计

(详细描述系统的功能需求)

Android端登录和注册模块的实现

Android端个人中心模块的实现

Android端快速发布模块的实现

Android端查看联系人模块的实现

Android端管理日志模块的实现

Android端管理相册模块的实现

(详细描述系统结构;例如总体架构设计、流程图、用例图等,并分别描述)

说明:这里的用例图和类图的对应关系可以在下面的E-R图上找到,这里我就略了一下。

Android端总体架

文本框: 发布日志 

 

 


Web端的原理示意图

 


数据库设计(若有的必须给出,没有的给出其他重要设计过程)

(给出ER关系图及数据库表)

用powerdesigner设计对应关系,并生成表,E-R图

3    详细设计和关键问题

(分功能模块描述设计细节,例如详细功能图、类图和关键流程图等。遇到的关键Android问题是如何解决的)

相册列表:功能图

       查看

                                                                                                        

      修改权限              

二、快速发布:

  

      

三、       实现效果

(包括系统描述和程序运行界面的截图)                                                       1.口袋微博用户登录界面

2.口袋微博个人中心——快速发布功能界面

   

3.口袋微博个人中心——我的好友功能界面

   

4.口袋微博个人中心——最近访客功能界面

5.口袋微博个人中心——日志列表功能界面

6.口袋微博个人中心——相册列表功能界面

7.口袋微博——搜索好友界面

以下是部分重要代码由于代码太多无法容纳

(1)LoginActivity.java登录界面

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.os.Looper;

import android.view.View;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.EditText;

import android.widget.ImageButton;

import android.widget.Toast;

public class LoginActivity extends Activity {

       MyConnector mc = null;

       ProgressDialog pd;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.login);

        checkIfRemember();

        Button btnLogin = (Button)findViewById(R.id.btnLogin);

        btnLogin.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);

                            login();

                     }

              });

        Button btnReg = (Button)findViewById(R.id.btnReg);

        btnReg.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            Intent intent = new Intent(LoginActivity.this, wyf.wpf.RegActivity.class);

                            startActivity(intent);

                            finish();

                     }

              });

        ImageButton ibExit = (ImageButton)findViewById(R.id.ibExit);

        ibExit.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            android.os.Process.killProcess(android.os.Process.myPid());             //结束进程,退出程序

                     }

              });

    }

    //方法:连接服务器进行登录

    public void login(){

           new Thread(){

                  public void run(){

                         Looper.prepare();

                            try{

                                   if(mc == null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   }

                                   EditText etUid = (EditText)findViewById(R.id.etUid);       //获得帐号EditText

                                   EditText etPwd = (EditText)findViewById(R.id.etPwd);     //获得密码EditText

                                   String uid = etUid.getEditableText().toString().trim();       //获得输入的帐号

                                   String pwd = etPwd.getEditableText().toString().trim();     //获得输入的密码

                                   if(uid.equals("") || pwd.equals("")){            //判断输入是否为空

                                          Toast.makeText(LoginActivity.this, "请输入帐号或密码!", Toast.LENGTH_SHORT).show();//输出提示消息

                                          return;

                                   }

                                   String msg = "<#LOGIN#>"+uid+"|"+pwd;                             //组织要返回的字符串

                                   mc.dout.writeUTF(msg);                                                                      //发出消息

                                   String receivedMsg = mc.din.readUTF();            //读取服务器发来的消息

                                   pd.dismiss();

                                   if(receivedMsg.startsWith("<#LOGIN_SUCCESS#>")){    //收到的消息为登录成功消息

                                          receivedMsg = receivedMsg.substring(17);

                                          String [] sa = receivedMsg.split("\\|");

                                          CheckBox cb = (CheckBox)findViewById(R.id.cbRemember);         //获得CheckBox对象

                                          if(cb.isChecked()){

                                                 rememberMe(uid,pwd);

                                          }

                                          //转到功能面板

                                          Intent intent = new Intent(LoginActivity.this,FunctionTabActivity.class);

                                          intent.putExtra("uno", sa[0]);

                                          startActivity(intent);                                         //启动功能Activity

                                          finish();

                                   }

                                   else if(msg.startsWith("<#LOGIN_FAIL#>")){                                //收到的消息为登录失败

                                          Toast.makeText(LoginActivity.this, msg.substring(14), Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                          Looper.myLooper().quit();

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                  }

           }.start();

    }

    //方法:将用户的id和密码存入Preferences

    public void rememberMe(String uid,String pwd){

           SharedPreferences sp = getPreferences(MODE_PRIVATE); //获得Preferences

           SharedPreferences.Editor editor = sp.edit();               //获得Editor

           editor.putString("uid", uid);                                            //将用户名存入Preferences

           editor.putString("pwd", pwd);                                                //将密码存入Preferences

           editor.commit();

    }

    //方法:从Preferences中读取用户名和密码

    public void checkIfRemember(){

           SharedPreferences sp = getPreferences(MODE_PRIVATE); //获得Preferences

           String uid = sp.getString("uid", null);

           String pwd = sp.getString("pwd", null);

           if(uid != null && pwd!= null){

                  EditText etUid = (EditText)findViewById(R.id.etUid);

                  EditText etPwd = (EditText)findViewById(R.id.etPwd);

                  CheckBox cbRemember = (CheckBox)findViewById(R.id.cbRemember);

                  etUid.setText(uid);

                  etPwd.setText(pwd);

                  cbRemember.setChecked(true);

           }

    }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

              }

              super.onDestroy();

       }

}

(2)DirayActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import java.util.ArrayList;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class DiaryActivity extends Activity{

       ArrayList<String []> diaryList = new ArrayList<String []>();

       MyConnector mc = null;

       String uno = null;

       String visitor = null;

       BaseAdapter ba = new BaseAdapter() {

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     LinearLayout ll = new LinearLayout(DiaryActivity.this);

                     TextView tvTitle = new TextView(DiaryActivity.this);

                     ll.setOrientation(LinearLayout.VERTICAL);

                     tvTitle.setTextAppearance(DiaryActivity.this, R.style.title);

                     tvTitle.setGravity(Gravity.LEFT);               //设置TextView的对齐方式

                     tvTitle.setText(diaryList.get(position)[1]);

                     TextView tvContent = new TextView(DiaryActivity.this);

                     tvContent.setTextAppearance(DiaryActivity.this, R.style.content);     //设置字体大小

                     tvContent.setGravity(Gravity.LEFT);           //设置TextView的对齐方式

                     tvContent.setText(diaryList.get(position)[2]);             //设置显示的内容

                     ll.addView(tvTitle);

                     ll.addView(tvContent);

                     return ll;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public Object getItem(int arg0) {

                     return null;

              }

              @Override

              public int getCount() {

                     return diaryList.size();

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();

              uno = intent.getStringExtra("uno");                                 //获得主人ID

              visitor = intent.getStringExtra("visitor");            //获得访客ID

              getDiaryList();

              setContentView(R.layout.diary);

              ListView lvDiary = (ListView)findViewById(R.id.lvDiary);              //获得ListView对象

              lvDiary.setAdapter(ba);

              lvDiary.setOnItemClickListener(new OnItemClickListener() {

                     @Override

                     public void onItemClick(AdapterView<?> parent, View v, int position,

                                   long id) {

                            Intent intent = new Intent(DiaryActivity.this,CommentActivity.class);

                            intent.putExtra("rid", diaryList.get(position)[0]);

                            intent.putExtra("uno", uno);

                            intent.putExtra("visitor", visitor);

                            startActivity(intent);

                     }

              });

       }

       //方法:获取日志列表

       public void getDiaryList(){

              new Thread(){

                     public void run(){

                            try{

                                   mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   mc.dout.writeUTF("<#GET_DIARY#>"+uno+"|"+"1");

                                   int size = mc.din.readInt();           //读取日志的长度

                                   for(int i=0;i<size;i++){  //循环接受日志信息

                                          String diaryInfo = mc.din.readUTF();         //读取日志信息

                                          String [] sa = diaryInfo.split("\\|");

                                          diaryList.add(sa);                        //将日志信息添加到列表中

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

                     mc = null;

              }

              super.onDestroy();

       }

      

}

(3)口袋微博_____个人中心PublishActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.*;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.os.Looper;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

public class PublishActivity extends Activity{

       String [] items = {                //存放ListView中的选项内容

              "更新心情","发布日志","拍照上传"  

       };

       int [] imgIds = {

              R.drawable.p_status,

              R.drawable.p_diary,

              R.drawable.p_shoot

       };

       String uno = null;          //存放

       MyConnector mc = null;              //MyConnector对象引用

       ProgressDialog pd = null;      //ProgressDialog对象引用

       View dialog_view = null;             //心情

       BaseAdapter ba = new BaseAdapter() {

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     LinearLayout ll = new LinearLayout(PublishActivity.this);

                     ll.setOrientation(LinearLayout.HORIZONTAL);

                     ll.setGravity(Gravity.CENTER);

                     ImageView iv = new ImageView(PublishActivity.this);                    //创建ImageView对象

                     iv.setAdjustViewBounds(true);

                     iv.setImageResource(imgIds[position]);                                           //设置ImageView的

                     ll.addView(iv);                                                                                           //将ImageView添加到线性布局中

                     TextView tv = new TextView(PublishActivity.this);

                     tv.setPadding(10, 0, 0, 0);

                     tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                     tv.setTextAppearance(PublishActivity.this, R.style.title);

                     tv.setText(items[position]);                  //设置TextView显示的内容

                     ll.addView(tv);

                     return ll;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public Object getItem(int position) {

                     return null;

              }

              @Override

              public int getCount() {

                     return items.length;

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();            //获得启动该Activity的Intent

              uno = intent.getStringExtra("uno");

              setContentView(R.layout.publish);               //设置当前屏幕

              ListView lvPublish = (ListView)findViewById(R.id.lvPublish);         //获得ListView对象引用

              lvPublish.setAdapter(ba);

              lvPublish.setOnItemClickListener(new OnItemClickListener() {

                     @Override

                     public void onItemClick(AdapterView<?> parent, View v, int position,

                                   long id) {

                            switch(position){                  //判断点击的是哪一个选项

                            case 0:                          //更新心情

                                   LayoutInflater li = LayoutInflater.from(PublishActivity.this);

                                   dialog_view = li.inflate(R.layout.publish_status, null);

                                   new AlertDialog.Builder(PublishActivity.this)

                                          .setTitle("更新心情")

                                          .setIcon(R.drawable.p_status)

                                          .setView(dialog_view)

                                          .setPositiveButton(

                                                 "发表",

                                                 new DialogInterface.OnClickListener() {

                                                        @Override

                                                        public void onClick(DialogInterface dialog, int which) {

                                                               pd = ProgressDialog.show(PublishActivity.this, "请稍候", "正在更新心情...",true,true);

                                                               updateStatus();

                                                        }

                                                 })

                                          .setNegativeButton(

                                                 "取消",

                                                 new DialogInterface.OnClickListener() {

                                                        @Override

                                                        public void onClick(DialogInterface dialog, int which) {}

                                                 })

                                          .show();

                                   break;

                            case 1:                          //发表日志

                                   Intent intent1 = new Intent(PublishActivity.this,PublishDiaryActivity.class);//创建Intent

                                   intent1.putExtra("uno", uno);              //设置Intent的Extra字段

                                   startActivity(intent1);

                                   break;

                            case 2:                          //拍照上传

                                   Intent intent2 = new Intent(PublishActivity.this,ShootActivity.class);//创建Intent

                                   intent2.putExtra("uno", uno);              //设置Intent的Extra字段

                                   startActivity(intent2);

                                   break;

                            }

                     }

              });

       }

       //方法:连接服务器,更新心情

       public void updateStatus(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            EditText etStatus = (EditText)dialog_view.findViewById(R.id.etInputStatus);

                            String status = etStatus.getEditableText().toString().trim(); //获得心情内容

                            if(status.equals("")){             //如果输入的心情为空

                                   pd.dismiss();

                                   Toast.makeText(PublishActivity.this, "请输入更新的心情", Toast.LENGTH_LONG).show();//输出提示

                                   Looper.loop();

                                   return;

                            }

                            String message = "<#NEW_STATUS#>"+status+"|"+uno;

                            if(mc == null){

                                   mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                            }

                            try{

                                   mc.dout.writeUTF(message);                      //向服务器发送更新的心情

                                   pd = ProgressDialog.show(PublishActivity.this, "正在连接网络", "请稍候",true);

                                   String reply = mc.din.readUTF();        //从服务器返回的回复

                                   pd.dismiss();

                                   if(reply.equals("<#STATUS_SUCCESS#>")){     //心情更新成功

                                          Toast.makeText(PublishActivity.this, "心情更新成功!", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                                   else {             //心情更新失败

                                          Toast.makeText(PublishActivity.this, "心情更新失败!", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                            Looper.myLooper().quit();

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

              }

              super.onDestroy();

       }

      

}

(4)注册处理____RegActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.Toast;

public class RegActivity extends Activity{

       MyConnector mc = null;                     //声明MyConnector对象

       String uno = "";                          //记录用户的ID

       ProgressDialog pd= null;              //声明进度对话框

       Handler myHandler = new Handler(){

              @Override

              public void handleMessage(Message msg) {

                     switch(msg.what){

                     case 0:           

                            View linearLayout = (LinearLayout)findViewById(R.id.regResult);   //获得线性布局

                            linearLayout.setVisibility(View.VISIBLE);          //设置可见性

                            EditText etUno = (EditText)findViewById(R.id.etUno);

                            etUno.setText(uno);             

                            break;

                     }

                     super.handleMessage(msg);

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.reg);                                                //设置当前屏幕

              Button btnReg = (Button)findViewById(R.id.btnReg);              //获得注册Button按钮对象

              btnReg.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            pd = ProgressDialog.show(RegActivity.this, "请稍候...", "正在连接服务器...", false);

                            register();

                     }

              });

              Button btnBack = (Button)findViewById(R.id.btnBack);                         //获得返回按钮对象

              btnBack.setOnClickListener(new View.OnClickListener() {                      //为返回按钮添加监听器

                     @Override

                     public void onClick(View v) {

                            Intent intent = new Intent(RegActivity.this,LoginActivity.class); //创建Intent对象

                            startActivity(intent);                                                                     //启动Activity

                            finish();

                     }

              });

              Button btnEnter = (Button)findViewById(R.id.btnEnter);                        //获得进入功能面板按钮对象

              btnEnter.setOnClickListener(new View.OnClickListener() {                     //为进入功能面板的按钮添加监听器

                     @Override

                     public void onClick(View v) {

                            Intent intent = new Intent(RegActivity.this,FunctionTabActivity.class);     //创建Intent

                            intent.putExtra("uno", uno);         //设置Extra字段

                            startActivity(intent);                           //启动FunctionTab

                            finish();                                             //关闭该Activity

                     }

              });

       }

       //方法:连接服务器,进行注册

       public void register(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            //获得用户输入的数据并进行验证

                            EditText etName = (EditText)findViewById(R.id.etName);               //获得昵称EditText对象

                            EditText etPwd1 = (EditText)findViewById(R.id.etPwd1);               //获得密码EditText对象

                            EditText etPwd2 = (EditText)findViewById(R.id.etPwd2);               //获得确认密码EditText对象

                            EditText etEmail = (EditText)findViewById(R.id.etEmail);              //获得邮箱EditText对象

                            EditText etStatus = (EditText)findViewById(R.id.etStatus);              //获得心情EditText对象

                            String name = etName.getEditableText().toString().trim();        //获得昵称

                            String pwd1 = etPwd1.getEditableText().toString().trim();        //获得密码

                            String pwd2 = etPwd2.getEditableText().toString().trim();        //获得确认密码

                            String email = etEmail.getEditableText().toString().trim();        //获得邮箱

                            String status = etStatus.getEditableText().toString().trim(); //获得状态

                            if(name.equals("") || pwd1.equals("") || pwd2.equals("") || email.equals("") || status.equals("")){

                                   Toast.makeText(RegActivity.this, "请将注册信息填写完整", Toast.LENGTH_LONG).show();

                                   return;

                            }

                            if(!pwd1.equals(pwd2)){                            //判断两次输入的密码是否一致

                                   Toast.makeText(RegActivity.this, "两次输入的密码不一致!", Toast.LENGTH_LONG).show();

                                   return;

                            }

                            try{

                                   mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   String regInfo = "<#REGISTER#>"+name+"|"+pwd1+"|"+email+"|"+status;

                                   mc.dout.writeUTF(regInfo);

                                   String result = mc.din.readUTF();

                                   pd.dismiss();

                                   if(result.startsWith("<#REG_SUCCESS#>")){           //返回信息为注册成功

                                          result= result.substring(15);          //去掉信息头

                                          uno = result;                        //记录用户的ID

                                          myHandler.sendEmptyMessage(0);                            //发出Handler消息

                                          Toast.makeText(RegActivity.this, "注册成功!", Toast.LENGTH_LONG).show();

                                   }

                                   else{              //注册失败

                                          Toast.makeText(RegActivity.this, "注册失败!请重试!", Toast.LENGTH_LONG).show();

                                   }

                            }

                            catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

              }

              super.onDestroy();

       }

}

 (5)AlbumActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.IMAGESWITCHER_HEIGHT;

import static wyf.wpf.ConstantUtil.PHOTO_HEIGHT;

import static wyf.wpf.ConstantUtil.PHOTO_WIDTH;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Color;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.opengl.Visibility;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.View;

import android.view.ViewGroup;

import android.view.animation.AnimationUtils;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.Gallery;

import android.widget.ImageSwitcher;

import android.widget.ImageView;

import android.widget.Spinner;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.ViewSwitcher;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.AdapterView.OnItemSelectedListener;

public class AlbumActivity extends Activity implements ViewSwitcher.ViewFactory{

       List<String []> photoInfoList = new ArrayList<String []>();

       Bitmap [] photoList;                    //存放图片的数组

       Gallery gl = null;                        //Gallery对象的引用

       ImageSwitcher is = null;              //ImageSwitcher对象的引用

       Spinner sp = null;                        //Spinner对象的引用

       MyConnector mc = null;                     //MyConnector对象的引用

       String xid = "";                           //存放相册的ID

       String uno = "";                          //存放用户ID

       String visitor = "";               //存放访问者的ID

       String pid = "";                           //存放当前显示的照片ID

       int from = -1;                             //启动该Activity的来源,0为MyAlbumListActivity,1为AlbumListActivity

       List<String []> albumInfoList = new ArrayList<String []>();            //存放相册信息,id和相册名称

       //Spinner的Adapter

       BaseAdapter baSpinner = new BaseAdapter() {

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     TextView tv = new TextView(AlbumActivity.this);

                     tv.setTextSize(18.5f);

                     tv.setTextColor(Color.DKGRAY);

                     String [] sa = albumInfoList.get(position);

                     tv.setText(sa[1]);

                     return tv;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public Object getItem(int position) {

                     return null;

              }

              @Override

              public int getCount() {

                     return albumInfoList.size();

              }

       };

       //Gallery的Adapter

       BaseAdapter baGallery= new BaseAdapter() {

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     ImageView iv = new ImageView(AlbumActivity.this);

                     iv.setAdjustViewBounds(true);

                     iv.setLayoutParams(new Gallery.LayoutParams(PHOTO_WIDTH, PHOTO_HEIGHT));

                     iv.setMaxHeight(PHOTO_HEIGHT);                                      //设置ImageView显示的高度

                     iv.setMaxWidth(PHOTO_WIDTH);                                         //设置ImageView显示的宽度    

                     iv.setImageBitmap(photoList[position]);                           //设置ImageView显示的内容

                     return iv;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public Object getItem(int position) {

                     return null;

              }

              @Override

              public int getCount() {

                     if(photoList != null){

                            return photoList.length;

                     }

                     else{

                            return 0;

                     }

              }

       };

       //点下Gallery中的图片后触发的事件监听器

       OnItemClickListener myListener = new OnItemClickListener() {     

              @Override

              public void onItemClick(AdapterView<?> parent, View v, int position,

                            long id) {

                     if(is != null){                //如果ImageSwitcher不为空

                            Drawable d = new BitmapDrawable(photoList[position]);

                            is.setImageDrawable(d);

                     }

              }

       };

       Handler myHandler = new Handler(){

              @Override

              public void handleMessage(Message msg) {

                     switch(msg.what){

                     case 0:           

                            gl.setAdapter(baGallery);

                            is.setImageDrawable(new BitmapDrawable(photoList[0]));

                            break;

                     }

                     super.handleMessage(msg);

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.album);                              //设置当前屏幕

              Intent intent = getIntent();                                 //获取启动该Activity的Intent

              uno = intent.getStringExtra("uno");                          //获得Extra字段的uno

              visitor = intent.getStringExtra("visitor");

              from = intent.getIntExtra("from", -1);         //获得Extra字段的from

              int position = intent.getIntExtra("position", 0);    //获得被选中的相册

              String [] albumInfoArray = intent.getStringArrayExtra("albumlist"); //获得相册信息数组

              xid = intent.getStringExtra("xid");                     //获得被选中的相册编号

              albumInfoList = new ArrayList<String []>();

              for(String s:albumInfoArray){                    //遍历信息数组

                     String [] sa = s.split("\\|");

                     albumInfoList.add(sa);                        //构建相册信息列表

              }

              sp = (Spinner)findViewById(R.id.spAlbum);             //获得Spinner对象

              sp.setAdapter(baSpinner);                          //设置Spinner对象的Adapter

              sp.setSelection(position);                            //选中在前一个Activity中被选中的相册

              sp.setOnItemSelectedListener(new OnItemSelectedListener() {   //为Spinner添加监听器

                     @Override

                     public void onItemSelected(AdapterView<?> parent, View v,

                                   int position, long id) {

                            xid = albumInfoList.get(position)[0];                 //修改存储相册ID的成员变量

                            getPhotoList();                                                 //获得相册中的相片列表

                     }

                     @Override

                     public void onNothingSelected(AdapterView<?> parent) {}

              });

              gl = (Gallery)findViewById(R.id.galleryPhoto);         //获得Gallery对象

              gl.setOnItemClickListener(myListener);                            //设置Gallery的OnItemClickListener监听器

              is = (ImageSwitcher)findViewById(R.id.isPhoto);             //获得ImageSwitcher对象

              is.setFactory(this);                                                   //设置ImageSwitcher的Factory

              is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));    //设置ImageSwitcher的In动画

              is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置ImageSwitcher的Out动画

              Button btnBack = (Button)findViewById(R.id.btnAlbumBack);        //获得返回按钮btnBack

              btnBack.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            switch(from){        //判断启动该Activity的来源

                            case 0:                   //有MyAlbumListActivity启动

                                   Intent intent1 = new Intent(AlbumActivity.this,FunctionTabActivity.class);

                                   intent1.putExtra("uno", uno);

                                   intent1.putExtra("tab", "tab5");

                                   startActivity(intent1);          

                                   finish();

                                   break;

                            case 1:                   //由AlbumListActivity启动

                                   Intent intent2 = new Intent(AlbumActivity.this,HomePageActivity.class);

                                   intent2.putExtra("uno", uno);

                                   intent2.putExtra("visitor", visitor);

                                   intent2.putExtra("tab", "tab2");

                                   startActivity(intent2);          

                                   finish();

                                   break;

                            }

                     }

              });

              Button btnDeletePhoto = (Button)findViewById(R.id.btnDeletePhoto);

              if(visitor != null){         //不是查看自己的相册

                     btnDeletePhoto.setVisibility(View.GONE);         //如果不是自己的相册,隐藏删除按钮

              }

              btnDeletePhoto.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            new AlertDialog.Builder(AlbumActivity.this)

                                   .setTitle("提示")

                                   .setIcon(R.drawable.alert_icon)

                                   .setMessage("确认删除该照片?")

                                   .setPositiveButton(

                                          "确定",

                                          new DialogInterface.OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

                                                        int pos = gl.getSelectedItemPosition();

                                                        pid = photoInfoList.get(pos)[0];

                                                        deletePhoto();

                                                 }

                                          })

                                   .setNegativeButton(

                                          "取消",

                                          null)

                                   .show();

                     }

              });

       }

       public void getPhotoList(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   mc = null;

                                   mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   mc.dout.writeUTF("<#GET_ALBUM#>"+xid);

                                   int size = 0;           //获得相册长度

                                   size = mc.din.readInt();                //读取相册的长度

                                   if(size == 0){

                                          Toast.makeText(AlbumActivity.this, "该相册还未上传照片", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                          return;

                                   }

                                   photoInfoList = new ArrayList<String []>(size);

                                   photoList = new Bitmap[size];

                                   for(int i=0;i<size;i++){                //循环获取图片数据

                                          String photoInfo = mc.din.readUTF();         //读取相片信息

                                          String [] sa = photoInfo.split("\\|");                    //切割字符串

                                          photoInfoList.add(sa);                         //将相片信息添加到列表中

                                          int photoLength = mc.din.readInt();            //读取相片长度

                                          byte [] buf = new byte[photoLength];          //创建相应长度的数组

                                          mc.din.read(buf);                 //读入图片数据

                                          photoList[i] = BitmapFactory.decodeByteArray(buf, 0, photoLength);      //创建Bitmap

                                   }

                                   myHandler.sendEmptyMessage(0);

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

       }

       //方法:删除指定照片

       public void deletePhoto(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   if(mc ==null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   }

                                   String msg = "<#DELETE_PHOTO#>"+pid;

                                   mc.dout.writeUTF(msg);

                                   String reply = mc.din.readUTF();       

                                   if(reply.equals("<#DELETE_PHOTO_SUCCESS#>")){   

                                          Toast.makeText(AlbumActivity.this, "照片删除成功!", Toast.LENGTH_LONG).show();

                                   }

                                   else {

                                          Toast.makeText(AlbumActivity.this, "删除失败,请重试!", Toast.LENGTH_LONG).show();

                                   }

                                   getPhotoList();

                                   Looper.loop();

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

       }

       @Override

       public View makeView() {

              ImageView iv = new ImageView(this);

              iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

              iv.setLayoutParams(new ImageSwitcher.LayoutParams(IMAGESWITCHER_HEIGHT,IMAGESWITCHER_HEIGHT));

              return iv;

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

                     mc = null;

              }

              super.onDestroy();

       }

}

 

(6)AlbumListActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import java.util.ArrayList;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

/*

 * 该Activity的主要功能是显示好友的相册列表

 * 和MyAlbumActivity有所区别。

 */

public class AlbumListActivity extends Activity{

       MyConnector mc = null;

       ListView lvAlbumList = null;

       ArrayList<String []> albumList;          //存放好友相册信息的列表

       String [] albumArray;           //存放好友相册信息的数组

       String uno = null;                               //存放被访问者的ID

       String visitor = null;                           //存放访问者的ID

       BaseAdapter ba = new BaseAdapter() {

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     TextView tv = new TextView(AlbumListActivity.this);

                     tv.setTextSize(20.5f);            //设置字体大小

                     tv.setGravity(Gravity.CENTER);

                     tv.setText(albumList.get(position)[1]);  //设置TextView显示的内容

                     tv.setTextAppearance(AlbumListActivity.this, R.style.title);

                     return tv;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public Object getItem(int position) {

                     return null;

              }

              @Override

              public int getCount() {

                     return albumList.size();

              }

       };

       Handler myHandler = new Handler(){

              @Override

              public void handleMessage(Message msg) {

                     switch(msg.what){

                     case 0:           

                            lvAlbumList.setAdapter(ba);

                            break;

                     }

                     super.handleMessage(msg);

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();

              uno = intent.getStringExtra("uno");

              visitor = intent.getStringExtra("visitor");

              setContentView(R.layout.album_list);          //设置当前屏幕

              lvAlbumList = (ListView)findViewById(R.id.lvAlbumList);      //获得ListView对象

              lvAlbumList.setOnItemClickListener(new OnItemClickListener() {

                     @Override

                     public void onItemClick(AdapterView<?> parent, View v, int position,

                                   long id) {

                            Intent intent = new Intent(AlbumListActivity.this,AlbumActivity.class);    //创建Intent对象

                            intent.putExtra("uno", uno);

                            intent.putExtra("visitor", visitor);

                            intent.putExtra("albumlist", albumArray);

                            intent.putExtra("xid", albumList.get(position)[0]);

                            intent.putExtra("position", position);

                            intent.putExtra("from", 1);

                            startActivity(intent);

                            finish();

                     }

              });

              getAlbumListByAccess();

       }

       public void getAlbumListByAccess(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   if(mc == null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   }

                                   mc.dout.writeUTF("<#GET_ALBUM_LIST_BY_ACCESS#>"+uno+"|"+visitor);

                                   String reply = mc.din.readUTF();

                                   System.out.println("-------getAlbumByAccess reply is:"+reply);

                                   if(reply.equals("<#NO_ALBUM#>")){        //该用户无相册

                                          Toast.makeText(AlbumListActivity.this, "该用户还没有上传过照片", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                                   albumArray = reply.split("\\$");

                                   albumList = new ArrayList<String []>();

                                   for(String s:albumArray){     //解析每个相册的信息

                                          String [] sa = s.split("\\|");            //切割字符串

                                          albumList.add(sa);

                                   }

                                   myHandler.sendEmptyMessage(0);

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                            Looper.myLooper().quit();

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

                     mc = null;

              }

              super.onDestroy();

       }

      

}

(7)CommentActivity .java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

public class CommentActivity extends Activity{

       MyConnector mc = null;

       String visitor = null;             //访问者ID

       String uno = null;                 //被访者ID

       String rid = null;                  //日记的ID

       List<String []> cmtList; //存放评论的列表

       BaseAdapter baListView = new BaseAdapter(){

              @Override

              public int getCount() {

                     return cmtList.size();

              }

              @Override

              public Object getItem(int position) {

                     return null;

              }

              @Override

              public long getItemId(int position) {

                     return 0;

              }

              @Override

              public View getView(int position, View convertView, ViewGroup parent) {

                     LinearLayout ll = new LinearLayout(CommentActivity.this);

                     ll.setOrientation(LinearLayout.VERTICAL);

                     TextView tvName = new TextView(CommentActivity.this);

                     tvName.setGravity(Gravity.LEFT);

                     tvName.setTextAppearance(CommentActivity.this, R.style.title);

                     String [] cmt = cmtList.get(position);          //获得指定的评论信息

                     tvName.setText(cmt[1]+"-于"+cmt[3]+"说:");

                     TextView tvContent = new TextView(CommentActivity.this);

                     tvContent.setTextAppearance(CommentActivity.this, R.style.content);

                     tvContent.setText(cmt[2]);                   //设置评论内容

                     ll.addView(tvName);

                     ll.addView(tvContent);

                     return ll;

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();

              visitor = intent.getStringExtra("visitor");

              uno = intent.getStringExtra("uno");

              rid = intent.getStringExtra("rid");

              initComments();

              setContentView(R.layout.comment);

              ListView lvComment = (ListView)findViewById(R.id.lvComent);

              lvComment.setAdapter(baListView);

              Button btnComment = (Button)findViewById(R.id.btnComment);

              btnComment.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            EditText etComment = (EditText)findViewById(R.id.etComentContent);

                            String content = etComment.getEditableText().toString().trim();       //获得品论内容

                            if(content.equals("")){          //未输入评论内容

                                   Toast.makeText(CommentActivity.this, "请输入评论内容", Toast.LENGTH_LONG).show();

                                   return;

                            }

                            if(visitor == null){

                                   makeNewComment(content,rid,uno);

                            }

                            else if(visitor != null){

                                   makeNewComment(content,rid,visitor);

                            }

                            initComments();

                            baListView.notifyDataSetChanged();

                     }

              });

              Button btnCommentBack = (Button)findViewById(R.id.btnCommentBack);            //获得返回按钮对象

              btnCommentBack.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            finish();

                     }

              });

       }

       //方法:获取评论列表

       public void initComments(){

              cmtList = new ArrayList<String []>();

              if(mc == null){

                     mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

              }

              try{

                     mc.dout.writeUTF("<#GET_COMMENT#>"+rid);            //发出获取评论请求

                     int size = mc.din.readInt();                  //获取评论的个数 

                     System.out.println("the number of comment is :"+size);

                     mc.dout.writeUTF("<#READY_TO_READ_COMMENT#>");

                     for(int i=0;i<size;i++){

                            String msg = mc.din.readUTF();          //读取每条评论信息

                            String [] sa = msg.split("\\|");       //切割字符串

                            cmtList.add(sa);

                     }

              }

              catch(Exception e){

                     e.printStackTrace();

              }

       }

       //方法:发表新评论

       public void makeNewComment(String content,String rid,String uno){

              try{

                     if(mc == null){

                            mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                     }

                     mc.dout.writeUTF("<#NEW_COMMENT#>"+content+"|"+rid+"|"+uno);

                     String reply = mc.din.readUTF();        //读取回复

                     if(reply.equals("<#NEW_COMMENT_SUCESS#>")){                           //解析回复

                            Toast.makeText(CommentActivity.this, "评论添加成功!", Toast.LENGTH_LONG).show();

                     }

                     else{

                            Toast.makeText(CommentActivity.this, "评论添加失败!", Toast.LENGTH_LONG).show();

                     }

              }

              catch(Exception e){

                     e.printStackTrace();

              }

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

                     mc = null;

              }

              super.onDestroy();

       }

      

}

(8) ContactsActivity .java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.*;

import java.util.ArrayList;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Color;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class ContactsActivity extends Activity{

       String uno = null;                 //记录当前用户的id

       int type = -1;                       //为0表示显示好友列表,为1表示显示访客列表

       Bitmap [] headList = null;     //存放头像的数组

       ArrayList<String []> infoList = null;    //存放联系人信息的列表如果是好友则为id、姓名、email、状态、头像。若为访客则为id、姓名、日期、头像

       MyConnector mc = null;              //网络连接器对象

       ListView lv = null;

       String [] messageHead = {"<#FRIEND_LIST#>","<#VISITOR_LIST#>"};

      

       BaseAdapter baContacts=null;

       Handler myHandler = new Handler(){

              @Override

              public void handleMessage(Message msg) {

                     switch(msg.what){

                     case 0:           

                            lv.setAdapter(baContacts);

                            break;

                     }

                     super.handleMessage(msg);

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();                   //获得启动该Activity的Intent对象

              uno = intent.getStringExtra("uno");            //获得当前用户的id

              type = intent.getIntExtra("type", -1);

              if(type == 0){               //好友列表

                     baContacts = new BaseAdapter() {

                            @Override

                            public View getView(int position, View convertView, ViewGroup parent) {

                                   LinearLayout ll = new LinearLayout(ContactsActivity.this);              //创建线性布局

                                   ll.setOrientation(LinearLayout.HORIZONTAL);

                                   ImageView iv = new ImageView(ContactsActivity.this);                   //创建ImageView对象

                                   iv.setScaleType(ImageView.ScaleType.FIT_CENTER);

                                   iv.setImageBitmap(headList[position]);        //设置头像

                                   iv.setLayoutParams(new LinearLayout.LayoutParams(HEAD_WIDTH, HEAD_HEIGHT));

                                   LinearLayout ll2 = new LinearLayout(ContactsActivity.this);            //创建子线性布局

                                   ll2.setOrientation(LinearLayout.VERTICAL);

                                   TextView tvName = new TextView(ContactsActivity.this);                //创建用于显示姓名的TextView

                                   tvName.setText(infoList.get(position)[1]);                                       //设置TextView的内容

                                   tvName.setTextSize(20.5f);                                                                  //设置字体大小

                                   tvName.setTextColor(Color.BLUE);                                                      //设置字体颜色

                                   tvName.setPadding(5, 0, 0, 0);                                                             //设置边界空白

                                   TextView tvStatus = new TextView(ContactsActivity.this);         //创建用于显示心情的TextView

                                   tvStatus.setTextSize(18.0f);                                                                  //设置这字体大小

                                   tvStatus.setTextAppearance(ContactsActivity.this, R.style.content);

                                   tvStatus.setPadding(5, 0, 0, 0);                                              

                                   tvStatus.setText("心情:"+infoList.get(position)[3]);                         //设置TextView内容

                                   ll2.addView(tvName);                                                                          //将显示姓名的TextView添加到线性布局

                                   ll2.addView(tvStatus);                                                                         //将显示心情的TextView添加到线性布局

                                   ll.addView(iv);                                                                                           //将显示头像的ImageView添加到现象布局

                                   ll.addView(ll2);

                                   return ll;

                            }

                            @Override

                            public long getItemId(int position) {

                                   return 0;

                            }

                            @Override

                            public Object getItem(int position) {

                                   return null;

                            }

                            @Override

                            public int getCount() {

                                   return headList.length;

                            }

                     };

              }

              else if(type == 1){                //访客列表

                     baContacts = new BaseAdapter() {

                            @Override

                            public View getView(int position, View convertView, ViewGroup parent) {

                                   LinearLayout ll = new LinearLayout(ContactsActivity.this);              //创建线性布局

                                   ll.setOrientation(LinearLayout.HORIZONTAL);

                                   ImageView iv = new ImageView(ContactsActivity.this);                   //创建ImageView对象

                                   iv.setScaleType(ImageView.ScaleType.FIT_CENTER);

                                   iv.setImageBitmap(headList[position]);        //设置头像

                                   iv.setLayoutParams(new LinearLayout.LayoutParams(HEAD_WIDTH, HEAD_HEIGHT));

                                   LinearLayout ll2 = new LinearLayout(ContactsActivity.this);            //创建子线性布局

                                   ll2.setOrientation(LinearLayout.VERTICAL);

                                   TextView tvName = new TextView(ContactsActivity.this);                //创建用于显示姓名的TextView

                                   tvName.setText(infoList.get(position)[1]);                                       //设置TextView的内容

                                   tvName.setTextSize(20.5f);                                                                  //设置字体大小

                                   tvName.setTextColor(Color.BLUE);                                                      //设置字体颜色

                                   tvName.setPadding(5, 0, 0, 0);                                                             //设置边界空白

                                   TextView tvDate = new TextView(ContactsActivity.this);           //创建用于显示心情的TextView

                                   tvDate.setTextSize(18.0f);                                                                    //设置这字体大小

                                   tvDate.setTextAppearance(ContactsActivity.this, R.style.content);

                                   tvDate.setPadding(5, 0, 0, 0);                                                

                                   tvDate.setText(infoList.get(position)[2]);                          //设置TextView内容

                                   ll2.addView(tvName);                                                                          //将显示姓名的TextView添加到线性布局

                                   ll2.addView(tvDate);                                                                           //将显示心情的TextView添加到线性布局

                                   ll.addView(iv);                                                                                           //将显示头像的ImageView添加到现象布局

                                   ll.addView(ll2);

                                   return ll;

                            }

                            @Override

                            public long getItemId(int position) {

                                   return 0;

                            }

                            @Override

                            public Object getItem(int position) {

                                   return null;

                            }

                            @Override

                            public int getCount() {

                                   return headList.length;

                            }

                     };

              }

              setContentView(R.layout.contacts);

              lv = (ListView)findViewById(R.id.listFriend);           //获得ListView对象的引用

              getContact();

              lv.setOnItemClickListener(new OnItemClickListener() {

                     @Override

                     public void onItemClick(AdapterView<?> parent, View v, int position,

                                   long id) {

                            Intent intent = new Intent(ContactsActivity.this,HomePageActivity.class);

                            intent.putExtra("uno", infoList.get(position)[0]);

                            intent.putExtra("visitor", uno);

                            startActivity(intent);

                     }

              });

       }

       //方法:获取联系人列表

       public void getContact(){

              new Thread(){

                     public void run(){

                            try{

                                   mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);    //创建MyConnector对象

                                   mc.dout.writeUTF(messageHead[type]+uno);             //向服务器发出请求    

                                   int size = mc.din.readInt();                                //读取列表的长度

                                   headList = null;

                                   infoList = null;

                                   headList = new Bitmap[size];                             //初始化好友头像列表

                                   infoList = new ArrayList<String []>(size);          //初始化好友信息列表

                                   for(int i=0;i<size;i++){                //循环,获取每个好友的信息和头像

                                          String fInfo = mc.din.readUTF();        //读取好友信息

                                          String [] sa = fInfo.split("\\|");             //分割字符串

                                          infoList.add(sa);                                        //将好友信息添加到相应的列表中

                                          int headSize = mc.din.readInt();           //读取头像大小

                                          byte[] buf = new byte[headSize];                //创建缓冲区

                                          mc.din.read(buf);                                      //读取头像信息

                                          headList[i] = BitmapFactory.decodeByteArray(buf, 0, headSize);

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                            myHandler.sendEmptyMessage(0);

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

              }

              super.onDestroy();

       }

}

 (9)FunctionTabActivity

package wyf.wpf;

import android.app.AlertDialog;

import android.app.TabActivity;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.TabHost;

public class FunctionTabActivity extends TabActivity{

       static final int MENU_SEARCH = 0;

       static final int MENU_EXIT = 1;

       String uno = null;

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();            //获得启动该Activity的Intent

              uno = intent.getStringExtra("uno");

              final TabHost tabHost = getTabHost();

              Intent intentPublish = new Intent(this,wyf.wpf.PublishActivity.class);

              intentPublish.putExtra("uno", uno);

              Intent intent1 = new Intent(this,wyf.wpf.ContactsActivity.class);

              intent1.putExtra("type", 0);                 //type为1表示好友列表

              intent1.putExtra("uno", uno);

              Intent intent2 = new Intent(this,wyf.wpf.ContactsActivity.class);

              intent2.putExtra("type", 1);                 //type为2表示最近访客

              intent2.putExtra("uno", uno);

              Intent iDiary = new Intent(this,wyf.wpf.MyDiaryActivity.class);

              iDiary.putExtra("uno", uno);        //为将用户id设置为Intent的Extra

              Intent iAlbum = new Intent(this,wyf.wpf.MyAlbumListActivity.class);

              iAlbum.putExtra("uno", uno);

             

              tabHost.addTab(tabHost.newTabSpec("tab1")

                            .setIndicator("快速发布", getResources().getDrawable(R.drawable.publish))

                            .setContent(intentPublish)

                            );

              tabHost.addTab(tabHost.newTabSpec("tab2")

                            .setIndicator("我的好友", getResources().getDrawable(R.drawable.friend))

                            .setContent(intent1)

                            );

              tabHost.addTab(tabHost.newTabSpec("tab3")

                            .setIndicator("最近访客", getResources().getDrawable(R.drawable.visitor))

                            .setContent(intent2)

                            );    

              tabHost.addTab(tabHost.newTabSpec("tab4")

                            .setIndicator("日志列表",getResources().getDrawable(R.drawable.diary))

                            .setContent(iDiary)

                            );

              tabHost.addTab(tabHost.newTabSpec("tab5")

                            .setIndicator("相册列表", getResources().getDrawable(R.drawable.album))

                            .setContent(iAlbum)

                            );

              String tab = intent.getStringExtra("tab");

              if(tab != null){

                     tabHost.setCurrentTabByTag(tab);

              }

             

       }

       @Override

       public boolean onCreateOptionsMenu(Menu menu) {

              menu.add(0, MENU_SEARCH, 0, "搜索")

                     .setIcon(R.drawable.search);

              menu.add(0, MENU_EXIT, 0, "退出")

                     .setIcon(R.drawable.exit);

              return super.onCreateOptionsMenu(menu);

       }

       @Override

       public boolean onOptionsItemSelected(MenuItem item) {

              switch(item.getItemId()){

              case MENU_SEARCH:                       //按下搜索菜单选项

                     Intent intent = new Intent(this,SearchActivity.class);          //创建Intent

                     intent.putExtra("visitor", uno);

                     startActivity(intent);

                     break;

              case MENU_EXIT:                             //按下退出菜单选项

                     new AlertDialog.Builder(this)

                     .setTitle("提示")

                     .setMessage("确认退出吗?")

                     .setIcon(R.drawable.alert_icon)

                     .setPositiveButton(

                                   "确定",

                                   new DialogInterface.OnClickListener() {

                                          @Override

                                          public void onClick(DialogInterface dialog, int which) {

                                                 android.os.Process.killProcess(android.os.Process.myPid());             //结束进程

                                          }

                                   })

                     .setNegativeButton(

                                   "取消",

                                   new DialogInterface.OnClickListener() {

                                          @Override

                                          public void onClick(DialogInterface dialog, int which) {}

                                   })

                     .show();

                     break;

              }

              return super.onOptionsItemSelected(item);

       }

      

      

}

(10)ModifyDiaryActivity

package wyf.wpf;

import static wyf.wpf.ConstantUtil.*;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Looper;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class ModifyDiaryActivity extends Activity{

       MyConnector mc = null;

       String [] diaryInfo = null;     //记录日志信息

       EditText etModifyTitle = null;

       EditText etModifyContent = null;

       String uno = null;

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();

              diaryInfo = intent.getStringArrayExtra("diary_info");

              uno = intent.getStringExtra("uno");

              setContentView(R.layout.modify_diary);

              etModifyTitle = (EditText)findViewById(R.id.etModifyTitle);          //获得标题EditText

              etModifyTitle.setText(diaryInfo[1]);

              etModifyContent = (EditText)findViewById(R.id.etModifyDiary);           //获得内容EditText

              etModifyContent.setText(diaryInfo[2]);

              Button btnModifyDiary = (Button)findViewById(R.id.btnModifyDiary);  //获得修改按钮

              btnModifyDiary.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            String modifyTitle = etModifyTitle.getEditableText().toString().trim();

                            String modifyContent = etModifyContent.getEditableText().toString().trim();

                            if(modifyContent.equals("") || modifyTitle.equals("")){      //如果内容或标题为空

                                   Toast.makeText(ModifyDiaryActivity.this, "请将标题或内容填写完整!", Toast.LENGTH_LONG).show();

                                   return;

                            }

                            modifyDiary();

                     }

              });

              Button btnModifyBack = (Button)findViewById(R.id.btnModifyDiaryBack);

              btnModifyBack.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            Intent intent = new Intent(ModifyDiaryActivity.this,FunctionTabActivity.class);

                            intent.putExtra("uno", uno);

                            intent.putExtra("tab", "tab4");

                            startActivity(intent);

                     }

              });

       }

       public void modifyDiary(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   if(mc == null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);

                                   }

                                   String modifyTitle = etModifyTitle.getEditableText().toString().trim();

                                   String modifyContent = etModifyContent.getEditableText().toString().trim();

                                   String msg = "<#MODIFY_DIARY#>"+diaryInfo[0]+"|"+modifyTitle+"|"+modifyContent;

                                   mc.dout.writeUTF(msg);

                                   String reply = mc.din.readUTF();

                                   if(reply.equals("<#MODIFY_DIARY_SUCCESS#>")){    

                                          Toast.makeText(ModifyDiaryActivity.this, "日志修改成功!", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                                   else{

                                          Toast.makeText(ModifyDiaryActivity.this, "修改失败,请重试!", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                            Looper.myLooper().quit();

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc == null){

                     mc.sayBye();

              }

              super.onDestroy();

       }

      

}

(11)MyAlbumListActivity

package wyf.wpf;

import static wyf.wpf.ConstantUtil.*;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.DialogInterface.OnClickListener;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.LinearLayout.LayoutParams;

public class MyAlbumListActivity extends Activity{

       MyConnector mc = null;              //声明MyConnector对象

       ListView lvAlbumList = null; //ListView对象的引用

       List<String []> albumInfoList = null;   //存放相册信息的List

       String albumInfoArray [] = null;         //存放相册信息的Array

       String uno = null;                        //存放用户的ID

       int newAccess = -1;              //记录新设置的权限

       String [] accessOptions={

              "公开","好友可见","仅个人可见"      

       };

       int albumIndexToChange = -1;      //记录要更改权限的相册在信息列表中的索引

       String albumToChange = null;      //记录要更改权限的相册ID

       String accessToChange = null;      //记录要更改的权限

       BaseAdapter ba = new BaseAdapter() {

              @Override

              public View getView(int position, View arg1, ViewGroup arg2) {

                     LinearLayout ll = new LinearLayout(MyAlbumListActivity.this);

                     ll.setOrientation(LinearLayout.HORIZONTAL);

                     ll.setGravity(Gravity.CENTER_VERTICAL);                    //设置线性布局的分布方式

                     TextView tvName = new TextView(MyAlbumListActivity.this);

                     tvName.setTextAppearance(MyAlbumListActivity.this, R.style.title);

                     tvName.setPadding(5, 0, 0, 0);

                     tvName.setText(albumInfoList.get(position)[1]);         //设置TextView显示的内容

                     tvName.setLayoutParams(new LinearLayout.LayoutParams(170, LayoutParams.WRAP_CONTENT));

                     ll.addView(tvName);

                     LinearLayout ll2 = new LinearLayout(MyAlbumListActivity.this);

                     ll2.setOrientation(LinearLayout.HORIZONTAL);        //设置线性布局的分布方式

                     ll2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                     ll2.setGravity(Gravity.RIGHT);

                     Button btnSee = new Button(MyAlbumListActivity.this);   //创建查看相册照片的Button对象

                     btnSee.setId(position);                                                           //设置Button的ID

                     btnSee.setText("查看");

                     btnSee.setTextAppearance(MyAlbumListActivity.this, R.style.button);

                     btnSee.setOnClickListener(listenerToDetail);                     //设置Button的监听器

                     btnSee.setLayoutParams(new LinearLayout.LayoutParams(60, LayoutParams.WRAP_CONTENT));

                     ll2.addView(btnSee);

                     Button btnChangeAccess = new Button(MyAlbumListActivity.this);  //创建修改相册权限的Button对象

                     btnChangeAccess.setId(position);                                     //设置Button的ID

                     btnChangeAccess.setText("修改权限");

                     btnChangeAccess.setTextAppearance(MyAlbumListActivity.this, R.style.button);     //设置按钮样式

                     btnChangeAccess.setOnClickListener(listenerToAcess);              //添加监听器

                     btnChangeAccess.setLayoutParams(new LinearLayout.LayoutParams(80, LayoutParams.WRAP_CONTENT));//设置布局参数

                     ll2.addView(btnChangeAccess);

                     ll.addView(ll2);

                     return ll;

              }

              @Override

              public long getItemId(int arg0) {

                     return 0;

              }

              @Override

              public Object getItem(int arg0) {

                     return null;

              }

              @Override

              public int getCount() {

                     return albumInfoList.size();

              }

       };

       View.OnClickListener listenerToDetail = new View.OnClickListener() {    //点下查看按钮后触发的监听器

              @Override

              public void onClick(View v) {                                  //重写onClick方法

                     Intent intent = new Intent(MyAlbumListActivity.this,AlbumActivity.class);      //创建Intent对象

                     intent.putExtra("uno", uno);

                     intent.putExtra("albumlist", albumInfoArray);

                     intent.putExtra("xid", albumInfoList.get(v.getId())[0]);

                     intent.putExtra("position", v.getId());

                     intent.putExtra("from", 0);

                     startActivity(intent);

                     finish();

              }

       };

       View.OnClickListener listenerToAcess = new View.OnClickListener() {

              @Override

              public void onClick(View v) {

                     albumIndexToChange = v.getId();

                     albumToChange = albumInfoList.get(v.getId())[0];

                     newAccess = Integer.valueOf(albumInfoList.get(v.getId())[2]);

                     showMyDialog();

              }

       };

       Handler myHandler = new Handler(){

              @Override

              public void handleMessage(Message msg) {

                     switch(msg.what){

                     case 0:           

                            lvAlbumList.setAdapter(ba);

                            break;

                     }

                     super.handleMessage(msg);

              }

       };

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.album_list);                               //设置当前屏幕

              Intent intent = getIntent();                   //获得启动该Activity的Intent

              uno = intent.getStringExtra("uno");            //获得Intent中的uno的值

              lvAlbumList = (ListView)findViewById(R.id.lvAlbumList);      //获得ListView对象

              getAlbumList();                                               //获得指定用户的相册列表

       }

       public void getAlbumList(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   if(mc == null){             //检查MyConnector对象是否为空

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);                  //创建MyConnector对象

                                   }

                                   mc.dout.writeUTF("<#GET_ALBUM_LIST#>"+uno);                                   //发出获取相册列表请求

                                   String reply = mc.din.readUTF();                             //读取相册列表

                                   if(reply.equals("<#NO_ALBUM#>")){                                           //判断相册列表是否为空

                                          Toast.makeText(MyAlbumListActivity.this, "您还没有上传过照片", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                          return;

                                   }

                                   albumInfoArray = reply.split("\\$");                          //切割字符串

                                   albumInfoList = new ArrayList<String []>();

                                   for(String s:albumInfoArray){

                                          String [] sa = s.split("\\|");                                 //切割字符串

                                          albumInfoList.add(sa);

                                   }

                                   myHandler.sendEmptyMessage(0);

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

       }

       //方法:显示修改权限对话框

       public void showMyDialog(){

              new AlertDialog.Builder(this)

              .setSingleChoiceItems(accessOptions, newAccess, new OnClickListener() {

                     @Override

                     public void onClick(DialogInterface dialog, int which) {

                            newAccess = which;

                     }

              })

              .setPositiveButton("确定", new OnClickListener() {

                     @Override

                     public void onClick(DialogInterface dialog, int which) {

                            accessToChange=newAccess+"";

                            changeAlbumAccess();

                     }

              }).show();

       }

       //方法:修改相册权限

       public int changeAlbumAccess(){

              int result = 0;

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            try{

                                   if(mc == null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);           //创建MyConnector

                                   }

                                   String msg = "<#CHANGE_ALBUM_ACCESS#>"+albumToChange+"|"+accessToChange;

                                   mc.dout.writeUTF(msg);

                                   String reply = mc.din.readUTF();        //接收服务器反馈

                                   if(reply.equals("<#ALBUM_ACCESS_SUCCESS#>")){                         //更新权限成功

                                          Toast.makeText(MyAlbumListActivity.this, "相册权限更新成功!", Toast.LENGTH_LONG).show();

                                          Looper.loop();               //执行消息队列中的消息

                                   }

                                   else{                                                        //更新权限失败

                                          Toast.makeText(MyAlbumListActivity.this, "相册权限更新失败!", Toast.LENGTH_LONG).show();

                                          Looper.loop();               //执行消息队列中的消息

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                     }

              }.start();

              return result;

       }

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();

                     mc = null;

              }

              super.onDestroy();

       }

      

}

(12)PublishDiaryActivity.java

package wyf.wpf;

import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;

import static wyf.wpf.ConstantUtil.SERVER_PORT;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Looper;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class PublishDiaryActivity extends Activity{

       MyConnector mc = null;

       ProgressDialog pd = null;

       String uno = null;

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              Intent intent = getIntent();

              uno = intent.getStringExtra("uno");

              setContentView(R.layout.publish_diary);

              Button btnDiary = (Button)findViewById(R.id.btnDiary);                //获得发布日志按钮

              btnDiary.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            pd = ProgressDialog.show(PublishDiaryActivity.this, "请稍候", "正在发布日志...",true,true);

                            publishDiary();                                                //发表日志

                     }

              });

              Button btnDiaryBack = (Button)findViewById(R.id.btnDiaryBack);

              btnDiaryBack.setOnClickListener(new View.OnClickListener() {

                     @Override

                     public void onClick(View v) {

                            finish();

                     }

              });

       }

       //方法:连接服务器,发表日志

       public void publishDiary(){

              new Thread(){

                     public void run(){

                            Looper.prepare();

                            EditText etTitle = (EditText)findViewById(R.id.etTitle);           //获得日记标题EditText对象

                            EditText etDiary = (EditText)findViewById(R.id.etDiary);                      //获得日记内容EditText对象

                            String title = etTitle.getEditableText().toString().trim();            //获得日记标题

                            String diary = etDiary.getEditableText().toString().trim();         //获得日记内容

                            if(title.equals("") || diary.equals("")){                 //如果标题或内容为空

                                   Toast.makeText(PublishDiaryActivity.this, "请将日记的标题或内容填写完整", Toast.LENGTH_LONG).show();

                                   return;

                            }

                            try{

                                   if(mc == null){

                                          mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);           //创建一个Socket连接

                                   }

                                   String message = "<#NEW_DIARY#>" + title+"|"+diary+"|"+uno;

                                   mc.dout.writeUTF(message);                      //发出消息

                                   String reply = mc.din.readUTF();        //接收消息

                                   pd.dismiss();

                                   if(reply.equals("<#DIARY_SUCCESS#>")){                    //如果日志发布成功

                                          pd.dismiss();                                      //关闭进度对话框

                                          Toast.makeText(PublishDiaryActivity.this, "日志发布成功,请在个人日志中查看", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                                   else if(reply.equals("<#DIARY_FAIL#>")){        //如果日志发布失败

                                          pd.dismiss();                               //关闭进度对话框

                                          Toast.makeText(PublishDiaryActivity.this, "日志发布失败,请稍候重试!", Toast.LENGTH_LONG).show();

                                          Looper.loop();

                                   }

                            }catch(Exception e){

                                   e.printStackTrace();

                            }

                            Looper.myLooper().quit();

                     }

              }.start();

       }

       @Override

       protected void onDestroy() {

              if(mc != null){

                     mc.sayBye();         //调用MyConnector的sayBye方法

              }

              super.onDestroy();

       }

      

      

}

四、       设计体会

应该客观地进行总结,大致包括以下内容,不要按照问答式回答以下问题(也不要按以下内容列标题),而是用自己的语言进行论述。

l  设计是否达到预定的目标?

l  有哪些收获?

l  尚存在哪些不足?

l  对今后学习和工作的影响等。

课程设计体会:

这次课程设计本来是纯粹的Android端的开发,但是进入这样的开发一段时间之后,我就感觉到这个课程的魅力所在。虽然课上并没有提到移动互联网开发里面这个互联网开发,但是通过这次的课程设计亲切的感受到Android开发的魅力。课程设计当中提到了web端和Android端的互通,真正的实现互联网这个词,我现在对这门课真的很感兴趣,如果这样的开发多了我相信以后的经验的积累会更快。但是这次课程设计里也是有很多不懂的问题,这样其实也就是按部就班的进行开发,对于一些技术还掌握不到位,包括里面的实现web端和Android端的数据同步就是这样的例子,说明自己的功底以及相应知识还是不熟,欠练。这次课程设计是我自己选的素材,也是我想要追寻的方向,虽然不能达到像工程师那样熟练,但是起码给了我自己这样一个学习方向。互联网其实是现代接触最为接近的核心网络技术之一,掌握这样的技术无论是以后找工作,还是以想开发自己想要的服务都是一个莫大的帮助。我现在正在往这方面进行发展,等到学好这门技术我希望能开发出一个完全属于自己的项目。

__________________________________________________________________________________

格式说

正文宋体,小四号字,1.3倍行距

图示例

在正文中描述“xxx如图1所示”

图1  系统登录模块界面

表示例

在正文中描述“xxx如表1所示”

表1  操作员信息表结构


参考文献示例

参 考 文 献

    1  埃克尔,陈号鹏.Java编程思想中文.第4版.北京:机械工业出版社机械,2007

    2  蔡翠平.Java程序设计.北京:北方交通大学出版社,清华大学出版社,2004

    3  候国峰.面向对象程序设计导论. 北京:电子工业出版社,2002

    4  叶核亚,陈立.Java2程序设计实用教程.北京:电子工业出版社, 2005

    5  陈天河.Java数据库高级编程宝典.北京:电子工业出版社,2005

    6  程峰,黄若波,章恒翀.Java 2核心技术.第6版.北京:机械工业出版社,2003

    7  Vikram Vaswani,许小青译.MySQL完全手册.北京:电子工业出版社,2004

    8  杜波依斯,杨涛.MySQL权威指南.第2版.北京:机械工业出版社,2004

    9  王珊,萨师煊.数据库系统概论.第4版.北京:机械工业出版社,2006

10  郑人杰,殷人昆,陶永雷.实用软件工程.北京:清华大学出版社,1997

更多相关推荐:
android课程设计报告

目录1概述12项目设计与实现121欢迎界面1211界面布局1212功能实现222登陆界面2221界面布局2222功能实现223微信显示界面4231界面布局4232功能实现424主界面5241界面布局5242功能...

安卓android课程设计报告

湘潭大学课程设计报告课程课题指导名称手机安卓开发名称天气预报APP老师周唯姓名黄柳学号20xx600719班级12计2班小组棒棒糖时间20xx年1月26日一需求分析一引言1编写目的11为用户提供一个显示天气预报...

android课程设计报告

软件学院课程设计报告20xx学年第二学期学院软件学院专业软件测试班级1班姓名汤微任课老师欧阳文臣2目录1课程设计概况12上课笔记摘取13课程设计34心得总结8课程设计概况此次的课程设计的主要任务是设计andro...

Android课程设计报告

《移动应用技术》课程设计报告题目:基于Android的金源书店库存管理系统的开发与设计学生姓名:专业:信息管理与信息系统班级:指导教师:信息管理与工程系20##年5月28日基于Android的金源书店库存管理系…

基于android的简单用户注册系统课程设计报告

实验报告课程名称Android应用程序设计实验名称简单的用户注册登录系统学院电子信息工程学院专业计算机科学与技术班级姓名学号时间1目录第一章设计背景11引言312设计目的313设计要求314开发运行环境3第二章...

(开题报告)基于Android的日程表管理系统设计与实现--

基于Android的日程表管理系统设计与实现一课题的意义Android是由AndyRubin创立的一个手机操作系统后来被Google公司收购Google公司希望与各方共同建立一个标准化开放式的移动电话软件平台从...

Android课程设计论文

基于android平台的二维码识别软件的设计与实现目录1绪论311研究背景以及意义312Android平台特点313Eclipse简介314AndroidSDK简介315ADT简介42软件设计421系统概要设计...

【Android课程设计】邵利娟20xx42605

信息科学与工程学院课程设计报告书课程名称智能终端软件开发题目通讯录专业班级信息管理与信息系统一班姓名邵利娟学号20xx42605指导教师孙兴华20xx年7月5日基于Android平台的通讯录1设计题目题目基于A...

Android贪吃蛇课程设计报告

合实践报课程名称计算机系统综合实训课题名称贪吃蛇游戏开发专业计算机科学与技术班级学号姓名指导教师20xx年12月20日综告湖南工程学院课程设计任务书课程名称课题贪吃蛇游戏开发专业班级计算机1202学生姓名学号指...

android课程设计任务书模板

枣庄学院信息科学与工程学院课程设计任务书题目学号姓名专业课程android程序设计指导教师职称完成时间20年月20年月枣庄学院信息科学与工程学院制年月日课程设计任务书及成绩评定12345

贪吃蛇游戏报告毕业设计android

武汉理工大学华夏学院课程设计课程名称面向对象课程设计题目贪吃蛇游戏专业软件技术班级软件20xx班学号10225508318姓名王亭成绩指导教师20xx年11月29日至20xx年12月6日课程设计任务书设计题目贪...

Android课程设计报告

Android课程设计报告仿微信学号120xx45131姓名陈红飞班级B12计信指导老师刘云玉老师目录第一章概述111课题背景2第二章设计项目与实现421欢迎界面5211界面布局6212功能实现722登录界面9...

android课程设计报告(18篇)