銀行叫號系統(tǒng)課程設(shè)計(jì)_第1頁
銀行叫號系統(tǒng)課程設(shè)計(jì)_第2頁
銀行叫號系統(tǒng)課程設(shè)計(jì)_第3頁
銀行叫號系統(tǒng)課程設(shè)計(jì)_第4頁
銀行叫號系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)內(nèi)容與要求1、設(shè)計(jì)內(nèi)容 1)、設(shè)計(jì)窗口,服務(wù)窗口;2)、編寫代碼,實(shí)現(xiàn)各種算法,完成排隊(duì)叫號問題;二、設(shè)計(jì)說明2.1問題描述與功能設(shè)計(jì)1、問題描述 目前,在以銀行營業(yè)大廳為代表的窗口業(yè)務(wù),大量客戶的擁擠排隊(duì)已成為了這些企事業(yè)單位改善服務(wù)品質(zhì)、提升企業(yè)形象的主要障礙。排隊(duì)叫號系統(tǒng)的使用將成為改變這種情況的有力手段。排隊(duì)系統(tǒng)完全模擬了人群排隊(duì)的全過程,通過取票進(jìn)隊(duì)。排隊(duì)等待、叫號服務(wù)等功能,很好的解決了客戶在服務(wù)機(jī)構(gòu)辦理業(yè)務(wù)是所遇到的各種排隊(duì)、擁擠和混亂現(xiàn)象,代替了人們站隊(duì)的辛苦,把顧客等待的煩惱變成了一段難得的休閑時(shí)光,使客戶擁有了一個自由的空間和一份美好的心情。 排隊(duì)叫號

2、軟件的具體操作流程為:4、顧客到窗口辦理 休息區(qū)的顧客聽到呼叫就到響應(yīng)窗口進(jìn)行一對一服務(wù)。3、營業(yè)員按鈕呼叫 窗口操作員按“下一位”,當(dāng)前窗口就顯示顧客排隊(duì)號并語音呼叫“請XX到X號窗口”2、顧客休息等待 取到排隊(duì)號的顧客在休息區(qū)休息等待,注意大廳的提示信息1、顧客取號需要辦理業(yè)務(wù)的顧客到取票機(jī)前取號,并獲得打印出的排隊(duì)號票2、功能設(shè)計(jì)1)使用數(shù)組以及C#接口和范型技術(shù)實(shí)現(xiàn)通用的隊(duì)列功能;2)編寫算法,利用隊(duì)列模擬銀行排隊(duì)系統(tǒng);3)利用多窗口分別模擬顧客取服務(wù)號、銀行窗口服務(wù)顧客。2.2算法與數(shù)據(jù)結(jié)構(gòu)在銀行排隊(duì)叫號軟件中,首先要找到一種數(shù)據(jù)結(jié)構(gòu)來存放顧客所得到的服務(wù)號,這些服務(wù)號表示客戶的請求

3、服務(wù)的先后順序,也表示客戶被服務(wù)的先后順序。先來的客戶被服務(wù):在這個程序中,主要運(yùn)用了隊(duì)列這種結(jié)構(gòu):1、 隊(duì)列是一種特殊的線性表,是一種只允許在表的一端插入操作而在另一端進(jìn)行刪除操作的線性表。進(jìn)行插入操作的表尾稱為隊(duì)尾(Rear),進(jìn)行刪除操作的頭部稱為對頭(Front)。當(dāng)隊(duì)列中沒有數(shù)據(jù)元素時(shí)稱為空隊(duì)列(Empty Queue)。隊(duì)列通常記為Q=(a1,a2,an),a1為對頭元素,an為隊(duì)尾元素。這n個元素是按照a1,a2,an的次序依次入隊(duì)的,出隊(duì)的順序與入隊(duì)順序相同,a1第一個出隊(duì),an最后一個出隊(duì)。隊(duì)列的結(jié)構(gòu)示意圖如下: 出隊(duì) a1 a2 an 入隊(duì)2、隊(duì)列的特征: 隊(duì)列的操作是按照

4、“先進(jìn)先出”或“后進(jìn)后出” 的原則進(jìn)行的。3、 隊(duì)列的基本操作:(1) 入隊(duì)列操作:EnQueue(T elem);(2) 出隊(duì)列操作:DeQueue();(3) 取隊(duì)頭元素:GetFront();(4) 求隊(duì)列的長度;GetLength();(5) 判斷隊(duì)列是否為空:IsEmpty();(6) 清空操作:Clear();(7) 判斷是否為滿:IsFull();在這個程序中用循環(huán)順序隊(duì)列;當(dāng)隊(duì)尾指示器rear到達(dá)數(shù)組上限時(shí),如果還有數(shù)據(jù)元素入隊(duì)并且數(shù)組的第0個空間空閑時(shí),隊(duì)尾指示器rear指向數(shù)組的0端。隊(duì)尾指示器rear的值不一定大于隊(duì)頭Front的值,并且隊(duì)滿和隊(duì)空的條件是相同的,為rea

5、r=front;2.3類定義(函數(shù)定義)在這個程序中,定義了一下及幾種類:接口IQueue類:將隊(duì)列的基本操作定義在接口IQueue中,如左圖所示:Clear:清空操作,是隊(duì)列為空;DeQueue:出隊(duì)列操作,將隊(duì)頭元素從隊(duì)列中取出;EnQueue:入隊(duì)列操作,將值為elem的新數(shù)據(jù)元素添加到隊(duì)尾;GetFront:取隊(duì)頭元素,返回隊(duì)頭元素的值;GetLength:求隊(duì)列的長度,返回隊(duì)列中數(shù)據(jù)元素的個數(shù);IsEmpty:判斷隊(duì)列是否為空,如果對列為控,返回true,否則返回false;IsFull:判斷是否為滿,如果對列為滿返回true,否則返回false;接口IBankQueue類:將銀行隊(duì)

6、列的所有操作定義在里面:GetCallnumber:獲取服務(wù)號; 泛型類CSeqQueue<T>表示順序隊(duì)列:(1)、字段字段maxsize:表示循環(huán)隊(duì)列的最大容量;字段front:表示對頭,范圍是0maxsize-1;字段rear:表示隊(duì)尾,范圍也是0maxsize-1;字段data:表示數(shù)組用于存儲循環(huán)順序隊(duì)列中的數(shù)據(jù) 元素;(2)、屬性在類中并設(shè)置了隊(duì)頭屬性(front)、隊(duì)尾屬性(rear)、容量屬性(maxsize)、索引器屬性(this);(3)、方法在這個類中有接口IQueue中的一切方法;銀行叫號順序隊(duì)列類CSeqBankQueue類:該類實(shí)現(xiàn)IBankQueue接

7、口中定義的全部行為,通過繼承CSeqQueue<T>將已實(shí)現(xiàn)的全部行為繼承過來;此外,設(shè)置了一個新來顧客的服務(wù)號屬性Callnumber;通過方法GetCallnumber()獲得服務(wù)號;Form1類:Form1繼承了系統(tǒng)中的Form類;在Form1中使用了button、label、textBox等控件;使用了button_Click方法實(shí)現(xiàn)取號行為;Form2類:Form2也繼承了系統(tǒng)中的Form類;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法實(shí)現(xiàn)叫號行為;Form3類:Form3也繼承了系統(tǒng)中的Form類;在Form2

8、中也使用了button、label、textBox等控件;使用了button_Click方法實(shí)現(xiàn)叫號行為;Form4類:Form4也繼承了系統(tǒng)中的Form類;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法實(shí)現(xiàn)叫號行為;服務(wù)窗口ServiceWindow類:服務(wù)隊(duì)列的屬性BankQ;作為線程的方法Service();主程序Main()方法;2.4界面設(shè)計(jì)在這個程序中,總共設(shè)計(jì)了四個界面,一個取號界面,三個服務(wù)窗口界面:如圖所示:1、取號窗口:在取號窗口中,有了三個label控件,設(shè)置了“中國銀行”、“歡迎你”、“請點(diǎn)擊取號”字樣,使用bu

9、tton控件設(shè)置了取號按鈕,用了textBox控件用于顯示所取到的排隊(duì)號碼。2、服務(wù)窗口一號服務(wù)窗口二號服務(wù)窗口三號服務(wù)窗口在服務(wù)窗口中用了兩個label控件設(shè)置了“中國銀行”、“X號服務(wù)窗口”字樣,用了button控件設(shè)置了“下一個”按鈕,用textBox顯示“請X號到X號服務(wù)窗口”;2.5編碼namespace 銀行排隊(duì)叫號系統(tǒng) public partial class Form1 : Form IBankQueue bankQueue=new CSeqBankQueue(100);/新建一個隊(duì)列; CSeqQueue<int> q1 = new CSeqQueue<in

10、t>(100); int Callnumber;/號碼; public Form1() InitializeComponent(); Form2 f1 = new Form2(this.q1);/實(shí)例話Form; Form3 f2 = new Form3(this.q1); Form4 f3 = new Form4(this.q1); f1.Show();/使幾個窗口同時(shí)顯示; f2.Show(); f3.Show(); private void button1_Click(object sender, EventArgs e) if (!bankQueue.IsFull() Calln

11、umber = bankQueue.GetCallnumber(); textBox1.Text = "你的號碼是:" + Callnumber + "號," + "你前面還有" + bankQueue.GetLength() + "位,請耐心等待!" bankQueue .EnQueue(Callnumber );/所取得的號碼進(jìn)隊(duì); q1.EnQueue(Callnumber); else Console .WriteLine ("現(xiàn)在業(yè)務(wù)繁忙,請稍后再來!"); Console .Writ

12、eLine (); namespace 銀行排隊(duì)叫號系統(tǒng) public partial class Form3 : Form CSeqQueue<int> _q1 = new CSeqQueue<int>(100); public Form3(CSeqQueue<int> q1)/構(gòu)造函數(shù),應(yīng)用Form1所建立的隊(duì)列; InitializeComponent(); this._q1 = q1; private void button1_Click(object sender, EventArgs e) if (!_q1.IsEmpty() textBox1.

13、Text = ("請" + _q1.DeQueue() + "號到二號窗口!"); else MessageBox.Show("現(xiàn)在沒有客人!"); 2.6測試代碼編寫完成后,執(zhí)行調(diào)試-開始執(zhí)行,看是否能成功生成,若能的話,點(diǎn)擊取號看服務(wù)窗口是否按要求運(yùn)作;若不能的話,根據(jù)所提供的錯誤提示,一步步的調(diào)試,直到成功生成為止。下圖為取到八號,且六號正在被服務(wù)時(shí)各顯示器上的顯示:三、總結(jié)在整個過程中,應(yīng)該注意以下幾點(diǎn):1.要求利用面向?qū)ο蟮姆椒ㄒ约瓣?duì)列數(shù)據(jù)結(jié)構(gòu)來完成系統(tǒng)的設(shè)計(jì);2. 在設(shè)計(jì)的過程中,建立清晰的類層次;3. 在系統(tǒng)設(shè)計(jì)中要分析

14、和定義各個類,每個類中要有各自的屬性和方法;4. 要運(yùn)用面向?qū)ο蟮臋C(jī)制來實(shí)現(xiàn)系統(tǒng)功能。通過對完成這次課程設(shè)計(jì),加深了對隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)的理解,掌握了隊(duì)列數(shù)據(jù)結(jié)構(gòu)極其算法;此外也能夠更加熟練的使用button。Label。textBox等控件。參考文獻(xiàn)雷軍環(huán)、鄧文達(dá)、劉震編著 數(shù)據(jù)結(jié)構(gòu)(C#語言版)錢哨、李揮劍、李繼哲編著 C#WinForm實(shí)踐開發(fā)教程鄭宇軍編著 C#面向?qū)ο蟪绦蛟O(shè)計(jì)附錄:源代碼IQueue接口代碼:using System;namespace QueueDs interface IQueue<T> void EnQueue(T elem); /入隊(duì)列操作 T De

15、Queue(); /出隊(duì)列操作 T GetFront(); /取對頭元素 int GetLength(); /求隊(duì)列的長度 bool IsEmpty(); /判斷隊(duì)列是否為空 void Clear(); /清空隊(duì)列 bool IsFull();/判斷是否為滿,在順序隊(duì)列中實(shí)現(xiàn)該算法,在鏈?zhǔn)疥?duì)列中代碼實(shí)現(xiàn)為空 IBankQueue接口代碼:using System;namespace QueueDs interface IBankQueue:IQueue<int> int GetCallnumber();/獲得服務(wù)號碼 順序隊(duì)列代碼:using System;namespace Qu

16、eueDs public class CSeqQueue<T>:IQueue<T> private int maxsize; /循環(huán)順序隊(duì)列的容量 private T data; /數(shù)組,用于存儲循環(huán)順序隊(duì)列中的數(shù)據(jù)元素 private int front; /指示最近一個己經(jīng)離開隊(duì)列的元素所占的位置 private int rear; /指示最近一個進(jìn)行入隊(duì)列的元素的位置 /索引器 public T thisint index get return dataindex; set dataindex = value; /容量屬性 public int Maxsize g

17、et return maxsize; set maxsize = value; /隊(duì)頭指示器屬性 public int Front get return front; set front = value; /隊(duì)尾指示器屬性 public int Rear get return rear; set rear = value; /初始化隊(duì)列 public CSeqQueue() public CSeqQueue(int size) data = new Tsize; maxsize = size; front = rear = -1; /入隊(duì)操作 public void EnQueue(T ele

18、m) if (IsFull() Console.WriteLine("Queue is full"); return; rear=(rear + 1) % maxsize; ; datarear = elem; /出隊(duì)操作 public T DeQueue() if (IsEmpty() Console.WriteLine("Queue is empty"); return default(T); front = (front + 1) % maxsize; return datafront; /獲取隊(duì)頭數(shù)據(jù)元素 public T GetFront()

19、if (IsEmpty() Console.WriteLine("Queue is empty!"); return default(T); return data(front+1)%maxsize; /求循環(huán)順序隊(duì)列的長度 public int GetLength() return (rear - front + maxsize) % maxsize; /判斷循環(huán)順序隊(duì)列是否為滿 public bool IsFull() if (front = -1 && rear = maxsize - 1) | (rear + 1) % maxsize = front

20、) return true; else return false; /清空循環(huán)順序隊(duì)列 public void Clear() front = rear = -1; /判斷循環(huán)順序隊(duì)列是否為空 public bool IsEmpty() if (front = rear) return true; else return false; 銀行順序隊(duì)列代碼:using System;using System.Threading;namespace QueueDs /銀行叫號順序隊(duì)列類 class CSeqBankQueue:CSeqQueue<int>,IBankQueue priva

21、te int callnumber;/記錄系統(tǒng)自動產(chǎn)生的新來顧客的服務(wù)號 /叫號屬性 public int Callnumber get return callnumber; set callnumber = value; public CSeqBankQueue () public CSeqBankQueue(int size):base(size) /獲得服務(wù)號碼 public int GetCallnumber() if (IsEmpty() && callnumber = 0) callnumber = 1; else callnumber+; return calln

22、umber; /服務(wù)窗口類 class ServiceWindow IBankQueue bankQ; public IBankQueue BankQ 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.CurrentThre

23、ad.Name); Form1代碼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 銀行排隊(duì)叫號系統(tǒng) public partial class Form1 : Form IBankQueue bankQueue=new CSeqBankQueue(1

24、00); CSeqQueue<int> q1 = new CSeqQueue<int>(100); int Callnumber; 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

25、(!bankQueue.IsFull() Callnumber = bankQueue.GetCallnumber(); textBox1.Text = "你的號碼是:" + Callnumber + "號," + "你前面還有" + bankQueue.GetLength() + "位,請耐心等待!" bankQueue .EnQueue(Callnumber ); q1.EnQueue(Callnumber); else Console .WriteLine ("現(xiàn)在業(yè)務(wù)繁忙,請稍后再來!"

26、); Console .WriteLine (); private void Form1_Load(object sender, EventArgs 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 銀行排隊(duì)叫號系統(tǒng) publ

27、ic partial class Form2 : Form CSeqQueue<int> _q1 = new CSeqQueue<int>(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()+ "號到一號窗口"

28、; else MessageBox.Show("現(xiàn)在沒有客人!"); private void Form2_Load(object 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;names

29、pace 銀行排隊(duì)叫號系統(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 = ("請" + _q1.DeQueue() + "號到二號窗口!"); else MessageBox.Show("現(xiàn)在沒有客人!"); private void Form3_Load(object s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論