今日主要完成了第一次个人作业中对于体温上报界面的修改和统计今天正常上报,未上报,异常的功能。
体温上报中与假期的体温上报多了几个要求:姓名自动获取,体温默认值36.2,增加了特殊情况多选框。
后两个功能实现较为简单,默认值直接用TextView的text属性赋值即可,多选框CheckBox实现也较为简单。
姓名获取则是获取从登录界面传来的值利用Intent实现。
较为难实现的是统计功能:
1.班级不同,每个班之间的数据要分清楚,可以在数据库中加一列class来区分。
2.一个人一天之中可能上报和多次,这样有可能造成一个人重复计数,根据实际情况这里每天只会记录每个人最新的体温。
3.由于要计算一天范围内的数据以及一个人一天内的体温更新,所以数据库要在增加一个msec记录毫秒值
更改后的数据库:
String sql="create table wendudate(" + "id integer primary key autoincrement, " + "address varchar, " + "name varchar, " + "wendu float, " + "dateandtime varchar," + "special varchar," + "stuid varchar," + "msec long," + "stuclass varchar)";
首先实现同一天中每人只有一个体温:查找同一天内是否由stuid,由则update,无则insert
查找:主要问题是毫秒值范围的确定,以及sql语句的规范,多个条件查询的书写格式规范。
public int queryForCame(String stuid,long msec){ CDateTime dt=new CDateTime(msec); Long startTime=dt.startOfDay(msec); Long endTime=dt.endOfDay(msec); String [] strs={startTime.toString(),endTime.toString(),stuid}; Cursor cursor=sqldb.rawQuery("select * from wendudate where ( msec between ? and ? ) and stuid=?",strs); if(cursor.getCount()>0){ return 1; }else { return 0; } }
update与inset函数较为简单:
public int updateData(WenDate wendate,long msec) { CDateTime dt=new CDateTime(msec); Long startTime=dt.startOfDay(msec); Long endTime=dt.endOfDay(msec); String [] strs={startTime.toString(),endTime.toString(),wendate.getStuid()}; ContentValues contentvalues=new ContentValues(); contentvalues.put("stuid",wenDate.getStuid()); contentvalues.put("address",wenDate.getAddress()); contentvalues.put("wendu", wenDate.getWendu()); contentvalues.put("dateandtime",wenDate.getDateandtime()); contentvalues.put("special",wenDate.getSpecial()); contentvalues.put("name",wenDate.getName()); contentvalues.put("stuclass",wenDate.getStuclass()); contentvalues.put("msec",wenDate.getMsec()); int flag=sqldb.update("wendudate",contentvalues,"( msec between ? and ? ) and ( stuid=? )",strs); return flag; } public long insertDB() { ContentValues contentvalues=new ContentValues(); contentvalues.put("stuid",wenDate.getStuid()); contentvalues.put("address",wenDate.getAddress()); contentvalues.put("wendu", wenDate.getWendu()); contentvalues.put("dateandtime",wenDate.getDateandtime()); contentvalues.put("special",wenDate.getSpecial()); contentvalues.put("name",wenDate.getName()); contentvalues.put("stuclass",wenDate.getStuclass()); contentvalues.put("msec",wenDate.getMsec()); long flag=sqldb.insert("wendudate",null,contentvalues); return flag; }
异常人数:同一天中,同一班中,体温大于37的同学人数,只要知道sql语句实现就较为简单了:
public int getUnWen(String stuclass){
CDateTime dt=new CDateTime();
Long starttime=dt.startOfDay();
Long endtime=dt.endOfDay();
String[] strs={starttime.toString(),endtime.toString()};
Cursor cursor=sqldb.rawQuery("select count(*) from wendudate where ( msec between ? and ? ) and wendu>=37 ",strs);
cursor.moveToFirst();
int count=cursor.getInt(0);
cursor.close();
return count;
}
同一天中,同一班级中的上报人数与异常人数的获取相似
public int getDifCount(String stuclass){ CDateTime dt=new CDateTime(); Long starttime=dt.startOfDay(); Long endtime=dt.endOfDay(); String[] strs={starttime.toString(),endtime.toString(),stuclass}; Cursor cursor=sqldb.rawQuery("select count(*) from wendudate where ( msec between ? and ? ) and stuclass=? ",strs); cursor.moveToFirst(); int count=cursor.getInt(0); cursor.close(); return count; }
这样只差未上报的人数,只要知道学生总人数再减去上报人数即可:
学生总人数查询:
public int getDifCount(String stuclass){ String []strs={stuclass}; Cursor cursor=sqldb.rawQuery("select count(*) from studate where stuclass=? ",strs); cursor.moveToFirst(); int count=cursor.getInt(0); cursor.close(); return count; }
这样统计功能也实现了