每添加一个课程就会在该表中新增一条记录,并且自动生成一个唯一的id,用以区别各个课程,同样名称但是分成两次添加的课程会被认为是不同的课程,这样设计的目的主要是为了方便查询。该表结构设计如下:
_id: 已添加的课程id,课程表主键,用来查找课程,获取课程信息
_time: 第一节课的开始时间;
_startnum: 第一节课的编号;
_endnum: 最后一节课的编号;
_name: 课程名称;
_address: 上课地点;
term表主要用来记录整个学期的课程。该表结构如下:
_date: 日期;
_weeknum: 周数;
_one: 第一节课的id;
_two: 第二节课的id;
_three: 第三节课的id;
_four: 第四节课的id;
_five: 第五节课的id;
_six: 第六节课的id;
_sevn: 第七节课的id;
_eight: 第八节课的id;
_nine: 第九节课的id;
_ten: 第十节课的id;
该数据库设计初衷为保存整个学期的课程,这样实现整个学期的课程排布,包括数据的存储,课程的提醒和查询都比较方便。开始的两列包括日期和周数,从定义的本学期的第一周的星期一开始计算,完全实现自动生成,用户只需要通过选择周数和星期就可以生成日期。表中从第三列开始保存的为课表的id,通过该id可以在class表中查询出对应的课程内容。
4.2.2 Preference
Preference是一种轻量级的数据存储机制,它将一些简单数据类型的数据以键值对的形式存储在程序的Preference目录中。在Android平台上,可以通过一个Context对象调用getSharedPreferences(String name,int mode)方法传入Preferences文件名和打开模式,就可以获得一个Sharedpreferences的对象[4]。
4.3 程序中的主要类
4.3.1 ClassScheule类
该类为整个应用的主Activity, 显示课程表的主界面[2]。其主要方法如下:
* onCreate:Activity主要重写方法之一,实现程序初始化和UI展示;
* onResume:Activity重写方法之一,实现在唤醒Activity时刷新界面;
* onCreateOptionMenu:实现Option菜单的创建;
* onMenuItemSeleted:实现菜单项的点击事件响应;
* getDayClassRecord:从数据库中获取当天的课程信息;
* UpdateUI: 在数据发生改变时刷新UI;
* removeClass: 从数据库中删除课程;
界面设计方面通过RelativeLayout实现布局,使用了TextView,ImageButton课程列表通过ListView实现UI展示。该类通过继承BaseAdapter还实现了一个名为MyListAdapter的内部类,用来显示ListView中的数据并实现对ListView上ImageView控件点击的统一响应 [5]。
4.3.2 Addclass类和AddPlan类
AddClass类为实现添加课程界面的Activity,主要实现由用户选择和输入课程信息,并将所有的课程信息添加到数据库中。主要方法如下:
* onCreate: 初始化UI控件;
* SetDefaultData: 设置初始化时默认的数据;
* SaveData: 将添加的课程保存进数据库中;
* gettimeString: 将输入的课程信息转换成对应的时间字符串返回;
AddPlan类实现添加计划界面,并将添加的数据存入Preference中。主要方法如下:
* onCreate: 实现初始化UI控件;
* onClick: 实现button点击事件的响应;
* setPlan: 实现添加计划到preference中;
4.3.3 DBDataManager类
该类为自定义的重要的数据库处理类,用来管理数据库,对数据库的所有操作都封装在这个类中,实现数据封装。将数据操作和UI操作隔离开来。主要方法如下:
* AddClass: 给class表添加记录;
db.insert(CLASS_TABLE, null, values);//insert方法插入一条数据
* deleteClass:删除一条class记录;
db.delete(CLASS_TABLE, "_id = " + classid, null);//delete方法删除一条数据
* initTerm:给Term表添加初始数据
* addClassToterm:将添加的课程信息正确添加进term表中
* deleteClassfromterm:从term表中删除一次添加的class数据
* getdayClassRecord: 获得一天课程记