文档章节

实时显示指定教学区的课表信息(Java+Oracle)

车开源
 车开源
发布于 2013/04/25 08:29
字数 1638
阅读 165
收藏 10
点赞 1
评论 0

首先声明:为什么搞这样一个小玩意都用Java和Oracle,原因只有一个:这些环境都是现成的,仅此而矣。

前天接到新任务:由 于在计算机楼楼下放置了一台大屏,要做个简单的网页用来显示当前时间指定教学区的课表信息,就一个页面可以了,原来通过浏览器打开这个页以表格形式显示当 前时间对应的课表信息,过了这个时间段就自动刷新,读取新的课表。方便师生了解具体上课信息,因为有好多老师学生老找不着上课地点,或者搞错上课时间。

转 到技术方面大概讲讲:课表数据由正方教务管理系统提供(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)

页面展示格式要求(以计算机楼这个教学区为例:楼层号+顺序号=课室编号,如:301表示三楼01号课室。注:没有一楼,每层04,08室不做课室,所以排除)

 

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

© 著作权归作者所有

共有 人打赏支持
车开源
粉丝 12
博文 33
码字总数 8419
作品 0
佛山
后端工程师
买不起800万学区房,也别辞职带孩子去旅行

最近一篇《对不起,爸爸妈妈给不了你800万的学区房》火了。 文里一对年轻小夫妻没有让孩子上3万块的早教班,也没让自己的孩子上八万块的双语幼儿园,说上小学了也买不起800W的学区房...然后他...

八条鱼理财 ⋅ 2017/11/01 ⋅ 0

Chrome 扩展--swuwifi

swuwifi 是一个用于登录西南大学校园网的 chrome 扩展,目前为1.4版本,支持教学区swu-wifi的登入和登出,寝室wifi-dorm的登入登出,以及强制退出校园网账号。 安装(Install) 安装chrome扩展...

西南茂 ⋅ 2015/11/17 ⋅ 0

2011.05.29_“课表通v1.2.1”正式发布,敬请关注(附安装程序以及学院课表下载地址)

这是本人课余时间用C#写的一个简单的课表查询应用程序,虽然简单的不得了,但是多少有点实用性。拿出来晒一下,欢迎编程爱好者来探讨交流。功能正在不断完善,期待发布功能更多、更具有实用性...

matengfei ⋅ 2011/05/29 ⋅ 0

移动pc多平台运营级家校互动平台系统源码转让

移动pc多平台运营级家校互动平台系统源码转让 产品包含WEB端/android/IOS端 功能完善, 具体请联系团队 QQ 2768232187 “学校信息”是一个为学校、校长、老师、家长解决信息获取、风险防控、...

xiaoyu0521 ⋅ 2014/05/05 ⋅ 0

数据库设计三范式理解

数据库设计的第三范式 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率...

蓝狐乐队 ⋅ 2014/09/24 ⋅ 0

求助javaweb的前辈们,想向你们请教一个比较典型的问题~

最近在做一个学校的实验系统,我们都知道老师根据不同的学期会教不同的班级,老师又会教不同班级的不同课程,就是这样一层关系,学生做实验,提交实验答案,管理员发布每科的实验,对应科目的...

上帝爱众生 ⋅ 2015/03/18 ⋅ 1

数据库入门级指令操作

数据库操作 创建数据库 create database 数据库名; 查看数据库 show databases; 选择指定数据库 use 数据库名; 删除数据库 drop database 数据库名; 数据表操作 创建基本表 createtable ...

songkai320 ⋅ 2017/10/03 ⋅ 0

UserLock如何保证高校内部信息安全

俄克拉荷马城市公立学校的IT团队负责该片区接近43000个学生的网络管理工作。长期以来,学生和教师员工共享Windows网络登录为他们带来了很多难题。 由于没有并发登录的限制,也不能对网络使用...

缘分已尽奈何缘浅 ⋅ 2013/10/23 ⋅ 0

wanazi/CourseAssistant

CourseAssistant This project why reduce ? It's one year ago(2013/10/01), I wan't a Convenient tool can get my borrow book record at any time. And now,I exactly learned some know......

wanazi ⋅ 2015/01/17 ⋅ 0

求一个替换关键字的正则表达式

学区房作为房地产市场的衍生品,同样也是现行教育体制下的一个独特的现象。越来越多的购房者在买房时,不仅看重房屋的地段,更多的则把注意力投向房子的学区问题。买房子看学区,学区房已经成...

渔夫人 ⋅ 2013/08/08 ⋅ 8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 这么好的姑娘都不要了啊

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @TigaPile :分享曾惜的单曲《讲真的》 《讲真的》- 曾惜 手机党少年们想听歌,请使劲儿戳(这里) @首席搬砖工程师 :怎样约女孩子出来吃饭,...

小小编辑 ⋅ 12分钟前 ⋅ 1

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部