C语言银行排队系统

Python016

C语言银行排队系统,第1张

你所指的队列是线程吗?

线程操作,大概思路如下:

1. 创建4个线程,表示四个窗口,用semaphore来等待客户进入(WaitForSingleObject).

2. 创建n个线程表示客户,每创建一个客户增加一个ReleaseSemaphore,以让窗口处理(记录相关信息,随机时间可以用srand获取),窗口要设定为while循环,可以多次处理,条件可以设置为处理多少个客户就可以退出.

3. 共用资源记得设置临界区CriticalSection.

#include<stdio.h>

#include<malloc.h>

#define N 10

int main(void)

{

int i,j,x,m,flag=1

char ch

m=N

char (*p)[10]=(char (*)[10])calloc(N,10*sizeof(char))

for(i=0i<10i++)

for(j=0j<10j++)

p[i][j]='\0'

printf("输入ID时不超过10位,第一位不能为'*'\n")

i=0

while(1)

{

while(i<m)

{

printf("请输入第%d名的ID:",i+1)

ch=getchar()

for(j=0j<10j++)

{

if(j==0&&ch=='*')

{

flag=0

break

}

if(ch=='\n')

break

p[i][j]=ch

ch=getchar()

}

if(flag==0)

break

i=i+1

}

if(flag==0)

break

m=m+N

p=(char (*)[10])realloc(p,m*10*sizeof(char))

for(x=ix<mx++)

for(j=0j<10j++)

p[x][j]='\0'

}

for(j=0j<ij++)

{

printf("第%d名:",j+1)

printf("%s\n",p[j])

}

free(p)

return 0

}

很明显 这个只要实现队列一切就简单了 其实c++有quene类 这里我们自己实现它

剩下的自己来写就好了 很简单的

首先一个链表的

#include <iostream>

using namespace std

//链表

typedef struct QDode

{

     int n

 struct QDode *next

}*pqdode,qdode

//队列

typedef struct MyQueue

{

pqdode front

pqdode rear

}*pmyqueue,myqueue

bool Init_queue(pmyqueue qu)//初始化队列

bool Is_empty(pmyqueue qu)//判断队列是否为空

void Put_queue(pmyqueue qu,int val)//入队

int  Out_queue(pmyqueue qu)//出队

int  Travel_queue(pmyqueue qu)//遍历队列

void Destory_queue(pmyqueue qu)//销毁队列

//主函数

int main()

    myqueue queue={NULL,NULL}

    Init_queue(&queue)//初始化

Put_queue(&queue,5)//入队

if (!Is_empty(&queue))

{

cout<<"队列不为空"<<endl

}

Put_queue(&queue,6)

    Put_queue(&queue,7)

Put_queue(&queue,8)

Put_queue(&queue,9)

    Travel_queue(&queue)//遍历

 

int val=Out_queue(&queue)

cout<<endl<<endl<<val<<endl<<endl

Travel_queue(&queue)//遍历

int vall=Out_queue(&queue)

cout<<endl<<endl<<vall<<endl<<endl

    Travel_queue(&queue)//遍历

Destory_queue(&queue)//销毁

    cout<<endl

return 0

}

bool Init_queue(pmyqueue qu)

{

 qu->front = new qdode

 if (qu->front==NULL)

 {

 cout<<"动态分配内存失败!"<<endl

 return false

 }

 else

 {

         qu->rear=qu->front

 qu->front->next=NULL

 return true

 }

}

void Destory_queue(pmyqueue qu)

{

 pqdode p=qu->front,q=NULL

 while (p)

 {

         q = p->next

         delete p

 p = q

 }

 p = NULL

}

void Put_queue(pmyqueue qu,int val)

{

 qu->rear->n = val

 pqdode q=qu->rear

 pqdode p = new qdode

 p->next = NULL

 qu->rear = p

     q->next = p

}

bool Is_empty(pmyqueue qu)

{

 if (qu->front!=qu->rear)

 {

 return false

 }

 else

 {

 return true

 }

}

int Travel_queue(pmyqueue qu)

{

    int count=0

if (Is_empty(qu))

{

cout<<"该队列为空!"<<endl

return 0

}

else

{

        pqdode p=qu->front,q=NULL

while (p!=qu->rear)

{

count++

cout<<p->n<<"    "

if (!(count%5))

{

cout<<endl

}

p = p->next

}

    return count

}

}

int Out_queue(pmyqueue qu)

{

if (Is_empty(qu))

{

cout<<"该队列为空!"<<endl

return -1

}

else

{

        int val=qu->front->n

pqdode p = qu->front->next

delete qu->front

qu->front = p

    return val

}

}

然后一个数组实现的

#include <iostream>

using namespace std

class  QUEUE       //队列类

{

private:         //私有成员

   int  *pBase

   int  front,rear

   int  count

public:         //公有成员

       bool Is_empty()//判断是否为空

   bool Is_full()//判断是否满

       void enter_queue(int n)//入队

       int  out_queue()//出队

   void travel_queue()//遍历队

   QUEUE (int number = 100)

   {

          front  =  rear  =  0

          pBase  =  new int[number+1]

  count  =  number  +  1

   }

       ~QUEUE()

   {

   delete [] pBase

   }

}

int main()

{

    QUEUE queue(5)

queue.enter_queue(1)

queue.enter_queue(2)

queue.enter_queue(3)

queue.enter_queue(4)

queue.enter_queue(5)

    queue.enter_queue(6)

queue.travel_queue()

queue.out_queue()

queue.travel_queue()

queue.out_queue()

queue.travel_queue()

queue.out_queue()

queue.travel_queue()

queue.out_queue()

queue.travel_queue()

queue.out_queue()

queue.travel_queue()

queue.out_queue()

if (queue.Is_full())

{

cout<<"wangbadan"<<endl

}

int n = queue.out_queue()

cout<<n<<endl

queue.travel_queue()

int n1 = queue.out_queue()

cout<<n1<<endl

queue.travel_queue()

return 0

}

bool QUEUE::Is_empty()//判断是否满

{

     if (front == rear)

     {

 return true

     }

 else

 {

 return false

 }

}

bool QUEUE::Is_full()//判断是否空

{

if ((rear + 1) % count == front)

{

return true

}

else

{

return false

}

}

void QUEUE::enter_queue(int n)//入队

{

 if (Is_full())

 {

 cout<<"队列已满!"<<endl

 }

 else

 {

 pBase[rear]=n

     rear = (rear + 1) % count

 }

 return

}

int QUEUE::out_queue()//出队

{

 int n = pBase[front]

     if (Is_empty())

     {

 cout<<"该队列已空!"<<endl

 return false

     }

 else

 {

 front = (front + 1) % count

 return n

 }

}

void QUEUE::travel_queue()//遍历

{

 int j=0

 for (int i=fronti % count != reari++)

 {

 j++

 cout<<pBase[i%count]<<"  "

 if (j==5)

 {

             cout<<endl

 j=0

 }

 }

 if (j)

 {

 cout<<endl

 }

 return

}