C#银行叫号系统课程设计Word格式文档下载.docx
- 文档编号:20936267
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:29
- 大小:223.12KB
C#银行叫号系统课程设计Word格式文档下载.docx
《C#银行叫号系统课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C#银行叫号系统课程设计Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
书面报告:
学习态度=6:
3:
1,没有通过上机检查的其成绩直接记录不及格。
目录
1设计内容与要求……………………………………………………………………………
2.设计说明……………………………………………………………………………………
2.1问题描述与功能设计…………………………………………………………………
2.2算法与数据结构………………………………………………………………………
2.3类定义(函数定义)……………………………………………………………………
2.4界面设计………………………………………………………………………………
2.5编码……………………………………………………………………………………
2.6测试……………………………………………………………………………………
3总结…………………………………………………………………………………………
参考文献……………………………………………………………………………………
附录A:
源代码……………………………………………………………………………
一、设计内容与要求
1、设计内容
1)、设计窗口,服务窗口;
2)、编写代码,实现各种算法,完成排队叫号问题;
2、设计要求
1.通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2.学生必须仔细研读《数据结构》课程设计任务书要求,以学生自学为主、指导教师指导为辅,独立完成课程设计的任务,有问题及时主动与指导教师沟通。
3.在课程设计中,学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向指导教师汇报。
4.编程语言:
C#语言。
二、设计说明
2.1问题描述与功能设计
1、问题描述
目前,在以银行营业大厅为代表的窗口业务,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升企业形象的主要障碍。
排队叫号系统的使用将成为改变这种情况的有力手段。
排队系统完全模拟了人群排队的全过程,通过取票进队。
排队等待、叫号服务等功能,很好的解决了客户在服务机构办理业务是所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦,把顾客等待的烦恼变成了一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。
排队叫号软件的具体操作流程为:
4、顾客到窗口办理
休息区的顾客听到呼叫就到响应窗口进行一对一服务。
3、营业员按钮呼叫
窗口操作员按“下一位”,当前窗口就显示顾客排队号并语音呼叫“请XX到X号窗口”
2、顾客休息等待
取到排队号的顾客在休息区休息等待,注意大厅的提示信息
1、顾客取号
需要办理业务的顾客到取票机前取号,并获得打印出的排队号票
2、功能设计
1)使用数组以及C#接口和范型技术实现通用的队列功能;
2.2算法与数据结构
在银行排队叫号软件中,首先要找到一种数据结构来存放顾客所得到的服务号,这些服务号表示客户的请求服务的先后顺序,也表示客户被服务的先后顺序。
先来的客户被服务:
在这个程序中,主要运用了队列这种结构:
1、队列是一种特殊的线性表,是一种只允许在表的一端插入操作而在另一端进行删除操作的线性表。
进行插入操作的表尾称为队尾(Rear),进行删除操作的头部称为对头(Front)。
当队列中没有数据元素时称为空队列(EmptyQueue)。
队列通常记为Q=(a1,a2,…,an),a1为对头元素,an为队尾元素。
这n个元素是按照a1,a2,…an的次序依次入队的,出队的顺序与入队顺序相同,a1第一个出队,an最后一个出队。
队列的结构示意图如下:
出队a1a2…an入队
2、队列的特征:
队列的操作是按照“先进先出”或“后进后出”的原则进行的。
3、队列的基本操作:
(1)入队列操作:
EnQueue(Telem);
(2)出队列操作:
DeQueue();
(3)取队头元素:
GetFront();
(4)求队列的长度;
GetLength();
(5)判断队列是否为空:
IsEmpty();
(6)清空操作:
Clear();
(7)判断是否为满:
IsFull();
在这个程序中用循环顺序队列;
当队尾指示器rear到达数组上限时,如果还有数据元素入队并且数组的第0个空间空闲时,队尾指示器rear指向数组的0端。
队尾指示器rear的值不一定大于队头Front的值,并且队满和队空的条件是相同的,为rear==front;
2.3类定义(函数定义)
在这个程序中,定义了一下及几种类:
接口IQueue类:
将队列的基本操作定义在接口IQueue中,如左图所示:
Clear:
清空操作,是队列为空;
DeQueue:
出队列操作,将队头元素从队列中取出;
EnQueue:
入队列操作,将值为elem的新数据元素添加到队尾;
GetFront:
取队头元素,返回队头元素的值;
GetLength:
求队列的长度,返回队列中数据元素的个数;
IsEmpty:
判断队列是否为空,如果对列为空,返回true,否则返回false;
IsFull:
判断是否为满,如果对列为满返回true,否则返回false;
接口IBankQueue类;
将银行队列的所有操作定义在里面:
GetCallnumber:
获取服务号;
泛型类CSeqQueue<
T>
表示顺序队列:
(1)、字段
字段maxsize:
表示循环队列的最大容量;
字段front:
表示对头,范围是0~maxsize-1;
字段rear:
表示队尾,范围也是0~maxsize-1;
字段data:
表示数组用于存储循环顺序队列中的数据元素;
(2)、属性
在类中并设置了队头属性(front)、队尾属性(rear)、容量属性(maxsize)、索引器属性(this);
(3)、方法
在这个类中有接口IQueue中的一切方法;
银行叫号顺序队列类CSeqBankQueue类:
该类实现IBankQueue接口中定义的全部行为,通过继承CSeqQueue<
将已实现的全部行为继承过来;
此外,设置了一个新来顾客的服务号属性Callnumber;
通过方法GetCallnumber()获得服务号;
Form1类:
Form1继承了系统中的Form类;
在Form1中使用了button、label、textBox等控件;
使用了button_Click方法实现取号行为;
Form2类:
Form2也继承了系统中的Form类;
在Form2中也使用了button、label、textBox等控件;
使用了button_Click方法实现叫号行为;
Form3类:
Form3也继承了系统中的Form类;
Form4类:
Form4也继承了系统中的Form类;
服务窗口ServiceWindow类:
服务队列的属性BankQ;
作为线程的方法Service();
主程序Main()方法;
2.4界面设计
在这个程序中,总共设计了四个界面,一个取号界面,三个服务窗口界面:
如图所示:
1、取号窗口:
在取号窗口中,有了三个label控件,设置了“中国银行”、“欢迎你”、“请点击取号”字样,使用button控件设置了取号按钮,用了textBox控件用于显示所取到的排队号码。
2、服务窗口
一号服务窗口
二号服务窗口
三号服务窗口
在服务窗口中用了两个label控件设置了“中国银行”、“X号服务窗口”字样,用了button控件设置了“下一个”按钮,用textBox显示“请X号到X号服务窗口”;
2.5编码
namespace银行排队叫号系统
{
publicpartialclassForm1:
Form
{
IBankQueuebankQueue=newCSeqBankQueue(100);
//新建一个队列;
CSeqQueue<
int>
q1=newCSeqQueue<
(100);
intCallnumber;
//号码;
publicForm1()
InitializeComponent();
Form2f1=newForm2(this.q1);
//实例话Form;
Form3f2=newForm3(this.q1);
Form4f3=newForm4(this.q1);
f1.Show();
//使几个窗口同时显示;
f2.Show();
f3.Show();
}
privatevoidbutton1_Click(objectsender,EventArgse)
if(!
bankQueue.IsFull())
Callnumber=bankQueue.GetCallnumber();
textBox1.Text="
你的号码是:
"
+Callnumber+"
号,"
+"
你前面还有"
+bankQueue.GetLength()+"
位,请耐心等待!
;
bankQueue.EnQueue(Callnumber);
//所取得的号码进队;
q1.EnQueue(Callnumber);
else
Console.WriteLine("
现在业务繁忙,请稍后再来!
);
Console.WriteLine();
}
publicpartialclassForm3:
_q1=newCSeqQueue<
publicForm3(CSeqQueue<
q1)//构造函数,应用Form1所建立的队列;
this._q1=q1;
_q1.IsEmpty())
textBox1.Text=("
请"
+_q1.DeQueue()+"
号到二号窗口!
MessageBox.Show("
现在没有客人!
2.6测试
代码编写完成后,执行调试-开始执行,看是否能成功生成,若能的话,点击取号看服务窗口是否按要求运作;
若不能的话,根据所提供的错误提示,一步步的调试,直到成功生成为止。
下图为取到八号,且六号正在被服务时各显示器上的显示:
三、总结
在整个过程中,应该注意以下几点:
1.要求利用面向对象的方法以及队列数据结构来完成系统的设计;
2.在设计的过程中,建立清晰的类层次;
3.在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;
4.要运用面向对象的机制来实现系统功能。
通过对完成这次课程设计,加深了对队列这种数据结构的理解,掌握了队列数据结构极其算法;
此外也能够更加熟练的使用button。
Label。
textBox等控件。
参考文献
雷军环、邓文达、刘震编著《数据结构(C#语言版)》
钱哨、李挥剑、李继哲编著《C#WinForm实践开发教程》
郑宇军编著《C#面向对象程序设计》
附录:
源代码
IQueue接口代码:
usingSystem;
namespaceQueueDs
interfaceIQueue<
voidEnQueue(Telem);
//入队列操作
TDeQueue();
//出队列操作
TGetFront();
//取对头元素
intGetLength();
//求队列的长度
boolIsEmpty();
//判断队列是否为空
voidClear();
//清空队列
boolIsFull();
//判断是否为满,在顺序队列中实现该算法,在链式队列中代码实现为空
IBankQueue接口代码:
interfaceIBankQueue:
IQueue<
intGetCallnumber();
//获得服务号码
顺序队列代码:
publicclassCSeqQueue<
:
privateintmaxsize;
//循环顺序队列的容量
privateT[]data;
//数组,用于存储循环顺序队列中的数据元素
privateintfront;
//指示最近一个己经离开队列的元素所占的位置
privateintrear;
//指示最近一个进行入队列的元素的位置
//索引器
publicTthis[intindex]
get
returndata[index];
set
data[index]=value;
//容量属性
publicintMaxsize
returnmaxsize;
maxsize=value;
//队头指示器属性
publicintFront
returnfront;
front=value;
//队尾指示器属性
publicintRear
returnrear;
rear=value;
//初始化队列
publicCSeqQueue(){}
publicCSeqQueue(intsize)
data=newT[size];
maxsize=size;
front=rear=-1;
//入队操作
publicvoidEnQueue(Telem)
if(IsFull())
Console.WriteLine("
Queueisfull"
return;
rear=(rear+1)%maxsize;
;
data[rear]=elem;
//出队操作
publicTDeQueue()
if(IsEmpty())
Queueisempty"
returndefault(T);
front=(front+1)%maxsize;
returndata[front];
//获取队头数据元素
publicTGetFront()
Queueisempty!
returndata[(front+1)%maxsize];
//求循环顺序队列的长度
publicintGetLength()
return(rear-front+maxsize)%maxsize;
//判断循环顺序队列是否为满
publicboolIsFull()
if((front==-1&
&
rear==maxsize-1)||(rear+1)%maxsize==front)
returntrue;
returnfalse;
//清空循环顺序队列
publicvoidClear()
//判断循环顺序队列是否为空
publicboolIsEmpty()
if(front==rear)
银行顺序队列代码:
usingSystem.Threading;
//银行叫号顺序队列类
classCSeqBankQueue:
CSeqQueue<
IBankQueue
privateintcallnumber;
//记录系统自动产生的新来顾客的服务号
//叫号属性
publicintCallnumber
returncallnumber;
callnumber=value;
publicCSeqBankQueue(){}
publicCSeqBankQueue(intsize):
base(size){}
//获得服务号码
publicintGetCallnumber()
if((IsEmpty())&
callnumber==0)
callnumber=1;
callnumber++;
//服务窗口类
classServiceWindow
IBankQueuebankQ;
publicIBankQueueBankQ
returnbankQ;
bankQ=value;
publicvoidService()
while(true)
Thread.Sleep(10000);
bankQ.IsEmpty())
Console.WriteLine();
lock(bankQ)
请{0}号到{1}号窗口!
bankQ.DeQueue(),Thread.CurrentThread.Name);
Form1代码
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingQueueDs;
+bankQueue.GetLe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 银行 叫号 系统 课程设计