freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文-閱讀頁

2024-12-23 15:41本頁面
  

【正文】 靠性的應(yīng)用需選擇 TCP 協(xié)議,如驗(yàn)證、密碼字段的傳送都是不允許出錯(cuò)的,而對數(shù)據(jù)的可靠性要求不那么高的應(yīng)用可選擇 UDP 傳送。使用 TCP 協(xié)議會有較大的時(shí)延,因此不適合對實(shí)時(shí)性要求較高的應(yīng)用,如 VOIP、視頻監(jiān)控等。 :由于 TCP 協(xié)議的提出主要是解決網(wǎng)絡(luò)的可靠性問題,它通過各種機(jī)制來減少錯(cuò)誤發(fā)生的概率。 TCP/IP 協(xié)議的 運(yùn)作機(jī)制是 IP 層負(fù)責(zé)接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層 TCP 層,相反, IP 層也把從 TCP 層接收來的數(shù)據(jù)包傳送到更低層。 IP 數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。也可以這樣說,IP 地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。對于一些 TCP 和 UDP 的服務(wù)來說,使用了該選項(xiàng)的 IP 包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。許多依靠 IP 源地址做確認(rèn)的服務(wù) 7 將產(chǎn)生問題并且會被非法入侵。 TCP 提供的是一種可靠的數(shù)據(jù)流服務(wù) ,采用 ―帶重傳的肯定確認(rèn) ‖技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃浴? 如果 IP 數(shù)據(jù)包中有已經(jīng)封好的 TCP 數(shù)據(jù)包,那么 IP 將把它們向上傳送到 TCP 層。 TCP 數(shù)據(jù)包中包括序號和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。應(yīng)用程序輪流將信息送回 TCP 層, TCP層便將它們向下傳送 到 IP 層,設(shè)備驅(qū)動程序和物理介質(zhì),最后到接收方。 DNS 在某些情況下使用 TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用 UDP 傳送有關(guān)單個(gè)主機(jī)的信息 。 TCP/IP 協(xié)議的實(shí)現(xiàn)的流程圖如下圖 21 所示。 9 第 3 章 系統(tǒng)分析及設(shè)計(jì) 系統(tǒng)需求分析 隨著局域網(wǎng)技術(shù)與電子商務(wù)的深入發(fā)展,餐廳自助點(diǎn)菜系統(tǒng)也在國內(nèi)外蓬勃發(fā)展,并日益深入到人們的生活當(dāng)中。餐廳每日 消費(fèi)人數(shù)的巨大,自助點(diǎn)菜是一種必不可少的工具,而國內(nèi)的點(diǎn)菜系統(tǒng)還不成熟 ,所以本課題將設(shè)計(jì)實(shí)現(xiàn)一個(gè) 餐廳自助 點(diǎn)菜系統(tǒng)。 功能需求 用戶在客戶端點(diǎn)菜,通過局 域網(wǎng)傳送到服務(wù)器,后廚接受從服務(wù)器接受到菜單信息,客戶在前臺結(jié)賬。根據(jù)系統(tǒng)功能的需求,分析了所需要的系統(tǒng)總功能結(jié)構(gòu)如表 31 所示。 1.系統(tǒng)處理的準(zhǔn)確性和及時(shí)性: 系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。 由于餐廳自助點(diǎn)菜系統(tǒng)客戶端的點(diǎn)菜對于整個(gè)系統(tǒng)的功能和性能完成舉足輕重。在系開發(fā)過程中,必須保證系統(tǒng)的準(zhǔn)確性。例如新增菜品,會員充值等。而要實(shí)現(xiàn)這一點(diǎn),應(yīng)通過系統(tǒng)的開放性來完成。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機(jī)交互界面。 4.系統(tǒng)的標(biāo)準(zhǔn)性: 系統(tǒng)在設(shè)計(jì)開發(fā)使用過程中都要涉及到很多計(jì)算機(jī)硬件、軟件。例如在開發(fā)中使用的操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、開發(fā)工具都必須符合通用標(biāo)準(zhǔn)。 5.系統(tǒng)的先進(jìn)性: 目前計(jì)算系統(tǒng)的技術(shù)發(fā)展相當(dāng)快,做為餐廳管理系統(tǒng)工程,應(yīng)該在系統(tǒng)的生命周期盡量做到系統(tǒng)的先進(jìn)。另一方面,在系統(tǒng)設(shè)計(jì)和開發(fā)的過程中,應(yīng)在考慮成本的基礎(chǔ)上盡量采用當(dāng)前主流并先進(jìn)且有良好發(fā)展前途的工具。 Linux 系統(tǒng) 采用了可視化的程序設(shè)計(jì),具有面向?qū)ο蟮目梢暬O(shè)計(jì)工具,結(jié)構(gòu)化的程序設(shè)計(jì)語言,提 供了易學(xué)易用的應(yīng)用程序集成開發(fā)環(huán)境,支持多種數(shù)據(jù)庫系統(tǒng)的訪問, Linux 系統(tǒng)中的 Qt 提供了可視化的界面。 系統(tǒng)總體功能模塊 根據(jù)對餐廳點(diǎn)菜系統(tǒng)需要實(shí)現(xiàn)的功能進(jìn)行需求分析,將本系統(tǒng)的前臺劃分為前臺管理,點(diǎn)菜管理,后廚管理,數(shù)據(jù)庫管理,服務(wù)器五個(gè)功能模塊;系統(tǒng)功能模塊如圖 31 所示。 表 32 功能模塊描述表 名稱 功能 服務(wù)器 負(fù)責(zé)前臺,點(diǎn)菜終端,后廚終端間的通信; 前臺終端 負(fù)責(zé)查詢餐臺空閑信息,顧客結(jié)賬,并打印賬單信息; 點(diǎn)菜終端 設(shè)置基礎(chǔ)信息,更新菜譜,點(diǎn)菜 ,加菜,刪菜; 后廚終端 接收顧客點(diǎn)菜的菜單信息進(jìn)行做菜; 數(shù)據(jù)庫管理 負(fù)責(zé)管理數(shù)據(jù)庫的菜菜品信息; 1.服務(wù)器功能:服務(wù)器功能是整個(gè)系統(tǒng)的傳輸通道,是系統(tǒng)的重中之重。后廚和服務(wù)器連接后,可以將做完的菜發(fā)送到服務(wù)器,服務(wù)器將信息發(fā)送到點(diǎn)菜客戶端和前臺。本模塊可以查詢當(dāng)前餐臺的空閑信息、接收服務(wù)器發(fā)送過來顧客點(diǎn)菜的消費(fèi)菜單信息,并打印菜單給客戶。 圖 32 前臺終端模塊 3.點(diǎn)菜終端:點(diǎn)菜終端是本系統(tǒng)給顧客的使用的,是本系統(tǒng)的重要組成部分。細(xì)分的功能模塊如圖 33所示。 點(diǎn)菜信息發(fā)送功能是將用戶點(diǎn)菜信息以結(jié)構(gòu)體的形式發(fā)送到服務(wù)器,并添加到相應(yīng)的數(shù)據(jù)庫中。細(xì)分功能如圖 34 所示。細(xì)分?jǐn)?shù)據(jù)庫管理功能模塊如圖 35 所示。 添加菜單列表功能是允許可以添加新的菜肴信息。 圖 35 數(shù)據(jù)庫管理模塊 3. 4 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì) 根據(jù)對本系統(tǒng)數(shù)據(jù)的分析 ,系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)了一個(gè)表:菜肴信息表。 本章小結(jié) 本章主要對該系統(tǒng)設(shè)計(jì)進(jìn)行了需求分析、功能分析,最后做出詳細(xì)設(shè)計(jì)方案。 詢問刪菜 做 完 接收菜單 后廚管理模塊 刪除菜譜信息 數(shù)據(jù)庫管理模塊 添加菜譜信息 查詢菜譜信息 13 第 4 章 軟件設(shè)計(jì) 軟件采用面向?qū)ο竦脑O(shè)計(jì)方法,考慮到對計(jì)算效率的要求,采用 C++編程語言,開發(fā)環(huán)境為 Linux RedHat 企業(yè)版 5,服務(wù)器編譯工具為 gcc,其余編程工具為 g++編譯器,采用 C++標(biāo)準(zhǔn)庫函數(shù)和 QT 類庫。 表 41 菜單信息表 名稱 類型 (長度 ) 空 屬性 Id varchar(20) no unique Idd varchar(20) yes Name varchar(20) yes Price varchar(20) yes Imagepath varchar(20) yes About varchar(20) yes 各功能模塊的詳細(xì)設(shè)計(jì) 本系統(tǒng)有五個(gè)模塊組成,分別為 server(服務(wù)器),前臺管理模塊,顧客點(diǎn)菜管理模塊,后廚管理模塊,數(shù)據(jù)庫管理模塊等。其中主要運(yùn)用到TCP/IP 協(xié)議通信的。然后就是等待客戶端的請求連接用 accept()函數(shù),其中運(yùn)用到了線程,創(chuàng)建線程函數(shù)pthread_create()用來處理客戶的的請求。 exit(0)。server_addr,sizeof(server_addr))。 = i_addr()。 /* 捆綁 sockfd 描述符到 IP 地址 */ if(bind(sockfd,(struct sockaddr*)amp。 14 exit(0)。 exit(0)。 while(1) { int i=0。client_addr, amp。 exit(0)。 i++。 pthread_create(amp。accefd)。 前臺管理模塊 前臺管理模塊主要查看餐臺空閑信息,和打印賬單兩部分組成。同樣,當(dāng)顧客結(jié)賬時(shí)點(diǎn)擊按鈕觸發(fā)槽函數(shù)打印賬單給顧客查看,同時(shí)將 Button 的文本信息設(shè)置為“ 2 人桌”,賬單是用 QListWidget 類來顯示。 static bool a = true。 a = false。 int i=0。 //將客人消費(fèi)情況添加到賬單列表 QListWidget *list = new QListWidget。 listinsertItem(0,str1)。 memset(a,0,sizeof(a))。 listinsertItem(i+1,QString(tr(menu1[i].name)+tr( )+tr(a)))。 i++。 char af[10]。 (QString(%1).arg(sum))。 listinsertItem(i+1,str2+a)。 //添加當(dāng)前時(shí)間到賬單 time_t lt。 char aa[80]。 sprintf(aa,%s,ctime(amp。 listinsertItem(i+2,QString(tr(aa)))。 a = true。 首先創(chuàng)建套接字描述符 Socket()函數(shù),然后連接服務(wù)器 connect()。server_addr,sizeof(server_addr))。 = i_addr()。 /* 客戶程序發(fā)起連接請求 */ if(connect(sockfd,(struct sockaddr *)amp。再 send()將開臺信息發(fā)送到服務(wù)器。 tableNumber=()。 diancshow()。 SeleteList[0].buffer[1]=tableNumber。 star=false。} } 菜單列表是從數(shù)據(jù)庫列表中獲取的,首先用 QSqlDatabase 類中的 addDatabase()成員函數(shù)加載數(shù)據(jù)庫驅(qū)動,然后用 setDatabaseName()成員函數(shù)指明的數(shù)據(jù)庫名稱,在用 open()成員函數(shù)打開并獲取菜單信息用 QLable 類組件顯示。//加載數(shù)據(jù)庫驅(qū)動 (database)。 } QSqlQuery query。 點(diǎn)菜功能實(shí)現(xiàn)主要是當(dāng)選擇按鈕按下時(shí),觸發(fā)的槽函數(shù) slotImButton(),實(shí)現(xiàn)菜品選擇功能,將選擇菜的信息添加入已選列表,并存入 SeleteList 中,分為提交前選菜和提交后加菜兩部分。 QString listText =imLabeltext()。 QString listText2=spinBoxtext()。 text =listText1+listText。 text +=listText2。 spinBoxsetValue(1)。 int s =okListcount()1。jm。 strcpy(SeleteList[s].nam,())。 SeleteList[s].pric=MenuBook[j].Price。 if(pro==false) //加菜 { static int ss=0。 additem[ss].addnum=()。 printf(name:%s num: %d \n,additem[ss].addnam,additem[ss].addnum)。 } } } } 當(dāng)刪除按鈕按下時(shí),觸發(fā)的槽函數(shù) slotDelete(),實(shí)現(xiàn)提交前從已選列表及 SeleteList中刪除,提交后刪菜功能。 else del=true。 int cou =okListcount()。 //獲取當(dāng)前選擇項(xiàng)目,并將其從已選列表和 SeleteList 中刪除 QListWidgetItem *item =okListtakeItem(okListcurrentRow())。 int f。fcou。 memset(SeleteList[cou].nam,0,sizeof(SeleteList[cou].nam))。 ipric=SeleteList[cou].num*SeleteList[cou].pric。 ipric=0。mokListcount()。 printf(ipric:%d \n,ipric)。 strcpy(additem[0].addnam,())。 additem[0].bufer[1]=tableNumber。 for(m=0。m++) additem[0].addnam[m]=39。 send(sockfd,additem,sizeof(additem),0)。} } 當(dāng)提交按鈕按下時(shí),觸發(fā)的槽函數(shù) on_listOkButton_clicked(),實(shí)現(xiàn)將選擇的菜品信息seletelist 結(jié)構(gòu)體 send()發(fā)送至服務(wù)器的功能。 //將選擇的菜發(fā)送至服務(wù)器 if(pro==true) { SeleteList[0].buffer[0]=2。 send(sockfd,SeleteList,sizeof(SeleteList),0)。 additem[0].bufer[1]=tableNumber。 int ii=0。additem[ii].addnum!=0。 memset(additem,0,sizeof(additem))。 ipric=0。mokListcount()。 QMessageBox::about(this,ok,tr(提交完成 ))。 } 當(dāng)結(jié)賬按鈕按下時(shí),觸發(fā)此槽函數(shù) on_listPayButton_clicked(),結(jié)算清單, send()發(fā)送至服務(wù)器。} else { //建立消息框 QDialog *dlg = new QDialog。 QString str。 str=tr(RMB:)+str+tr(元 )。 labelsetText(str)。 QVBoxLayout *layout = new QVBoxLayout(dlg)。 layoutaddWidget(
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1