一、介绍:
课程表是每一个学生日不可少的东西,目前我们还是依赖于纸质,一方面不便捷,另一方面在智能设备如此发达的时代已无法适应各种需求。因此我以课程表作为开发项目,力求能在现实中为广大用户提供便利。我的课程表系统实现了基本的课程录入显示功能,并且界面整洁方便操作,且能够计算当前日期的学期周数。
二、系统设计:
Main是系统的主框架,调用系统的全部功能。课程表星期的切换、显示和设置的调用。
ScheduleInsert是对课程表的遍历、修改和保存。
TodayDateSetting是设置系统的实现。
GetSchedule是从数据库读取数据遍历课程表的实现类。
ToDoDB是SQLiteOpenHelper的子类,是保存课程表的数据结构。
三、核心功能设计:
public class Main extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_tab_layout1);
//init(savedInstanceState);
InitImageView();
InitTextView();
InitViewPager();
inti();
}
/**
* 初始化头标
*/
public void onStart(){...}
private void InitTextView() {... }
/**
* 初始化ViewPager
*/
private void InitViewPager() {... }
private void InitImageView() {...}
/**
* ViewPager适配器
*/
public class MyPagerAdapter extends PagerAdapter {...}
private void inti() {...}
/**
* 头标点击监听
*/
public class MyOnClickListener implements View.OnClickListener {...}
/**
* 页卡切换监听
*/
public class MyOnPageChangeListener implements OnPageChangeListener {...}
//设置选项
public boolean onPrepareOptionsMenu(Menu menu) {...}
@Override
public boolean onOptionsItemSelected(MenuItem item) {...}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {...}
}
public class ScheduleInsert extends Activity implements android.view.View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
//遍历游标 11.
while (!mCursor.isAfterLast()) {
//获得ID
course[i]=mCursor.getString(3);
add[i]=mCursor.getString(4);
i++;
mCursor.moveToNext();
}
}
//给edittext赋初值
for (int i = 0; i < 6; i++) {
et_2EditTexts.get(i).setHint("课程名称") ;
et_3EditTexts.get(i).setHint("上课地点") ;
et_2EditTexts.get(i).setText(course[i]);
et_3EditTexts.get(i).setText(add[i]);
}
}
private void InitTextView() {... }
public class MyOnClickListener implements View.OnClickListener {...}
@Override
public void onClick(View v) {...}
private void editTodo()
{
mCursor.moveToFirst();
_id=mCursor.getInt(0);
/* 修改数据 */
for (int i=0; i < 6; i++) {
toDoDB.updateCourse(_id,getEditText_2(i));
toDoDB.updateAdd(_id, getEditText_3(i));
_id++;
}
_id = 0;
}
private String getEditText_2(int index)
{...}
private String getEditText_3(int index)
{...}
@Override
protected void onDestroy() {... }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {...}
public class GetSchedule{
public View getScheduleView(int week) {
View myView = mInflater.inflate(R.layout.app_schedule_show_page, null);
SQLiteDatabase db;
toDoDB=new ToDoDB(context);
db=toDoDB.getReadableDatabase();
String sql="select * from todo_schedule where todo_week="+week;//1为星期一
mCursor =db.rawQuery(sql, null);
Log.i("", sql);
//判断游标是否为空
if(mCursor !=null ){
int i=0,n=mCursor .getCount();
mCursor .moveToFirst();
Log.i("", "mCursor !=null");
Log.i("n=?", n+"");
//遍历游标 11.
}
tv1_2.setText(course[0]);
...
tv6_3.setText(add[5]);
Log.i("tv", "已设置tv");
mCursor .close();
toDoDB.close();
return myView;
}
}
public class ToDoDB extends SQLiteOpenHelper
{
private final static String DATABASE_NAME = "todo_db";
private final static int DATABASE_VERSION = 3;
private final String REMIND_TABLE = "todo_table";
private final String SCHEDULE_TABLE = "todo_schedule";
public final String FIELD_id = "_id";
public final String REMIND_TV = "todo_remind";
public final String REMIND_TIME = "todo_remind_time";
public final String REMIND_TIME_ID = "todo_remind_timeId";
public final String SCHEDULE_WEEK = "todo_week";
public final String SCHEDULE_TV1 = "todo_section";
public final String SCHEDULE_TV2 = "todo_course";
public final String SCHEDULE_TV3 = "todo_add";
// public SQLiteDatabase db;
public ToDoDB(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// // TODO Auto-generated method stub
/* 建立table */
String sql = "CREATE TABLE "
+ REMIND_TABLE
+ " ("
+ FIELD_id +" INTEGER primary key autoincrement, "
+ REMIND_TV + " text, "
+ REMIND_TIME + " text, "
+ REMIND_TIME_ID + " text "
+" )";
Log.i("ToDoDB", "sql1代码如下:"+sql);
db.execSQL(sql);
sql = "CREATE TABLE "
+ SCHEDULE_TABLE
+ " ("
+ FIELD_id +" INTEGER primary key autoincrement, "+ " "
+ SCHEDULE_WEEK + " text, "
+ SCHEDULE_TV1 + " text, "
+ SCHEDULE_TV2 + " text, "
+ SCHEDULE_TV3 + " text )";
Log.i("ToDoDB", "sql2代码如下:"+sql);
db.execSQL(sql);
try{
db.execSQL("drop table todo_schedule");
db.execSQL("create table if not exists todo_schedule(_id int primary key,todo_week int,todo_section int,todo_course varchar,todo_add varchar)");
db.execSQL("insert into todo_schedule(_id,todo_week,todo_section,todo_course,todo_add) values(1,1,1,'','')");
...
todo_schedule(_id,todo_week,todo_section,todo_course,todo_add) values(30,5,6,'','')");
Log.i("", "已初始化数据库");
}catch (Exception e) {
// TODO: handle exception
}
}
public void delete(int id,String table)
{ ...}
public void updateCourse(int id, String text)
{ ...}
public void updateAdd(int id, String text)
{ ...}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {...}
}
四、实验与验证:
在不断地调试后,最终实现了预计的功能。并能在Android终端中运行。如下图:
五、系统存在问题与改进:
系统在进入设置界面回到主界面启动Main调用onStart()时,会闪退,经分析是在onStart()中不能调用InitTextView()方法进行初始化。后直接调用Button的方法实现了预计功能。 下载本文