C#银行叫号系统课程设计_第1页
C#银行叫号系统课程设计_第2页
C#银行叫号系统课程设计_第3页
C#银行叫号系统课程设计_第4页
C#银行叫号系统课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word课程设计任务书课程名称:课程设计1(数据结构)设计题目:银行排队叫号系统1. 问题描述: 目前,在以银行营业大厅为代表的窗口行业,大量客户的拥挤排队已成为了这些企事业单位改善效劳品质、提升营业形象的主要障碍。排队叫号系统的使用将成为改变这种状况的有力手段。排队系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号效劳等功能,代替了人们站队的辛苦,把顾客排队等待的烦恼变成一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。 排队叫号软件的具体操作流程为:l 顾客取效劳序号。当顾客抵达效劳大厅时,前往放置在入口处旁的取号机,并按一下其上的相应效劳按钮,取号时机自动打印出一张

2、效劳单。单上显示效劳号及该效劳号前面正在等待效劳的人数。l 银行职员呼叫顾客 ,顾客的效劳号就会按顺序的显示在显示屏上。当一位顾客办事完毕后,柜台银行职员只需按呼叫器相应键,即可自动呼叫下一位顾客。2. 功能要求:1使用数组或链表以及C#接口和范型技术实现通用的队列功能;2编写算法,利用队列模拟银行排队系统;3利用多窗口分别模拟顾客取效劳号、银行窗口效劳顾客。3.界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。 4. 技术要求:要求利用面向对象的方法以及队列数据结构来完成系统的设计;在设计的过程中,建立清晰的类层次; 在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法

3、;要求运用面向对象的机制来实现系统功能。 5创新要求在根本要求到达后,可以进行创新设计包括界面、功能、数据结构。6.课程设计时间:1周18课时7.课程设计的考核方式及评分方法1) 考核方式n 课程设计结束时,在机房当场验收。n 教师提供测试数据,检查运行结果是否正确。n 答复教师提出的问题。n 学生提交课程设计文档A4纸打印2) 评分方法上机检查及辩论 : 书面报告 : 学习态度 = 6 : 3 : 1,没有通过上机检查的其成绩直接记录不及格。目录1 设计内容与要求 2.设计说明 2.1 问题描述与功能设计 2.2 算法与数据结构 2.3 类定义(函数定义) 2.4 界面设计 2.5 编码 2

4、.6 测试3 总结参考文献 附录A:源代码一、设计内容与要求1、设计内容 1、设计窗口,效劳窗口;2、编写代码,实现各种算法,完成排队叫号问题;2、设计要求1通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深课程根本内容的理解。同时,在程序设计方法以及上机操作等根本技能和科学作风方面受到比拟系统和严格的训练。2学生必须仔细研读 数据结构 课程设计任务书要求,以学生自学为主、指导教师指导为辅,独立完成课程设计的任务,有问题及时主动与指导教师沟通。3在课程设计中,学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间方案,并在课程设计过程中

5、不断检测自己的方案完成情况,及时向指导教师汇报。4编程语言:C#语言。二、设计说明2.1问题描述与功能设计1、问题描述 目前,在以银行营业大厅为代表的窗口业务,大量客户的拥挤排队已成为了这些企事业单位改善效劳品质、提升企业形象的主要障碍。排队叫号系统的使用将成为改变这种情况的有力手段。排队系统完全模拟了人群排队的全过程,通过取票进队。排队等待、叫号效劳等功能,很好的解决了客户在效劳机构办理业务是所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦,把顾客等待的烦恼变成了一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。 排队叫号软件的具体操作流程为:4、顾客到窗口办理 休息区的

6、顾客听到呼叫就到响应窗口进行一对一效劳。3、营业员按钮呼叫 窗口操作员按“下一位,当前窗口就显示顾客排队号并语音呼叫“请XX到X号窗口2、顾客休息等待 取到排队号的顾客在休息区休息等待,注意大厅的提示信息1、顾客取号需要办理业务的顾客到取票机前取号,并获得打印出的排队号票2、功能设计1使用数组以及C#接口和范型技术实现通用的队列功能;2编写算法,利用队列模拟银行排队系统;3利用多窗口分别模拟顾客取效劳号、银行窗口效劳顾客。2.2算法与数据结构在银行排队叫号软件中,首先要找到一种数据结构来存放顾客所得到的效劳号,这些效劳号表示客户的请求效劳的先后顺序,也表示客户被效劳的先后顺序。先来的客户被效劳

7、:在这个程序中,主要运用了队列这种结构:1、 队列是一种特殊的线性表,是一种只允许在表的一端插入操作而在另一端进行删除操作的线性表。进行插入操作的表尾称为队尾Rear,进行删除操作的头部称为对头Front。当队列中没有数据元素时称为空队列(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;在这个程序中用循环顺序队列;当队尾指示器rear到达数组上限时,如果还有数据元素入队并且数组的第0个空间空闲时,队尾指示器rear指向数组的0端。队尾指示器rear的值不一定大于队头Front的值,并且队满和队空的条件是相同的,为rear=front;2.3类定义函数定义在这个程序中,定义了一下及几种类:接口IQueue类:将队列的根本

9、操作定义在接口IQueue中,如左图所示:Clear:清空操作,是队列为空;DeQueue:出队列操作,将队头元素从队列中取出;EnQueue:入队列操作,将值为elem的新数据元素添加到队尾;GetFront:取队头元素,返回队头元素的值;GetLength:求队列的长度,返回队列中数据元素的个数;IsEmpty:判断队列是否为空,如果对列为控,返回true,否那么返回false;IsFull:判断是否为满,如果对列为满返回true,否那么返回false;接口IBankQueue类:将银行队列的所有操作定义在里面:GetCallnumber:获取效劳号; 泛型类CSeqQueue<T&

10、gt;表示顺序队列:1、字段字段maxsize:表示循环队列的最大容量;字段front:表示对头,范围是0maxsize-1;字段rear:表示队尾,范围也是0maxsize-1;字段data:表示数组用于存储循环顺序队列中的数据 元素;2、属性在类中并设置了队头属性front、队尾属性rear、容量属性maxsize、索引器属性this;3、方法在这个类中有接口IQueue中的一切方法;银行叫号顺序队列类CSeqBankQueue类:该类实现IBankQueue接口中定义的全部行为,通过继承CSeqQueue<T>将已实现的全部行为继承过来;此外,设置了一个新来顾客的效劳号属性C

11、allnumber;通过方法GetCallnumber获得效劳号;Form1类:Form1继承了系统中的Form类;在Form1中使用了button、label、textBox等控件;使用了button_Click方法实现取号行为;Form2类:Form2也继承了系统中的Form类;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法实现叫号行为;Form3类:Form3也继承了系统中的Form类;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法实现叫号行为;Form4类:Form4也继

12、承了系统中的Form类;在Form2中也使用了button、label、textBox等控件;使用了button_Click方法实现叫号行为;效劳窗口ServiceWindow类:效劳队列的属性BankQ;作为线程的方法Service;主程序Main方法;2.4界面设计在这个程序中,总共设计了四个界面,一个取号界面,三个效劳窗口界面:如下图:1、取号窗口:在取号窗口中,有了三个label控件,设置了“中国银行、“欢送你、“请点击取号字样,使用button控件设置了取号按钮,用了textBox控件用于显示所取到的排队号码。2、效劳窗口一号效劳窗口二号效劳窗口三号效劳窗口在效劳窗口中用了两个lab

13、el控件设置了“中国银行、“X号效劳窗口字样,用了button控件设置了“下一个按钮,用textBox显示“请X号到X号效劳窗口;2.5编码namespace 银行排队叫号系统 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 ("现在业务繁忙,请稍后再来!"); Console .WriteLine (); namespace 银行排队叫号系统 public partial class Form3 : Form CSeqQueue<int

16、> _q1 = new CSeqQueue<int>(100); public Form3(CSeqQueue<int> q1)/构造函数,应用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("现在没有客人!"); 2.6测试代码编写完成后,执行调试-开始执行,看是否能成功生成,假设能的话,点击取号看效劳窗口是否按要求运作;假设不能的话,根据所提供的错误提示,一步步的调试,直到成功生成为止。下列图为取到八号,且六号正在被效劳时各显示器上的显示:三、总结在整个过程中,应该注意以下几点:1.要求利用面向对象的方法以及队列数据结构来完成系统的设计;2. 在设计的过程中,建立清晰的类层次;3. 在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;4. 要运用面向对象的机制来实现系统功能。通过对完成这次课程设计,加深了对队列这种数据结构的理解,掌握了队列

18、数据结构极其算法;此外也能够更加熟练的使用button。Label。textBox等控件。参考文献雷军环、邓文达、刘震编著 数据结构C#语言版 钱哨、李挥剑、李继哲编著 C#WinForm实践开发教程 郑宇军编著 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();/判断是否为满,在顺序队列中实现该算法,在链式队列中代码实现为空 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、/循环顺序队列的容量 private T data; /数组,用于存储循环顺序队列中的数据元素 private int front; /指示最近一个己经离开队列的元素所占的位置 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; /获取队头数据元素 public T GetFront() if (IsEmpty() Console.WriteLine("Queue is empty!"); return defaul

23、t(T); return data(front+1)%maxsize; /求循环顺序队列的长度 public int GetLength() return (rear - front + maxsize) % maxsize; /判断循环顺序队列是否为满 public bool IsFull() if (front = -1 && rear = maxsize - 1) | (rear + 1) % maxsize = front) return true; else return false; /清空循环顺序队列 public void Clear() front = rea

24、r = -1; /判断循环顺序队列是否为空 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;/记录系统自动产生的新来顾客的效劳号 /叫号属性 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 银行排队叫号系统 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 ("现在业务繁忙,请稍后再来!"); 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 银行排队叫号系统 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("现在没有客人!"); 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 银行排队叫号系统 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论