移动互联网开发.docx
- 文档编号:25523027
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:47
- 大小:2.23MB
移动互联网开发.docx
《移动互联网开发.docx》由会员分享,可在线阅读,更多相关《移动互联网开发.docx(47页珍藏版)》请在冰豆网上搜索。
移动互联网开发
移动互联网开发
课程设计报告
班级:
通信工程20131班
学号:
3130601021
姓名:
吴烦
2016年1月16日
一课程设计的目的--------------------------------------3
二课程设计的要求--------------------------------------3
三开发运行软件-----------------------------------------3
四设计步骤------------------------------------------------4
五问题分析------------------------------------------------11
六总结------------------------------------------------------11
七附录--------------------------------------------------------1
一课程设计的目的
开发两个android软件,分别实现在手机上考试系统,和建议课程表。
二课程设计的要求
使用Android开发工具实现以下要求的内容:
A.实现一个Android手机现场考试应用的一部分。
具体要求如下:
(1)有登录部分和考试部分两大模块。
(2)登录界面有账号和密码两个文本框和一个提交按钮。
考试界面以客观题为主,至少有一个下一题按钮,最后一页至少有提交按钮。
(3)登录数据、题目答案、考生提交答案以及得分等数据均存储在SQLite数据库中。
(4)登录失败,显示相关失败信息,返回登录界面;三次登录不成功,则退出应用;登陆成功则进入考试界面。
(5)考试题目不少于5题,考试内容可以不限,但必须是同一内容的考试。
(6)将最终的应用项目打包移植到Android手机上运行。
B实现一份学生课表。
具体要求如下:
(1)课表有一周课表的显示两部分,点击具体课程,可以有详细的相关信息显示。
(2)课程表其他内容或功能可以自行设计。
三开发运行软件
支持Java语言的Eclipse软件。
四设计步骤
1流程图
A.考试系统
注册
否
注册是否成功
是
登录
否
登录是否成功
是
答题系统
退出登录
考前预热
返回
试题界面
提交
成绩界面
退出
查看成绩
成绩详情
退出
B.课程表
总页面
查看当天课程
课程安排
删除
后退刷新页面
添加课程
添加页面
2界面设计
A.答题系统:
2.1系统首页
2.1.1功能概况
本软件为英雄联盟趣味问答软件,首页为登录注册界面,包含主要用户输入框、密码输入框、登录按钮、注册按钮以及清除按钮(用以清除错误输入账号和密码信息),用户需要注册新账号,然后才可进行登录。
用户登录3次非法输入会导致软件自动关闭。
2.1.2数据格式与定义
实现该界面功能首先先创建activity_main.xml的文件,进行相关的布局,然后在MainActivity.java文件里进行程序控制。
首先先建立数据库,输入一些用户信息,先定义一些数据:
数据库的名字,表的名字,表中字段,具体如下:
privatestaticfinalStringTAG="Add";
EditTextuname,upass;
Buttondenglu,zhuce,chongzhi;
DBOpenHelperhelper;
SQLiteDatabasedb=null;
intn=0;
另外在其他activity里也有对一些信息的定义,代码如下:
privatestaticfinalStringTAG="Add";
DBOpenHelper3helper;
SQLiteDatabasedb=null;
Stringyonghu;
TextViewfenshu;
Buttonmbutton,button;
2.1.3类与方法的设计
首先了解数据库基本的建库建表、增减删查方法
a.建立数据库和表的基本方法:
mSQLiteDatabase=this.openOrCreateDatabase(DATABASE_NAME,MODE_PRIVATE,null);
try{mSQLiteDatabase.execSQL(CREATE_TABLE);}catch(Exceptione){}
b.增添表中数据的方法:
ContentValuescv=newContentValues();
cv.put(TABLE_NUM,"313060"+String.valueOf(1000+miCount));
cv.put(TABLE_PASS,"313060"+String.valueOf(1000+miCount));
mSQLiteDatabase.insert(TABLE_NAME,null,cv);
miCount++;
c.查询数据库中数据的方法:
Cursorcur=mSQLiteDatabase.query(TABLE_NAME,newString[]
{TABLE_ID,TABLE_NUM,TABLE_PASS,TABLE_DATA,TABLE_SCORES},null,null,null,null,null,null);
d.跳转到表中相关行的方法:
cur.moveToFirst()
e.相关字段的具体行具体列的值的方法:
intnumColumn=cur.getColumnIndex(TABLE_NUM);
Stringname1=cur.getString(numColumn);
f.修改表中数据的方法:
ContentValuescv=newContentValues();
cv.put(TABLE_USERANSWER,mess);
mSQLiteDatabase1.update(TABLE_NAME1,cv,TABLE_NUM1+"="+Integer.toString(str1_int),null);
g.两个activity之间的跳转与传值方法
:
当前activity:
MainActivity
Intentintent=newIntent();
intent.setClass(MainActivity.this,TestMainActivity.class);
intent.putExtra("key",“传输的信息”);
startActivity(intent);
MainActivity.this.finish();
另一个activity:
TestMainActivity
Intentintent=getIntent();//
Bundlebundle=intent.getExtras();
userss=bundle.getString("key");
通过上述的基本操作就可以满足我们的基本需求,首先把班级同学的用户名和密码均已学号的形式通过for循环输入的“table4”表中:
ContentValuescv=newContentValues();
cv.put(TABLE_NUM,"313060"+String.valueOf(1000+miCount));
cv.put(TABLE_PASS,"313060"+String.valueOf(1000+miCount));
mSQLiteDatabase.insert(TABLE_NAME,null,cv);
miCount++;
当点击登录按钮后触发事件,判断触发信息,首先通过数据表的mSQLiteDatabase.query查询方法,把用户提交的用户名和密码信息与数据库中的信息逐个比较,当出现完全匹配时,且该用户之前没有参与过考试,则进入考试界面,如果输入三次失败,则退出,如果用户已经考试过则不能再次进入,并给与相关提示。
其相关重要代码如下:
Cursorcur=mSQLiteDatabase.query(TABLE_NAME,newString[]
{TABLE_ID,TABLE_NUM,TABLE_PASS,TABLE_DATA,TABLE_SCORES},null,null,null,null,null,null);
if(cur!
=null)
{if(cur.moveToFirst())
{do
{intnumColumn=cur.getColumnIndex(TABLE_NUM);
intpasColumn=cur.getColumnIndex(TABLE_PASS);
intscoreColumn=cur.getColumnIndex(TABLE_SCORES);
intidcolumn=cur.getColumnIndex(TABLE_ID);
x=cur.getInt(idcolumn);
Stringname1=cur.getString(numColumn);
Stringpas1=cur.getString(pasColumn);
Stringscore_value=cur.getString(scoreColumn)if(name1.equals(name)&&pas1.equals(pas))
{count++;//正确标志
if(score_value==null)
{Toasttoast1=Toast.makeText(MainActivity.this,"登录成功,进入考试",Toast.LENGTH_LONG);toast1.setGravity(Gravity.TOP,0,150);
toast1.show();
Intentintent=newIntent();
intent.setClass(MainActivity.this,TestMainActivity.class);
intent.putExtra("username",edit1.getText().toString());
intent.putExtra("id1",String.valueOf(x));
startActivity(intent);
MainActivity.this.finish();
break;}
if(score_value!
=null)//判断是否之前考过试
{Toasttoast1=Toast.makeText(MainActivity.this,"你已经完成考试",Toast.LENGTH_LONG
toast1.setGravity(Gravity.TOP,0,150);
toast1.show();break;
}}
}while(cur.moveToNext());
if(count==0)
{error++;rest--;//错误次数与剩余机会数
Toasttoast1=Toast.makeText(MainActivity.this,"登录失败,你还有"+rest+"次机会",Toast.LENGTH_LONG);
toast1.setGravity(Gravity.TOP,0,150);
toast1.show();
}
if(count==0&&rest<1)
{
Toasttoast1=Toast.makeText(MainActivity.this,"失败三次,没有资格继续登录",Toast.LENGTH_LONG);
}
}
}
}
});
运行截图
登录界面登录失败界面
登录成功界面:
注册成功界面
2.2答题系统界面
2.2.1功能概况
登录成功之后进入答题系统页面,该界面该页面有三个按钮,分别为退出登录、考前预热、开始答题。
用户可以通过点击相应按钮进行相应操作,退出登录回至登陆注册页面;考前预热进入考点透析,了解考试内容;开始答题则进入答题界面,进行作答。
2.2.2关键按钮定义与功能实现
a.开始答题按钮
mbutton=(Button)findViewById(R.id.button1);
Intentm_itent=getIntent();
Bundlem_bundle=m_itent.getExtras();
yonghu=m_bundle.getString("yonghu");
mbutton.setOnClickListener(newButton.OnClickListener(){
…………………………………Dialogdialog=newAlertDialog.Builder(activity.this)
.setTitle("提示")
.setMessage("您确认答题吗?
")
.setPositiveButton("确定",newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
dialog.cancel();
Intentmitent=newIntent(getBaseContext(),activity1.class);
mitent.putExtra("yonghu",yonghu);
startActivity(mitent);
}
})
b.退出登录按钮
mbutton2=(Button)findViewById(R.id.button2);
mbutton2.setOnClickListener(newButton.OnClickListener(){
publicvoidonClick(Viewv){
Intentmitent=newIntent(getBaseContext(),MainActivity.class);
startActivity(mitent);
}
});
c.考前预热按钮
mbutton3=(Button)findViewById(R.id.button3);
mbutton3.setOnClickListener(newButton.OnClickListener(){
publicvoidonClick(Viewv){
Intentmitent=newIntent(getBaseContext(),CopyofMainactivity.class);
startActivity(mitent);
}
});
为了防止用户手机返回键会导致用户退出登录,加了一段如下代码:
publicvoidonBackPressed(){
super.onBackPressed();
System.out.println("按下了back键onBackPressed()");
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if((keyCode==KeyEvent.KEYCODE_BACK)){
System.out.println("按下了back键onKeyDown()");
returnfalse;}
else{
returnsuper.onKeyDown(keyCode,event);
}}
运行截图
答题系统界面成功进入答题界面
考前预热界面
2.3具体题目界面
2.3.1功能概况
具体包含三个部分,考试题目、选项按钮、系统的导航按钮,只具有进入下一题功能。
(由于课设时间原因,提前交卷返回功能未设置)
2.4.2关键按钮及功能实现(以第一题页面代码为例)
publicclassactivity1extendsActivity{
Buttonmbutton;
TextViewmtextview1,mtextview2;
RadioButtonmRadio1,mRadio2;
RadioGroupmRadioGroup;
DBOpenHelper1helper;
DBOpenHelper2helper1;
SQLiteDatabasedb=null,db1=null;
Stringyonghu;
intmid=1;
Stringmtimu;
intscore=0;
booleancishu=true;
Stringmdaan="";
publicstaticfinalStringDB_NAME1="SHITI";
publicstaticfinalStringDB_NAME2="HUIDA";
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
helper=newDBOpenHelper1(this,DB_NAME1,null,1);
helper1=newDBOpenHelper2(this,DB_NAME2,null,1);
mbutton=(Button)findViewById(R.id.button);
mRadio1=(RadioButton)findViewById(R.id.radio1);
mRadio2=(RadioButton)findViewById(R.id.radio2);
mRadioGroup=(RadioGroup)findViewById(R.id.radioGroup);
mtextview1=(TextView)findViewById(R.id.textview1);
mtextview2=(TextView)findViewById(R.id.textview2);
Intentm_itent=getIntent();
Bundlem_bundle=m_itent.getExtras();
yonghu=m_bundle.getString("yonghu");
RadioGroup.OnCheckedChangeListenermChangeRadio1=newRadioGroup.OnCheckedChangeListener(){
publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){
if(checkedId==mRadio1.getId())
{mtextview2.setText("你选择的选项是:
"+mRadio1.getText());
mdaan="对";}
elseif(checkedId==mRadio2.getId())
{mtextview2.setText("你选择的选项是:
"+mRadio2.getText());
mdaan="错";}
}};
mRadioGroup.setOnCheckedChangeListener(mChangeRadio1);
mbutton.setOnClickListener(newButton.OnClickListener(){
publicvoidonClick(Viewv){
if(cishu==true){db1=helper.getWritableDatabase();
Stringsql="select*fromshitiwhereid=?
";
Cursorcursor=db1.rawQuery(sql,
newString[]{String.valueOf(mid)});
if(cursor.getCount()==0){
Stringsql1="insertintohuida(name,id,daan)values('"+yonghu+"','"+mid+"','"+mdaan+"')";
db1.execSQL(sql1);
}
if(mRadio2.isChecked()==true)score++;
cishu=false;
Intentmitent=newIntent(getBaseContext(),activity2.class);
mitent.putExtra("yonghu",yonghu);
mitent.putExtra("score",score);
startActivity(mitent);
}
}
});
}
其中,为了防止用户返回上一题页面对已确定答案进行不合法更改,我将手机自带的返回键功能禁用了,具体代码如下:
publicvoidonBackPressed(){
super.onBackPressed();
System.out.println("按下了back键onBackPressed()");
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if((keyCode==KeyEvent.KEYCODE_BACK)){
System.out.println("按下了back键onKeyDown()"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动 互联网 开发