银行业务模拟系统的设计与实现(C语言)

article/2025/5/10 21:41:30

实验目的

       假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行 由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在编制一个程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。

实验原理

  1. 实现初始化(OpenForDay),模拟银行开门时各数据结构数据结构的状态。包括初始化四个队列。
  2. 事件驱动(EventDrived),对客户到达和离开事件做相应处理。用一个switch语句来供管理员选择处理什么事件。
  3. 下班处理(CloseForDay),模拟银行关门的动作,消除四个队列,并统计客户平均逗留时间。
  4. 分别用用链队列模拟四个窗口前面人们所排的队伍,再用两个结构体表示时间和客户。可以用来统计每个客户在银行逗留的时间。

要点复习

什么是指针?

       指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

Client *p=new Client;   //定义一个Client类型的指针。

什么是结构体?

       结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。接下来我们来定义一个结构体:

struct Time//构建一个表示时间的结构体
{int gettime_hour;int gettime_minute;int gotime_hour;int gotime_minute;int serivetime;
};

如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明:

typedef struct Client//构建一个客户的链队列来表示队伍
{Time t;struct Client *next;  //自己包含一个跟自己类型一样的指针。int num;
}*Queueptr;

具体代码

在这里插入代码片

#include<stdio.h>
#include<stdlib.h>
#define MAX 100struct Time//构建一个表示时间的结构体
{int gettime_hour;int gettime_minute;int gotime_hour;int gotime_minute;int serivetime;
};
typedef struct Array
{int num;int length;
};typedef struct Client//构建一个客户的链队列来表示队伍
{Time t;struct Client *next;int num;
}*Queueptr;typedef struct
{Client client;Queueptr front;Queueptr rear;
}LinkQueue;int InitQueue(LinkQueue &Q) {    //初始化队列Q.front = Q.rear = new Client;if (!Q.front) {printf("初始化失败!\n");return NO;}Q.front->next = NULL;Q.client.t.gettime_hour = 0;Q.client.t.gettime_minute = 0;Q.client.t.gotime_hour = 0;Q.client.t.gotime_minute = 0;Q.client.t.serivetime = 0;printf("初始化成功!\n");return OK;
}
int EnQueue(LinkQueue &Q,int value) {//客户达到银行执行入队操作Client *p=new Client;p->num = value;int hour, minute;printf("请输入该客户的到达时间(格式为:几时几分):\n");scanf_s("%d%d", &hour, &minute);p->next = NULL;Q.rear->next = p;Q.rear = p;Q.client.t.gettime_hour = hour;Q.client.t.gettime_minute = minute;Q.client.num = value;return 1;
}
void DestroyQueue(LinkQueue &Q) {//销毁队列while (Q.front){Q.rear = Q.front->next;delete(Q.front);Q.front = Q.rear;}printf("该队列已销毁\n");
}
int EmptyQueue(LinkQueue Q) {//判断队列是否为空,可以省略不写if (Q.front == Q.rear) {printf("该队列为空。\n");return 1;}printf("该队列不为空。\n");return 0;
} int OutQueue(LinkQueue &Q) {    //客户离开银行,执行出队操作int hour;int	mi;int value;printf("请输入第%d号客户离开的时间(几时几分):",Q.client.num);scanf_s("%d%d", &hour, &mi);Q.client.t.gotime_hour = hour;Q.client.t.gotime_minute = mi;Q.client.t.serivetime = (Q.client.t.gotime_hour - Q.client.t.gettime_hour) * 60 + Q.client.t.gotime_minute - Q.client.t.gettime_minute;int tt = Q.client.t.serivetime;if (EmptyQueue(Q) == 1)return 0;Queueptr p = Q.front->next;value = p->num;Q.front->next = p->next;if (Q.rear == p) {Q.rear = Q.front;}delete p;printf("第%d号客户已经离开。\n",value);return tt;
}//银行开始营业
void  OpenForDay(LinkQueue &Q1, LinkQueue &Q2,LinkQueue &Q3, LinkQueue &Q4) {printf("初始化第一个窗口,");InitQueue(Q1);printf("初始化第二个窗口,");InitQueue(Q2);printf("初始化第三个窗口,");InitQueue(Q3);printf("初始化第四个窗口,");InitQueue(Q4);
}//每当要执行操作命令时,执行该函数
int EventDrived(LinkQueue &Q1, LinkQueue &Q2, LinkQueue &Q3, LinkQueue &Q4, double *NumOfClients, double *tot_time,int *flag) {printf("+----------------------------------+\n");printf("|                                  |\n");printf("|     1->新客户到来                |\n");printf("|     2->客户离开                  |\n");printf("|     3->停止营业                  |\n");printf("|                                  |\n");printf("+----------------------------------+\n");int action=0;printf("请输入:");fflush(stdin);scanf_s("%d", &action);while (action <= 0 || action > 3) {printf("不符合要求,请重新输入:");scanf_s("%d", &action);}switch (action) {case 1:if (Q1.rear - Q1.front == 0) {printf("请客户去1号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q1, *NumOfClients);break;}else if (Q2.rear - Q2.front == 0) {printf("请客户去2号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q2, *NumOfClients);break;}else if (Q3.rear - Q3.front == 0) {printf("请客户去3号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q3, *NumOfClients);break;}else if (Q4.rear - Q4.front == 0) {printf("请客户去4号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q4, *NumOfClients);break;}else if (Q1.rear - Q1.front <= Q2.rear - Q2.front&&Q1.rear - Q1.front <= Q3.rear - Q3.front&&Q1.rear - Q1.front <= Q4.rear - Q4.front){printf("请客户去1号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q1, *NumOfClients);break;}else if (Q2.rear - Q2.front < Q1.rear - Q1.front&&Q2.rear - Q2.front <= Q3.rear - Q3.front&&Q2.rear - Q2.front <= Q4.rear - Q4.front){printf("请客户去2号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q2, *NumOfClients);break;}else if ((Q3.rear - Q3.front < Q1.rear - Q1.front&&Q3.rear - Q3.front < Q1.rear - Q1.front&&Q3.rear - Q3.front <= Q4.rear - Q4.front)){printf("请客户去3号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q3, *NumOfClients);break;}else if (Q4.rear - Q4.front < Q1.rear - Q1.front&&Q4.rear - Q4.front < Q3.rear - Q3.front&&Q4.rear - Q4.front < Q2.rear - Q2.front){printf("请客户去4号窗口排队!");*NumOfClients = *NumOfClients + 1;EnQueue(Q4, *NumOfClients);break;}case 2:int a;printf("请输入第几号窗口的客户离开:");scanf_s("%d", &a);if (a == 1){*tot_time = *tot_time + OutQueue(Q1);break;}else if (a == 2){*tot_time = *tot_time + OutQueue(Q2);break;}else if (a == 3){*tot_time = *tot_time + OutQueue(Q3);break;}else if (a == 4){*tot_time = *tot_time + OutQueue(Q4);break;}else{printf("输入错误!\n");break;}case 3:*flag = 1;return 1;}return 0;
}//关门停止营业操作,并计算每个客户平均逗留的时间
double CloseForDay(LinkQueue &Q1, LinkQueue &Q2, LinkQueue &Q3, LinkQueue &Q4, double *NumOfClients, double *tot_time)
{DestroyQueue(Q1);DestroyQueue(Q2);DestroyQueue(Q3);DestroyQueue(Q4);double T;double N;T = *tot_time;N = *NumOfClients;double AVE = T / N;printf("停止营业,今天银行里的客户平均逗留时间为:%f\n",AVE);return 0;
}int main(){LinkQueue Q1;LinkQueue Q2;LinkQueue Q3;LinkQueue Q4;int InitQueue(LinkQueue &Q);int EnQueue(LinkQueue &Q, int value);void DestroyQueue(LinkQueue &Q);int EmptyQueue(LinkQueue Q);int OutQueue(LinkQueue &Q);double NumOfClients = 0;double tot_time = 0;int flag=0;int EventDrived(LinkQueue &Q1, LinkQueue &Q2, LinkQueue &Q3, LinkQueue &Q4, double *NumOfClients, double *tot_time, int *flag);void OpenForDay(LinkQueue &Q1, LinkQueue &Q2, LinkQueue &Q3, LinkQueue &Q4);double CloseForDay(LinkQueue &Q1, LinkQueue &Q2, LinkQueue &Q3, LinkQueue &Q4, double *NumOfClients, double *tot_time);OpenForDay(Q1, Q2, Q3, Q4);while (flag==0) {EventDrived(Q1, Q2, Q3, Q4, &NumOfClients, &tot_time, &flag);}CloseForDay(Q1, Q2, Q3, Q4,&NumOfClients, &tot_time);system("pause");return 0;}

小结

       我个人觉得其实在实现这种实验的时候,其实用C++可以把整体代码写得更好,更简单,而C语言可能有点古老,比较繁琐,也欢迎小伙伴们前来讨论,指出不足。

如果这篇文章对你有所帮助~
欢迎关注我的公众号**夏虫不可语冰也**
同时也欢迎访问我的个人网站 www.cjl946.com夏虫不可语冰也

这里有更多你需要的信息哦~

文章来源:https://blog.csdn.net/weixin_43616215/article/details/89354897
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/IUnENLH5.shtml

相关文章

银行业务系统

第一 需求分析 一、需求&#xff1a; 模拟实现银行业务调度系统逻辑&#xff0c;具体需求如下&#xff1a; 1、银行内有6个业务窗口&#xff0c;1 - 4号窗口为普通窗口&#xff0c;5号窗口为快速窗口&#xff0c;6号窗口为VIP窗口。 2、有三种对应类型的客户&#xff1a;VIP客…

基于C++实现银行业务系统

1. 分析 1.1 背景分析 银行业务系统的设计师银行不可缺少的部分之一。既是银行为顾客提供优良服务的承载着&#xff0c;又是银行能高效处理业务的秘诀&#xff0c;所以一个良好的银行业务系统应能按照每个窗口的业务员的处理能力相应调整业务处理的顺序。 随着银行业主数量和…

创意人像海报故障艺术海报教程故障艺术海报怎么做

制作之前我们可以参考一下真实的电视故障效果&#xff0c;然后通过PS功能来实现。首先要分析一下图片合适不合适&#xff0c;图片太小会不会看不出来效果等各种问题。类似这种效果最好上半身人像为好&#xff0c;这样做出来的效果会更加的明显。文章来源&#xff1a;http://www…

海报设计PSD模板——抖音Glitch故障艺术风格

作为新的艺术形式&#xff0c;它其实来源于我们生活中一个十分恼人的情景——数据和数字设备的故障。 矢量ai几何抽象故障风banner 矢量ai几何抽象故障风banner 画面出现异常、失真、变形、破碎等混乱情况&#xff0c;导致我们观看的欲望也没有了……但艺术家们却从这些偶然产…

Spring Cloud 极简入门

专栏亮点 优势 内容通俗易懂&#xff0c;更适合初学者。重实操性&#xff0c;专栏包含一个完整的项目实战&#xff0c;通过开发项目掌握技术的实际应用。案例理论结合&#xff0c;专栏以实际案例为主&#xff0c;更有利于上手应用。 专栏特色 从零讲起&#xff0c;轻松入门…

汪昭然:构建“元宇宙”和理论基础,让深度强化学习从虚拟走进现实

作者 | 陈彩娴 深度强化学习的故事&#xff0c;可以追溯到2015年&#xff1a; 当时&#xff0c;位于英国伦敦的一家小公司 DeepMind 在《Nature》上发表了一篇文章“Human-level control through deep reinforcement learning”&#xff0c;提出了一种新算法叫 Deep Q-Networ…

Hey AI,请写一首披头士风格的歌给我

编译 | 张震; Nurhachu Null; 王宇欣 作者 | Ben Dickson 来源 | pcmag 五月末&#xff0c;在东伦敦 Stepney 区的 St. Dunstan 教堂聚集了一小群人&#xff0c;他们一起欣赏了两个小时的爱尔兰传统音乐。不过&#xff0c;与以往的音乐会不同的是&#xff0c;部分音乐的作曲…

Oracle 18c体系架构图创作之路 - 设计者说(精品海报大放送)

编辑说明&#xff1a;在刚刚落幕的第八届数据技术嘉年华大会现场&#xff0c;我们正式发布了『Oracle 18c体系架构图』&#xff0c;应广大网友的呼吁&#xff0c;特别向不能到场的朋友放送。 &#xff08;回顾嘉年华&#xff1a;云数据库时代&#xff1a;企业数据架构的云化智能…

自学 Photoshop 2022 Mac版-笔记1

最近开始系统学习 photoshop。 非设计专业&#xff0c;工作跟设计部门接触过&#xff0c;最近想自己也能上手操作一些修图做图的操作&#xff0c;想看看学习多久能达到熟练的水平。 我用的是 PS 2022 Mac 版。 用输出倒逼自己输入&#xff0c;写笔记是个好方法啊&#xff01…

PS动作一键设计数字科技未来海报效果

动作支持CS4以版本软件,动作还是到陌鱼社区下载“人工智能故障风科技海报效果PS动作合集”有3个效果&#xff0c;下面我们来演示一个&#xff0c;其它使用方法相同。 01、打开软件&#xff0c;载入画笔、图案、动作,关闭软件。 02、把软件切换成英文,回顾一下之前教程“怎么把P…

我竟然在CSDN玩游戏??,教你利用github page在CSDN主页放置小游戏

好耶&#xff01;又多了一种摸鱼新方式 大家在网页端看我的主页或者博客时&#xff0c;会发现左侧多了一个小游戏hiahiahia&#xff1a; 这主要是通过github page创建了小游戏页面&#xff0c;并且通过iframe嵌入到html里实现的&#xff0c;大佬看到这应该已经会了&#xff0c;…

磨金石教育设计干货分享|20个海报设计小技巧,果断打包带走

我们做海报设计的时候&#xff0c;经常会在图文排版上花上很长的时间来构思&#xff0c;要让主题突出、要画面有活力、视觉冲击力要强、要给观者留下深刻的印象......那么今天小编就来分享20种海报设计的思路&#xff0c;让你在设计中思路清晰&#xff0c;努力不白费。 文字分…

用代码生成Glitch Art风格的抖音字体

最近看到不少文章教大家用 photoshop 实现抖音的 logo 跟字体&#xff0c;我也非常喜欢这种风格的字体&#xff0c;于是趁着晚上的时间&#xff0c;动手用代码实现了下此类风格的字体特效&#xff0c;顺便开发了个小工具&#xff0c;地址见文末。本文主要是从 艺术手法 和 JS …

mfc对话框ok没效果_利用PS制作逼真双重曝光效果案例演示,合成紫色城市建筑风格海报图片...

PS合成得好&#xff0c;那场景海报图制作就轻松了&#xff0c;我们通常在欣赏案例作品是发现不少大气的城市建筑风格的海报图片&#xff0c;是怎么样制作合成的呢&#xff0c;今天我们来分享PS制作逼真双重曝光效果的海报教程。摄影时&#xff0c;利用多重曝光&#xff0c;可以…

设计干货模板|孟菲斯风格促销海报让作品艺术加分!

对于孟菲斯&#xff0c;或许你不知道这专业词是什么意思。当你看到下面的图&#xff0c;是不是感觉有点似曾相识。 复古又新潮的设计&#xff01; 为什么叫“孟菲斯”&#xff1f;据说&#xff0c;设计师Ettore Sottsass与一群年轻设计师在家里的公寓聚会&#xff0c;当时播放…

怎么做抖音故障艺术风格人物照片效果

今天我们就用陌鱼社区“80年代复古故障抖音海报效果PS动作”,简单快速制作出复古故障艺术风格人物照片海报效果,只要按这个步骤来就可以制作出如图效果,下面是这个动作制作的一些效果&#xff1a; 01、载入笔刷、图案、动作具体方法可参考下图,全部载入之后关闭软件。 02、把软…

如何用ps做故障艺术风格效果

今天这个教程主要是用PS动作来做的&#xff0c;能给我们在工作上面带来很大的方便&#xff0c;特别是突然做故障艺术风格海报的人来说&#xff0c;这个还是非常有用滴&#xff0c;至于动作怎么找&#xff0c;可以搜“赛博故障风格海报艺术效果PS动作”。 01、还是老样子&#x…

AE教程丨1分钟学会制作信号故障风特效

信号故障风近几年还是很流行的&#xff0c;如何让自己的设计里也能有一些信号故障风的风格呢&#xff1f;今天的教程就来帮助大家学习AE制作故障风视频。 AE制作信号故障风视频效果教程 1.在绘图工具内制作相应的文字海报并导入到AE&#xff1b; 2.新建纯色图层做抖动效果&…

JAVA线上故障排查全套路

线上故障主要会包括cpu、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的&#xff0c;基本上出问题就是df、free、top 三连&#x…

Ps|故障风格效果

欢迎点击「算法与编程之美」↑关注我们&#xff01; 本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列文章。 欢迎加入团队圈子&#xff01;与作者面对面&#xff01;直接点击&#xff01; 抖音作为当代人消遣时…