实时显示指定教学区的课表信息(Java+Oracle)
2013-04-25 08:26
190 查看
首先声明:为什么搞这样一个小玩意都用Java和Oracle,原因只有一个:这些环境都是现成的,仅此而矣。
前天接到新任务:由 于在计算机楼楼下放置了一台大屏,要做个简单的网页用来显示当前时间指定教学区的课表信息,就一个页面可以了,原来通过浏览器打开这个页以表格形式显示当 前时间对应的课表信息,过了这个时间段就自动刷新,读取新的课表。方便师生了解具体上课信息,因为有好多老师学生老找不着上课地点,或者搞错上课时间。
转 到技术方面大概讲讲:课表数据由正方教务管理系统提供(oracle),通过视图把所需要的数据抽取出来导到另外一个单独的表里,主要字段包括:由多组信 息组合成的学期编号、教学区编号、星期几、学期的周次,课室编号、课程名称、任课老师名称、上课时间(没有具体时间,以节数表示,上午1-4节课,下午 5-8节),班级名称。
具体数据格式:
页面展示格式要求(以计算机楼这个教学区为例:楼层号+顺序号=课室编号,如:301表示三楼01号课室。注:没有一楼,每层04,08室不做课室,所以排除)
根据页面要求、数据、格式来分析,用什么方式把要的数据取出来,又方便调用成为首要解决的问题。由结果倒退选择实现方式,第一感觉就想到了以表格的数据行及单元格为突破口,这样有个好处:方便使用循环~~因为这些数据循环是少不了的。
一开始有几个棘手的问题要解决:
1、 数据筛选:分析实际数据发现几个有规律的地方,学期字段同一学期的数据均以(2012-2013-1)这样开头,两部分数字为学年,第三部分是学期,因此 可以用like ‘(2012-2013-1%’来筛选学年数据。课室编号也有个特点,以计算机数为例,就以“信息”开头加楼层编号和课室序号,因此可以用like ‘信息%’对教学区筛选。学期周次、星期几、当前时间对应的课表,这个还需要进一步处理,如何通过程序根据当前时间计算出当前周次和星期几和对应课时呢? 下文会详细说明。
2、数据排序:经过分析发现,先对课室编号字段排序,再对上课时间字段排序。这样就得出一个有序数据集,方便输出页面时处理。
3、数据输出:这里处理输出数据时就要巧妙处理,通过筛选结果录集的循环再内嵌6个判断,这6个判断分别对应当前楼层的的6个课室,满足条件就输出对应课室的课表信息。当整个结果集循环完毕就得出一份当前时间段对应的课表信息了。
实现难点、要点:
1、根据当前日期计算与本学期对应的周次。首先要定义一个常量指明本学期哪天开学,以此日期为参照,通过自定义函数计算出当前是第几周(因为学校的周次跟自然周是不一样的)。附函数:
public int computeWeek(Date sdate, Date edate) {
int wks = 0;
Calendar sCalendar = Calendar.getInstance();
sCalendar.setTime(sdate);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setTime(edate);
while (sCalendar.before(eCalendar)) {
if (sCalendar.get(Calendar.YEAR) == eCalendar .get(Calendar.YEAR) && sCalendar.get(Calendar.MONTH) == eCalendar.get(Calendar.MONTH) && sCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH) == eCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)) {
break;
} else {
sCalendar.add(Calendar.DAY_OF_YEAR, 7);
wks += 1;
}
}
return wks+1; //此函数其实是计算两个日期之间间隔多少周,因此计算出来的周数还要加1才是当前实际周数。
}
2、根据实际上课时间和当前时间,换算对应是第几节课。我采用了笨办法,如果有其他朋友还有好办法留言交流学习呢。
public String currentJC(Calendar cal){//此函数的参数是当前时间的Calendar实例
Calendar cal2=(Calendar)cal.clone();
int hour=cal.get(Calendar.HOUR_OF_DAY);
if(hour<=8 && checkCurrTime(8,45,cal,cal2)){//解释下其中一个,其它意思相同。当前的钟点数是否在8点或者8点以前,而且这个时间还 要小于8:45分,因为超过这个够数就算是下一节课了。所以还用到checkCurrTime这个自定义函数。
return "1";
}else if(hour<=9 && checkCurrTime(9,40,cal,cal2)){
return "2";
}else if(hour<=10 && checkCurrTime(10,45,cal,cal2)){
return "3";
}else if(hour<=11 && checkCurrTime(11,40,cal,cal2)){
return "4";
}else if(hour<=14 && checkCurrTime(14,45,cal,cal2)){
return "5";
}else if(hour<=15 && checkCurrTime(15,40,cal,cal2)){
return "6";
}else if(hour<=16 && checkCurrTime(16,45,cal,cal2)){
return "7";
}else if(hour<=17 && checkCurrTime(17,40,cal,cal2)){
return "8";
}else
return "------";
}
public boolean checkCurrTime(int hour,int min,Calendar cal,Calendar cal2){
cal2.set(Calendar.HOUR_OF_DAY,hour);
cal2.set(Calendar.MINUTE,min);
return cal.getTime().before(cal2.getTime());
}
以上两个函数结合,就可以计算并返回当前时间点对应的是第几节,就可以把这个参数填入SQL对数据进行过虑,只取对应的课表。
3、根据当前时间,计算并组合对应的学期编码前缀。返回结果:2012-2013-2,意思是2012至2013学年第2学期。
public String getXQ(Calendar cal){
int month=cal.get(Calendar.MONTH)+1;
if(month>=2 && month<8) return (cal.get(Calendar.YEAR)-1)+"-"+cal.get(Calendar.YEAR)+"-2";
else return cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.YEAR)+1)+"-1";
}
以上函数其实不算太严谨,只是计算一个大概,因为这样已经可以满足我的要求了。
整体效果如图:
第一个图是当前时间没有课的情况(图1)
第二个图是有课的情况(图2)
困了,洗洗睡吧。如果正好有你也在做这样的事,欢迎留言交流呢。(上图只是为了显示一个整体效果,所以没有过虑非当前时间点的课表信息)
本文地址:http://www.5ishare.com/tech/program/368850.shtml
本文出自 “IT技术宅” 博客,请务必保留此出处http://5ishare.blog.51cto.com/959858/1186142
前天接到新任务:由 于在计算机楼楼下放置了一台大屏,要做个简单的网页用来显示当前时间指定教学区的课表信息,就一个页面可以了,原来通过浏览器打开这个页以表格形式显示当 前时间对应的课表信息,过了这个时间段就自动刷新,读取新的课表。方便师生了解具体上课信息,因为有好多老师学生老找不着上课地点,或者搞错上课时间。
转 到技术方面大概讲讲:课表数据由正方教务管理系统提供(oracle),通过视图把所需要的数据抽取出来导到另外一个单独的表里,主要字段包括:由多组信 息组合成的学期编号、教学区编号、星期几、学期的周次,课室编号、课程名称、任课老师名称、上课时间(没有具体时间,以节数表示,上午1-4节课,下午 5-8节),班级名称。
具体数据格式:
字段名称 | 数据样本 | 数据类型 |
学期编号 | (2012-2013-2)-1295076-12059-2 | Varchar(30) |
教学区编号 | 纯数字 | Varchar(10) |
星期几 | 纯数字 | Varchar(10) |
学期的周次 | 纯数字 | Varchar(10) |
课室编号 | 5-1-300 信息-301 艺术楼102 | Varchar(20) |
课程名称 | 信息与档案管理 | Varchar(200) |
任课老师名称 | 钟XX | Varchar(30) |
上课时间 | 1,2 3,4 1,2,3,4 5,6 | Varchar(30) |
班级名称 | 11酒店管理4 | Varchar(30) |
01 | 02 | 03 | 05 | 06 | 07 | |
2楼 | 《Mysql和PHP开发》 11软件技术WEB开发 (3,4节)某老师 | …… | ||||
3楼 | ||||||
4楼 | …… | |||||
5楼 | ||||||
6楼 | …… | |||||
7楼 |
一开始有几个棘手的问题要解决:
1、 数据筛选:分析实际数据发现几个有规律的地方,学期字段同一学期的数据均以(2012-2013-1)这样开头,两部分数字为学年,第三部分是学期,因此 可以用like ‘(2012-2013-1%’来筛选学年数据。课室编号也有个特点,以计算机数为例,就以“信息”开头加楼层编号和课室序号,因此可以用like ‘信息%’对教学区筛选。学期周次、星期几、当前时间对应的课表,这个还需要进一步处理,如何通过程序根据当前时间计算出当前周次和星期几和对应课时呢? 下文会详细说明。
2、数据排序:经过分析发现,先对课室编号字段排序,再对上课时间字段排序。这样就得出一个有序数据集,方便输出页面时处理。
3、数据输出:这里处理输出数据时就要巧妙处理,通过筛选结果录集的循环再内嵌6个判断,这6个判断分别对应当前楼层的的6个课室,满足条件就输出对应课室的课表信息。当整个结果集循环完毕就得出一份当前时间段对应的课表信息了。
实现难点、要点:
1、根据当前日期计算与本学期对应的周次。首先要定义一个常量指明本学期哪天开学,以此日期为参照,通过自定义函数计算出当前是第几周(因为学校的周次跟自然周是不一样的)。附函数:
public int computeWeek(Date sdate, Date edate) {
int wks = 0;
Calendar sCalendar = Calendar.getInstance();
sCalendar.setTime(sdate);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setTime(edate);
while (sCalendar.before(eCalendar)) {
if (sCalendar.get(Calendar.YEAR) == eCalendar .get(Calendar.YEAR) && sCalendar.get(Calendar.MONTH) == eCalendar.get(Calendar.MONTH) && sCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH) == eCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)) {
break;
} else {
sCalendar.add(Calendar.DAY_OF_YEAR, 7);
wks += 1;
}
}
return wks+1; //此函数其实是计算两个日期之间间隔多少周,因此计算出来的周数还要加1才是当前实际周数。
}
2、根据实际上课时间和当前时间,换算对应是第几节课。我采用了笨办法,如果有其他朋友还有好办法留言交流学习呢。
public String currentJC(Calendar cal){//此函数的参数是当前时间的Calendar实例
Calendar cal2=(Calendar)cal.clone();
int hour=cal.get(Calendar.HOUR_OF_DAY);
if(hour<=8 && checkCurrTime(8,45,cal,cal2)){//解释下其中一个,其它意思相同。当前的钟点数是否在8点或者8点以前,而且这个时间还 要小于8:45分,因为超过这个够数就算是下一节课了。所以还用到checkCurrTime这个自定义函数。
return "1";
}else if(hour<=9 && checkCurrTime(9,40,cal,cal2)){
return "2";
}else if(hour<=10 && checkCurrTime(10,45,cal,cal2)){
return "3";
}else if(hour<=11 && checkCurrTime(11,40,cal,cal2)){
return "4";
}else if(hour<=14 && checkCurrTime(14,45,cal,cal2)){
return "5";
}else if(hour<=15 && checkCurrTime(15,40,cal,cal2)){
return "6";
}else if(hour<=16 && checkCurrTime(16,45,cal,cal2)){
return "7";
}else if(hour<=17 && checkCurrTime(17,40,cal,cal2)){
return "8";
}else
return "------";
}
public boolean checkCurrTime(int hour,int min,Calendar cal,Calendar cal2){
cal2.set(Calendar.HOUR_OF_DAY,hour);
cal2.set(Calendar.MINUTE,min);
return cal.getTime().before(cal2.getTime());
}
以上两个函数结合,就可以计算并返回当前时间点对应的是第几节,就可以把这个参数填入SQL对数据进行过虑,只取对应的课表。
3、根据当前时间,计算并组合对应的学期编码前缀。返回结果:2012-2013-2,意思是2012至2013学年第2学期。
public String getXQ(Calendar cal){
int month=cal.get(Calendar.MONTH)+1;
if(month>=2 && month<8) return (cal.get(Calendar.YEAR)-1)+"-"+cal.get(Calendar.YEAR)+"-2";
else return cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.YEAR)+1)+"-1";
}
以上函数其实不算太严谨,只是计算一个大概,因为这样已经可以满足我的要求了。
整体效果如图:
第一个图是当前时间没有课的情况(图1)
第二个图是有课的情况(图2)
困了,洗洗睡吧。如果正好有你也在做这样的事,欢迎留言交流呢。(上图只是为了显示一个整体效果,所以没有过虑非当前时间点的课表信息)
本文地址:http://www.5ishare.com/tech/program/368850.shtml
本文出自 “IT技术宅” 博客,请务必保留此出处http://5ishare.blog.51cto.com/959858/1186142
相关文章推荐
- 实时显示指定教学区的课表信息(Java+Oracle)
- Oracle java存储过程在sqlplus中的调试信息显示
- <s:fielderror>标签指定要显示字段的信息显示
- java读取oracle表字段信息存到列表(LIST)中
- Ajax实时显示股票信息实例中的问题
- 用java连接Oracle数据库并取出表中的信息显示出来
- java中的反射 2.2——类:检查一个类的声明信息@译自Oracle官方文档
- JAVA及ORACLE的日期显示格式(转载)
- Java 使用Spring WebSocket 实现linux tailf 实时日志显示
- JAVA读取Oracle中的blob图片字段并显示
- JAVA实现显示指定类型的文件的例子
- 安卓应用实时显示MJGP-streamer所抓取的摄像头信息
- 串口通讯实时采集并显示参数信息
- 从爬取湖北某高校hub教务系统课表浅谈Java信息抓取的实现 —— import java.*;
- java以及oracle中的日期格式显示
- java 删除oracle指定表的数据同时清除对应存储的数据
- java-toUpdate 或是 toAdd 到页面结合JS显示指定id的数据
- Java获取视频的相关信息,并获取指定时间的视频图片
- java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息
- JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。