南京晓庄学院
【移动开发应用框架】
课程设计报告
《课程表的设计与实现》
所在院(系):信息工程学院
学 号 : 13139173
学生姓名 : 陈倡
年级专业 : 软件工程
指导教师 : 李青
提交日期 : 20## 年 12 月
课程设计实验报告
一、 目的(本次课程设计的概要以及所涉及的知识点。)
1.课程表课程的添加与实现
2.记录笔记并可以查看
设计知识点:数据库的数据的新增,查询,删除等,辅助类,上下文菜单的使用;
二、使用环境 (本次实践所使用的平台和相关软件。 )
SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Android专属的软件开发工具包。
使用Eclipse进行android应用开发需要给Eclipse装ADT插件,这样Eclipse就可以和android ADT建立连接,可以在Eclipse中启动android模拟器进行程序调试等。
三、内容与设计思想
(1 .设计思路 2 .主要功能说明 3 .主要的模块结构 4 .主要代码分析 。 )
1.课程与笔记是私有的,所以设置用户名与密码登陆,在课程表中应有一个显示界面,用于显示已添加的课程,点击新增按钮进入新增界面,用于增加新的课程,需添加上课的星期和课的节次,并检查当前是否有课,并提示。保存后进入课表显示界面,查看课表。笔记中有一笔记列表,显示创建笔记的时间和标题。点开笔记可以查看详细内容。也可以进行笔记的新增。若长按笔记。则可以进行删除操作。
2.登录进入菜单,若无用户,可以注册。
课程表,查看已经有课程,新增课程并保存。
笔记,查看已有笔记,查看详细笔记,新增笔记,删除笔记。
3.整个程序包含两个大的模块:课程表模块和笔记模块;课程表中包含显示和新增两个模块;笔记中有显示列表模块,新增模块,和查看模块
4.(1)用户登录时,根据用户名与密码进入数据库中查询,若有返回值为1,表示有该用户,进行界面的跳转,进去菜单界面。若返回值为0 ,则表示用户名或密码错误,并提示。
but_login.setOnClickListener(new OnClickListener() {
publicvoid onClick(View arg0) {
String putname = edit_putname.getText().toString();
String putpassword = edit_putpassword.getText().toString();
Cursor cs = dbhelper.login(putname, putpassword);
int m = cs.getCount();
if(m==0){
String tips = "你输入的用户名或密码有误";
Toast toast = Toast.makeText(getApplicationContext(), tips,20000);
toast.show();
}else{
Intent intent = new Intent(MainActivity.this,MenuActivity.class);
intent.putExtra("name", putname);
MainActivity.this.startActivity(intent);
}
}
});
(2)新增课程时,查询这一天的所有课程,若已有的课程和添加的课程节次相同则冲突,则提示这节已经有课,若无可进行添加,并跳转会课程表界面查看
Cursor cs = db.query("schedule", new String[]{"time"}, "day='"+day+"'", null, null, null, null);
cs.moveToFirst();
while(!cs.isAfterLast()){
String check = cs.getString(cs.getColumnIndex("time"));
if(check.equals(timeclass)){
String tips = "这节已经有课";
Toast toast = Toast.makeText(getApplicationContext(), tips, 20000);
toast.show();
return;
}
cs.moveToNext();
}
cs.close();
String sql = "insert into schedule('couesename','room','week','day','time','teachername')" +
" values('"+couesename+"','"+room+"','"+week+"','"+day+"','"+timeclass+"','"+teachername+"')";
db.execSQL(sql);
(3)通过上下文菜单的方法,长按笔记列表,会出现设置好删除菜单,通过onContextItemSelected响应菜单,并获得所选择的菜单。通过info.targetView
查找到长按的视图,并获得TextView里的时间字符串,根据字符串进入数据库进行查找并删除,再跟新listView;
this.registerForContextMenu(lv_notes);
publicvoid onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, 1,0, "删除");
}
publicboolean onContextItemSelected(MenuItem item){
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(item.getItemId()==1){
//获取当前的视图
TextView tv = (TextView)info.targetView.findViewById(R.id.tv_showwritetime);
String str = tv.getText().toString();
String sql = "delete from notes where writetime='"+str+"'";
db.execSQL(sql);
//通知更新显示ListV
cs = db.query("notes", new String[]{"_id","writetime","notesname"}, null, null, null, null, null, null);
adapter = newSimpleCursorAdapter(this, R.layout.notes_layout, cs,
new String[]{"writetime","notesname"},
newint[]{R.id.tv_showwritetime,R.id.tv_shownotesname});
lv_notes.setAdapter(adapter);
//adapter.notifyDataSetChanged();
}
returnfalse;
}
(4)新建了一个DBHelper辅助类继承SQLiteOpenHelper,新建数据库,新建表格,并对数据进行增删改查。onCreate()方法是建立表格,只进行一次。
还可以根据版本号进行数据库的更新,在其他类中调用查询方法,并返回所查询的值。
publicclass DBHelper extends SQLiteOpenHelper{
privatestaticfinalintVersion = 1 ;
privatestaticfinal String DBNAME = "cc";
privatestaticfinal String sql_createschedule = "create table schedule(_id integer primary key autoincrement,"+" couesename text,"+" room text,"+"week text," +
"day text,"+"time text,"+"teachername text)";
privatestaticfinal String sql_createuserinformation = "create table userinformation(_id integer primary key autoincrement,"+" name text,"+" password text,"+"imageid integer)";
privatestaticfinal String sql_createnotes = "create table notes(_id integer primary key autoincrement,"+"writetime text,"+"notesname text,"+"notes text)";
public DBHelper(Context context) {
super(context, DBNAME, null, Version);
}
publicvoid onCreate(SQLiteDatabase db) {
db.execSQL(sql_createschedule);
db.execSQL(sql_createuserinformation);
db.execSQL(sql_createnotes);
}
publicvoid onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public Cursor login(String putname,String putpassword){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cslogin = db.query("userinformation",null,"name='"+putname+"' and password ='"+putpassword+"'",null,null,null,null,null);
return cslogin;
}
publicvoid aegister(String newname,String newpassword,int imageid){
SQLiteDatabase db = this.getReadableDatabase();
String sql = "insert into userinformation('name','password','imageid')" +
" values('"+newname+"','"+newpassword+"','"+imageid+"')";
db.execSQL(sql);
}
public Cursor checkname(String newname){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cscheckname = db.query("userinformation", new String[]{"name"}, "name = '"+newname+"'", null, null, null, null, null);
return cscheckname;
}
public Cursor queryschedule(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor csschedule = db.query("schedule", null, null, null, null, null, null);
return csschedule;
}
publicvoid addcosuses(String couesename,String room,String week,String day,String timeclass,String teachername){
SQLiteDatabase db = this.getReadableDatabase();
String sql = "insert into schedule('couesename','room','week','day','time','teachername')" +" values('"+couesename+"','"+room+"','"+week+"','"+day+"','"+timeclass+"','"+teachername+"')";
db.execSQL(sql);
}
publicvoid writenotes(String writetime,String notesname,String notes){
SQLiteDatabase db = this.getReadableDatabase();
String sql = "insert into notes(writetime,notesname,notes) values('"+writetime+"','"+notesname+"','"+notes+"')";
db.execSQL(sql);
}
public Cursor querynotes(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cs = db.query("notes", new String[]{"_id","writetime","notesname"}, null, null, null, null, null, null);
return cs;
}
}
四、调试过程 (测试结果分析 )
1. 若无用户点击注册,进行注册,注册界面需要输入两次密码,进行密码确认。
2.注册后进入登录界面,经过用户名和密码验证过后进行登录进去菜单界面
3.进入菜单界面,选择相应的功能
4.选择课表后,进去课表界面,可以查看已有的课程,课程表可以滑动,点击新增,进入新增界面进行增加
5.进入新增后输入课程名教室等,若无冲突,点击勾就保存进入课表界面,查看课表
6.进入笔记列表界面,若点击笔记,则可以查看该篇详细笔记,若长按,通过上下文菜单的方法进行删除,点击笔记按钮,则可进入写笔记界面
7.进入新增笔记界面,获取当前的时间,并记录,方便查询。
8.点击笔记查看详细的笔记。
五、总结
1 .设计中遇到的问题及解决过程
遇到了一些方法使用错误,通过网上的查找和询问高手解决的。
2 .设计中产生的错误及原因分析
界面跳转是出现问题,经过排查后发现传递的参数有错。
3 .设计体会和收获。
深深的感觉自己的知识经验匮乏。虽然经常会报错,但是要慢慢的细心的排查,而且每天都要坚持写下去。要不断的学习,遇到难题,不会的,要咬着牙把它啃下了。
六、附录
1、原代码节略
2、参考文献
第二篇:河北工程安卓课程设计报告
Android应用设计
实验报告
学 院:
专 业: 通信工程 班 级: 姓 名: 学 号: 100312107 指导教师:
20xx年x月x日
天气查询
1. 关键步骤简介
1.1 创建新工程 1.2 导入jar包 1.3 UI设计 1.4 添加权限
1.5 在模拟器上运行 2. 步骤详细说明
2.1 创建新工程
在Eclipse主界面下,选择菜单选项“文件”?“新建”?“其他”,选择Android Project后点“下一步”,在新项目属性界面填写: Project name : QueyrWeather。 Application name : 查询天气。 Package name: com.querrweather。 选择安卓2.2。
Min SDK version:8。
点击“完成”按钮后,得到新工程结构如下:
2.2 导入jar包
1.在上面的项目结构中右键点击项目名称,在弹出的功能菜单中选择“属性”,进入属性设置界面;
点击“Java构建路径”选项,显示出对应界面; 在右边的按钮中点击“添加库”; 选择“用户库”,点击“下一步”; 点击“用户库”按钮;
在出现的界面中点击“新建”按钮;
在弹出的界面中起一个名字,比如叫“weatherjar”,点击“确定”;
点击“添加Jar..”按钮选择weather.jar包,点击一系列“确定”或“完成”按钮完成“Java构建路径”中的设置;
2.在项目根目录下新建一个lib文件夹; 把weather.jar文件复制进lib文件夹中;
在lib文件目录上点右键,选择“构建路径”?“用作源文件夹”。 2.3 UI设计
选择res文件夹?layout?main.xml
双击main.xml或是右键点main.xml选择“打开方式”?“Android Layout Editor”进入布局编辑器界面:
1.清除无用组件,点击“Hello World,QueryActivity!”这行字,右键弹出菜单,选择“删除”。
2.右键点击布局编辑器中黑屏位置(其实是一个布局组件),选择“Edit ID”。 在弹出对话框中,给刚才选的布局组件起一个名字,比如叫“layout”。
3.从编辑器左侧导航栏中选择EditText组件拖到黑屏中,如果拖错了组件,可以在黑屏中选中组件,按键盘上的del键删除掉。
选择黑屏中的EditText组件,右键点击,选择Edit Text。 在弹出的对话框中选择“New String”,定义一个字符串常量,以便后面给EditText引用: 在弹出的下图对话框中定义一个字符串常量,比如常量的名称为“str1”,内容为“城市名称”。
定义好后点击“确定”返回上个对话框,再点击“确定”为EditText组件设置上面显示的文字。
4.同样的操作再在黑屏上添加一个Button组件,为了美观,将其宽度设置为“Match Parent”以占据整个屏幕宽度。
上面也定义出显示文字,比如“查询”: 5.按Ctrl+S键保存UI设计结果。 2.4 添加权限
1.双击项目结构中的“AndroidManifest.xml”文件或右键点击它选择“打开方式”?“Android Manifest Editor”,显示项目配置文件界面:
单击上图中的“Permissions”进入权限编辑界面: 点击“Add…”按钮,选择“Uses Permission”,点击“OK”,即为添加一项权限。 在界面右侧下拉框中选择“android.permission.INTERNET”项,添加了此项权限才能在程序中使用互联网。
2.按Ctrl+S键保存添加权限结果。 2.5 在模拟器上运行 选中项目结构中的“QueryWeather”项目名称,右键点击,选择“运行方式”?“Android Application”。
点击EditText输入框,会弹出软键盘,使用退格键可以删除里面预设的文字,输入城市名称或汉语拼音的全拼字母(比如:“邯郸”或“handan”都可以)后,点击“查询”按
钮进行查询。 显示结果如下:
如果输入框中输入错误字符,则点击查询按钮后会弹出对话框提示错误,点击对话框的按钮后可以重新输入: