APP下载

基于Android系统的团队协作管理系统设计与实现

2013-08-15李庆江

山东工业技术 2013年9期
关键词:数据类型字段语句

李庆江

(菏泽学院 教务处,山东 菏泽 274015)

1 总体设计

1.1 系统通讯原理

服务器使用Client/Server[1]通讯原理,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。总体结构系统的模块结构包括消息管理模块、团队管理模块和任务管理模块。

1.2 处理流

1.2.1 顶层处理流

手机端通过移动网络把指令上传的服务器,服务器对指令进行处理后返回XML形式的数据,手机端对返回的数据进行解析。

1.2.2 第一层处理流

1)登录子系统

手机通过移动网络,发送用户名密码信息到服务器端,服务器接受到信息后调用数据库核对信息,核对后把True和False信息返回,手机队返回数据解析得到登录验证是否成功。

2)管理子系统

手机用户登录成功后,进入管理子系统,可以调用进行消息管理、团队管理和任务管理三个第二层模块。

1.2.3 第二层处理流

1)消息管理流程

首先进行用户验证,通过验证后可进行查看消息、删除消息、发送消息。

2)认证加入团队流程

首先进行用户验证,通过验证后可进行认证/通过、加入团队申请。

3)团队管理流程

首先进行用户验证,通过验证后可进行新建、解散、退出和编辑团队。

4)团队成员查看流程

首先进行用户验证,通过验证后,通过用户ID和团队ID在团队和用户管理表中查找到团队用户成员,然后将查询到的数据返回。

5)剔除团队成员

首先进行用户验证是否为队长,且这个要剔除的成员是否为该团队的成员,通过验证后,就对团队用户关联表中把关联要删除的ID进行删除,最后返回成功信息,否则返回不成功信息。

6)查看团队个人任务列表流程

首先进行用户验证,验证该用户是否为该团队的成员,通过验证后在数据库中查找到该团队任务信息,然后将查询到的数据返回。

7)任务管理流程

首先进行用户验证,验证该用户是否为要修改任务的任务拥有人,通过验证后可进行任务查看、撤销、完成、更新状态。

1.3 实现流程

服务器判断会员是否已申请过加入该组,服务器得到用户提交的信息,搜索表中是否存在该用户,如果存在则返回true,否则返回flase,并进行异常处理,在操作结束后,关闭数据库的连接,以保证数据的安全。接收并添加文件,当用户欲添加文件时,先判断该用户是否是该队成员,并作出判断,提示用户,如果是该队成员,接着判断剩余空间的大小是否充足,并作出判断。判断团队人数是否已满,通过传递的队号和队伍的人数,判断队伍是否超过最大人数,并作出判断,返回参数。

2 接口设计

服务器端主要接口通过XML方式传送数据。

2.1 外部接口

1)用户接口

采用自己重写显示的Android组件和Android的标准显示组件等。

2)硬件接口

手机物理或虚拟键盘。

3)软件接口

通过手机无线借入互联网,xml文件形式进行数据交互、通过JDBC对MYSQL[2]数据库的连接。

2.2 内部接口

通过面向对象语言设计类,在public类中实现调用,类间实现严格封装。

3 数据库设计

系统中数据库采用android内置SQLite数据库和MySQL[3]数据库。

3.1 结构化查询语言

以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为SQL语句的输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。

3.2 手机数据库设计

SQLite数据库是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

3.3 数据库公共模块

3.3.1 手机端

主要使用了Android内置sqllite数据库技术,主要对数据库操作,全都调用这个类中的具体静态方法来对数据库进行添删改查操作。在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3 支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如,可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段中保存除整数以外的数据时,将会产生错误。另外,SQLite在解析CREATE TABLE语句时,会忽略 CREATE TABLE语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段的类型信息,主要代码如下:

public static List<Massage>select(String pid,int maxmid,Connection conn){PreparedStatement pstmt=null;

ResultSet rs=null;

String where="where mid>?and massage.sender=member.pid and massage.tid=team.tid";

where+="and(type=0 or(massage.type=3 and team.tid in (select relevance.tid from relevance,team where relevance.tid=team.tid and relevance.pid=team.pid and relevance.pid=?))";

where+="or(massage.type < 2 and team.tid in(select tid from relevance where pid=?)))order by mid DESC";

List<Massage>massages=new ArrayList<Massage>();

try{String sql="select mid,massage.sender,member.name,massage.tid,team.name,title,content,time,type,team.pid from massage,member,team"+where;

pstmt=conn.prepareStatement(sql);

pstmt.setInt(1,maxmid);pstmt.setString(2,pid);

pstmt.setString(3,pid);rs=pstmt.executeQuery();

while(rs.next()){Integer mid=rs.getInt(1);String sender=rs.getString(2).trim();

String sname=rs.getString(3).trim();Integer tid=rs.getInt(4);String tname=rs.getString(5).trim();String title=rs.getString(6).trim();

String content=rs.getString(7).trim ();Date time=rs.getTimestamp(8);

Short type=rs.getShort(9);String tpid=rs.getString(10);

massages.add(new Massage(mid,sender,sname,tid,tname,title,content,time,type,tpid));}return massages;}catch(SQLE xception ex){

System.out.println("SQLException:"+ex.getMessage());

System.out.println("SQLState:"+ex.getSQLState());

System.out.println("VendorError:"+ex.getErrorCode());return massages;}finally{try{if(rs!=null){rs.close();

rs=null;}if(pstmt!=null){pstmt.close();pstmt=null;}}catch(SQLException e){e.printStackTrace();}}

3.3.2 服务器端

用户管理、消息管理和团队管理业务Bean,分别对不同的模块进行数据的操作,其中有对数据库的具体操作的方法,主要代码如下。

public Member getOneMember(String pid,String passwd){

Cursor cursor=db.rawQuery("select*from member where_id=?",new String[]{pid});

Member member=null;

if(cursor.moveToFirst()){member=new Member(pid,null,cursor.getString(2),cursor.getShort(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8),Timestamp.valueOf(cursor.getString(9)));cursor.close();}return member;}

[1]Alistair Cockburn.敏捷软件开发[M].机械工业出版社,2000.8:197-289.

[2]公磊.周聪.基于Android的移动终端应用程序开发与研究[J].计算机与现代化,2008(8):85-89.

[3]高焕堂.Android应用框架原理与程式设计[M]//36技.Google公司,2008:132-150.

猜你喜欢

数据类型字段语句
带钩或不带钩选择方框批量自动换
如何理解数据结构中的抽象数据类型
浅谈台湾原版中文图书的编目经验
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用
无正题名文献著录方法评述
无正题名文献著录方法评述
我喜欢
冠词缺失与中介语句法损伤研究