《软件开发协议》word版 本文关键词:协议,开发,软件,word
《软件开发协议》word版 本文简介:软件开发协议甲方公司名称:授权代表(签字):乙方公司名称:授权代表(签字):合同签订日期:*年*月*日软件开发及战略合作协议甲方:乙方:上述甲方(作为前期的项目委托方,协议中简称“甲方”)与乙方(作为前期的软件受托开发方,协议中简称“乙方”)经友好协商一致,就甲方软件开发事项达成以下协议。双方申明
《软件开发协议》word版 本文内容:
软件开发协议
甲方公司名称:
授权代表(签字):
乙方公司名称:
授权代表(签字):
合同签订日期:*年*月*日
软件开发及战略合作协议
甲方:
乙方:
上述甲方(作为前期的项目委托方,协议中简称“甲方”)与乙方
(作为前期的软件受托开发方,协议中简称“乙方”)经友好协商一致,就甲方软件开发事项达成以下协议。双方申明,双方都已理解并认可了本合同的所有内容,同意承担各自应承担的权利和义务,忠实地履行本合同。
第一条、签署本协议表明甲乙双方同意本协议的全部内容。所有本协议所定义的项目、工作、服务、产品均受本协议约束。
第二条、本协议中软件开发项目的内容、工作进度与安排、价款、交付和验收方式由以下双方约定条款决定。
第三条、合同履行期限按照本合同内规定的工作进度决定,经双方协商一致,可以延长该期限。
第四条、甲方应向乙方提供必要的内容资料和方便条件,协助配合乙方进行软件的开发、调试、安装及实施。
第五条、本合同自签订起
1
年内有效。有效期满后,甲方若仍需乙方提供软件维护服务及技术支持,则需甲、乙双方签订《软件维护协议》,否则乙方无义务为甲方提供维护服务及技术支持,乙方有权在合同有效期到期前10至15天通知甲方签订《软件维护协议》。
第六条、双方的基本权利和基本义务。
甲方的权利和义务:
1、
甲方根据本合同项目的实际需要和乙方的要求提供协助,并提供企业有关的需求说明书,资料,报表及文档。
2、
甲方义务保证所提供的所有资料完整、真实、合法。
3、
甲方有义务必须按本合同约定支付软件开发费用。
4、
甲方有义务在规定期限内为乙方提供本软件涉及的第三方软件接口平台,提供二次开发所需API接口定义及调用规则说明。原则上针对甲方二次定制开发的代码必须向甲方提供,甲方必须承诺对资料保密。如因第三方软件的接口平台不能如期提供造成项目推迟不能视为乙方违规,如因此造成项目上线延期,乙方概不承担任何责任。
5、
甲方有权利在合同期满之前要求乙方对软件模块出现错误及故障,进行免费维护三个月。
6、
甲方有权利要求乙方在合同约定的范围内为其提供软件开发源码,文档。
7、
甲方在完成上面3所示的义务后,独立享有本软件的使用权,但不享有软件著作权及所有权,甲方可以自主进行二次开发,乙方不能干涉。
8、
甲方有权利在开发过程中要求乙方按照《
软件平台基础功能明细》进行开发,如有新增功能模块,双方友好协商决定。
乙方的权利和义务:
1、
乙方有义务按照甲方提供的需求说明书和资料定期完成本合同规定的软件开发工作,同时做好后续的技术服务工作。
2、
乙方有义务在合同期满之前对软件模块出现的非人为因素造成的错误及故障,进行免费维护。
3、
在项目开发完成后合同期满之前,乙方有义务在合同约束的范围内为甲方做好本软件运营的技术支持。
4、
乙方有义务为甲方提供软件使用培训及技术咨询服务。
5、
项目上线后,在合同约束的服务期间内,乙方有义务为甲方提供
人的技术支持团队(服务团队成员要求程序
名、美工
名)。
6、
乙方有权利要求甲方在合同约定的期限内支付费用。
7、
为了保证项目如期完成,乙方有权利在自己的团队内进行分工合作完成软件开发,甲方不得干涉。
8、
项目开发完成后,为了确保软件正常运行,乙方有权按照项目技术解决方案要求甲方提供相应的平台支持环境。
9、
在软件开发期间,乙方有权利要求甲方提供所涉及第三方软件的接口平台(如:
甲方的支付网关或ERP软件接口等),但乙方有义务为所接触第三方软件源码保密。
10、
在甲方没有按合同规定时间内付清乙方项目费用期间,乙方有权停止甲方软件运行和拒绝提供软件源代码给甲方。
第七条、双方约定的服务及合作条款。
1、
费用及支付方式
1.1、
项目开发及维护费用
1.1.1、甲方总共需要出资人民币
元(大写人民币
圆整)。
1.1.3、上条款满
1
年后,由甲乙双方协商是否续费事项。
1.2、
费用支付方式
1.2.1、项目支付流程
协议签订完成后3天内甲方通过现金或银行转帐或汇款或支票向乙方支付
元整(大写人民币
圆整),合计总金额的50%。
甲方确认验收本次服务成果并在本合同附件《服务成果确认书》签字盖章后,支付余款人民币
元整(大写人民币
圆整),合计占总金额的50%。
1.2.2、乙方开户行:
开户名:
开户帐号:
2、
项目开发时间
完成时间:
项目开发时间为
个工作日,时间从协议签订之日开始算起。
验收时间:
本项目验收时间为
个工作日。
付款期限:
在合同约束时间内付清相关款项。
3、
验收标准和验收后修改补充
甲方应以书面方式签收,即在本合同附件《服务成果确认书》签字盖章。但甲方在乙方交付工作成果并超过本合同规定的验收时间后,未书面签收也未提出异议的,视为甲方验收合格。验收合格后,如果甲方在使用过程中需要增加软件模块或功能,甲乙双方必须经友好协商确定。
4、
知识产权及项目软件修改约定
甲方具有此项目开发成果即产品的所有权和使用权、著作权。但在双方合作期间,为了更好的服务此软件平台的运营,如需要对本项目开发的软件进行修改,必须征得乙方同意。
5、
双方约定联系人员
甲方必须派出专人负责项目中工程、技术问题或事件的处理或追踪解决。
6、
法律约束
本合同如有跟相关法律法规相违的条款,以相关的法律法规为依据。
第八条、如本次服务成果验收完成,乙方将软件程序文件及源代码交给甲方后,甲方如私自改动源代码,造成软件出现的问题,后果由甲方自理,乙方概不负责。
第九条、本合同未尽事宜,由双方友好协商解决。必要时,可签订《软件开发补充合同》。《软件开发补充合同》可作本合同不可分割的组成部分。
第十条、甲方具有本合同涉及的相关程序、文件源码的使用权,但不具有软件著作权及所有权。
第十一条、甲方不能按时支付合同费用,导致的工期延误,其责任由甲方承担。
第十二条、双方当事人应当保守在履行本合同过程中获知的对方商业秘密。
第十三条、双方应本着诚实信用的原则履行本合同。任何一方在履行中采用欺诈、胁迫或者暴力的手段,另一方可以解除本合同并有权要求对方赔偿损失。任何一方在履行中发现或者有证据表明对方已经、正在或将要违约,可以终止履行本合同,但应及时通知对方。若对方继续不履行、履行不当或者违反本合同,该方可以解除本合同并要求对方赔偿损失。
第十四条、本合同签订后,经双方当事人协商一致,可以对本合同有关条款进行变更或者补充但应当以书面形式确认。上述文件一经签署,即具有法律效力并成为本合同的有效组成部分。
第十五条、本合同附件为合同不可分割的一部分,与合同正文具有同等法律效力。
第十六条、任意一方欲提前解除本合同,应提前通知对方。甲方提前解除合同的,无权要求乙方返还预付费用并应对乙方遭受的损失承担赔偿责任;乙方无故解除合同的,应双倍返还上述费用。本合同其他条款对合同的解除另有约定的,从其约定。
第十七条、任何一方违反本合同,给对方造成损失的,还应赔偿损失。
第十八条、订立本合同所依据的客观情况发生重大变化,致使本合同无法履行的,经双方协商同意,可以变更本合同相关内容或者终止合同的履行。
第十九条、双方当事人对本合同的订立、解释、履行、效力等发生争议的,应友好协商解决;协商不成的,双方同意向仲裁委员会提交仲裁并接受其仲裁规则。
第二十条、此合同期限为一年,合同期结束之后双方可以根据实际情况续约。
第二十一条、本合同经由双方授权代表签字,自签订之日起生效。
第二十二条、本合同一式两份,双方当事人各执一份,具有同等法律效力。
甲方:(盖章)
乙方:(盖章)
甲方:__________(授权代表签字)
乙方:__________(授权代表签字)
附件:服务成果确认书
经验收,现甲方确认乙方已在合同规定时间范围内完成本次软件开发服务的所有内容,特签字确认。该内容作为合同不可分割的一部分,对合同中关于验收的相应条目有效。
甲方:(盖章)
甲方:
(验收确认人签字)
时间:*年*月*日
7
篇2:电信增值业务及软件开发一实践报告
电信增值业务及软件开发一实践报告 本文关键词:增值业务,实践,电信,报告,开发
电信增值业务及软件开发一实践报告 本文简介:电信增值业务及软件开发一实践报告学院:软件学院专业:软件工程班级:学号:姓名2:指导老师:2013年06月22日实验一:短消息MO指令匹配算法一、实验步骤及实验结果实验代码:#include#includevoidmain(){charS[100];charT[50];cin>>S;cin>>T;i
电信增值业务及软件开发一实践报告 本文内容:
电信增值业务及软件开发一
实践报告
学
院:
软件学院
专
业:
软件工程
班
级:
学
号:
姓
名2:
指导老师:
2013年
06月
22日
实验一:短消息MO指令匹配算法
一、
实验步骤及实验结果
实验代码:
#include
#include
void
main()
{
char
S[100];
char
T[50];
cin>>S;
cin>>T;
int
len1,len2;
int
len;
int
next[100];
int
i,j;
int
k;
int
count=0;
len1=strlen(S);
len2=strlen(T);
len=len1-len2;
j=1,k=0;
next[1]=0;
while(j
-1)
{
sb.append((char)
ch);
}
System.out.println(sb.toString());
rec_string
=
sb.toString().trim();
rd.close();
}
catch
(Exception
e)
{
e.printStackTrace();
}
finally
{
if
(urlConn
!=
null)
{
urlConn.disconnect();
}
}
return
rec_string;
}
}
1.根据短信增值业务软件开发平台的接口手册熟悉短信增值业务软件开发平台的HTTP接口等。
2.调用短信增值业务软件开发平台的HTTP接口,编写一个Web程序实现“趣味答题”短信增值业务。
实验步骤
创建业务
因为本次实验要调用HTTP接口,所以我们在选在处理方式的时候要选择HTTP转发
提交审核
审核通过
业务实现
数据库设计
根据整个项目情况可以看出这个业务平台需要的数据表:用户答题信息表User_message、题目信息表title_message。
title_message表结构
字段
类型
默认值
描述
Id
Number(10)
主键
titleType
Varchar2(30)
题目类型
consequence
Varchar2(10)
题目答案
titleNumber
Number(10)
题目题号
content
Varchar2(100)
题目内容
user_message表结构
字段
类型
默认值
描述
Id
Varchar2(100)
主键
phone
Number(10)
手机号码
titleType
Number(10)
回答题目类型
countNumber
Number(10)
回答题目数
successNumber
Number(10)
答对题目数
errorNumber
Number(10)
答错题目数
三、
心得
通过本次实验熟悉了大汉三通公司的短信增值业务软件开发平台,掌握了短息增值业务软件的入门知识。但目前还只是初步会使用大汉三通公司封装打包提供的功能,自己对于底层的实现还不能够明确掌握。
实验三:基于HTTP接口的短消息编程
一、
实验步骤及实验结果
1、将文件mpay_sms_http导入Myeclipse中
2、
配置web.xml如图
3、发布工程及修改路径
4、访问工程
在地址栏中输URL:
http://127.0.0.1:8080/mpay_sms_http/http/httpTest
回车得到
发布工程中在中加入代码
-->
-->
创建数据库
输入密码进入配置界面
输入show
databases;命令查看已经存在的数据库
输入create
database
test
得到
5、使用navicat新建数据库将答题的数据输入,如图
上传提交
二、心得
熟悉短信增值业务软件开发平台HTTP接口等,掌握短信增值业务软件开发的HTTP接口编程。
实验四:基于API接口的短消息编程
一、
实验步骤及实验结果
本次试验是建立在“短信增值业务软件开发平台HTTP接口程序设计”的基础上,本次试验中的信息处理类和DAO是在第七次实验的基础上稍加修改,这里我们就不做过多的解释。
1.创建一个业务
2.提交审核
3.审核通过
4.业务实现
数据库设计
根据整个项目情况可以看出这个业务平台需要的数据表:用户答题信息表User_message、题目信息表title_message。
title_message表结构
字段
类型
默认值
描述
Id
Number(10)
主键
titleType
Varchar2(30)
题目类型
consequence
Varchar2(10)
题目答案
titleNumber
Number(10)
题目题号
content
Varchar2(100)
题目内容
user_message表结构
字段
类型
默认值
描述
Id
Varchar2(100)
主键
phone
Number(10)
手机号码
titleType
Number(10)
回答题目类型
countNumber
Number(10)
回答题目数
successNumber
Number(10)
答对题目数
errorNumber
Number(10)
答错题目数
创建API接口测试类http_api.java
package
com.dahantc.api;
import
com.dahantc.utils.channelUtils;
public
class
api_Demo
{
public
static
void
main(String[]
args)
{
String
host
=
“172.18.2.185“;//
短信实验平台地址
int
port
=
28020;//
短信实验平台的服务端口(ctc端口)--默认为28020
String
user
=
“student“;//
用户账号
String
passwd
=
“123“;//
用户密码
int
serviceId
=
1;//
业务ID---自己申请的业务ID号
int
channelId
=
1;//
通道ID---根据实际情况填写
channelUtils.getInstance().initChannel(host,port,user,passwd,channelId,serviceId);
}
}
创建一个MD5.java
来提供上行业务MD5的加密方式
package
com.dahantc.utils
import
java.security.MessageDigest;
public
class
MD5
{
public
static
final
String
encode(String
sourceString)
{
String
resultString
=
null;
try
{
resultString
=
new
String(sourceString);
MessageDigest
md
=
MessageDigest.getInstance(“MD5“);
resultString
=
byte2hexString(md.digest(resultString.getBytes()));
}
catch
(Exception
ex)
{
}
return
resultString;
}
private
static
final
String
byte2hexString(byte[]
bytes)
{
StringBuffer
bf
=
new
StringBuffer(bytes.length
2);
for
(int
i
=
0;
i,当前选手排名为5“;
}
}
else
{//投票结束或者还没开始投票
if
(smsContent.equals(“1“)
||
smsContent.equals(“2“))
{
result
=
this.titleTypeJudgment(tm,phone,smsContent,um);
}
else
if
(smsContent.equals(PropReadUtil.getInstance().getResources(“queryScore“)))
{
//
查看选手信息
result
=
this.answerResultsJudgment(tm,phone,um);
}
else
{
if
(um.getCountNumber()
<
15)
{
result
=
“你还没投票,请回复短信给喜欢的选手投票支持“;
}
else
{
result
=
“投票成功“;
}
}
}
}
else
{
result
=
“投票失败“;
}
}
}
else
{
result
=
“你投票短信的格式错误,回复短信“TP+选手姓名”参与投票“;
}
return
result;
}
创建数据库
开始菜单àcmdàmysql
–uroot
–pà回车à输入密码:
如果密码正确则进入如下界面:
三、
实验结果
程序正常运行,返回值为”0”
四、结果分析
在平台上创建的业务通道,格式正确。并且已通过程序与数据库建立链接。且成功调用接口连接到短信平台。过程中配置的数据库等配置文件和创建的工具类都没有发生逻辑和语法错误。投票功能已经实现
四、
心得
熟悉短信增值业务软件开发平台HTTP接口等,掌握短信增值业务软件开发的HTTP接口编程。在实验过程中,学习到得独立自主的学习能力能帮助在接下来的学习更好的解决这些问题。
篇3:创新实践安卓软件开发报告
创新实践安卓软件开发报告 本文关键词:实践,创新,报告,开发,软件
创新实践安卓软件开发报告 本文简介:沈阳理工大学课程设计专用纸No18摘要从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓AppStore给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Andr
创新实践安卓软件开发报告 本文内容:
沈阳理工大学课程设计专用纸No18
摘要
从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓App
Store给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。而很少受到早期手持设备的硬件和软件限制。
本设计在对Android开发有初步了解的情况下,设计一个有代表性的Android商业App,通过对商业实例的学习,了解真实项目的系统构架、引擎设计,了解声音、视频、图片处理等相关的编程技术要点、以便在实际的游戏项目开发中借鉴和综合应用这些知识。
关键字:Android;APP;
目录
1
开发工具与环境1
1.1
下载并安装eclipse1
1.2
下载并安装jdk1
1.3开发环境简介1
1.4开发环境搭建2
1.4.2安装Eclipse4
1.4.3
安装Android
SDK4
1.4.4
ADT安装创建AVD4
2
系统的设计与分析5
2.1
Android系统的概述5
2.1.1应用层5
2.1.2应用程序框架5
2.1.3系统运行库6
2.1.4
Linux内核7
2.3
日历流程图7
3
系统详细设计8
3.1
日历其实是由3个预制的数据集组成8
3.2
视图的生成8
3.3当所示日期发生选择变更是的视图更新10
3.4
启动和运行13
4
运行结果14
4.1
系统启动14
4.2
进入日历14
4.4
退出应用15
5
结论16
参考文献17
1
开发工具与环境
1.1
下载并安装eclipse
Eclipse
版本有要求:The
“Eclipse
Classic“version
is
recommended.
Otherwise,a
Java
or
RCP
version
of
Eclipse
is
recommended.
1.下载eclipse只需登录到http://www.jsfw8.com/javase/downloads下载最新的JDK安装程序。
然后双击刚下载的JDK安装程序jdk-7u21-windows-i586,根据提示将JDK安装到默认目录。
右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:/Program
Files/Java/jdk1.7.0_21”的环境变量。
再打开Path环境变量,在最后加上“C:/Program
Files/Java/jdk1.7.0_21/bin;”,单击“确定”按钮即可。
1.3开发环境简介
JDK(Java
Development
Kit)是Sun
Microsystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的Java
SDK。JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java
Development
Kit,JDK)。
Android
SDK即软件开发工具包(software
development
kit)。被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。因此Android
SDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。
1.4开发环境搭建
下载安装Java开发包(JDK)。选择“windows
offline
installation,multi-language”,根据屏幕提示完成安装。
打开计算机>点右键>属性>高级系统设置>环境变量,在系统变量中添加。
图1.1环境变量
新建JavaHome:C:/Program
Files/Java/jdk1.6.0_10,如图1.2。
图1.2JavaHome
新建CLASSPATH:.;%JavaHome%/lib/dt.jar;%JavaHome%/lib/tools.jar;,如图1.3。
图1.3
CLASSPATH
编辑Path,在变量值前添加:%JavaHome%/bin;,如图1.4。
图1.4
Path
在CMD窗体中输入java
–version,如果屏幕出现如图1.5一样的代码信息,说明JDK安装成功了。
图1.5
CMD窗体
1.4.2安装Eclipse
选择标有“eclipse
IDE
for
java
developers“的文件进行安装。进入解压后的目录,就可以看到一个名为“eclipse.exe”的可执行文件,双击此文件直接运行,eclipse
能自动找到用户先期安装的JDK路径
1.4.3
安装Android
SDK
将下载的android-sdk压缩包解压为文件放于自选位置。在Eclipse中选择Windows>Preferences>Android>Browse找到解压文件>Apply>OK。打开环境变量,编辑Path,在变量值前添加:C:
/java/adt-bundle-windows-x86-20130522/sdk/tools;,如图1.6。
图1.6
Path
1.4.4
ADT安装创建AVD
打开SDK
Manager.exe,选择tools>Manage
AVDs,在Android
Virtual
Device
Manager中点击New,输入AVD的信息,点OK完成AVD的创建。如图1.7。
图1.7
AVD
2
系统的设计与分析
2.1
Android系统的概述
Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图:
图2.1
Android
系统构架
2.1.1应用层
Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
2.1.2应用程序框架
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序,
它包括列表(lists),网格(grids),文本框(text
boxes),按钮(buttons),
甚至可嵌入的web浏览器;
内容提供器(Content
Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),
或者共享它们自己的数据:资源管理器(Resource
Manager)提供
非代码资源的访问,如本地字符串,图形,和布局文件(
layout
files
);通知管理器
(Notification
Manager)
使得应用程序可以在状态栏中显示自定义的提示信息;
活动管理器(
Activity
Manager)
用来管理应用程序生命周期并提供常用的导航回退功能。
2.1.3系统运行库
系统运行库包括程序库和Android运行库。首先是程序库,
Android
包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过
Android
应用程序框架为开发者提供服务。以下是一些核心库:系统
C
库
-
一个从
BSD
继承来的标准
C
系统函数库(
libc
),
它是专门为基于
embedded
linux
的设备定制的;媒体库
-
基于
PacketVideo
OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
;
Surface
Manager
-
对显示子系统的管理,并且为多个应用程序提
供了2D和3D图层的无缝融合;
LibWebCore
-
一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图;SGL
-
底层的2D图形引擎;3D
libraries
-
基于OpenGL
ES
1.0
APIs实现;该库可以使用硬件
3D加速(如果可用)或者使用高度优化的3D软加速;FreeType
-位图(bitmap)和矢量(vector)字体显示;SQLite
-
一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。其次是Android
运行库,Android
包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。
Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中
的
“dx“工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
2.1.4
Linux内核
Android
的核心系统服务依赖于
Linux
2.6
内核,如安全性,内存管理,进程管理,
网络协议栈和驱动模型。
Linux
内核也同时作为硬件和软件栈之间的抽象层。
2.3
日历流程图
iPlanet日历S2erver2.x
Run
db_recover
下载和安装Calender
Server5.1.1
运行db_upgrade
运行les2milgrate
Sun
ONE
下载和安装Calender
Server6.x
运行cs5migrate
Sun
Java
System
Calender
Server
6
Netscape
Calender
Server4.x
下载和安装Calender
Server5.1.1
运行ncs4migrate
图2.2
流程图
3
系统详细设计
3.1
日历其实是由3个预制的数据集组成
日历整个系统是由3个GridView组成,3个GridView分别预制当前月、上个月和下个月当发生滑动事件的时候产生替换,同时在加载时重新生成。
private
Context
mContext
=
BaseCalendar.this;
private
GridView
title_gView;
private
GridView
gView1;//
上一个月
private
GridView
gView2;//
当前月
private
GridView
gView3;//
下一个月
//
private
GridView
gView1;
boolean
bIsSelection
=
false;//
是否是选择事件发生
private
Calendar
calStartDate
=
Calendar.getInstance();//
当前显示的日历
private
Calendar
calSelected
=
Calendar.getInstance();
//
选择的日历
private
Calendar
calToday
=
Calendar.getInstance();
//
今日
private
CalendarGridViewAdapter
gAdapter;
private
CalendarGridViewAdapter
gAdapter1;
private
CalendarGridViewAdapter
gAdapter3;
//
顶部按钮
private
Button
btnToday
=
null;
private
RelativeLayout
mainLayout;
//
private
int
iMonthViewCurrentMonth
=
0;
//
当前视图月
private
int
iMonthViewCurrentYear
=
0;
//
当前视图年
private
int
iFirstDayOfWeek
=
Calendar.MONDAY;
private
static
final
int
mainLayoutID
=
88;
//
设置主布局ID
private
static
final
int
titleLayoutID
=
77;
//
title布局ID
private
static
final
int
caltitleLayoutID
=
66;
//
title布局ID
private
static
final
int
calLayoutID
=
55;
//
日历布局ID
3.2
视图的生成
生成一个主视图
//
生成内容视图
private
View
generateContentView()
{
//
创建一个垂直的线性布局(整体内容)
viewFlipper
=
new
ViewFlipper(this);
viewFlipper.setId(calLayoutID);
mainLayout
=
new
RelativeLayout(this);
//
创建一个垂直的线性布局(整体内容)
RelativeLayout.LayoutParams
params_main
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
mainLayout.setLayoutParams(params_main);
mainLayout.setId(mainLayoutID);
mainLayout.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout
layTopControls
=
createLayout(LinearLayout.HORIZONTAL);
//
生成顶部按钮布局
generateTopButtons(layTopControls);
//
生成顶部按钮
(上一月,下一月,当前月)
RelativeLayout.LayoutParams
params_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_title.topMargin
=
5;
//
params_title.addRule(RelativeLayout.ALIGN_PARENT_TOP,20);
layTopControls.setId(titleLayoutID);
mainLayout.addView(layTopControls,params_title);
calStartDate
=
getCalendarStartDate();
setTitleGirdView();
RelativeLayout.LayoutParams
params_cal_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal_title.addRule(RelativeLayout.BELOW,titleLayoutID);
//
params_cal_title.topMargin
=
5;
mainLayout.addView(title_gView,params_cal_title);
CreateGirdView();
RelativeLayout.LayoutParams
params_cal
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal.addRule(RelativeLayout.BELOW,caltitleLayoutID);
mainLayout.addView(viewFlipper,params_cal);
LinearLayout
br
=
new
LinearLayout(this);
RelativeLayout.LayoutParams
params_br
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,1);
params_br.addRule(RelativeLayout.BELOW,calLayoutID);
br.setBackgroundColor(getResources().getColor(R.color.calendar_background));
mainLayout.addView(br,params_br);
return
mainLayout;
}
3.3当所示日期发生选择变更是的视图更新
在主视图所示日期改变时更新,主要代码如下:
//
根据改变的日期更新日历
//
填充日历控件用
private
void
UpdateStartDateForMonth()
{
calStartDate.set(Calendar.DATE,1);
//
设置成当月第一天
iMonthViewCurrentMonth
=
calStartDate.get(Calendar.MONTH);//
得到当前日历显示的月
iMonthViewCurrentYear
=
calStartDate.get(Calendar.YEAR);//
得到当前日历显示的年
String
s
=
calStartDate.get(Calendar.YEAR)
+
“-“+
NumberHelper.LeftPad_Tow_Zero(calStartDate
.get(Calendar.MONTH)
+
1);
btnToday.setText(s);
//
星期一是2
星期天是1
填充剩余天数
int
iDay
=
0;
int
iFirstDayOfWeek
=
Calendar.MONDAY;
int
iStartDay
=
iFirstDayOfWeek;
if
(iStartDay
==
Calendar.MONDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.MONDAY;
if
(iDay
<
0)
iDay
=
6;
}
if
(iStartDay
==
Calendar.SUNDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.SUNDAY;
if
(iDay
<
0)
iDay
=
6;
}
calStartDate.add(Calendar.DAY_OF_WEEK,-iDay);
}
private
Calendar
getCalendarStartDate()
{
calToday.setTimeInMillis(System.currentTimeMillis());
calToday.setFirstDayOfWeek(iFirstDayOfWeek);
if
(calSelected.getTimeInMillis()
==
0)
{
calStartDate.setTimeInMillis(System.currentTimeMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
else
{
calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
return
calStartDate;
}
public
class
TitleGridAdapter
extends
BaseAdapter
{
int[]
titles
=
new
int[]
{
R.string.Sun,R.string.Mon,R.string.Tue,R.string.Wed,R.string.Thu,R.string.Fri,R.string.Sat
};
private
Activity
activity;
//
construct
public
TitleGridAdapter(Activity
a)
{
activity
=
a;
}
@Override
public
int
getCount()
{
return
titles.length;
}
@Override
public
Object
getItem(int
position)
{
return
titles[position];
}
@Override
public
long
getItemId(int
position)
{
return
position;
}
@Override
public
View
getView(int
position,View
convertView,ViewGroup
parent)
{
LinearLayout
iv
=
new
LinearLayout(activity);
TextView
txtDay
=
new
TextView(activity);
txtDay.setFocusable(false);
txtDay.setBackgroundColor(Color.TRANSPARENT);
iv.setOrientation(1);
txtDay.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
int
i
=
(Integer)
getItem(position);
txtDay.setTextColor(Color.WHITE);
Resources
res
=
getResources();
if
(i
==
R.string.Sat)
{
//
周六
txtDay.setBackgroundColor(res.getColor(R.color.title_text_6));
}
else
if
(i
==
R.string.Sun)
{
//
周日
txtDay.setBackgroundColor(res.getColor(R.color.title_text_7));
}
else
{
}
txtDay.setText((Integer)
getItem(position));
iv.addView(txtDay,lp);
return
iv;
}
}
}
3.4
启动和运行
当你点击运行程序是的加载代码
TextView
txtDay
=
new
TextView(activity);//
日期
txtDay.setGravity(Gravity.CENTER_HORIZONTAL);
//
判断是否是当前月
if
(iMonth
==
iMonthViewCurrentMonth)
{
txtToDay.setTextColor(resources.getColor(R.color.ToDayText));
txtDay.setTextColor(resources.getColor(R.color.Text));
}
else
{
txtDay.setTextColor(resources.getColor(R.color.noMonth));
txtToDay.setTextColor(resources.getColor(R.color.noMonth));
}
int
day
=
myDate.getDate();
//
日期
txtDay.setText(String.valueOf(day));
txtDay.setId(position
+
500);
iv.setTag(myDate);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtDay,lp);
LinearLayout.LayoutParams
lp1
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtToDay,lp1);
//
日期结束
4
运行结果
4.1
系统启动
进入系统后,系统加载如图4.1。
图4.1
系统初始化
4.2
进入日历
进入日历主界面(可滑动进行翻页查看其他日期点击添加备注等功能),如图4.2
图4.2
主界面
4.4
退出应用
单击MENU键,退出应用。如图4.3。
图4.3
退出App
5
结论
日历是一款经典的小应用它既有简单易学的特性,而且界面美观;2007年11月5日,互联网巨头Google宣布依靠android系统进军手机操作系统领域后,几年来android一路高歌,拥有越来越多的用户群体,为顺应时代潮流,本次创新实践周的题目是一款能够在android手机上运行的小应用。
通过这次课程设计,我学到了很多新的知识,同时也锻炼了我的综合运用所学的知识,解决问题的能力,也提高我查阅文献资料、对程序整体的把握等其他能力与水平。在课程设计过程中,在小组成员的讨论中,不断地对源程序进行改进与完善,修改了以往扫雷程序的界面,界面更加漂亮。并且在编写的过程中,各种组件的运用,各种算法的应用,各种控件的利用我都是随着课程设计的不断深入而不断熟悉并逐步掌握的。
总而言之,在创新实践周中,我对android平台和游戏开发等领域都有了一定的了解。其中所学到的知识,将成为我今后学习工作当中的监视基础。希望以后还会有这种锻炼自己的实践机会。
参考文献
[1]
景保玉.2010中国移动应用开发现状与趋势大调查.2011年01月12日:10~23
[2]
Michael
J.Young.
轻松搞定XML.林嘉胜译.
清华大学出版社,2001年01月08日:12~58
[3](英)Herbert
Schildt
Java参考大全(J2SE
5
Edition).清华大学出版社.2010年:1~58
[4]
Mark
L.Murphy.Android开发入门教程.人民邮电出版社,2010年12月:1~20
[5]
郭宏志.Android
应用开发详解[M].北京:电子工业出版社.2010-10-2
[6]
余志龙.Google
Android
SDK
开发范例大全[M].北京:人民邮电出版社.2009-7-1
[7]
靳岩,姚尚朗.Google
Android
开发入门与实战[M].北京:人民邮电出版社.2009-7-1