

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书 、设计内容与要求 1、设计内容 1) 、设计窗口,服务窗口; 2) 、编写代码,实现各种算法,完成排队叫号冋题; 二、设计说明 2.1 问题描述与功能设计 1、问题描述 目前,在以银行营业大厅为代表的窗口业务,大量客户的拥挤排队已成为了这 些企事业单位改善服务品质、提升企业形象的主要障碍。排队叫号系统的使用 将成为改变这种情况的有力手段。排队系统完全模拟了人群排队的全过程,通 过取票进队。排队等待、叫号服务等功能,很好的解决了客户在服务机构办理 业务是所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦,把顾客 等待的烦恼变成了一段难得的休闲时光,使客户拥有了一个自由的空间和
2、一份 美好的心情。 排队叫号软件的具体操作流程为: 2、功能设计 1) 使用数组以及C#接口和范型技术实现通用的队列功能; 2) 编写算法,利用队列模拟银行排队系统; 3) 利用多窗口分别模拟顾客取服务号、银行窗口服务顾客 2.2 算法与数据结构 在银行排队叫号软件中,首先要找到一种数据结构来存放顾客所得到的服务 号,这些服务号表示客户的请求服务的先后顺序,也表示客户被服务的先后顺 序。先来的客户被服务: 在这个程序中,主要运用了队列这种结构: 1、队列是一种特殊的线性表,是一种只允许在表的一端插入操作而在另一端进 1、顾客取 2、顾客休息 号 等待 需要办 取到排队 理业务的 号的顾客在 顾
3、客到取 休息区休息 票机前取 等待,注意 号,并获 大厅的提示 得打印出 7 信息 / 3 的排队号丿 、 J r 3、营业员按钮 4、顾客到 呼叫 窗口办理 窗口操作员按 休息区的 “下一位”,当 顾客听到 前窗口就显示顾 呼叫就到 客排队号并语音 响应窗口 呼叫“请 XX 至 U 进行一对 JX 号窗口” 0 一服务。 _/ 行删除操作的线性表。进行插入操作的表尾称为队尾( Rear),进行删除操 作的头部称为对头(Front )。当队列中没有数据元素时称为空队列 (Empty Queue)。队列通常记为 Q=( a1,a2,an ) ,a1为对头元素,an为队尾元 素。这n个元素是按照a
4、1,a2,an的次序依次入队的,出队的顺序与入队 顺序相同,al第一个出队,an最后一个出队。队列的结构示意图如下: 出队 v耳1 a2 an 入队 2、队列的特征 - 队列的操作是按照“先进先出”或“后进后出” 的原则进行的。 3、队列的基本操作: (1) 入队列操作 (2) 出队列操作 (3) 取队头元素 EnQueue(T elem); DeQueue(); GetFront (); (4) 求队列的长度;GetLength (); (5) 判断队列是否为空:IsEmpty ( (6) 清空操作:Clear (); (7) 判断是否为满:IsFull (); 在这个程序中用循环顺序队列
5、当队尾指示器rear到达数组 上限时,如果还有数据元素 入队并且数在这个程序中,定义了一下及几种类: 接口 IQueue类: 将队列的基本操作定义在接口 IQueue中,如 所示: Clear :清空操作,是队列为空; DeQueue:出队列操作,将队头元素从队列中 出; EnQueue:入队列操作,将值为elem的新数据 添加到队尾; GetFro nt:取队头元素,返回队头元素的值; GetLength:求队列的长度,返回队列中数据 的个数; IsEmpty:判断队列 是否为 空,如果对 列为 JQueue ; Generic Interface 日讎 Ciesr v DeQueue v
6、tnQueue V GetFront GetLength V IsEmpty v W/ 义) 左图 取 元素 元素 控, 返回true,否则返回false; IsFull:判断是否为满,如果对列为满返回 true,否则返回false; 接口 IBankQueue类: 将银行队列的所有操作定义在里面: GetCal In umber:获取服务号; 泛型类CSeqQueue表示顺序队列: (1) 、字段 字段maxsize:表示循环队列的最大容量; 字段front:表示对头,范围是 0maxsize-1。 字段rear:表示队尾,范围也是 0maxsize-1; 字段data :表示数组用于存储循
7、环顺序队列中的数据 兀素; (2) 、属性在类中并设置了队头属性(front ) 队尾属性(rear)、容量属性 (maxsize)、索引器属性(this); (3) 、方法 在这个类中有接口 IQueue中的一切方法; . IBankQueue CSeq Ba nkQueue Class V C5eqQueue*=int callnumber 脅 Cllnumber i-方5去 v CSeqS ankQu, V GetCallnumber CSeqBa nkQueue类: 该类实现IBankQueue接口中定义的全部行为,通过继 承CSeqQueuevT将已实现的全部行为继承过来;此 外,设
8、置了一个新来顾客的服务号属性 Call number ;通 过方法GetCallnumber ()获得服务号;IBankQueue 仝 Interface +IQueue &方去 * GetC3- number Generi c Class 1-字蛊 data front maxsize rear - Front Maxsize Rflar this 3施 Clear CSeqQueue J DeQueue EnQueue 沖 GetFront GetLength IsEmpty IsFull 银行叫号顺 序队列类 IQueue Forml class Form biankQueue
9、buttortl Callnumber components labell I 鼻 be nt s labelll Iabel2 textBoxl T|* buttonl_Click 匣辛 Dispose 7 FOrm2 ”严 Form2_Load I nit i ai I i ze Comp butt on、label、textBox 件; 使用了 button_Click方法实现叫号行为; Form4 Class i Form qi button! comporrents la bell labels texlBoxl -方去 jV b uttonl_CI ic k 孑* Dispose
10、V Form4 a* InitializeComp (); J- - - 、 1 Program ;日方去 Form2 类: Form2也继承了系统中的 Form 类; 在 Form2中也使用了 button、 label、textBox 等控件; 使用了 button_Click方法实现叫 号行为; Form3 Cla Form 我_qi b uttorl W components # labelll 診 labeU M text Boxl butt o nl_CI i ck 声 Disport 也 Form3 Initialize Comp Form4 类: Form4也继承了系 Form
11、 类; 在Form2中也使用 button、label、textBox 等控件; 使用了 button Click方法实现叫号行为; Servicewindow Class =)字段 T/ bankQ 3* BankQ 日方去 7 Service 统中的 等控 统中的 了 服务窗口 ServiceWindow 类: 服务队列的属性BankQ; 作为线程的方法Service 主程序Main ()方法; 2.4 界面设计 在这个程序中,总共设计了四个界面,一个取号界面,三个服务窗口界面:如 图所示: 1、取号窗口: :Z . . . . . V I 唱她族 =| 中国银行 欢迎你 请点击取号: 取
12、号 在取号窗口中,有了三个label控件,设置了 “中国银行”、“欢迎你”、“请 点击取号”字样,使用button控件设置了取号按钮,用了 textBox控件用于显示 所取到的排队号码。 2、服务窗口 i r :明烦迎便用 innii 中国银石 号脈务窗口 下一个 号服务窗口 二号服务窗口 三号服务窗口 在服务窗口中用了两个label控件设置了 “中国银行”、“ X号服务窗口”字 样,用了 button控件设置了“下一个”按钮,用 textBox显示“请X号到X号 服务窗口”; 2.5 编码 namespace银 行排队叫号系统 publicpartialclass Forml : Form
13、IBankQueue bankQueue=newCSeqBankQueueiOO) 。 / 新建一个队列; CSeqQueu q1 = newCSeqQueueint (100)。 int Callnumber 。 / 号码; public Form1() lnitializeComponent() Form2 f1 = newForm2( this .q1) 。 / 实例话 Form; Form3 f2 = newForm3( this .q1) 。 Form4 f3 = newForm4( this .q1) 。 f1.Show() 。 / 使几个窗口同时显示; f2.Show() 。 f
14、3.Show() 。 privatevoid button1_Click( object sender, EventArgs e) if (!bankQueue.IsFull() Callnumber = bankQueue.GetCallnumber() 。 textBox1.Text = 你的号码是: + Callnumber + 号, + 你前面还有 bankQueue.GetLength() + 位,请耐心等待 ! 。 bankQueue .EnQueue(Callnumber ) 。 / 所取得的号码进队; q1.EnQueue(Callnumber) 。 else Console
15、.WriteLine ( 现在业务繁忙,请稍后再来! ) 。 Console .WriteLine () 。 namespace!艮行排队叫号系统 publicpartialclass Form3 : Form CSeqQueue _q1 = newCSeqQueu(100) 。 public Form3( CSeqQueueint q1) 构造函数,应用 Forml所建立的队列; InitializeComponent() 。 this ._q1 = q1 。 privatevoid button1_Click( object sender, EventArgs e) if (!_q1.Is
16、Empty() textBox1.Text = ( 请 + _q1.DeQueue() + 号到二号窗口! )。 else MessageBoxShow(现在没有客人!)。 2.6 测试 代码编写完成后,执行调试-开始执行,看是否能成功生成,若能的话,点击取 号看服务窗口是否按要求运作;若不能的话,根据所提供的错误提示,一步步 的调试,直到成功生成为止。下图为取到八号,且六号正在被服务时各显示器 上的显示: 七規迄便用 中国银行 欢迎你 你的号码是:8 号、你前面还有 1 位,请耐心等待! 眾迎便用 回 Q?趣使月 EZ1 回 中国银行 -号朋势窗口 下一个 请碍至卜号窗口 三、总结 在整个过
17、程中,应该注意以下几点: 1. 要求利用面向对象的方法以及队列数据结构来完成系统的设 计; 2. 在设计的过程中,建立清晰的类层次; 3. 在系统设计中要分析和定义各个类,每个类中要有各自的 属性和方法; 4. 要运用面向对象的机制来实现系统功能。 通过对完成这次课程设计,加深了对队列这种数据结构CZ) 回 SS 请点击取号: 取 中国银行 二号服务窗口 中国银行 三号服务窗谙 6 号到三号窗口 ! 的理解,掌握了队列数据结构极其算法;此外也能够更加熟练的使用 Label。 textBox 等控件。 参考文献 雷军环、邓文达、刘震编著 数据结构(C#语言版) 钱哨、李挥剑、李继哲编著 C#Wi
18、nForm 实践开发教程 郑宇军编著C#面向对象程序设计 附录:源代码 IQueue 接口代码: using System 。 namespace QueueDs interface IQueue void EnQueue(T elem) 。 / 入队列操作 T DeQueue() 。 / 出队列操作 T GetFront() 。 / 取对头元素 int GetLength() 。 / 求队列的长度 bool IsEmpty() 。 / 判断队列是否为空 void Clear() 。 / 清空队列 bool IsFull() 。 / 判断是否为满,在顺序队列中实现该算法,在链式队列中代码实现为
19、空 IBankQueue 接口代码: using System namespace QueueDs interface IBankQueue: IQueue int GetCallnumber() 。 / 获得服务号码 顺序队列代码: using System 。 namespace QueueDs publicclass CSeqQueue: IQueue / 索引器button。 privateint maxsize / 循环顺序队列的容量 private T data / 数组,用于存储循环顺序队列中的数据元素 privateint front / 指示最近一个己经离开队列的元素所占的位
20、置 privateint rear / 指示最近一个进行入队列的元素的位置 public T this int index get return dataindex 。 set dataindex = value / 容量属性 publicint Maxsize get return maxsize 。 set maxsize = value 。 / 队头指示器属性 publicint Front get return front 。 set front = value 。 / 队尾指示器属性 publicint Rear get return rear 。 setrear = value /
21、 初始化队列 public CSeqQueue() public CSeqQueue(int size) data = new Tsize 。 maxsize = size 。 front = rear = -1 。 / 入队操作 publicvoid EnQueue(T elem) if (IsFull() Console .WriteLine( Queue is full ) 。 return 。 rear=(rear + 1) % maxsize 。 。 datarear = elem 。 / 出队操作 public T DeQueue() if (IsEmpty() Console .
22、WriteLine( Queue is empty ) 。 returndefault (T) 。 front = (front + 1) % maxsize 。 return datafront 。 / 获取队头数据元素 public T GetFront() if (IsEmpty() Console .WriteLine( Queue is empty! ) returndefault (T) 。 return data(front+1)%maxsize 。 / 求循环顺序队列的长度 publicint GetLength() return (rear - front + maxsize
23、) % maxsize 。 / 判断循环顺序队列是否为满 publicbool IsFull() if (front = -1 & rear = maxsize - 1) | (rear + 1) % maxsize = front) returntrue 。 else returnfalse 。 / 清空循环顺序队列 publicvoid Clear() front = rear = -1 。 / 判断循环顺序队列是否为空 publicbool IsEmpty() if (front = rear) returntrue 。 else returnfalse 。 银行顺序队列代码:
24、using System 。 using System.Threading 。 namespace QueueDs / 银行叫号顺序队列类 class CSeqBankQueue: CSeqQueue, IBankQueue privateint callnumber 。 / 记录系统自动产生的新来顾客的服务号 / 叫号属性 publicint Callnumber get return callnumber 。 set callnumber = value 。 public CSeqBankQueue () public CSeqBankQueue(int size): / 获得服务号码 p
25、ublicint GetCallnumber() if (IsEmpty() & callnumber = 0) callnumber = 1 。 else callnumber+ 。 return callnumber 。 / 服务窗口类 class ServiceWindow IBankQueue bankQ 。 public IBankQueue BankQ get return bankQ 。 set bankQ = value 。 publicvoid Service() while ( true ) Thread .Sleep(10000) 。 if (!bankQ.IsE
26、mpty() Console .WriteLine() 。 lock (bankQ) Console .WriteLine( 请 0 号到 1 号窗口 ! , bankQ.DeQueue(), Thread .CurrentThread.Name) base(size) Form1 代码 using System 。 using System.Collections.Generic 。 using System.ComponentModel 。 using System.Data 。 using System.Drawing 。 using System.Linq 。 using System
27、.Text 。 using System.Windows.Forms 。 using QueueDs。 namespace!艮行排队叫号系统 publicpartialclass Form1 : Form IBankQueue bankQueue=newCSeqBankQueu(e100) 。 CSeqQueue q1 = newCSeqQueue(100) 。 int Callnumber 。 public Form1() InitializeComponent() 。 Form2 f1 = newForm2(this .q1) 。 Form3 f2 = newForm3(this .q1)
28、 。 Form4 f3 = newForm4(this .q1) 。 f1.Show() 。 f2.Show() 。 f3.Show() 。 privatevoid button1_Click( object sender, EventArgs e) if (!bankQueue.IsFull() Callnumber = bankQueue.GetCallnumber() textBox1.Text = 你的号码是: + Callnumber + 号, + 你前面还有 bankQueue.GetLength() + 位,请耐心等待 ! 。 bankQueue .EnQueue(Callnum
29、ber ) 。 q1.EnQueue(Callnumber) 。 else Console .WriteLine ( 现在业务繁忙,请稍后再来! ) 。 Console .WriteLine () 。 privatevoid Form1_Load( object sender, EventArgs e) Form2 的代码: using System 。 using System.Collections.Generic 。 using System.ComponentModel 。 using System.Data 。 using System.Drawing 。 using System.
30、Linq 。 using System.Text 。 using System.Windows.Forms 。 using QueueDs。 namespace!艮行排队叫号系统 publicpartialclass Form2 : Form CSeqQueue _q1 = newCSeqQueu(100) 。 public Form2( CSeqQueue q1) InitializeComponent() 。 this ._q1=q1 。 privatevoid button1_Click( object sender, EventArgs e) if (!_q1.IsEmpty () t
31、extBox1.Text = 请 +_q1.DeQueue()+ 号到一号窗口 。 else MessageBoxShow(现在没有客人!)。 privatevoid 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。 namespace!艮行排队叫号系统 publicpartialclass Form3 : Form CSeqQueue _q1 = newCSeqQueu(100) 。 public Form3( CSeqQueue q1) InitializeComponent() 。 this ._q1 = q1 。 privatevoid button1_Click( object sender, Ev
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生恋爱教育
- 关东煮创业计划书模板
- 2025年液位雷达项目发展计划
- 2025年水环境服务合作协议书
- 山西省运城市重点中学2025届高三最后一模化学试题含解析
- 多器官功能衰竭患者的护理
- 云南省保山市云县一中2025届高考仿真卷化学试题含解析
- 2025年金属包装容器及其附件合作协议书
- 2025年油气管道工程项目建议书
- 2025年家用美容、保健电器具项目建议书
- 凡事感恩学会感恩主题班会课件
- 进料检验流程图
- 先进制造模式课件
- 报关委托书 - 空白模板
- 国开电大电子商务概论阶段测验1参考答案
- 企业涉外经贸合作中的法律风险及其防范对策
- 面对自我 课程辅导教师读本
- 《水产动物营养与饲料学》课件第5课-矿物质营养
- 温室大棚项目绩效管理手册范文
- 叉车技能比武实施方案
- 丽声绘本教学课件《a-house-for-hedgehog》
评论
0/150
提交评论