99精品久久这里只有精品,三上悠亚免费一区二区在线,91精品福利一区二区,爱a久久片,无国产精品白浆免费视,中文字幕欧美一区,爽妇网国产精品,国产一级做a爱免费观看,午夜一级在线,国产精品偷伦视频免费手机播放

    <del id="eyo20"><dfn id="eyo20"></dfn></del>
  • <small id="eyo20"><abbr id="eyo20"></abbr></small>
      <strike id="eyo20"><samp id="eyo20"></samp></strike>
    • 小議實(shí)現(xiàn)網(wǎng)絡(luò)訂餐系統(tǒng)研究方案

      前言:本站為你精心整理了小議實(shí)現(xiàn)網(wǎng)絡(luò)訂餐系統(tǒng)研究方案范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。

      小議實(shí)現(xiàn)網(wǎng)絡(luò)訂餐系統(tǒng)研究方案

      摘要本文對(duì)最新Web應(yīng)用開(kāi)發(fā)框架RubyOnRails的工作原理做了簡(jiǎn)單介紹,討論了構(gòu)建一個(gè)基于ROR的Web應(yīng)用的實(shí)現(xiàn)方法和所用到的技術(shù),并基于ROR開(kāi)發(fā)了一個(gè)網(wǎng)絡(luò)訂餐系統(tǒng)。

      關(guān)鍵詞Rails;MVC;訂餐系統(tǒng);Web

      1引言

      ROR是RubyOnRails的英文簡(jiǎn)稱,ROR是指使用Ruby語(yǔ)言實(shí)現(xiàn)的RailsWeb開(kāi)發(fā)框架。

      Ruby是一種功能強(qiáng)大的面向?qū)ο蟮?、解釋型的腳本語(yǔ)言。Ruby語(yǔ)言具有下面幾個(gè)特點(diǎn):語(yǔ)法簡(jiǎn)單、純面向?qū)ο笳Z(yǔ)言、提供動(dòng)態(tài)對(duì)象能力、使用單繼承機(jī)制、操作符重載、迭代器和閉包、垃圾回收、錯(cuò)誤處理功能、擁有獨(dú)立于操作系統(tǒng)的線程機(jī)制、可移植性高。

      RubyonRails是一個(gè)使用純Ruby語(yǔ)言編寫(xiě)的、實(shí)現(xiàn)了MVC模型的、易于開(kāi)發(fā)、配置和管理的Web應(yīng)用程序的框架。Rails的設(shè)計(jì)思想由一組關(guān)鍵的概念來(lái)驅(qū)動(dòng):低重復(fù)(DRY)、約定優(yōu)于配置、快速Web開(kāi)發(fā)框架、對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的支持。

      將(模型-視圖-控制器)MVC模型用于軟件設(shè)計(jì)中可以使應(yīng)用程序的構(gòu)造更加清晰。Rails是一個(gè)MVC框架。使用Rails開(kāi)發(fā)應(yīng)用時(shí),每個(gè)代碼以及應(yīng)用程序的每個(gè)部分都遵循標(biāo)準(zhǔn)的方式。也就是說(shuō),是在一個(gè)被事先準(zhǔn)備好的框架內(nèi)開(kāi)始應(yīng)用程序設(shè)計(jì)的。Rails應(yīng)用程序是由模塊化的、面向?qū)ο蟮哪_本語(yǔ)言Ruby寫(xiě)成的,這些模塊之間的相互鏈接和關(guān)系驅(qū)動(dòng)著MVC模型的運(yùn)行。

      ROR這些特點(diǎn)也使它逐步從一個(gè)開(kāi)源和個(gè)人的Web開(kāi)發(fā)框架走向主流,在諸多Web開(kāi)發(fā)框架中以其鮮明的特色占據(jù)了一席之地。2007年12月6曰,ROR2.0,進(jìn)一步強(qiáng)化了對(duì)企業(yè)應(yīng)用的支持。

      2系統(tǒng)分析與設(shè)計(jì)2.1功能描述

      基于ROR在開(kāi)發(fā)應(yīng)用上的諸多優(yōu)勢(shì),本文使用ROR開(kāi)發(fā)了一個(gè)小型的網(wǎng)絡(luò)訂餐系統(tǒng),根據(jù)客戶要求,該系統(tǒng)應(yīng)具備下列主要功能:

      (1)向注冊(cè)的客戶提供可預(yù)訂商品的列表和詳細(xì)信息,供客戶選擇。這些信息的維護(hù)由系統(tǒng)管理員進(jìn)行。

      (2)向客戶提供一個(gè)訂單提交、瀏覽和處理界面,實(shí)現(xiàn)購(gòu)物車(chē)形式的訂餐功能。

      (3)提供用戶資料的管理功能,包括增加、刪除和信息修改。

      (4)提供用戶登錄和權(quán)限控制功能,將為普通用戶和系統(tǒng)管理員提供不同的界面。

      (5)提供商品和訂單信息的查詢功能、統(tǒng)計(jì)功能和打印功能。

      系統(tǒng)選用數(shù)據(jù)庫(kù)作為后臺(tái)數(shù)據(jù)庫(kù),運(yùn)行環(huán)境為:Windows2000Server、Ruby1.8.4、Rails1.0、MySQL5.0。

      2.2使用ROR實(shí)現(xiàn)訂餐系統(tǒng)的技術(shù)路線

      1)將需求模塊化

      設(shè)計(jì)中將以遞增式開(kāi)發(fā)這個(gè)應(yīng)用程序,首先使用Rails立即創(chuàng)建具有一些功能的簡(jiǎn)單應(yīng)用myMealOrder。

      系統(tǒng)中開(kāi)始只區(qū)分兩種不同的角色:買(mǎi)方和賣(mài)方。買(mǎi)方使用myMealOrder來(lái)瀏覽站點(diǎn)可以出售的商品,選擇商品并創(chuàng)建一個(gè)訂單。賣(mài)方使用myMealOrder來(lái)管理用于出售商品的列表,并等待處理訂單,然后將訂單發(fā)貨。

      考慮到用戶需要選擇多項(xiàng)商品,系統(tǒng)中需要有地方保存用戶添加的產(chǎn)品列表的,所以在設(shè)計(jì)中添加了一個(gè)購(gòu)物車(chē)。

      2)使用Rails的“支架”

      第一個(gè)任務(wù)是創(chuàng)建Web接口來(lái)管理系統(tǒng)中的商品信息---包括創(chuàng)建商品信息,編輯現(xiàn)有商品,查看已有的商品信息,刪除不需要的商品。為了實(shí)現(xiàn)以上功能,在數(shù)據(jù)庫(kù)中應(yīng)當(dāng)建立幾張表,使用Rails“支架”來(lái)自動(dòng)生成最初的代碼,這也是Rails具有敏捷性開(kāi)發(fā)效率的一個(gè)原因。

      Rails“支架”是為管理一個(gè)“模型”而自動(dòng)創(chuàng)建的一個(gè)框架。當(dāng)運(yùn)行“生成器”時(shí),告訴它需要“支架”來(lái)生成一個(gè)特殊的“模型”(由“支架”創(chuàng)建的),并且需要通過(guò)給定的“控制器”(也是由“支架”創(chuàng)建的)來(lái)訪問(wèn)它。在Rails中,“模型”被自動(dòng)地映射到使用“模型”的類的名字的復(fù)數(shù)形式的數(shù)據(jù)庫(kù)表。在應(yīng)用程序中,根據(jù)需要要求有一個(gè)名為good的“模型”,所以Rails將它與叫g(shù)oods的表關(guān)聯(lián)起來(lái)。

      Rails是如何找到這個(gè)表的呢?在config/database.yml中設(shè)置development條目時(shí),就已經(jīng)告訴Rails在哪兒找數(shù)據(jù)庫(kù)的表了。當(dāng)啟動(dòng)應(yīng)用程序時(shí),“模型”檢查數(shù)據(jù)庫(kù)內(nèi)的表,處理它要得到的列,然后創(chuàng)建數(shù)據(jù)庫(kù)表和Ruby對(duì)象之間的映射。通過(guò)“支架”表單“生成器”可以向“模型”要求有關(guān)表的字段信息,然后就使用它找到的字段來(lái)創(chuàng)建一個(gè)合適的html表單。

      3)使用Rails的“控制器”

      “控制器”處理來(lái)自瀏覽器的“請(qǐng)求”,一個(gè)應(yīng)用程序可以有多個(gè)“控制器”。對(duì)于本次設(shè)計(jì)的myMealOrder應(yīng)用程序來(lái)說(shuō),最終會(huì)有四個(gè)“控制器”,一個(gè)用于處理商品資料,一個(gè)用于處理定單信息,一個(gè)用于用戶資料,一個(gè)用于登錄管理。

      4)在生成的源碼基礎(chǔ)上根據(jù)需要修改代碼

      scaffold工具所生成的Rails“支架”使用Ruby代碼來(lái)組裝應(yīng)用程序目錄樹(shù)。這個(gè)目錄樹(shù)表達(dá)了一個(gè)完整的應(yīng)用程序構(gòu)架—它的內(nèi)部已經(jīng)放置了Ruby代碼;這些都是源代碼,而不是簡(jiǎn)單地對(duì)一些標(biāo)準(zhǔn)庫(kù)的調(diào)用。這意味著可以修改“支架”內(nèi)產(chǎn)生的代碼,“支架”是作為一個(gè)應(yīng)用程序的起點(diǎn),而不是應(yīng)用程序的終點(diǎn)。開(kāi)發(fā)者也可以對(duì)“支架”進(jìn)行修改,開(kāi)發(fā)者依賴于“支架”生成器來(lái)產(chǎn)生創(chuàng)建,更新,刪除的功能。然后在保留這個(gè)“動(dòng)作”時(shí)可以替換由生成器生成的行為。有時(shí)候當(dāng)需要一個(gè)快速接口時(shí),并且對(duì)界面要求不高,“支架”就足夠用了。

      5)使用Rails的模型繼承

      “模型”層是代碼與數(shù)據(jù)庫(kù)之間的守護(hù)者,應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí)沒(méi)做任何事,或者將數(shù)據(jù)存回到數(shù)據(jù)庫(kù)時(shí)也沒(méi)有通過(guò)“模型”。那么就把所有的確認(rèn)工作放在模型里;不管數(shù)據(jù)的流向如何都不會(huì)有問(wèn)題。如果在寫(xiě)到數(shù)據(jù)庫(kù)之前,“模型”檢查它,就可以阻止損壞的數(shù)據(jù)到數(shù)據(jù)庫(kù)中?!澳P汀鳖惖脑创a如下:(在app/models/good.rb內(nèi))

      classGood<ActiveRecord::Base

      End

      看起來(lái)這什么都沒(méi)做,而數(shù)據(jù)庫(kù)映射、創(chuàng)建、更新、搜索等行為都被父類(ActiveRecord::Base,Rails的一部分)完成了。由于繼承的關(guān)系,Good類自然地繼承了所有父類的功能。

      6)Rails的動(dòng)態(tài)載入

      在編輯完Good.rb文件后并沒(méi)有重啟應(yīng)用程序來(lái)測(cè)試所做的修改——在開(kāi)發(fā)模式中,Rails會(huì)注意到被修改的文件并重新加載它到應(yīng)用程序中。

      7)創(chuàng)建購(gòu)物車(chē)模型

      當(dāng)用戶瀏覽訂餐系統(tǒng)的在線分類目錄時(shí),他選擇要購(gòu)買(mǎi)的商品,系統(tǒng)約定每個(gè)被選擇的產(chǎn)品應(yīng)該被添加到客戶的虛擬購(gòu)物車(chē)中,在有些時(shí)候,顧客會(huì)需要很多東西,并且他會(huì)給訂餐站點(diǎn)付款,為他購(gòu)物車(chē)內(nèi)的商品付款。這意味著應(yīng)用程序?qū)⑿枰3炙蓄櫩瓦x購(gòu)到購(gòu)物車(chē)內(nèi)的每個(gè)商品。

      8)使用session功能

      在瀏覽器與應(yīng)用程序之間的協(xié)議是無(wú)狀態(tài)的——沒(méi)有內(nèi)建的記憶。當(dāng)應(yīng)用程序接受來(lái)自瀏覽器的一個(gè)請(qǐng)求時(shí),就如同是第一次被訪問(wèn)一樣,為了保存客戶已放入購(gòu)物車(chē)中的商品信息,系統(tǒng)在Http“頭”上加上一些有狀態(tài)的事物。應(yīng)用程序內(nèi)的某一層會(huì)試著對(duì)引入的請(qǐng)求,匹配它持有的本地“會(huì)話”數(shù)據(jù)部分。如果“會(huì)話”數(shù)據(jù)的特定部分匹配來(lái)自特定瀏覽器的全部請(qǐng)求,系統(tǒng)會(huì)保存使用“會(huì)話”數(shù)據(jù)瀏覽器的顧客買(mǎi)下的所有商品的軌跡。

      9)定義數(shù)據(jù)表之間的關(guān)聯(lián)

      訂單是一組商品項(xiàng)目,與購(gòu)買(mǎi)交易的細(xì)節(jié)。假定系統(tǒng)中已經(jīng)有了商品項(xiàng)目,當(dāng)創(chuàng)建新訂單時(shí),它必然要和一個(gè)或多個(gè)商品項(xiàng)目聯(lián)系在一起。在數(shù)據(jù)庫(kù)中,這意味著系統(tǒng)需要從line_items(存放購(gòu)物車(chē)中商品的信息)表到orders(訂單)表增加一個(gè)外鍵引用,所以在line_items表中定義外鍵:Constraintfk_items_goodforeignkey(good_id)referencesgood(id),constraintfk_items_orderforeignkey(order_id)referencesorders(id),這告訴數(shù)據(jù)庫(kù)外鍵的情況,因?yàn)樵S多數(shù)據(jù)庫(kù)都將檢查外鍵約束,以保持代碼的正確性。

      10)定義模型之間的關(guān)系

      系統(tǒng)中需要告訴Rails一個(gè)訂單有很多商品項(xiàng)目,并且一個(gè)商品項(xiàng)目屬于一個(gè)定單。在app/models目錄下新創(chuàng)建的order.rb(訂單模型)文件,添加一個(gè)對(duì)has_many()的調(diào)用。然后在line_item.rb(購(gòu)物車(chē)信息模型)文件中添加belongs_to()方法的調(diào)用。

      11)代碼重用

      假設(shè)已經(jīng)有了一個(gè)有效的購(gòu)物車(chē),再創(chuàng)建一個(gè)新的order對(duì)象用來(lái)填充view。注意這個(gè)order還沒(méi)有保存到數(shù)據(jù)庫(kù)—它只是用view來(lái)組裝checkout(訂單信息表單)表單??梢栽赾heckout頁(yè)增加購(gòu)物車(chē)內(nèi)容的匯總。因?yàn)橐呀?jīng)有了購(gòu)物車(chē)顯示頁(yè)面的代碼,接下來(lái)就可以使用Rails的componets來(lái)重用購(gòu)物車(chē)的顯示代碼。

      2.3網(wǎng)上訂餐系統(tǒng)的具體實(shí)現(xiàn)

      1)創(chuàng)建數(shù)據(jù)庫(kù)和表

      首先在Mysql下創(chuàng)建了數(shù)據(jù)庫(kù)mydatabase,接著建立orders表,如圖1所示。

      圖1建立orders表

      在這里,Rails使用一種命名習(xí)慣,表名都使用復(fù)數(shù)形式。Rails可以識(shí)別這些復(fù)數(shù)表名和控制器、模型、視圖之間的關(guān)系。Id屬于系統(tǒng)在表中查找數(shù)據(jù)所必須的主鍵,是整型,非空且自增的,user_name是用戶的名字,email是用戶的email地址,pay_type是用戶付款的方式,shipped_at是餐廳送出商品的時(shí)間,也就是交易完成的時(shí)間。

      接下來(lái)修改config目錄下面的database.yml文件,實(shí)現(xiàn)系統(tǒng)功能時(shí)所要修改配置的地方僅此一處。修改后的結(jié)果如下所示:

      development:

      adapter:mysql

      database:mydatabase

      username:root

      password:root

      socket:/path/to/your/mysql.sock

      其中development代表當(dāng)前是處于開(kāi)發(fā)模式中,database:mydatabase代表要連接的數(shù)據(jù)庫(kù)名,username和password分別為連接數(shù)據(jù)庫(kù)時(shí)所用到的用戶名和密碼?,F(xiàn)在可以測(cè)試一下,打開(kāi)命令行窗口輸入rubyscript/server命令,然后打開(kāi)瀏覽器,在地址欄中輸入http://localhost:3000/order如圖2所示。

      圖2listingorders的顯示結(jié)果

      在這里每條記錄的修改、刪除和詳細(xì)信息的顯示功能都有了,而且擁有了新增記錄的功能。同理可以建立如下的幾張表和對(duì)應(yīng)的控制器。經(jīng)過(guò)分析,系統(tǒng)現(xiàn)在需要一張商品表,一張用戶表。商品表用來(lái)存放網(wǎng)站所擁有的商品,用戶表用來(lái)存放本網(wǎng)站的合法使用用戶。按照同樣的步驟創(chuàng)建goods和users表。

      goods表中存放原來(lái)選擇的食物列表,在設(shè)計(jì)中沒(méi)有使用blob類型的字段來(lái)存放真正的圖片,如果這樣做數(shù)據(jù)庫(kù)的規(guī)模會(huì)非常龐大,隨著圖片上傳的數(shù)量增大,數(shù)據(jù)庫(kù)的性能就可能會(huì)直線下降。在表中image_url中存放的是圖片的url地址,這個(gè)字段給ROR提供了一個(gè)圖片地址的映射。當(dāng)視圖文件使用ERB和HTML語(yǔ)言填充頁(yè)面時(shí),獲取圖片是通過(guò)對(duì)image_url的引用來(lái)實(shí)現(xiàn)的。

      2)生成應(yīng)用模板

      Rails提供了很多的幫助方法和工具,scaffold工具就提供了生成Controller(控制器)、Model(模型)和View(視圖)的功能。

      打開(kāi)命令行窗口,進(jìn)入應(yīng)用程序目錄,在其中輸入rubyscript/generatescaffold控制器名,就會(huì)在views/控制器名目錄下生成views模板,包括new.rhtml、list.rhtml、show.rhtml、edit.rhtml和_form.rhtml五個(gè)視圖文件,分別為數(shù)據(jù)庫(kù)表的增刪改查頁(yè)面。系統(tǒng)中所用到的模板包括user、order和good三個(gè),為了區(qū)分管理員和用戶的頁(yè)面,把good的list視圖又劃分為list_admin.rhtml和list_user.rhtml,然后對(duì)這些視圖文件進(jìn)行編輯修改,來(lái)定制自己的模板,_form.rhtml中是定制提取表中數(shù)據(jù)列的格式。

      3)商品管理的實(shí)現(xiàn)

      圖3是管理員登錄時(shí)的界面。

      圖3商品管理頁(yè)面

      商品管理使用的Good_controller.rb中的部分代碼如下:

      classGoodController<ApplicationController

      //聲明GoodController繼承//ApplicationController

      before_filter:authorize

      model:cart//聲明包含cart模型類

      attr_reader:name//聲明name屬性為可讀

      defindex

      @good=Good.avaliable_items

      end

      defshow_admin//顯示詳細(xì)信息

      @good=Good.find(params[:id])

      end

      defshow_user

      @good=Good.find(params[:id])

      end

      defnew//新建商品項(xiàng)

      @good=Good.new

      end

      defcreate//生成商品記錄

      @good=Good.new(params[:good])

      if@good.save

      flash[:notice]=''''食物記錄已成功創(chuàng)建.''''

      redirect_to:action=>''''list_admin''''

      else

      render:action=>''''new''''

      end

      end

      defedit//編輯商品信息

      @good=Good.find(params[:id])

      end

      defupdate//修改已選中的數(shù)據(jù)

      @good=Good.find(params[:id])

      if@good.update_attributes(params[:good])

      flash[:notice]=''''食物記錄已成功更新.''''

      redirect_to:action=>''''show_admin'''',:id=>@good

      else

      render:action=>''''edit''''

      end

      end

      defdestroy//刪除數(shù)據(jù)

      ……

      4)訂單管理和查詢

      管理頁(yè)面中的訂單查詢功能分為精確查找和模糊查找,精確查找是使用提交訂單的用戶名和送餐日期進(jìn)行復(fù)合查詢。模糊查找只使用用戶名進(jìn)行查詢。

      訂單管理頁(yè)面提供該管理員有關(guān)訂單的詳細(xì)信息,送貨時(shí)間顯示完成交易的最終時(shí)間,沒(méi)有時(shí)間戳的訂單表示沒(méi)有送出商品,管理員只能對(duì)訂單進(jìn)行刪除操作,用戶在結(jié)帳頁(yè)面中提交的訂單信息最終會(huì)匯集這里。管理員可以對(duì)待發(fā)送商品的訂單進(jìn)行送貨操作,這時(shí)會(huì)在訂單的送貨時(shí)間列中加上一個(gè)時(shí)間戳。

      5)購(gòu)物車(chē)的實(shí)現(xiàn)(略)

      3結(jié)論

      網(wǎng)絡(luò)訂餐系統(tǒng)的開(kāi)發(fā)證明,使用ROR來(lái)開(kāi)發(fā)一個(gè)中小型的Web應(yīng)用是非??焖俸捅憬莸模蚃2EEWeb應(yīng)用開(kāi)發(fā)框架相比,開(kāi)發(fā)復(fù)雜程序大大減低,也不用處處使用xml語(yǔ)法來(lái)對(duì)應(yīng)用進(jìn)行配置;但ROR基于許多約定和習(xí)慣來(lái)生成框架,而且對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)有一些特殊的要求,一旦要在不符合約定和習(xí)慣的舊有系統(tǒng)上進(jìn)行更新設(shè)計(jì),會(huì)使其快速開(kāi)發(fā)的效率受較大的影響,這是需要ROR后續(xù)版本開(kāi)發(fā)注意的方面。

      參考文獻(xiàn)

      [1]宋華,王佐成,汪林林.基于RoR框架的辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)研究,微型電腦應(yīng)用,2007年11期

      [2]陳鏘.RubyonRails與Struts在應(yīng)用中的對(duì)比.科技資訊.2007年6期

      [3]高昂.面向企業(yè)的RubyonRails.軟件世界.2007年23期

      白白色青青草视频免费观看| 国产欧美日韩专区毛茸茸| 视频国产精品| 中文字幕无码免费久久9| 永久免费在线观看蜜桃视频| 国产主播一区二区三区在线观看| 蜜桃av中文字幕在线观看| 日本高清视频在线一区二区三区| 五月激情在线观看视频| 日韩精品一区二区三区人妻在线| 亚洲中文字幕久久精品品| 亚洲成a人v欧美综合天堂| 亚洲av永久无码精品网址| 国产精品久久久久久无码| 欧美日韩国产成人高清视| 亚洲精品理论电影在线观看| 中文字幕乱码中文乱码毛片| 精品人妻一区二区视频| 美女国产毛片a区内射| 国产欧美日韩精品专区| 国内精品视频在线播放不卡| 中文字幕一区二区三区精彩视频 | 丰满人妻久久中文字幕| 蜜臀av无码人妻精品| 欧美粗大猛烈老熟妇| 中文字幕 人妻熟女| 四虎精品国产一区二区三区 | 国产精品丝袜美女久久| 蜜桃av噜噜一区二区三区9| 中文字幕日韩欧美一区二区三区| 奇米影视777撸吧| 狠狠噜天天噜日日噜| 精品91精品91精品国产片| 精品婷婷国产综合久久| 欧美亅性猛交内射| 亚洲综合色自拍一区| 一区二区三区国产美女在线播放| 亚洲熟女av一区少妇| 日本一区二区在线免费视频| 麻豆精品国产精华液好用吗| 久草视频这里有精品|