實時顯示指定教學區的課表信息(Java+Oracle)

首先聲明:爲何搞這樣一個小玩意都用Java和Oracle,緣由只有一個:這些環境都是現成的,僅此而矣。html

前天接到新任務:由 於在計算機樓樓下放置了一臺大屏,要作個簡單的網頁用來顯示當前時間指定教學區的課表信息,就一個頁面能夠了,原來經過瀏覽器打開這個頁以表格形式顯示當 前時間對應的課表信息,過了這個時間段就自動刷新,讀取新的課表。方便師生了解具體上課信息,由於有好多老師學生老找不着上課地點,或者搞錯上課時間。sql

轉 到技術方面大概講講:課表數據由正方教務管理系統提供(oracle),經過視圖把所須要的數據抽取出來導到另一個單獨的表裏,主要字段包括:由多組信 息組合成的學期編號、教學區編號、星期幾、學期的周次,課室編號、課程名稱、任課老師名稱、上課時間(沒有具體時間,以節數表示,上午1-4節課,下午 5-8節),班級名稱。瀏覽器

具體數據格式:oracle

字段名稱函數

數據樣本學習

數據類型編碼

學期編號spa

(2012-2013-2)-1295076-12059-2htm

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樓

 

 

 

 

 

 

 

根據頁面要求、數據、格式來分析,用什麼方式把要的數據取出來,又方便調用成爲首要解決的問題。由結果倒退選擇實現方式,第一感受就想到了以表格的數據行及單元格爲突破口,這樣有個好處:方便使用循環~~由於這些數據循環是少不了的。

一開始有幾個棘手的問題要解決:

一、 數據篩選:分析實際數據發現幾個有規律的地方,學期字段同一學期的數據均以(2012-2013-1)這樣開頭,兩部分數字爲學年,第三部分是學期,所以 能夠用like ‘(2012-2013-1%’來篩選學年數據。課室編號也有個特色,以計算機數爲例,就以「信息」開頭加樓層編號和課室序號,所以能夠用like ‘信息%’對教學區篩選。學期周次、星期幾、當前時間對應的課表,這個還須要進一步處理,如何經過程序根據當前時間計算出當前周次和星期幾和對應課時呢? 下文會詳細說明。

二、數據排序:通過分析發現,先對課室編號字段排序,再對上課時間字段排序。這樣就得出一個有序數據集,方便輸出頁面時處理。

三、數據輸出:這裏處理輸出數據時就要巧妙處理,經過篩選結果錄集的循環再內嵌6個判斷,這6個判斷分別對應當前樓層的的6個課室,知足條件就輸出對應課室的課表信息。當整個結果集循環完畢就得出一份當前時間段對應的課表信息了。

實現難點、要點:

一、根據當前日期計算與本學期對應的周次。首先要定義一個常量指明本學期哪天開學,以此日期爲參照,經過自定義函數計算出當前是第幾周(由於學校的周次跟天然周是不同的)。附函數:

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纔是當前實際週數。

    }

二、根據實際上課時間和當前時間,換算對應是第幾節課。我採用了笨辦法,若是有其餘朋友還有好辦法留言交流學習呢。

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對數據進行過慮,只取對應的課表。

三、根據當前時間,計算並組合對應的學期編碼前綴。返回結果: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

相關文章
相關標籤/搜索