//服务器IP地址:由系统指定

//服务器端口号:5050

#include

#include

#include "sever_head.h"

#include"Queue.h"

#include

#define SERVER_PORT5050

#define NUM16

#define DATA_BUFFER1024

#pragma comment(lib, "ws2_32.lib")

//vs2012 项目>属性->配置属性->链接器->输入 :附加依赖项ws2_32.lib

int main(int argc, char* argv[])

{

//初始化WSA

WORD sockVersion = MAKEWORD(2,2);

WSADATA wsaData;

SOCKET sListen, sAccept;

int clientIPLen = 0;//客户端地址长度

int sendDataLen = 0;//发送数据的长度

int receDataLen = 0;//接收数据的长度

struct sockaddr_in serverIP, clientIP;//服务器和客户端的IP地址

int serverPort = SERVER_PORT;//服务器端端口

char buf[DATA_BUFFER] = "";

UData sendData;

DisPlay receDis;

int identity_judge = 1;

LinkQueue V_Queue;

InitQueue(V_Queue);

LinkQueue(N_Queue);

InitQueue(N_Queue);

int e;//id

int f1=0;//标志

int f2 = 0;//标志

int TotalWaiter1 = 0;//柜台1服务总人数

int TotalWaiter2 = 0;//柜台2服务总人数

int TotalWaiter1_Vip = 0;//柜台1正在处理VIp人数

int TotalWaiter1_Nor = 0;//柜台1正在处理普通人数

int TotalWaiter2_Nor = 0;//柜台2正在处理VIp人数

int TotalWaiter2_Vip = 0;//柜台2正在处理普通人数

int W1_Dell_Vip = 0;//柜台1已处理Vip人数

int W1_Dell_Nor = 0;//柜台1已处理普通人数

int W2_Dell_Vip = 0;//柜台2已处理Vip人数

int W2_Dell_Nor = 0;//柜台2已处理普通人数

printf("Server is waiting!\n");

memset(buf, 0, sizeof(DATA_BUFFER));

if(WSAStartup(sockVersion, &wsaData) != 0)

{

printf("Failed to load Winsock!\n");

return 0;

}

//创建服务器端套接口

sListen = socket(AF_INET, SOCK_STREAM, 0);

if(sListen == INVALID_SOCKET)

{

printf("socket() Failed: %d\n", WSAGetLastError());

return 0;

}

//绑定IP和端口

//建立服务器端地址

serverIP.sin_family = AF_INET;

serverIP.sin_port = htons(serverPort);//将1个2字节的数转换为网络字节顺序

serverIP.sin_addr.s_addr = inet_addr("222.196.201.68");

if(bind(sListen, (LPSOCKADDR)&serverIP, sizeof(serverIP)) == SOCKET_ERROR)

{

printf("bind() Failed: %d\n", WSAGetLastError());

closesocket(sListen);

return 0;

}

//进入监听状态

if(listen(sListen, 5) == SOCKET_ERROR)

{

printf("listen() Failed: %d\n", WSAGetLastError());

return 0;

}

clientIPLen = sizeof(clientIP);//初始化客户端地址长度参数

//无限循环,等待客户端的连接请求

while (1)

{

printf("\n服务器端等待新的连接...\n");

sAccept = accept(sListen, (SOCKADDR *)&clientIP, &clientIPLen);

if(sAccept == INVALID_SOCKET)

{

printf("accept() Failed: %d\n", WSAGetLastError());

break;

}

printf("服务器端接收到一个客户端连接:IP:[%s], port:[%d]\n", inet_ntoa(clientIP.sin_addr), ntohs(clientIP.sin_port));

//服务器端从客户端接收数据

receDataLen = recv(sAccept, buf, sizeof(int), 0);

if(receDataLen == SOCKET_ERROR)

{

printf("recv() Failed: %d\n", WSAGetLastError());

break;

}

else if(receDataLen == 0)

{

printf("No recv!\n");

break;

}

else

{

memcpy(&identity_judge, buf, sizeof(int));

printf("服务器端接受的数据: identity_judge =%d,字节数:%d\n",identity_judge, receDataLen);

}

switch(menu_select(identity_judge))

{

case 1://普通用户

EnQueue(N_Queue);

printf("你前面有:%d人\n",Queuedata(N_Queue) - 1 + Queuedata(V_Queue));//人数

printf("你的号为:%d\n",QueueId(N_Queue));//ID

sendData.id = QueueId(N_Queue);//服务器端给客户端发送数据

sendData.data = Queuedata(N_Queue) - 1 + Queuedata(V_Queue) ;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

closesocket(sAccept); //关闭连接

break;

case 2://Vip用户

EnQueue(V_Queue);

printf("尊敬的Vip用户你前面有:%d人\n",Queuedata(V_Queue) - 1);//人数

printf("尊敬的Vip用户你的号为:Vip%d号\n",QueueId(V_Queue));//ID

sendData.id = QueueId(V_Queue);//服务器端给客户端发送数据

sendData.data = Queuedata(V_Queue) - 1;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

//printf("服务器端发送的数据: %s,字节数:%d\n", sendData, sendDataLen);

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

closesocket(sAccept); //关闭连接

break;

case 3://经理

printf("当前Vip已有人数为: %d 人\n",QueueId(V_Queue));

printf("当前普通用户已有人数: %d 人\n",QueueId(N_Queue));

printf("还剩总人数: %d 人\n",QueueId(V_Queue) + QueueId(N_Queue) - TotalWaiter1 - TotalWaiter2);

printf("还剩Vip人数: %d 人\n",QueueId(V_Queue) - W1_Dell_Vip - W2_Dell_Vip);

printf("还剩普通人数: %d 人\n",QueueId(N_Queue) - W1_Dell_Nor - W2_Dell_Nor);

printf("柜台员1已经服务了: %d 人\n",TotalWaiter1 );

printf("其中包括Vip人数: %d 人\n",W1_Dell_Vip);

printf("普通人数: %d 人\n",W1_Dell_Nor);

printf("柜台员2已经服务了: %d 人\n",TotalWaiter2 );

printf("其中包括Vip人数: %d 人\n",W2_Dell_Vip);

printf("普通人数: %d 人\n",W2_Dell_Nor);

//服务器端给客户端发送数据

receDis.VIP_total = QueueId(V_Queue);//当前Vip已有人数

receDis.nor_total = QueueId(N_Queue);//当前普通用户已有人数

receDis.left_VIP = QueueId(V_Queue) - W1_Dell_Vip - W2_Dell_Vip;//还剩Vip人数

receDis.left_nor = QueueId(N_Queue) - W1_Dell_Nor - W2_Dell_Nor;//还剩普通人数

receDis.w1_dell_VIP = W1_Dell_Vip;//柜台员1服务Vip人数

receDis.w1_dell_nor = W1_Dell_Nor;//柜台员1服务普通人数

receDis.w2_dell_VIP = W2_Dell_Vip;//柜台员2服务Vip人数

receDis.w2_dell_nor = W2_Dell_Nor;//柜台员2服务普通人数

sendDataLen = send(sAccept, (char *)(&receDis), sizeof(receDis), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

closesocket(sAccept); //关闭连接

break;

case 4://柜台1叫号

TotalWaiter1 = TotalWaiter1_Vip + TotalWaiter1_Nor;

if(W1_Dell_Nor < TotalWaiter1_Nor)

{

W1_Dell_Nor ++;

}

else if(W1_Dell_Vip < TotalWaiter1_Vip)

{

W1_Dell_Vip ++;

}

else if(W1_Dell_Nor < TotalWaiter1_Nor && W1_Dell_Vip < TotalWaiter1_Vip)

{

W1_Dell_Nor ++;

W1_Dell_Vip ++;

}

if(!QueueEmpty(V_Queue))

{

DeQueue(V_Queue,e);

TotalWaiter1_Vip = Counter(TotalWaiter1_Vip);//已经服务Vip人数

printf("该为Vip%d号服务!\n",e);//Id

sendData.id = e;//服务器端给柜台1发送数据(vip)+

sendData.data = TotalWaiter1;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

//printf("服务器端发送的数据: %s,字节数:%d\n", sendData, sendDataLen);

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

W1_Dell_Vip = TotalWaiter1_Vip - 1;

closesocket(sAccept); //关闭连接

}

else if(!QueueEmpty(N_Queue))

{

DeQueue(N_Queue,e);

TotalWaiter1_Nor = Counter(TotalWaiter1_Nor);//已经服务普通用户

printf("该为普通用户%d号服务!\n",e);

sendData.id = (-1) * e;//服务器端给柜台1发送数据(普通用户)-

sendData.data = TotalWaiter1;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

W1_Dell_Nor = TotalWaiter1_Nor - 1;

closesocket(sAccept); //关闭连接

}

else

{

printf("没有人了!!!!\n");

sendData.id = 0;//服务器端给柜台1发送数据(没有人)0

sendData.data = TotalWaiter1;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

closesocket(sAccept); //关闭连接

}

break;

case 5://柜台2

TotalWaiter2 = TotalWaiter2_Vip + TotalWaiter2_Nor;

if(W2_Dell_Nor < TotalWaiter2_Nor)

{

W2_Dell_Nor ++;

}

else if(W2_Dell_Vip < TotalWaiter2_Vip)

{

W2_Dell_Vip ++;

}

else if(W2_Dell_Nor < TotalWaiter2_Nor && W2_Dell_Vip < TotalWaiter2_Vip)

{

W2_Dell_Nor ++;

W2_Dell_Vip ++;

}

if(!QueueEmpty(V_Queue))

{

DeQueue(V_Queue,e);

TotalWaiter2_Vip = Counter(TotalWaiter2_Vip);//已经服务Vip人数

printf("该为Vip%d号服务!\n",e);//Id

sendData.id = e;//服务器端给柜台1发送数据(vip)+

sendData.data = TotalWaiter2;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

W2_Dell_Vip = TotalWaiter2_Vip - 1;

closesocket(sAccept); //关闭连接

}

else if(!QueueEmpty(N_Queue))

{

DeQueue(N_Queue,e);

TotalWaiter2_Nor = Counter(TotalWaiter2_Nor) ;//已经服务普通人数

printf("该为普通用户%d号服务!\n",e);

sendData.id = (-1) * e;//服务器端给柜台1发送数据(普通用户)-

sendData.data = TotalWaiter2;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

W2_Dell_Nor = TotalWaiter2_Nor - 1;

closesocket(sAccept); //关闭连接

}

else

{

printf("没有人了!!!!\n");

sendData.id = 0;//服务器端给柜台1发送数据(没有人)0

sendData.data = TotalWaiter2;

sendDataLen = send(sAccept, (char *)(&sendData), sizeof(sendData), 0);

if(sendDataLen == SOCKET_ERROR)

{

printf("send() Failed: %d\n", WSAGetLastError());

break;

}

else if(sendDataLen == 0)

{

printf("No send!\n");

break;

}

else

{

printf("服务器端发送的数据: id = %d, data = %d, c= %d\n", sendData.id, sendData.data);

}

closesocket(sAccept); //关闭连接

}

break;

}

}

closesocket(sListen);

WSACleanup();

return 0;

}

python银行排队系统_socket实现银行排队系统相关推荐

  1. 单服务器排队系统设计,手机排队设计与实现 - 银行叫号手机排队系统解决方案...

    2 手机排队设计与实现 2.1 设计思路 相比现有的排队系统存在的缺点,在设计中主要考虑实现无纸化.网络化.智能化的排队机制,用户不必到营业厅现场即可通过无线网络就可以实现排队功能:通过向用户反馈相关 ...

  2. [附源码]Python计算机毕业设计SSM即刻实时预约排队系统(程序+LW)

    [附源码]Python计算机毕业设计SSM即刻实时预约排队系统(程序+LW) 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行) ...

  3. 统计复用系统为什么避免不了排队

    排队论建模描述排队机理,但某些结论与直觉相悖,并不形象直观,理论如果不能直观解释,只剩下数学推导,并不十分有趣.本文尝试用有趣的方式解释排队.本文虽以数据包为例,但任何可以排队的主体都可作为主语. 所 ...

  4. python代码设计测试用例_[CP_01] Python循环结构案例:模拟银行存取款业务,设计执行测试用例...

    目录结构 一.案例描述 二.需求分析 1. 业务流程图 2. 业务项&测试场景 三.代码实现 四.用例设计&执行(简化模式) 1. 登录业务 2. 存款业务 3. 取款业务 4. 退卡 ...

  5. SAP系统中的银行主数据FI12

    SAP系统中的银行主数据FI12:分为四个部分, 1,是银行代码,对每一个银行单位(包括总行.分行和分理处等)定义的一个唯一代码, 2是开户银行,在各下属单位代码下维护的,属于各下属单位自身开户银行的 ...

  6. 在正式使用计算机账务系统的银行对账功能,会计电算化账务处理系统中,银行对账的功能有哪些? 爱问知识人...

    一.银行对账 由于企业与银行的账务处理和入账时间不一致,企业和银行之间经常会出现"未达账项",为了能够准确掌握银行存款的实际余额企业必须定期将银行存款日记账与银行出具的对账单进行核 ...

  7. 计算机毕业设计Java某银行OA系统某银行OA系统演示2021(源代码+数据库+系统+lw文档)

    计算机毕业设计Java某银行OA系统某银行OA系统演示2021(源代码+数据库+系统+lw文档) 计算机毕业设计Java某银行OA系统某银行OA系统演示2021(源代码+数据库+系统+lw文档) 本源 ...

  8. 一种用于解决银行代理产品交易热点账户的系统及方法

    一种用于解决银行代理产品交易热点账户的系统及方法  摘要 本发明公开了一种用于解决银行代理产品交易热点账户的系统,该系统包括业务受理终端.系统主机.前置处理装置和第三方单位系统,其中:业务受理终端通过 ...

  9. 计算机运营系统安全,探讨银行计算机系统安全运行的规范.doc

    探讨银行计算机系统安全运行的规范.doc 探讨银行计算机系统安全运行的规范 摘 要 现如今,我国的金融体制已经不断得到改革,各大银行的发展速度越来越快,并且迅速在社会上取得稳固的地位,商业银行之所以能 ...

最新文章

  1. 假如,有这样的异性朋友真不错
  2. Telephone Number
  3. asp.net2.0密码强度验证
  4. PAT (Advanced Level) Practise:1001. A+B Format
  5. 主从复制中忽略库的参数
  6. 转ORA-28002: the password will expire within 7 days 解决方法
  7. window 后台启动java参数启动
  8. TIOBE 11月编程语言排行榜: Haskell 要进前20了?
  9. tornado的views(templates)
  10. spark源码阅读之network(2)
  11. TeraTerm下载方法
  12. 三年出现三家上市企业 两轮电动车的生意好做吗?
  13. 物联网中常用到的DTU到底是什么?
  14. 学完了C++语法之后该学什么??(网络基础篇)
  15. Python中的函数(二)--提高篇
  16. 时间格式转化日期比较指定日期YY-MM 的前某个月
  17. Microsoft Edge 嗯...无法访问此页面解决办法
  18. html仿今日头条数据列表
  19. post和get传参(重点)
  20. C语言输出菱形及其思路

热门文章

  1. php mysql 超时时间_php mysql超时设置方法
  2. Keycloak宣布不再适配Spring Boot和Spring Security
  3. Zookeeper 典型应用场景介绍
  4. @Async的使用、原理及使用时可能导致的问题
  5. 32岁的老程序员面试没通过,一问原因,挺突然的...
  6. file:///f:winwwwxml2.php,php simplexml_load_file 中文乱码的解决方法
  7. opencv jni Android 实例笔记
  8. yolor 测试笔记
  9. yolov5 tensorrt
  10. pytorch focalloss多分类 单分类