| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 856 人关注过本帖
标题:银行程序源代码的问题(VC环境下)
只看楼主 加入收藏
阿尔塞斯殿下
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-21
收藏
 问题点数:0 回复次数:1 
银行程序源代码的问题(VC环境下)
各位高手谁以前编过银行服务的程序,有的话能否给出部分源代码?
具体要求如下:


首先进入输入界面读取要用到的服务窗口数,之后进入银行服务界面;左上方为叫号板,显示下一个可以处理的客户的编号,若为普通客户显示000~999,若为VIP客户显示V00~V99,若下班时则显示QUIT;每个窗口上方的小电子板显示该窗口是否暂停;正上方为银行名称;(默认情况下知道自己是VIP客户会主动的排在VIP服务窗口位置);右边的电子板显示分配给客户的服务号码,普通客户为000~999,VIP客户为V00~V99。
输入“WIN3回车”表示窗口设置为3,出现3个服务窗口;
输入“VIPwin1回车”表示设置VIP窗口一个,该窗口上方出现VIP(一同输入,以‘#’号结束);
输入“G”,分配号码板分配一个普通服务号码;
输入“ID12345”在输入界面,验证是否为VIP客户,若是的话在分配号码板上给该客户分配一个VIP服务号码;
在输入窗口输入“R1”,则一号窗口的电子板显示service pause,其他同理;
1.1.2文件方式:
①输入呼叫文件格式:
②输出结果文件格式:
③符号的含义:
1.2自动机模型(状态转换图):

①读取客户的信息,进入银行服务程序排队;
②循环处理客户服务;
③有VIP客户到来;
④循环处理VIP客户服务;
⑤暂停或者下班;
Q1:银行开始进入营业状态;
Q2:处理普通客户业务;
Q3:处理VIP客户服务;
Q4:没有人需要服务,暂停营业。

1.3 高层数据结构设计
链表式方案:
关于银行排队系统客户到达号码,窗口及排队状态的链表式方案构思如下:
首先在全局定义一个结构式链表变量typedef struct,内含两个指针,一个是头指针,一个是尾指针
关于客户新到取号的请求存储问题:
取一个新指针,插入链表之中,修改尾指针,使其接到最后。

关于窗口状态及排队状态的存储:
定义一个变量用来获取每次执行完办理后新链表的头指针,若头指针的nextptr不为空,说明这不是最后一个元素,所以只需删去这个头指针,下一指针升为头指针(相当于队列中少了一人);若头指针的nextptr为空,说明这是最后一个元素,则定义的变量返回空NULL,说明窗口为空,则可按规则进行下一操作,暂停休息或“先来先服务”,可以在每列设置一个计数器记录每列的人数,每进入一人计数器加一,每结束一个任务相应的计数器减一。

3)关于排队状态的存储补充:新客户到来后先为头客户服务,(首先应决定新客户是否排在此队,首先查看有无空窗口,若无则根据每队链表与数组中的存储数字进行气泡法比较,选择人数最少的队列插入新指针)。



4 系统模块划分
1)全局变量:定义两个结构类型:客户信息数据结构和链表队列数据结构,储存客户的号码和在队列中的指针。

2)使用文件格式创建队列,是能实现修改,清空等功能的链表式队列

3)此后第一个模块应是客户选取队列模块,VIP客户到达后申请VIP服务,需要输入VIP身份号,若该身份号不存在这提示重新输入,连续三次错误后分配普通号码给该客户,如身份号存在系统分析VIP窗口中最空的队列并把VIP客户分配到该窗口。普通客户拿到号码后系统分析有没有VIP用户,若有在所有普通窗口中选择一个最空的队列并把普通客户分配到该窗口,若没有则在所有窗口中选择一个最空的队列并把普通客户分配到该窗口。

4)第二个模块:选择队列之后,客户进入队列并修改该队列的尾指针,该队列的统计总数加一,这里需利用数组存储数据,实现一个排队number计数器
关于此处链表与数组结合统计队列人数的详细说明:我认为应属用链表类数组结构如是:
  pCustomer = Q[j].pFront->pNext;
这样可把有限几个窗口的链表都归入一个数组结构中,以便进行后面一系列判断最空闲窗口的比较。

5)第三个模块:
主函数,叫号系统模块:
主函数中定义几个函数定义:
void inqueue();//初始化
void enterqueue(&queue1,int n);//进队列
void outqueue(&queue2,int m);//出队列
void showqueue(&queue3);//显示队列
int emptyqueue();//判断队列是否为空

这样在叫号系统中使用while(1){
的死循环,用户输入任意窗口号,根据以上几个函数显示的窗口状态来确定在哪个窗口排队为最佳选择。
中间使用switch case 函数来对逐个窗口穷举判断。

6)银行的VIP客户资料
银行的VIP客户资料存储在文件credit.dat中,
定义一个结构存储客户姓名,客户身份号和客户存储的金额。
void updataRecord(FILE*);//更新一个VIP客户
void newRecord(FILE*);//添加一个VIP客户
void deleteRecord(FILE*);//删除一个VIP客户

7)关于
void enterqueue(&queue1,int n);//进队列
void outqueue(&queue2,int m);//出队列
void showqueue(&queue3);//显示队列
int emptyqueue();//判断队列是否为空
这几个函数均需使用链表的增加,删除,头结点是否为空的判断等链表知识写出定义,具体说明见1.3处
定义一个变量用来获取每次执行完办理后新链表的头指针,若头指针的nextptr不为空,说明这不是最后一个元素,所以只需删去这个头指针,下一指针升为头指针(相当于队列中少了一人);若头指针的nextptr为空,说明这是最后一个元素,则定义的变量返回空NULL,说明窗口为空,则可按规则进行下一操作,暂停休息或“先来先服务”。
   
  若在VIP窗口转变为普通窗口的过程中来了VIP客户,此时禁止普通客户进入VIP窗口,
    并把该VIP客户分配到人数最少的VIP窗口。
   

5 高层算法设计
银行排队系统的排队策略算法:
先对每个队列设计一个计数器,如普通窗口设为A1,A2,A3…VIP窗口设为V1,V2…
该计数器记录每列的人数,没进入一个人时加一,每处理完一个客户时计数器减一。

当来了一个普通客户时,先判断目前的VIP窗口是否有VIP客户,若有在所有普通窗口中选择一个最空的队列并把普通客户分配到该窗口,若没有则在所有窗口中选择一个最空的队列(比较所有窗口的人数选出最小的)并把普通客户分配到该窗口;
当来了一个VIP客户时,先判断VIP窗口是否转去处理普通业务,若是则最快结束当前普通业务的窗口首先回到VIP队列处理状态,较慢的VIP窗口需重新判断VIP队列是否为空,是空
则接受普通业务,否则接受VIP业务。

每一窗口完成一个业务后通过链表找到下一个客户的号码并呼叫。

当V1,V2。。。均为0时,在分配普通客户时可以分配到VIP窗口。

当有窗口发出休息的请求时,分析其他的窗口的状态,若有窗口在工作,则允许该窗口休息。

在验证一个客户是否是VIP客户时,可用函数fread读取文件credit.dat中的数据,若客户输入的ID号存在则说明该客户为VIP客户。若客户输入的ID号不存在,提示客户重新输入ID号,再查找客户输入的ID号是否存在,若存在说明该客户为VIP客户,若不存在提示客户最后一次输入ID号,若该ID号存在则说明该客户为VIP客户,若不存在则直接分配普通号码给客户。
搜索更多相关主题的帖子: 源代码 银行 环境 
2010-05-21 22:32
hellowl
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-29
收藏
得分:0 
我也想要有没有啊
2010-12-29 16:29
快速回复:银行程序源代码的问题(VC环境下)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062927 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved