㈠ 模擬實現一個銀行叫號程序 (c語言)
#include<stdio.h>
main()
{
int n,i;
n=0;
while(1)
{
printf("請輸入指令:");
scanf("%d",&i);
if(i==0)
break;
if(i==1)
{
if(n==0)
printf("您前面無人排隊,請直接去櫃台辦理業務\n");
else
printf("您前面還有%d位,請等待\n",n);
n++;
}
if(i==2)
{
if(n>0)
n--;
}
}
}
㈡ 用C語言編銀行叫號系統
#include
"stdafx.h"
#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
#include
<string.h>
#include
<conio.h>
#define
MAX_SIZE
500
struct
tagCustom
{
int
m_nID;
//
客戶的編號
int
m_nProcessTime;
//
需要處理業務的時間
int
m_nArrivalTime;
//
到達時間
int
m_nDepartTime;
//
離開時間
};
struct
tagTeller
{
int
m_nCustomNum;
//
處理的客戶數
int
m_nAllServiceTime;
//
所有服務時間
int
m_nFinishServiceTime;
//
櫃台針對一個客戶服務的結束時間
bool
m_bBusy;
//
櫃台是否忙
int
m_nCustomID;
//
正在服務的客戶的ID號
};
tagTeller
g_aryTellers[MAX_SIZE];
int
g_nTellerNum;
//
櫃台數量
//
用戶到達數組(隨機的,無序的)
tagCustom
g_aryAllCustoms[MAX_SIZE];
int
g_nCustomsNum;
int
g_nWorkTime;
//
經營時間
int
g_nArrivalRange,g_nServiceRange;
//
用戶隊列
tagCustom
g_CustomQueue[MAX_SIZE];
int
g_nHeader,g_nTail;
//
隊列的操作
void
InitQueue()
{
g_nHeader
=
g_nTail
=
-1;
}
void
AddToTail(tagCustom
aCustom)
{
g_nTail++;
g_CustomQueue[g_nTail]
=
aCustom;
}
bool
RemoveFromHeader(tagCustom*
pCustom)
{
if(g_nHeader
<
g_nTail)
{
g_nHeader++;
(*pCustom)
=
g_CustomQueue[g_nHeader];
return
true;
}
return
false;
}
//
功能:模擬用戶的隨機到來
void
GenerateCustom()
{
tagCustom
aCustom;
for(int
nCounter
=
0;
nCounter
<
g_nCustomsNum;
nCounter++)
{
aCustom.m_nID
=
nCounter;
aCustom.m_nArrivalTime
=
rand()
%
g_nWorkTime
;
aCustom.m_nProcessTime
=
(rand()
%
g_nServiceRange
+
1)
*
6;
aCustom.m_nDepartTime
=
-1;
g_aryAllCustoms[nCounter]
=
aCustom;
}
}
void
Init()
{
g_nTellerNum
=
3;
g_nWorkTime
=
200;
g_nCustomsNum
=
30;
g_nArrivalRange
=
18
;
g_nServiceRange
=
5
;
srand((unsigned)time(NULL));
InitQueue();
GenerateCustom();
for(int
nC
=
0;
nC
<
g_nTellerNum;
nC++)
{
g_aryTellers[nC].m_nAllServiceTime
=
0;
g_aryTellers[nC].m_nCustomID
=
-1;
g_aryTellers[nC].m_bBusy
=
false;
g_aryTellers[nC].m_nFinishServiceTime
=
-1;
}
}
㈢ 簡單的銀行叫號系統 C++編程
編程是好比是兩個城市之間的旅程,開發語言(C++)就好比是交通工具,其實乘坐什麼工具並不重要,最重要的是你要知道怎麼走,也就是整個程序的設計你要明了。廢話少說,下面簡單介紹一下這個系統的開發流程:
第一步,先把資料庫設計好,如果是單個銀行網點,可以用ACCESS或者sqllite資料庫,如果是某個銀行集團的多個網點,那就需考慮用大型資料庫了,比如Microsoft SQL Server;
資料庫中最起碼要包含以下幾個表:
1,業務類型表:
2,取號類型表(普通號、優先號)
3,掛號表等
第二步,搭系統框架,這個是整個程序的基石,如果如果要自己設計的話,首先你要有兩三年的編程經驗,急不得。你可以去網上或者是學長那找一些好的模板,這樣會快一點。
4,畫界面
整個程序的界麵包含主界面和一些基本數據的維護界面以及統計報表等,這個需要你一步一步去畫。
5,基本的增刪改查資料庫操作
界面畫好之後,就要對基本數據進行處理了,程序的許多BUG也會在這個時候產生,這個也是基本功,祝你好運。
6,數據的增刪改查做完之後整個程序的開發也就完成的差不多了,剩下的就是一下細節性的東西,不過此時你的旅途只完成了一半。
7,還有一半的工作就是測試測試再測試
若還有疑問,咨詢HESIN排隊。網路HESIN排隊就可以。
㈣ 銀行排隊系統叫號,怎麼樣使各個窗口同時工作,c語言
設置一個標志,工作時置為1 然後while循環檢測時間, 到時間了就置為0,然後跳出while循環
調用窗口的時候先檢測該窗口的這個狀態,如果為1就接著檢測下個窗口,直到該窗口狀態為0,就為其服務
㈤ c語言,急!!!
我發了幾個我以前學數據結構的時候做的程序,你自己看著選吧
許多程序只要你換點關鍵字(詞)就可以變成你想要的,每個完整程序前我用一行星號隔開了並編號了,別搞錯了說我程序不完整哈
1.
// sqlist.cpp : 定義控制台應用程序的入口點。
//學生成績管理系統(簡單版)
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "process.h"
#include <malloc.h>
#define MAXSIZE 100
#define LISTNCREMENT 10
struct student
{
char sNo[10];
char sName[10];
float fScore1;
float fScore2;
float fScore3;
float fTotal;
};
typedef struct student ElemType;
//順序表定義
struct sqlist
{
ElemType *elem;
int length;
};
struct statistic
{
int iA;
int iB;
int iC;
int iD;
int iE;
};
typedef struct statistic Level;
typedef int status;
/********************************************
形式:status Init(sqllist &sl)
功能:順序表初始化函數。
輸入:順序表引用變數。
輸出:返回1表示初始化成功,0表示失敗。
*********************************************/
status Init(sqlist &sl)
{
sl.elem = new ElemType[MAXSIZE+1];
sl.length = 0;
if (!sl.elem) return 0;
else return 1;
}
status Creat(sqlist &sl)
{
if (!sl.elem) return 0;
printf("輸入表的長度:");
scanf("%d",&sl.length);
if (sl.length > MAXSIZE)
{
sl.elem=(ElemType*)realloc(sl.elem,(sl.length+LISTNCREMENT)*sizeof(ElemType));
return 0;
}
for (int i=1; i<sl.length+1; i++)
{
printf("輸入學號 名字 成績1 成績2 成績3\n");
scanf("%s%s%f%f%f",sl.elem[i].sNo,sl.elem[i].sName,&sl.elem[i].fScore1,&sl.elem[i].fScore2,&sl.elem[i].fScore3);
}
return 1;
}
status OutPut(sqlist sl)
{
if (!sl.length)
{
printf("表為空!");
return 0;
}
else if (sl.length <= 0 || sl.length > MAXSIZE)
{
printf("表沒有初始化!");
return 0;
}
printf("表如下(包含%d個記錄):",sl.length);
printf("\n學號\t姓名\t成績1\t成績2\t成績3\n");
for (int i=1; i<sl.length+1; i++)
{
printf("%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
}
return 1;
}
status Insert(sqlist &sl,int iPos,ElemType elem)
{
if (sl.length == MAXSIZE)
{
printf("表滿,不能插入");
return 0;
}
if (iPos >sl.length+1)
{
printf("插入位置不正確!");
return 0;
}
//如果是插入到最後一個
if (iPos == sl.length+1 )
{
sl.elem[sl.length+1] = elem;
sl.length++;
return 1;
}
//移動元素
for (int i=sl.length; i>=iPos; i--)
{
sl.elem[i+1] = sl.elem[i];
}
sl.elem[iPos] = elem;
sl.length++;
return 1;
}
status Delete(sqlist &sl,int iPos,ElemType &elem)
{
if (!sl.length)
{
printf("表空,不能刪除");
return 0;
}
if (iPos > sl.length)
{
printf("刪除位置不正確!");
return 0;
}
if (iPos == sl.length)
{
elem = sl.elem[sl.length];
sl.length--;
return 1;
}
elem = sl.elem[iPos];
for (int i=iPos+1; i<=sl.length; i++)
{
sl.elem[i-1] = sl.elem[i];
}
sl.length--;
return 1;
}
status Find(sqlist sl,char *no)
{
for (int i=1; i<=sl.length; i++)
if (strcmp(sl.elem[i].sNo,no)==0)
{
printf("找到的學生成績信息\n%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
return 1;
}
if (i>sl.length)
{
printf("沒有該記錄!");
return 0;
}
return 0;
}
/*void GetLevel(sqlist sl,int &iA,int &iB,int &iC,int &iD,int &iE)
{
for(int i=1;i<=sl.length;i++)
{
}
}*/
/*void SetTotalScore(sqlist &sl)
{
}
*/
int main()
{
char ch;
int flag;
sqlist sl;
int iPos;
ElemType elem;
char *name = new char[10];
printf("/******學生成績管理系統*****/\n");
printf("\n/******本系統基本操作如下:\n/******0:退出\n/******1:初始化\n/******2: 創建\n/******3: 輸出\n");
printf("/******4: 插入\n/******5: 刪除\n/******6: 查找\n");
//printf("請輸入操作提示:(0~6)");
while (1)
{
printf("請輸入操作提示:(0~6)");
rewind(stdin);
ch = getchar();
switch (ch)
{
case '0':
break;
case '1':
flag = Init(sl);
if (flag) printf("初始化成功!");
else printf("初始化失敗!");
break;
case '2':
flag = Creat(sl);
if (flag) printf("創建成功!");
else printf("創建失敗!");
break;
case '3':
OutPut(sl);
break;
case '4':
printf("輸入插入位置:");
scanf("%d",&iPos);
printf("輸入插入元素:學號 姓名 成績1 成績2 成績3\n");
scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,&elem.fScore2,&elem.fScore3);
flag = Insert(sl,iPos,elem);
if (flag) printf("插入成功!");
else printf("插入失敗!");
break;
case '5':
printf("輸入刪除位置:");
scanf("%d",&iPos);
flag = Delete(sl,iPos,elem);
if (flag) printf("刪除成功!");
else printf("刪除失敗!");
break;
case '6':
printf("輸入學號:");
scanf("%s",name);
flag = Find(sl,name);
break;
default:
continue;
}
if (ch == '0')
{
if (sl.length >=0 && sl.length <= MAXSIZE)
delete []sl.elem;
_exit(1);
}
//printf("請輸入操作提示:(0~6)");
}
return 0;
}
***************************************************************
2.
//四則運算.cpp
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
double fhe(double s);
double fcha(double s);
double fji(double s);
double fsh(double s);
double a,b,s;;
char c;
int main(void)
{
int n;
printf("\t\t\t***--------簡單四則運算---------***\t\t\t\n");
printf("\t\t*-->1.求和\t\t*-->2.求差\t\t\n");
printf("\t\t*-->3.求積\t\t*-->4.求商\t\t\n");
printf("\t\t*-->0.退出\t\t\n\n");
printf("\t\t請輸入選擇(1~4):");
scanf("%d",&n);
switch(n)
{
case'1':double fhe(double s);break;
case'2':double fcha(double s);break;
case'3':double fji(double s);break;
case'4':double fsh(double s);break;
case'0':exit(0);
default:printf("Unknown operator!\n");break;
}
system("cls");
return 0;
}
double fhe(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a+b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fcha(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a-b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fji(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a*b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fsh(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a/b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
**********************************************************************
3.
//表達式求值轉化並求值.cpp
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define maxsize 100
#define error -6
typedef struct //運算符棧
{
char *base;
char *top;
int stacksize;
}sqstack;
typedef struct //操作數棧
{
double *base;
double *top;
int stacksize;
}dbstack;
void creat_charstack_exp(sqstack &s)
{
s.base = new char[maxsize];
if(!s.base) exit(1);
s.top=s.base;
s.stacksize=maxsize;
}
int popchar_exp(sqstack &s,char &e)
{
if(s.top==s.base)
{
printf("棧已空!");
return 0;
}
e=*--s.top;
return 1;
}
int getchar_exp(sqstack s,char &e)
{
if(s.top==s.base)
{
printf("棧已空!");
return 0;
}
e=*(s.top-1);
return 1;
}
int emptychar_exp(sqstack s)
{
if(s.top==s.base)
{
printf("棧已空!");
return 1;
}
return 0;
}
int pushchar_exp(sqstack &s,char e)
{
if(s.top-s.base>=s.stacksize)
{
printf("棧已滿!");
return 0;
}
*s.top++=e;
return 1;
}
void disp(sqstack s)//顯示元素
{
char *p=s.top;
while(p!=s.base){
printf("%c ",*(p-1));p--;
}
printf("\n");
}
void creat_dbstack_exp(dbstack &l)
{
l.base=new double[maxsize];
if(!l.base) exit(1);
l.top=l.base;
l.stacksize=maxsize;
}
int pushdb_exp(dbstack &L,double e)
{
if(L.top>=L.stacksize+L.base)
{
printf("棧已滿!");
return 0;
}
*L.top++=e;
return 1;
}
int popdb_exp(dbstack &L,double &e)
{
if(L.top==L.base)
{
printf("棧空!");
return 0;
}
e=*--L.top;
return 1;
}
int prior(char a)
{
if(a=='+'||a=='-') return 1;
if(a=='#') return -1;
if(a=='*'||a=='/') return 2;
if(a=='(') return 0;
else return error;
}
void input(char exp[],char expcl[]){
int i=0,j=0;
while(exp[i]){
if(i==0 && exp[i]=='-'){
expcl[j++]='0'; expcl[j++]='-'; i++;
}
else if(exp[i]=='(' && exp[i+1]=='-'){
expcl[j++]='(';
expcl[j++]='0';
expcl[j++]='-';
i=i+2;
}
else {expcl[j++]=exp[i++];}
}
expcl[j++]='#';
expcl[j]='\0';
}
void transform_exp(char exp[],char tran[])
{
int i=0,j=0,n=0;
char c;
sqstack s;
creat_charstack_exp(s);
pushchar_exp(s,'#');
while(!emptychar_exp(s))
{ printf("\n當前遇到的是:%c\n",exp[i]);
if(exp[i]>='0'&& exp[i]<='9'||exp[i]=='.')
tran[j++]=exp[i];
else {
if(exp[i]!='#')tran[j++]=' ';
switch(exp[i]){
case '(': pushchar_exp(s,'('); break;
case ')': popchar_exp(s,c);
while( c!='('){
tran[j++]=c;
popchar_exp(s,c);
}
break;
default: while(getchar_exp(s,c)&&prior(c)>=prior(exp[i])){
if(c!='#')tran[j++]=c;
popchar_exp(s,c);
}
if(exp[i]!='#')pushchar_exp(s,exp[i]);
}
}
i++;
printf("當前的後綴式是:");
for(n=0;n<j;n++)
putchar(tran[n]);
putchar('\n');
printf("當前的運算符棧是:");
disp(s);
getch();
}
tran[j]='\0';
}
double ctof(char c[]){
int i,j;
int x=0;
double y=0.0;
for(i=0;i<strlen(c);i++){
if(c[i]=='.')break;
else x=x*10+c[i]-48;
}
if(c[i]=='.')
for(j=strlen(c)-1;j>i;j--)y=(y+(c[j]-48))*0.1;
return x+y;
}
double calculate_exp(char exp[])
{
double x=0,y=0,t1,t2,temp;
int i=0;
int j=0;
int k=1;
char num[30];
dbstack t;
creat_dbstack_exp(t);
while(exp[i]!='\0')
{
if(exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'){
for(j=0; exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'; i++)
num[j++]=exp[i];
num[j]='\0';
x=ctof(num);
pushdb_exp(t,x);
}
if(exp[i]==' ')i++;
if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/')
{
popdb_exp(t,t2);
popdb_exp(t,t1);
char m=exp[i];
switch(m)
{
case '+':temp=t1+t2;
pushdb_exp(t,temp);break;
case '-':temp=t1-t2;
pushdb_exp(t,temp);break;
case '*':temp=t1*t2;
pushdb_exp(t,temp);break;
case '/':temp=t1/t2;
pushdb_exp(t,temp);break;
}
i++;
}
}
popdb_exp(t,temp);
return temp;
}
void main()
{
char ch='y';
double result=0;
while(ch=='y'||ch=='Y')
{system("cls");
int b;
printf("\n 表達式計算\n");
printf("\n 1.將表達式轉化為後綴表達式計算\n");
printf("\n 2.退出\n");
printf("\n 請選擇(1/2):");
scanf("%d",&b);
switch(b)
{
case 1:
char *exp,*expcl,*tran;
exp=new char[maxsize];
expcl=new char[maxsize];
tran=new char[maxsize];
printf("請輸入表達式:");
scanf("%s",exp);
input(exp,expcl);
puts(expcl);
transform_exp(expcl,tran);
printf("\n原表達式轉化的後綴表達式為:%s\n",tran);
result=calculate_exp(tran);
printf("\n計算結果:%f",result);
break;
default:
exit(1);
break;
}
fflush(stdin);
printf("\n是否繼續計算,輸入(y/n):");
scanf("%c",&ch);
}
}
*****************************************************************
4.
//銀行模擬
//bank.cpp
#include "stdio.h"
#include "conio.h"
/******************************************
定義數據結構
*******************************************/
typedef struct _CUSTOMER_INFO{//客戶信息數據結構
int nNO;
_CUSTOMER_INFO *pNext;
}CUSTOMER_INFO,*CUSTOMER_INFO_PTR;
typedef struct{//鏈式隊列數據結構
CUSTOMER_INFO_PTR pFront;
CUSTOMER_INFO_PTR pRear;
}QUEUE;
/********************************************
形式:bool InitQueue(QUEUE &Q)
功能:隊列初始化函數。
輸入:隊列引用變數。
輸出:返回true表示創建成功,false表示創建失敗。
*********************************************/
bool InitQueue(QUEUE &Q)
{
Q.pFront = Q.pRear = new CUSTOMER_INFO;
if(Q.pFront == NULL)
return false;
else{
Q.pFront->pNext = NULL;
return true;
}
}
/********************************************
形式:void UnInitQueue(QUEUE &Q)
功能:隊列清空函數。
輸入:隊列引用變數。
輸出:無。
*********************************************/
void UnInitQueue(QUEUE &Q)
{
CUSTOMER_INFO_PTR p;
while(Q.pFront->pNext != NULL){
p = Q.pFront->pNext;
Q.pFront->pNext = p->pNext;
delete p;
}
delete Q.pFront;
Q.pFront = Q.pRear = NULL;
}
/********************************************
形式:void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
功能:元素入隊。
輸入:隊列引用變數,欲入隊元素的指針。
輸出:無。
*********************************************/
void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
{
Q.pRear->pNext = pCustomer;//新元素入隊
Q.pRear = pCustomer;//修改隊列尾指針
}
/********************************************
形式:CUSTOMER_INFO_PTR* LeaveQueue(QUEUE &Q)
功能:獲取隊頭元素。
輸入:隊列引用變數。
輸出:返回NULL表示隊列為空,否則返回指向隊頭元素的指針。
*********************************************/
CUSTOMER_INFO_PTR LeaveQueue(QUEUE &Q)
{
if(Q.pFront == Q.pRear)
return NULL;
else{
CUSTOMER_INFO_PTR p;
p = Q.pFront->pNext;//獲取指向隊頭元素的指針
Q.pFront->pNext = p->pNext;//從隊列中摘除隊頭元素
if(Q.pRear == p)//如果是最後一個元素,則設置為空隊列
Q.pRear = Q.pFront;
p->pNext = NULL;
return p;
}
}
int main(int argc, char* argv[])
{
int nChoice;//選擇功能
int nCount = 0;//排隊序號計數器
int nIteration = 1;//模擬次數計數
QUEUE Q[4];
CUSTOMER_INFO_PTR pCustomer;
printf(" ****************************************\n");
printf(" * 銀行排隊服務模擬系統 *\n");
printf(" ****************************************\n");
for(int i = 0; i < 4; i++)
InitQueue(Q[i]);//initialize queue
for(; ;){
printf("\n\n==========第%d次模擬處理============\n",nIteration++);
for(int j = 0; j < 4; j++){
if(j == 0)
printf("正在等待服務的顧客: ");
else
printf("%d號櫃台已服務顧客: ", j);
pCustomer = Q[j].pFront->pNext;
while(pCustomer != NULL){
printf("%3d", pCustomer->nNO);
pCustomer = pCustomer->pNext;
}
printf("\n");
}
printf("\n");
printf("1----1號櫃台服務\n");
printf("2----2號櫃台服務\n");
printf("3----3號櫃台服務\n");
printf("4----新客戶取號等待服務\n");
printf("0----退出排隊服務模擬程序\n");
printf("請選擇: ");
scanf("%d",&nChoice);
if(nChoice < 0 || nChoice >4){//處理輸入非法的情況
getchar();
printf("\n>>>輸入非法!\n");
}
if(nChoice == 0)
break;
else if(nChoice == 4){//新客戶到來
pCustomer = new CUSTOMER_INFO;
pCustomer->nNO = nCount++;
pCustomer->pNext = NULL;
EnterQueue(Q[0], pCustomer);
}else if(nChoice >=1 && nChoice <=3){//為隊頭客戶服務
pCustomer = LeaveQueue(Q[0]);
if(pCustomer != NULL)
EnterQueue(Q[nChoice], pCustomer);
else{
printf("\n>>>當前沒有等待客戶!\n");
}
}
}
return 0;
}
*********************************************************************
5.
//banklink.cpp
//銀行叫號模擬
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//鏈隊列類型描述
typedef struct lnode{
int bh;
struct lnode *next;
}Node,*Qulink;
typedef struct {
Qulink f;
Qulink r;
}QueueLink;
//函數說明
void initqueue(QueueLink &Q);//初始化
void enqueue(QueueLink &Q,int e);//進隊列
void outqueue(QueueLink &Q,int &e);//出隊列
void dispqueue(QueueLink Q);//顯示隊列
int emptyqueue(QueueLink Q);//判斷隊列是否為空
int menu();
//函數定義
void initqueue(QueueLink &Q){
Q.f=Q.r=new Node;
Q.f->next=NULL;
}
void enqueue(QueueLink &Q,int e){
Qulink p;
p=new Node;
p->bh=e;
p->next=NULL;
Q.r->next=p;
Q.r=p;
}
void outqueue(QueueLink &Q,int &e){
Qulink p;
if(Q.f!=Q.r){
p=Q.f->next;
e=p->bh;
Q.f->next=p->next;
if(Q.r==p)Q.r=Q.f;
delete p;
}
}
void dispqueue(QueueLink Q){
Qulink p=Q.f->next;
while(p){
printf("%d<-",p->bh); p=p->next;
}
printf("\n");
}
int emptyqueue(QueueLink Q){
if(Q.f==Q.r)return 1;
else return 0;
}
int menu(){
int num ;
while(1){
system("cls");
printf("\n\n **********銀行排隊模擬系統*********\n");
printf(" 1--拿號排隊 2--1號窗口\n\n");
printf(" 3--2號窗口 4--查看等待排隊的顧客\n\n");
printf(" 0--退出\n\n");
printf(" 請選擇1/2/3/4/0:");
scanf("%d",&num);
printf("\n\n");
if(num==0) {return num;break;}
else if(num>=1&&num<=4)return num;
else {printf("請重新選擇!\n");getch();}
}
}
//主函數
void main(){
QueueLink Q; int num,e,count=0;
initqueue(Q);
while(1){
num=menu();
if (num==0)exit(0);
switch(num){
case 1: count+=1;enqueue(Q,count);printf("你拿的是%d號,請等候\n",count);
getch(); break;
case 2: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在1號窗口辦理業務的顧客是:%d\n",e);
}
else printf("目前沒有顧客在排隊!\n") ;
getch(); break;
case 3: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在2號窗口辦理業務的顧客是:%d\n",e);
}
else printf("目前沒有顧客在排隊!\n") ;
getch(); break;
case 4: if(!emptyqueue(Q)){
printf("正在排隊的顧客有:");dispqueue(Q);
}
else printf("目前沒有顧客在排隊!\n") ;
getch(); break;
}
}
}
㈥ C#銀行排隊叫號系統
// 寫了一個比較簡陋的排隊系統,可以參考下:
classProgram{
staticvoidMain(string[]args){
ServiceWindow[]serviceWindows=newServiceWindow[Bank.MAX];
for(inti=0;i<Bank.MAX;i++)
serviceWindows[i]=newServiceWindow(){No=(i+1).ToString()};
Bankbank=newBank(serviceWindows);
Randomrand=newRandom();
//多線程模擬顧客取號
newThread(()=>{
intk=0;
while(true){
Bank.Enqueue();
if(++k>=100)break;
Thread.Sleep(1000);
}
}).Start();
//多線程模擬服務窗口叫號
newThread(()=>{
while(true){
bank.ServiceWindows[rand.Next(0,Bank.MAX)].Call();
Thread.Sleep(3000);
}
}).Start();
Console.ReadKey(true);
}
}
internalclassBank{
publicconstintMAX=3;
publicstaticConcurrentQueue<uint>queue{get;set;}
publicstaticvolatileuintcurNo=0;
publicBank(){
Init();
}
publicvoidInit()
{
queue=newConcurrentQueue<uint>();
}
publicBank(ServiceWindow[]serviceWindows)
{
Init();
ServiceWindows=serviceWindows;
}
publicServiceWindow[]ServiceWindows{get;set;}
publicstaticvoidEnqueue()
{
intk=0;
k=queue.Count();
curNo++;
queue.Enqueue(curNo);
Console.WriteLine("您的號碼是:"+(curNo)+",前面還有"+k+"人在等待!");
}
}
internalclassServiceWindow{
publicStringNo{get;set;}
publicboolCall()
{
uintresult=0;
boolsuccess=false;
success=Bank.queue.TryDequeue(outresult);
if(success)Console.WriteLine(result+"號,請到"+No+"號窗口辦理業務!");
returnsuccess;
}
}
㈦ 數據結構(C語言版):利用隊列結構實現銀行叫號系統(要求見圖)
這樣的一個數據收集系統很簡單:
銀行的叫號系統可以定義開始時間和結束時間.
開始時間就是你拿號的時間.
結束時間就是你接受到服務的時間.
具體的如何分析和改善控制,需要等你的數據收集完了後來分進行分析,不然白說.
㈧ C語言用隊列結構模擬,銀行業務排隊系統實現 1.有儲戶要辦理存取款業務時,取號等待,編號入隊
很明顯 這個只要實現隊列一切就簡單了 其實c++有quene類 這里我們自己實現它
剩下的自己來寫就好了 很簡單的
首先一個鏈表的
#include<iostream>
usingnamespacestd;
//鏈表
typedefstructQDode
{
intn;
structQDode*next;
}*pqdode,qdode;
//隊列
typedefstructMyQueue
{
pqdodefront;
pqdoderear;
}*pmyqueue,myqueue;
boolInit_queue(pmyqueuequ);//初始化隊列
boolIs_empty(pmyqueuequ);//判斷隊列是否為空
voidPut_queue(pmyqueuequ,intval);//入隊
intOut_queue(pmyqueuequ);//出隊
intTravel_queue(pmyqueuequ);//遍歷隊列
voidDestory_queue(pmyqueuequ);//銷毀隊列
//主函數
intmain()
{
myqueuequeue={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);//遍歷
intval=Out_queue(&queue);
cout<<endl<<endl<<val<<endl<<endl;
Travel_queue(&queue);//遍歷
intvall=Out_queue(&queue);
cout<<endl<<endl<<vall<<endl<<endl;
Travel_queue(&queue);//遍歷
Destory_queue(&queue);//銷毀
cout<<endl;
return0;
}
boolInit_queue(pmyqueuequ)
{
qu->front=newqdode;
if(qu->front==NULL)
{
cout<<"動態分配內存失敗!"<<endl;
returnfalse;
}
else
{
qu->rear=qu->front;
qu->front->next=NULL;
returntrue;
}
}
voidDestory_queue(pmyqueuequ)
{
pqdodep=qu->front,q=NULL;
while(p)
{
q=p->next;
deletep;
p=q;
}
p=NULL;
}
voidPut_queue(pmyqueuequ,intval)
{
qu->rear->n=val;
pqdodeq=qu->rear;
pqdodep=newqdode;
p->next=NULL;
qu->rear=p;
q->next=p;
}
boolIs_empty(pmyqueuequ)
{
if(qu->front!=qu->rear)
{
returnfalse;
}
else
{
returntrue;
}
}
intTravel_queue(pmyqueuequ)
{
intcount=0;
if(Is_empty(qu))
{
cout<<"該隊列為空!"<<endl;
return0;
}
else
{
pqdodep=qu->front,q=NULL;
while(p!=qu->rear)
{
count++;
cout<<p->n<<"";
if(!(count%5))
{
cout<<endl;
}
p=p->next;
}
returncount;
}
}
intOut_queue(pmyqueuequ)
{
if(Is_empty(qu))
{
cout<<"該隊列為空!"<<endl;
return-1;
}
else
{
intval=qu->front->n;
pqdodep=qu->front->next;
deletequ->front;
qu->front=p;
returnval;
}
}
然後一個數組實現的
#include<iostream>
usingnamespacestd;
classQUEUE//隊列類
{
private://私有成員
int*pBase;
intfront,rear;
intcount;
public://公有成員
boolIs_empty();//判斷是否為空
boolIs_full();//判斷是否滿
voidenter_queue(intn);//入隊
intout_queue();//出隊
voidtravel_queue();//遍歷隊
QUEUE(intnumber=100)
{
front=rear=0;
pBase=newint[number+1];
count=number+1;
}
~QUEUE()
{
delete[]pBase;
}
};
intmain()
{
QUEUEqueue(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;
}
intn=queue.out_queue();
cout<<n<<endl;
queue.travel_queue();
intn1=queue.out_queue();
cout<<n1<<endl;
queue.travel_queue();
return0;
}
boolQUEUE::Is_empty()//判斷是否滿
{
if(front==rear)
{
returntrue;
}
else
{
returnfalse;
}
}
boolQUEUE::Is_full()//判斷是否空
{
if((rear+1)%count==front)
{
returntrue;
}
else
{
returnfalse;
}
}
voidQUEUE::enter_queue(intn)//入隊
{
if(Is_full())
{
cout<<"隊列已滿!"<<endl;
}
else
{
pBase[rear]=n;
rear=(rear+1)%count;
}
return;
}
intQUEUE::out_queue()//出隊
{
intn=pBase[front];
if(Is_empty())
{
cout<<"該隊列已空!"<<endl;
returnfalse;
}
else
{
front=(front+1)%count;
returnn;
}
}
voidQUEUE::travel_queue()//遍歷
{
intj=0;
for(inti=front;i%count!=rear;i++)
{
j++;
cout<<pBase[i%count]<<"";
if(j==5)
{
cout<<endl;
j=0;
}
}
if(j)
{
cout<<endl;
}
return;
}
㈨ C語言銀行排隊系統
你所指的隊列是線程嗎?
線程操作,大概思路如下:
1. 創建4個線程,表示四個窗口,用semaphore來等待客戶進入(WaitForSingleObject).
2. 創建n個線程表示客戶,每創建一個客戶增加一個ReleaseSemaphore,以讓窗口處理(記錄相關信息,隨機時間可以用srand獲取),窗口要設定為while循環,可以多次處理,條件可以設置為處理多少個客戶就可以退出.
3. 共用資源記得設置臨界區CriticalSection.
㈩ 想做一個c語言程序,,類似銀行排隊叫號,關於定時器的問題
你應該把自己的需求分解一下
1.如果你的每個窗口都是一個單獨線程的話;
除非你用了底層中斷,當成窗口從忙碌切到閑置時,發送中斷信號。保存現場和函數切換,一般由系統來處理。
2. 如果你不是多線程並行;
那麼執行本身在任務應用級別是串列的,你需要做的是,把你操作分解到原子操作,每個原子操作後又一定的狀態檢測;但是務必高效,比如64個子窗口進程,用一個longlong 64個bit,用位操作比較。切任務保存現場就需要你自己來做了。