C银行叫号系统课程设计Word格式.docx

上传人:b****4 文档编号:6817484 上传时间:2023-05-07 格式:DOCX 页数:31 大小:349.04KB
下载 相关 举报
C银行叫号系统课程设计Word格式.docx_第1页
第1页 / 共31页
C银行叫号系统课程设计Word格式.docx_第2页
第2页 / 共31页
C银行叫号系统课程设计Word格式.docx_第3页
第3页 / 共31页
C银行叫号系统课程设计Word格式.docx_第4页
第4页 / 共31页
C银行叫号系统课程设计Word格式.docx_第5页
第5页 / 共31页
C银行叫号系统课程设计Word格式.docx_第6页
第6页 / 共31页
C银行叫号系统课程设计Word格式.docx_第7页
第7页 / 共31页
C银行叫号系统课程设计Word格式.docx_第8页
第8页 / 共31页
C银行叫号系统课程设计Word格式.docx_第9页
第9页 / 共31页
C银行叫号系统课程设计Word格式.docx_第10页
第10页 / 共31页
C银行叫号系统课程设计Word格式.docx_第11页
第11页 / 共31页
C银行叫号系统课程设计Word格式.docx_第12页
第12页 / 共31页
C银行叫号系统课程设计Word格式.docx_第13页
第13页 / 共31页
C银行叫号系统课程设计Word格式.docx_第14页
第14页 / 共31页
C银行叫号系统课程设计Word格式.docx_第15页
第15页 / 共31页
C银行叫号系统课程设计Word格式.docx_第16页
第16页 / 共31页
C银行叫号系统课程设计Word格式.docx_第17页
第17页 / 共31页
C银行叫号系统课程设计Word格式.docx_第18页
第18页 / 共31页
C银行叫号系统课程设计Word格式.docx_第19页
第19页 / 共31页
C银行叫号系统课程设计Word格式.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C银行叫号系统课程设计Word格式.docx

《C银行叫号系统课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《C银行叫号系统课程设计Word格式.docx(31页珍藏版)》请在冰点文库上搜索。

C银行叫号系统课程设计Word格式.docx

(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;

privatevoidForm1_Load(objectsender,EventArgse)

Form2的代码:

publicpartialclassForm2:

publicForm2(CSeqQueue<

q1)

this._q1=q1;

_q1.IsEmpty())

+_q1.DeQueue()+"

号到一号窗口"

现在没有客人!

privatevoidForm2_Load(objectsender,EventArgse)

Form3代码:

privatevoidForm3_Load(objectsender,EventArgse)

Form4代码:

usingQue

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2