版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、word課程設計任務書課程名稱:課程設計1(數(shù)據(jù)結構)設計題目:銀行排隊叫號系統(tǒng)1. 問題描述: 目前,在以銀行營業(yè)大廳為代表的窗口行業(yè),大量客戶的擁擠排隊已成為了這些企事業(yè)單位改善效勞品質、提升營業(yè)形象的主要障礙。排隊叫號系統(tǒng)的使用將成為改變這種狀況的有力手段。排隊系統(tǒng)完全模擬了人群排隊全過程,通過取票進隊、排隊等待、叫號效勞等功能,代替了人們站隊的辛苦,把顧客排隊等待的煩惱變成一段難得的休閑時光,使客戶擁有了一個自由的空間和一份美好的心情。 排隊叫號軟件的具體操作流程為:l 顧客取效勞序號。當顧客抵達效勞大廳時,前往放置在入口處旁的取號機,并按一下其上的相應效勞按鈕,取號時機自動打印出一張
2、效勞單。單上顯示效勞號及該效勞號前面正在等待效勞的人數(shù)。l 銀行職員呼叫顧客 ,顧客的效勞號就會按順序的顯示在顯示屏上。當一位顧客辦事完畢后,柜臺銀行職員只需按呼叫器相應鍵,即可自動呼叫下一位顧客。2. 功能要求:1使用數(shù)組或鏈表以及C#接口和范型技術實現(xiàn)通用的隊列功能;2編寫算法,利用隊列模擬銀行排隊系統(tǒng);3利用多窗口分別模擬顧客取效勞號、銀行窗口效勞顧客。3.界面要求:用戶界面設計不做統(tǒng)一規(guī)定,但應做到界面友好,易于操作。 4. 技術要求:要求利用面向對象的方法以及隊列數(shù)據(jù)結構來完成系統(tǒng)的設計;在設計的過程中,建立清晰的類層次; 在系統(tǒng)設計中要分析和定義各個類,每個類中要有各自的屬性和方法
3、;要求運用面向對象的機制來實現(xiàn)系統(tǒng)功能。 5創(chuàng)新要求在根本要求到達后,可以進行創(chuàng)新設計包括界面、功能、數(shù)據(jù)結構。6.課程設計時間:1周18課時7.課程設計的考核方式及評分方法1) 考核方式n 課程設計結束時,在機房當場驗收。n 教師提供測試數(shù)據(jù),檢查運行結果是否正確。n 答復教師提出的問題。n 學生提交課程設計文檔A4紙打印2) 評分方法上機檢查及辯論 : 書面報告 : 學習態(tài)度 = 6 : 3 : 1,沒有通過上機檢查的其成績直接記錄不及格。目錄1 設計內容與要求 2.設計說明 2.1 問題描述與功能設計 2.2 算法與數(shù)據(jù)結構 2.3 類定義(函數(shù)定義) 2.4 界面設計 2.5 編碼 2
4、.6 測試3 總結參考文獻 附錄A:源代碼一、設計內容與要求1、設計內容 1、設計窗口,效勞窗口;2、編寫代碼,實現(xiàn)各種算法,完成排隊叫號問題;2、設計要求1通過這次課程設計,要求在數(shù)據(jù)結構的邏輯特性和物理表示、數(shù)據(jù)結構的選擇應用、算法的設計及其實現(xiàn)等方面加深課程根本內容的理解。同時,在程序設計方法以及上機操作等根本技能和科學作風方面受到比擬系統(tǒng)和嚴格的訓練。2學生必須仔細研讀 數(shù)據(jù)結構 課程設計任務書要求,以學生自學為主、指導教師指導為輔,獨立完成課程設計的任務,有問題及時主動與指導教師溝通。3在課程設計中,學生要發(fā)揮自主學習的能力,充分利用時間,安排好課程設計的時間方案,并在課程設計過程中
5、不斷檢測自己的方案完成情況,及時向指導教師匯報。4編程語言:C#語言。二、設計說明2.1問題描述與功能設計1、問題描述 目前,在以銀行營業(yè)大廳為代表的窗口業(yè)務,大量客戶的擁擠排隊已成為了這些企事業(yè)單位改善效勞品質、提升企業(yè)形象的主要障礙。排隊叫號系統(tǒng)的使用將成為改變這種情況的有力手段。排隊系統(tǒng)完全模擬了人群排隊的全過程,通過取票進隊。排隊等待、叫號效勞等功能,很好的解決了客戶在效勞機構辦理業(yè)務是所遇到的各種排隊、擁擠和混亂現(xiàn)象,代替了人們站隊的辛苦,把顧客等待的煩惱變成了一段難得的休閑時光,使客戶擁有了一個自由的空間和一份美好的心情。 排隊叫號軟件的具體操作流程為:4、顧客到窗口辦理 休息區(qū)的
6、顧客聽到呼叫就到響應窗口進行一對一效勞。3、營業(yè)員按鈕呼叫 窗口操作員按“下一位,當前窗口就顯示顧客排隊號并語音呼叫“請XX到X號窗口2、顧客休息等待 取到排隊號的顧客在休息區(qū)休息等待,注意大廳的提示信息1、顧客取號需要辦理業(yè)務的顧客到取票機前取號,并獲得打印出的排隊號票2、功能設計1使用數(shù)組以及C#接口和范型技術實現(xiàn)通用的隊列功能;2編寫算法,利用隊列模擬銀行排隊系統(tǒng);3利用多窗口分別模擬顧客取效勞號、銀行窗口效勞顧客。2.2算法與數(shù)據(jù)結構在銀行排隊叫號軟件中,首先要找到一種數(shù)據(jù)結構來存放顧客所得到的效勞號,這些效勞號表示客戶的請求效勞的先后順序,也表示客戶被效勞的先后順序。先來的客戶被效勞
7、:在這個程序中,主要運用了隊列這種結構:1、 隊列是一種特殊的線性表,是一種只允許在表的一端插入操作而在另一端進行刪除操作的線性表。進行插入操作的表尾稱為隊尾Rear,進行刪除操作的頭部稱為對頭Front。當隊列中沒有數(shù)據(jù)元素時稱為空隊列(Empty Queue)。隊列通常記為Q=a1,a2,an,a1為對頭元素,an為隊尾元素。這n個元素是按照a1,a2,an的次序依次入隊的,出隊的順序與入隊順序相同,a1第一個出隊,an最后一個出隊。隊列的結構示意圖如下: 出隊 a1 a2 an 入隊2、隊列的特征: 隊列的操作是按照“先進先出或“后進后出 的原那么進行的。3、 隊列的根本操作:(1) 入
8、隊列操作:EnQueueT elem;(2) 出隊列操作:DeQueue;(3) 取隊頭元素:GetFront;(4) 求隊列的長度;GetLength;(5) 判斷隊列是否為空:IsEmpty;(6) 清空操作:Clear;(7) 判斷是否為滿:IsFull;在這個程序中用循環(huán)順序隊列;當隊尾指示器rear到達數(shù)組上限時,如果還有數(shù)據(jù)元素入隊并且數(shù)組的第0個空間空閑時,隊尾指示器rear指向數(shù)組的0端。隊尾指示器rear的值不一定大于隊頭Front的值,并且隊滿和隊空的條件是相同的,為rear=front;2.3類定義函數(shù)定義在這個程序中,定義了一下及幾種類:接口IQueue類:將隊列的根本
9、操作定義在接口IQueue中,如左圖所示:Clear:清空操作,是隊列為空;DeQueue:出隊列操作,將隊頭元素從隊列中取出;EnQueue:入隊列操作,將值為elem的新數(shù)據(jù)元素添加到隊尾;GetFront:取隊頭元素,返回隊頭元素的值;GetLength:求隊列的長度,返回隊列中數(shù)據(jù)元素的個數(shù);IsEmpty:判斷隊列是否為空,如果對列為控,返回true,否那么返回false;IsFull:判斷是否為滿,如果對列為滿返回true,否那么返回false;接口IBankQueue類:將銀行隊列的所有操作定義在里面:GetCallnumber:獲取效勞號; 泛型類CSeqQueue<T&
10、gt;表示順序隊列:1、字段字段maxsize:表示循環(huán)隊列的最大容量;字段front:表示對頭,范圍是0maxsize-1;字段rear:表示隊尾,范圍也是0maxsize-1;字段data:表示數(shù)組用于存儲循環(huán)順序隊列中的數(shù)據(jù) 元素;2、屬性在類中并設置了隊頭屬性front、隊尾屬性rear、容量屬性maxsize、索引器屬性this;3、方法在這個類中有接口IQueue中的一切方法;銀行叫號順序隊列類CSeqBankQueue類:該類實現(xiàn)IBankQueue接口中定義的全部行為,通過繼承CSeqQueue<T>將已實現(xiàn)的全部行為繼承過來;此外,設置了一個新來顧客的效勞號屬性C
11、allnumber;通過方法GetCallnumber獲得效勞號;Form1類:Form1繼承了系統(tǒng)中的Form類;在Form1中使用了button、label、textBox等控件;使用了button_Click方法實現(xiàn)取號行為;Form2類:Form2也繼承了系統(tǒng)中的Form類;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法實現(xiàn)叫號行為;Form3類:Form3也繼承了系統(tǒng)中的Form類;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法實現(xiàn)叫號行為;Form4類:Form4也繼
12、承了系統(tǒng)中的Form類;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法實現(xiàn)叫號行為;效勞窗口ServiceWindow類:效勞隊列的屬性BankQ;作為線程的方法Service;主程序Main方法;2.4界面設計在這個程序中,總共設計了四個界面,一個取號界面,三個效勞窗口界面:如下圖:1、取號窗口:在取號窗口中,有了三個label控件,設置了“中國銀行、“歡送你、“請點擊取號字樣,使用button控件設置了取號按鈕,用了textBox控件用于顯示所取到的排隊號碼。2、效勞窗口一號效勞窗口二號效勞窗口三號效勞窗口在效勞窗口中用了兩個lab
13、el控件設置了“中國銀行、“X號效勞窗口字樣,用了button控件設置了“下一個按鈕,用textBox顯示“請X號到X號效勞窗口;2.5編碼namespace 銀行排隊叫號系統(tǒng) public partial class Form1 : Form IBankQueue bankQueue=new CSeqBankQueue(100);/新建一個隊列; CSeqQueue<int> q1 = new CSeqQueue<int>(100); int Callnumber;/號碼; public Form1() InitializeComponent(); Form2 f1
14、= new Form2(this.q1);/實例話Form; Form3 f2 = new Form3(this.q1); Form4 f3 = new Form4(this.q1); f1.Show();/使幾個窗口同時顯示; f2.Show(); f3.Show(); private void button1_Click(object sender, EventArgs e) if (!bankQueue.IsFull() Callnumber = bankQueue.GetCallnumber(); textBox1.Text = "你的號碼是:" + Callnum
15、ber + "號," + "你前面還有" + bankQueue.GetLength() + "位,請耐心等待!" bankQueue .EnQueue(Callnumber );/所取得的號碼進隊; q1.EnQueue(Callnumber); else Console .WriteLine ("現(xiàn)在業(yè)務繁忙,請稍后再來!"); Console .WriteLine (); namespace 銀行排隊叫號系統(tǒng) public partial class Form3 : Form CSeqQueue<int
16、> _q1 = new CSeqQueue<int>(100); public Form3(CSeqQueue<int> q1)/構造函數(shù),應用Form1所建立的隊列; InitializeComponent(); this._q1 = q1; private void button1_Click(object sender, EventArgs e) if (!_q1.IsEmpty() textBox1.Text = ("請" + _q1.DeQueue() + "號到二號窗口!"); else MessageBox.S
17、how("現(xiàn)在沒有客人!"); 2.6測試代碼編寫完成后,執(zhí)行調試-開始執(zhí)行,看是否能成功生成,假設能的話,點擊取號看效勞窗口是否按要求運作;假設不能的話,根據(jù)所提供的錯誤提示,一步步的調試,直到成功生成為止。下列圖為取到八號,且六號正在被效勞時各顯示器上的顯示:三、總結在整個過程中,應該注意以下幾點:1.要求利用面向對象的方法以及隊列數(shù)據(jù)結構來完成系統(tǒng)的設計;2. 在設計的過程中,建立清晰的類層次;3. 在系統(tǒng)設計中要分析和定義各個類,每個類中要有各自的屬性和方法;4. 要運用面向對象的機制來實現(xiàn)系統(tǒng)功能。通過對完成這次課程設計,加深了對隊列這種數(shù)據(jù)結構的理解,掌握了隊列
18、數(shù)據(jù)結構極其算法;此外也能夠更加熟練的使用button。Label。textBox等控件。參考文獻雷軍環(huán)、鄧文達、劉震編著 數(shù)據(jù)結構C#語言版 錢哨、李揮劍、李繼哲編著 C#WinForm實踐開發(fā)教程 鄭宇軍編著 C#面向對象程序設計 附錄:源代碼IQueue接口代碼:using System;namespace QueueDs interface IQueue<T> void EnQueue(T elem); /入隊列操作 T DeQueue(); /出隊列操作 T GetFront(); /取對頭元素 int GetLength(); /求隊列的長度 bool IsEmpty(
19、); /判斷隊列是否為空 void Clear(); /清空隊列 bool IsFull();/判斷是否為滿,在順序隊列中實現(xiàn)該算法,在鏈式隊列中代碼實現(xiàn)為空 IBankQueue接口代碼:using System;namespace QueueDs interface IBankQueue:IQueue<int> int GetCallnumber();/獲得效勞號碼 順序隊列代碼:using System;namespace QueueDs public class CSeqQueue<T>:IQueue<T> private int maxsize;
20、/循環(huán)順序隊列的容量 private T data; /數(shù)組,用于存儲循環(huán)順序隊列中的數(shù)據(jù)元素 private int front; /指示最近一個己經(jīng)離開隊列的元素所占的位置 private int rear; /指示最近一個進行入隊列的元素的位置 /索引器 public T thisint index get return dataindex; set dataindex = value; /容量屬性 public int Maxsize get return maxsize; set maxsize = value; /隊頭指示器屬性 public int Front get retur
21、n front; set front = value; /隊尾指示器屬性 public int Rear get return rear; set rear = value; /初始化隊列 public CSeqQueue() public CSeqQueue(int size) data = new Tsize; maxsize = size; front = rear = -1; /入隊操作 public void EnQueue(T elem) if (IsFull() Console.WriteLine("Queue is full"); return; rear=
22、(rear + 1) % maxsize; ; datarear = elem; /出隊操作 public T DeQueue() if (IsEmpty() Console.WriteLine("Queue is empty"); return default(T); front = (front + 1) % maxsize; return datafront; /獲取隊頭數(shù)據(jù)元素 public T GetFront() if (IsEmpty() Console.WriteLine("Queue is empty!"); return defaul
23、t(T); return data(front+1)%maxsize; /求循環(huán)順序隊列的長度 public int GetLength() return (rear - front + maxsize) % maxsize; /判斷循環(huán)順序隊列是否為滿 public bool IsFull() if (front = -1 && rear = maxsize - 1) | (rear + 1) % maxsize = front) return true; else return false; /清空循環(huán)順序隊列 public void Clear() front = rea
24、r = -1; /判斷循環(huán)順序隊列是否為空 public bool IsEmpty() if (front = rear) return true; else return false; 銀行順序隊列代碼:using System;using System.Threading;namespace QueueDs /銀行叫號順序隊列類 class CSeqBankQueue:CSeqQueue<int>,IBankQueue private int callnumber;/記錄系統(tǒng)自動產生的新來顧客的效勞號 /叫號屬性 public int Callnumber get return
25、 callnumber; set callnumber = value; public CSeqBankQueue () public CSeqBankQueue(int size):base(size) /獲得效勞號碼 public int GetCallnumber() if (IsEmpty() && callnumber = 0) callnumber = 1; else callnumber+; return callnumber; /效勞窗口類 class ServiceWindow IBankQueue bankQ; public IBankQueue BankQ
26、 get return bankQ; set bankQ = value; public void Service() while (true) Thread.Sleep(10000); if (!bankQ.IsEmpty() Console.WriteLine(); lock (bankQ) Console.WriteLine("請0號到1號窗口!", bankQ.DeQueue(), Thread.CurrentThread.Name); Form1代碼using System;using System.Collections.Generic;using System
27、.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using QueueDs;namespace 銀行排隊叫號系統(tǒng) public partial class Form1 : Form IBankQueue bankQueue=new CSeqBankQueue(100); CSeqQueue<int> q1 = new CSeqQueue<int>(100); int Callnumbe
28、r; public Form1() InitializeComponent(); Form2 f1 = new Form2(this.q1); Form3 f2 = new Form3(this.q1); Form4 f3 = new Form4(this.q1); f1.Show(); f2.Show(); f3.Show(); private void button1_Click(object sender, EventArgs e) if (!bankQueue.IsFull() Callnumber = bankQueue.GetCallnumber(); textBox1.Text
29、= "你的號碼是:" + Callnumber + "號," + "你前面還有" + bankQueue.GetLength() + "位,請耐心等待!" bankQueue .EnQueue(Callnumber ); q1.EnQueue(Callnumber); else Console .WriteLine ("現(xiàn)在業(yè)務繁忙,請稍后再來!"); Console .WriteLine (); private void Form1_Load(object sender, EventArgs
30、e) Form2的代碼:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using QueueDs;namespace 銀行排隊叫號系統(tǒng) public partial class Form2 : Form CSeqQueue<int> _q1 = new CSeqQueue<i
31、nt>(100); public Form2(CSeqQueue<int> q1) InitializeComponent(); this._q1=q1; private void button1_Click(object sender, EventArgs e) if (!_q1.IsEmpty () textBox1.Text = "請" +_q1.DeQueue()+ "號到一號窗口" else MessageBox.Show("現(xiàn)在沒有客人!"); private void Form2_Load(object
32、 sender, EventArgs e) Form3代碼:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using QueueDs;namespace 銀行排隊叫號系統(tǒng) public partial class Form3 : Form CSeqQueue<int> _q1 = new CSeqQueue<int>(100); public Form3(CSeqQueue<int> q1) InitializeComponent(); this._q1 = q1; private void button1_Click(object sender, EventArgs e) if (!_q1.IsEmpty() textBox1.Text = ("請" + _
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢輕工大學《語言信息處理》2023-2024學年第一學期期末試卷
- 二零二五版?zhèn)€人與企業(yè)間的商務汽車租賃及行程安排合同3篇
- 二零二五版旅游產業(yè)反擔保合同與旅游資產抵押協(xié)議3篇
- 二零二五年建筑玻璃采購合同標準2篇
- 二零二五年度離婚后按揭房產權屬分割及子女撫養(yǎng)費用協(xié)議3篇
- 個人借款擔保合同書2024年版版B版
- 二零二五年知識產權保護保密協(xié)議翻譯服務協(xié)議3篇
- 二零二五版企業(yè)內部無息短期資金互助借款合同3篇
- 天津財經(jīng)大學《兒童美術創(chuàng)作與指導》2023-2024學年第一學期期末試卷
- 2024版股權合作的協(xié)議書范本
- GB/T 12914-2008紙和紙板抗張強度的測定
- GB/T 1185-2006光學零件表面疵病
- ps6000自動化系統(tǒng)用戶操作及問題處理培訓
- 家庭教養(yǎng)方式問卷(含評分標準)
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設計和原理
- TSG ZF001-2006 安全閥安全技術監(jiān)察規(guī)程
- 部編版二年級語文下冊《蜘蛛開店》
- 鍋爐升降平臺管理
- 200m3╱h凈化水處理站設計方案
- 個體化健康教育記錄表格模板1
評論
0/150
提交評論