国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Sinatra的選課系統(tǒng)設(shè)計與實現(xiàn)

2016-05-19 14:09:38劉振源韓笑章偉
電腦知識與技術(shù) 2016年8期

劉振源+韓笑+章偉

摘要:為了使學(xué)生能夠通過在線的方式選擇學(xué)校開設(shè)的興趣課程,該文設(shè)計并實現(xiàn)了基于Sinatra的選課系統(tǒng)。該文詳細論述了選課系統(tǒng)設(shè)計與實現(xiàn)的相關(guān)技術(shù),對關(guān)鍵技術(shù)進行剖析,對重要的業(yè)務(wù)邏輯進行分析,并在最后對該系統(tǒng)提出改進意見。

關(guān)鍵詞:選課系統(tǒng);Sinatra框架;Web開發(fā)

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)08-0076-03

1 概述

隨著“小學(xué)生減負”教育政策的推廣和實施,越來越多的小學(xué)針對學(xué)生的愛好開設(shè)興趣課程。由于課程資源的有限性,學(xué)校不能保證每個學(xué)生都能選上自己最想上的課,但學(xué)校必須保證選課的公平性。教育信息化的普及使得越來越多的學(xué)校領(lǐng)導(dǎo)選擇通過在線選課的方式解決學(xué)生選課問題,不僅保證了學(xué)生選課的公平性,還減輕了相關(guān)負責人的工作量。

學(xué)校針對小學(xué)一、二年級的學(xué)生,開設(shè)了科技小制作、英語配音等十幾門興趣課程,想讓學(xué)生和家長通過在線的方式進行選課。學(xué)校現(xiàn)有的課程系統(tǒng)還并不支持學(xué)生選課,因此,基于Sinatra設(shè)計和開發(fā)了一個選課系統(tǒng),幫助學(xué)校解決在線選課問題。

2 系統(tǒng)需求分析及系統(tǒng)技術(shù)選型

2.1 系統(tǒng)需求分析

我校針對一二年級學(xué)生總共開設(shè)了13門興趣課程,每門課程限制20人報名參與;參與選課的學(xué)生共有158人,每人選課數(shù)量沒有限制,每人只有一次選課機會。系統(tǒng)要支持多種終端設(shè)備訪問,最終生成一份記錄學(xué)生選課結(jié)果信息的Excel文件。

2.2 系統(tǒng)技術(shù)選型

由于服務(wù)器限制,系統(tǒng)選擇使用文本來存儲所有應(yīng)用數(shù)據(jù),使用XML文件存儲課程信息,使用CSV文件存儲參與選課的學(xué)生信息和學(xué)生選課結(jié)果信息;為了支持多種終端設(shè)備訪問,系統(tǒng)選擇采用移動優(yōu)先設(shè)計思想的Bootstrap前端框架實現(xiàn)用戶界面;系統(tǒng)后臺使用基于Ruby的Sinatra框架實現(xiàn)。

XML即可擴展標記語言(Extensible Markup Language),是一種基于純文本的數(shù)據(jù)交換格式,適用于表現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù),其解析工具不依賴于特定的語言[1];CSV即逗號分割值文件(Comma Separated value),是一種用來存儲數(shù)據(jù)的純文本文件格式,可以和Excel文件相互轉(zhuǎn)換[2];Bootstrap 是最受歡迎的 HTML、CSS 和 JS 框架,用于開發(fā)響應(yīng)式布局、移動設(shè)備優(yōu)先的WEB項目[3];Sinatra是一個基于Ruby語言的DSL(領(lǐng)域?qū)僬Z言),可以輕松、快速地創(chuàng)建web應(yīng)用[4];Ruby是一種令人快樂的編程語言。

3 系統(tǒng)頁面流程設(shè)計

3.1 系統(tǒng)頁面

系統(tǒng)選課須知頁面,顯示選課注意事項,是系統(tǒng)的入口;系統(tǒng)登錄頁面,讓合法的用戶登錄到選課頁面;系統(tǒng)選課頁面,顯示可以供學(xué)生選擇的課程;系統(tǒng)選課結(jié)果頁面,顯示學(xué)生選擇的課程;其他頁面,包括告知學(xué)生登錄信息不合法、告知學(xué)生已經(jīng)選課、告知學(xué)生系統(tǒng)出錯等頁面。

3.2 系統(tǒng)頁面流程

用戶訪問網(wǎng)址,進入選課須知頁面,仔細閱讀選課注意事項;單擊“我已知曉須知”按鈕,進入登錄頁面,如圖1所示。

選擇所在班級,并輸入姓名;單擊“登錄”按鈕,進入選課頁面,如圖2所示,選擇合適自己的課程;單擊“確認提交”按鈕,進入選課結(jié)果頁面,保存選課截圖,直接退出瀏覽器即可。

4系統(tǒng)實現(xiàn)

4.1 系統(tǒng)文件結(jié)構(gòu)

項目目錄下共有15個文件。config.ru是rack 服務(wù)器配置文件;course.xml 存儲了課程信息;Gemfile是Ruby包依賴配置文件;index.rb是項目文件,包含了所有接口的處理方法;result.csv中存儲了選課結(jié)果信息;student.csv中存儲了學(xué)生信息,views目錄下都是視圖文件。

4.2 關(guān)鍵技術(shù)

4.2.1 XML文檔的處理

使用XML文件存儲課程信息,course.xml 文件:course表示課程,name表示課程名稱,limit表示課程限制人數(shù),初始值為20,count表示選擇該課程的人數(shù),初始值為0。

使用Ruby的REXML模塊來處理XML文件:使用REXML::Document類的new方法來加載XML文檔;使用REXML::Element類的each方法并結(jié)合XPath來遍歷符合條件的XML元素;使用REXML::Document類的write方法更新XML文檔[5]。

4.2.2 CSV文檔的處理

使用CSV文件存儲學(xué)生信息和學(xué)生選課結(jié)果信息,使用Excel軟件將包含學(xué)生信息的excel文件打開,選擇導(dǎo)出格式為CSV,導(dǎo)出student.csv 文件;在項目目錄下,創(chuàng)建result.csv文件,錄入一下文字并保存,用以存儲選課結(jié)果信息:

班級,姓名,周二所報課程,周三所報課程,周四所報課程

使用Ruby內(nèi)置的CSV模塊來處理CSV文件:使用CSV模塊的foreach方法讀取csv文件的每一行數(shù)據(jù);使用CSV的<<方法向csv文件末尾追加一行數(shù)據(jù)。

4.2.3 Sinatra框架的使用

路由和視圖是Sinatra框架的兩個核心構(gòu)件。路由的作用是一個HTTP請求指定給特定的代碼塊來處理,視圖的作用是向用戶呈現(xiàn)界面。

在Sinatra中,一個路由分為兩部分:HTTP方法(GET, POST等)和URL匹配范式。 每個路由都有一個要執(zhí)行的代碼塊,路由按照它們被定義的順序進行匹配。 第一個與請求匹配的路由會被調(diào)用。路由范式可以包括具名參數(shù),可通過params哈希表獲得。

在Sinatra中使用erb方法在應(yīng)用中引入erb模板。

4.3 主要應(yīng)用邏輯實現(xiàn)

4.3.1 用戶登錄驗證

從Sinatra的params中獲取用戶輸入的班級和姓名,使用Ruby的CSV模塊提供的foreach方法在student.csv中逐行查找,匹配相應(yīng)的學(xué)生信息,如果存在就可以跳轉(zhuǎn)到選課頁面。

4.3.2 課程信息顯示

5 總結(jié)

基于Sinatra的選課系統(tǒng)上線5分鐘左右的時間,課程被全部選完。筆者查看生成的CSV文件,發(fā)現(xiàn)有兩條數(shù)據(jù)寫錯,有兩門課程超出選課人數(shù)限制,總體上解決實際需求。

經(jīng)筆者分析,問題是由并發(fā)訪問造成的,這是系統(tǒng)有待完善的地方,文件應(yīng)該采用異步操作,并要在寫入數(shù)據(jù)時加鎖。如果條件允許,系統(tǒng)應(yīng)該使用數(shù)據(jù)庫,來提高并發(fā)訪問量。

本文對于數(shù)據(jù)驅(qū)動的小型網(wǎng)站具有一定的參考價值,同時,也為使用Sinatra建站的Ruby初級開發(fā)者提供借鑒。

參考文獻:

[1] 松本行弘,松本行弘的程序世界[M].柳德燕,譯. 北京:人民郵電出版社,2011:328-333 .

[2] 維基百科.逗號分隔值[EB/OL]. https://zh.wikipedia.org/wiki/%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E5%80%BC.

[3] Bootstrap. Bootstrap編碼規(guī)范 [EB/OL]. http://www.bootcss.com/.

[4] Sinatra. Sinatra README[EB/OL]. http://www.sinatrarb.com/intro-zh.html.

[5] Rexml.Rexml Home[EB/OL]. http://www.germane-software.com/software/rexml/.

乐山市| 大英县| 丹棱县| 石渠县| 昌宁县| 黄平县| 郴州市| 漳平市| 宁夏| 永济市| 甘谷县| 上思县| 康平县| 阳春市| 天峻县| 乌兰察布市| 和硕县| 正定县| 邹城市| 纳雍县| 昔阳县| 台中市| 忻州市| 察哈| 临高县| 永城市| 长乐市| 化隆| 青川县| 庄河市| 东平县| 凤山市| 鹤壁市| 昭苏县| 永丰县| 页游| 蓝山县| 宁城县| 嘉义市| 拉萨市| 斗六市|