c++银行业务模拟系统
- 格式:doc
- 大小:14.63 KB
- 文档页数:13
模拟银行软件的功能
模拟银行是一套完整的可以模拟国内商业银行综合业务的实验系统,可以满足我院金融专业教学和科研需要。
实验室建设的最终目的是通过模拟的交易环境,加强学生对现代商业银行理论知识的理解,训练学生的实际动手能力,满足专业课程的实验、实习及课程设计任务,为学生走向社会提供一个理论结合实际的实验环境,促使学生关注最新的商业银行信息技术,训练学生的实际操作能力,为金融专业及其它相关专业的学生走向社会提供一个理论结合实际的实习环境。
商业银行综合业务模拟系统是一个面向金融业发展金融电子化工程建设,集开发、研究、实验、培训为一体的银行业务模拟系统,是金融人才培养和科学研究的重要工具。
商业银行业务模拟实验报告一、实验目的本实验旨在通过模拟商业银行业务的开展,让学生了解商业银行的基本运营模式和相关业务操作,并掌握一定的风险控制能力和决策能力。
二、实验内容1.选择合适的业务模式在模拟商业银行业务的开展前,需要选择适合的业务模式。
常见的业务模式包括:个人存款业务、贷款业务、国际业务、资金融通等。
根据实验要求和自身情况,选择合适的业务模式。
2.设立银行档案根据业务模式的选择,设立相应的银行档案,包括银行名称、注册资本、机构设置、员工人数等。
这些档案能够为业务开展提供参考依据。
3.开展业务根据选择的业务模式,开始开展相应的业务。
例如,在个人存款业务中,你可以设置不同的存款产品,设定存款利率、起存金额等规则,并向客户进行宣传和推广,吸引客户存款。
4.进行风险控制在业务开展的过程中,要时刻注意风险控制。
通过设置风险预警线、上线等措施,规避风险,保障客户资金安全。
5.分析经营状况根据实际业务开展情况,定期分析经营状况,包括资金流入流出情况、业务收入和支出等,以便及时调整经营策略,提高盈利能力。
三、实验结果在实际操作中,我选择了个人存款业务模式。
设立了一个名为“安顺银行”的商业银行档案,注册资本为1000万元,机构设置包括行长办公室、财务部、营销部等。
共有20名员工参与业务开展。
根据业务模式的选择,我为客户提供了四种不同的存款产品:活期存款、定期存款、零存整取存款和教育储蓄存款。
设定了不同的存款利率、起存金额和存款期限等规则,并通过广告宣传、推荐奖励等方式吸引客户存款。
在业务开展的过程中,我密切关注风险控制。
制定了风险预警线,当存款流动性超过预警线时,将及时采取措施规避风险。
同时,严格审核贷款申请,确保贷款资金安全。
经过一段时间的经营,我对经营状况进行了分析。
根据资金流入流出情况和业务收支情况,我发现存款业务的收入占比较高,但资金利用率有待提高。
为此,我计划增加贷款业务的拓展,提高资金利用率和盈利能力。
银行业务c语言银行业务涉及多种操作,如存款、取款、转账、查询余额等。
使用C 语言来模拟银行业务是一个很好的练习,可以帮助你了解基本的数据结构、循环、条件语句以及函数等编程概念。
以下是一个简单的C语言程序,用于模拟基本的银行业务:c复制代码#include <stdio.h>// 定义账户结构体typedef struct {int account_number;float balance;} BankAccount;// 存款函数void deposit(BankAccount *account, float amount) {account->balance += amount;printf("Deposit successful. Your new balance is %.2f\n", account->balance);}// 取款函数void withdraw(BankAccount *account, float amount) {if (account->balance >= amount) {account->balance -= amount;printf("Withdrawal successful. Your new balance is %.2f\n", account->balance);} else {printf("Insufficient balance. Withdrawal failed.\n");}}// 显示账户信息void displayAccountInfo(BankAccount *account) {printf("Account number: %d\n", account->account_number);printf("Balance: %.2f\n", account->balance);}int main() {BankAccount myAccount = {12345, 1000.00}; // 初始化账户// 显示初始账户信息printf("Initial account information:\n");displayAccountInfo(&myAccount);// 存款deposit(&myAccount, 500.00);// 取款withdraw(&myAccount, 200.00);// 再次显示账户信息printf("\nUpdated account information:\n");displayAccountInfo(&myAccount);return 0;}这个程序定义了一个名为BankAccount的结构体,该结构体包含账户号和余额两个字段。
银⾏业务模拟程序实验⼆银⾏业务模拟程序⼀、实验⽬的⽤Turbo C 语⾔设计实现⼀个⽤事件驱动的银⾏业务离散模型, 模拟每⼀个客户到达银⾏、排⼊⼈最少的业务窗⼝队列、排⾄窗⼝并处理完业务后离开的整个过程,统计客户在银⾏的平均逗留时间⼆、实验环境1、Windows7操作系统;2、VisualC++.三、实验内容假设某银⾏有4个窗⼝对外接待客户,从早上银⾏开门起不断有客户进⼊银⾏。
由于每个窗⼝在某时刻只能接待⼀个客户,因此在客户⼈数众多的时需在每个窗⼝前顺次排队,对于刚进⼊银⾏的客户,如果某个窗⼝的业务员正空闲,则可上前办理业务;反之,若4个窗⼝均有客户所占,他便会排在⼈数最少的队伍后⾯。
现在需要编制⼀个程序⼀模拟银⾏的这种业务活动并计算⼀天中客户在银⾏的平均逗留时间。
假设每个客户办理业务的时间不超过30分钟;两个相邻到达银⾏的客户的时间间隔不超过5分钟。
模拟程序从第⼀个客户到达时间为“0”开始起运⾏。
四、概要设计1、存储结构的类型定义:此模拟程序需要两种数据类型:有序链表和队列。
它们的数据元素类型定义分别如下:(1)typedef struct{int OccurTime; //事件发⽣时刻int NType; //事件类型,Qu表⽰到达事件,0-Qu-1表⽰Qu个窗⼝的离开事件}Event,ElemType;//事件类型,有序链表LinkList的数据元类型typedef LinkList EventList; // 事件链表类型,定义为有序链表(2)typedef struct{int ArrivalTime;//到达时刻int Duration;//办理业务所需时间}QElemType; //队列的数据元素类型2、单链表⽰意图:如课本P69图所⽰。
3、项⽬组成图:4、exp_yh.cpp的程序⽂件包含的函数原型及功能int cmp(Event a,Event b){ }:依事件a的发⽣时刻<、=或>事件b的发⽣时刻分别返回-1、0或1 ;Status InitList(LinkList &L):构造⼀个空的线性链表;Status InitQueue(LinkQueue &Q):构造⼀个空的队列;Status OrderInsert():已知L为有序线性链表,将元素e按⾮降序插⼊在L中;void OpenForDay():初始化操作;void Random():产⽣两个随机数,分别表⽰客户办理时间和两个相邻达到银⾏的客户的时间间隔;int QueueLength():求队列的长度;int Minimum() :返回最短队列的序号Status EnQueue():插⼊元素e为Q的新的队尾元素;Status DeQueue():若队列不空,删除Q的对头元素,⽤e返回其值,并返回OK,否则返回ERRORV oid CustomerArrived():处理客户到达事件;Status GetHead():若队列不空,⽤e返回Q的对头元素,并返回OK,否则返回ERROR;Position GetHead():返回线性链表L中头结点的位置;Status QueueEmpty():若Q为空队列,则返回TRUE,否则返回FALSE;void CustomerDeparture():处理客户离开事件Status ListEmpty():若线性链表L为空表,则返回TRUE,否则返回FALSE;Status DelFirst():h指向L的⼀个结点,把h当做头结点,删除链表中的第⼀个节点并以q返回,若链表为空,q=NULL,并返回FALSE;ElemType GetCurElem():已知p指向线性链表中的⼀个结点,返回p所指节点中数据元素的值;void Bank_Simulation():打印出窗⼝,平均逗留时间main():主函数5、项⽬的模块结构及函数调⽤关系:本程序包含5个模块:(1)主程序模块:void main(){ 接受命令;处理命令;}(2)事件链表表单元模块——实现链表的抽象数据类型;(3)队列单元模块——实现队列的抽象数据类型;(4)事件结点结构单元模块——定义链表的结点结构;(5)队列结点结构单元模块——定义队列的结点结构;各模块之间的调⽤关系如下:主程序模块—〉链表、队列表单元模块—>队列、链表结点结构单元模块。
双元模拟银行业务实训报告一、实习目的本次双元模拟银行业务实训旨在通过模拟真实银行业务环境,帮助学生更好地理解和掌握银行业务的基本流程和操作技能。
同时,通过实习,希望能够提升学生解决实际问题的能力,加深对银行业务的认识,为未来的职业生涯打下坚实的基础。
二、实习岗位的认识和见解在本次实习中,我担任的是银行柜员的岗位。
这个岗位是银行业务的一线岗位,负责接待客户、处理客户的基本银行业务需求,如存取款、转账等。
通过这个岗位的实习,我深刻认识到柜员的工作不仅需要扎实的业务知识,还需要良好的沟通能力和服务态度。
只有全面提升自己的综合素质,才能更好地为客户提供优质的服务。
三、实习过程中发现的问题和解决问题的方法在实习过程中,我发现自己在处理一些特殊业务时,如挂失、外汇业务等,往往会感到有些手忙脚乱。
为了解决这些问题,我积极向有经验的同事请教,并利用业余时间学习相关业务知识。
同时,我也意识到,要想成为一名优秀的银行柜员,不仅需要熟练掌握银行业务知识,还需要不断学习和更新知识储备,以适应不断变化的业务环境。
四、对实习过程的总结和收获通过这次双元模拟银行业务实训,我不仅掌握了基本的银行业务流程和操作技能,还提高了自己的沟通能力和解决问题的能力。
同时,我也意识到了自己在某些方面的不足之处,比如业务知识的储备、应急处理能力等。
针对这些问题,我将在今后的学习和工作中不断努力,提升自己的综合素质。
五、对实习过程中不足之处的建议对于双元模拟银行业务实训中的不足之处,我有以下几点建议:首先,可以进一步完善模拟系统的真实性和完整性,尽可能模拟各种复杂的业务场景,帮助学生更好地适应真实的工作环境;其次,可以加强对学生业务知识和技能的培训,特别是针对一些特殊业务和复杂业务流程的培训,提高学生的业务处理能力;最后,可以增加对学生的沟通和协作能力的训练和评估,提高学生的综合素质和团队协作能力。
六、个人对实习过程中的体会和收获在这次双元模拟银行业务实训中,我深刻体会到了银行业务的复杂性和多样性。
2012年6月项目实训任务书课程名称:程序设计基础实训II课程编码:JX课程类别:专业基础必修课学分数:2学时数:32开课学期:2实训题目:ATM存取款系统的改进与完善一、已知技术参数和设计要求:银行ATM存取款系统业务描述如下:银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。
为了模拟真实的ATM业务环境,本系统必须实现存款、取款、查询、转账、修改密码以及开户的功能。
用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登陆ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。
本系统各个业务有如下注意点:(1)登陆系统用户登陆之前,必须在登陆界面输入其银行账户,通过其正确输入的银行账户登陆系统。
(2)开户业务要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。
同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。
(3)存款业务客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。
(4)取款业务客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但是取款金额必须大于目前的账户余额。
(5)查询业务客户登陆系统后,可以选择查询业务,查询账户余额。
(6)转账业务客户登陆系统后,可以选择转账业务,进行转账。
注意的是转账的目的账户必须是本系统已经存在的银行账户。
(7)修改密码客户登陆系统后,可以选择修改密码业务,进行密码修改。
二、各阶段具体要求:1、系统总体设计阶段(1)根据需求分析划分功能模块(2)分析并设计各个功能模块之间的关系(3)对于各个功能模块,设计相应的数据结构(必须使用链表完成全部功能)(4)设计相应的算法(必须包括排序和检索功能,且基于链表进行排序和检索)2、详细设计阶段(1)对于每个功能模块,应划分成操作层和数据层(2)对于每个操作层,应尽量考虑用户操作的简单,便捷(3)对于每个数据层,必须使用链表进行管理(4)在用链表进行管理时,必须用到链表检索和排序(5)对于数据层的操作完的数据必须保存到文件中(包括文件读、写操作)3、编码实现阶段(1)完成代码编写(2)要求代码编写规范(不得使用全局变量、所有功能模块必须使用函数封装主函数main()的行数不得超过代码总长度的25%)(3)代码必须有相应的注释(注释行数不得少于代码的10%,函数功能、变量名、算法、重要的循环、分支都必须用注释说明)4、系统测试阶段(1)完成功能调试(2)要求完成必要的测试工作5、交付实施阶段(1)提交可正常执行的系统,程序代码(2)撰写项目实训报告书(3)要求按照文档书写规范,严格地书写文档(4)注意:不允许使用代码、图片和表格填充报告空间。
数据结构银行业务模拟实验报告1. 背景随着信息技术的快速发展,银行业务的处理和管理变得越来越复杂,需要高效的数据结构来支持。
在这个实验中,我们将使用数据结构来模拟银行业务的处理过程,以评估不同数据结构对于银行业务的影响。
2. 分析2.1 问题描述我们需要模拟一个银行的业务处理过程,包括客户排队、办理业务、等待时间等方面的模拟。
具体而言,我们需要解决以下问题:1.如何表示客户队列和银行窗口?2.如何模拟客户到达和离开的过程?3.如何计算客户等待时间和平均等待时间?4.如何评估不同数据结构对于银行业务处理效率的影响?2.2 设计思路为了解决上述问题,我们可以采用以下设计思路:1.使用队列来表示客户队列,每个元素表示一个客户。
2.使用数组或链表来表示银行窗口,每个元素表示一个窗口。
3.模拟客户到达和离开的过程时,将客户加入队列或从队列中移除。
4.计算客户等待时间时,可以记录客户进入队列的时间和离开队列的时间。
5.通过多次实验,统计客户的平均等待时间。
6.对比不同数据结构的处理效率,可以比较它们的平均等待时间和处理时间。
2.3 数据结构选择在这个实验中,我们需要选择适合模拟银行业务的数据结构。
根据问题描述和设计思路,我们可以选择以下数据结构:1.队列:用于表示客户队列。
队列具有先进先出(FIFO)的特性,非常适合模拟排队等待的场景。
2.数组或链表:用于表示银行窗口。
数组具有随机访问的特性,在某些情况下可能更高效;链表则更适合频繁插入和删除操作。
3. 实验结果3.1 实验设置为了评估不同数据结构对于银行业务处理效率的影响,我们进行了多次实验。
每次实验中,我们模拟了一定数量的客户到达银行,并记录了每个客户离开时的等待时间。
3.2 实验结果分析根据实验结果,我们计算了不同数据结构下客户的平均等待时间,并进行了比较。
以下是实验结果的总结:数据结构平均等待时间队列10分钟数组12分钟链表9分钟从上表可以看出,使用队列作为客户队列的数据结构具有最低的平均等待时间,而使用数组作为银行窗口的数据结构具有最高的平均等待时间。
商业银行业务模拟实验报告班级姓名学号商业银行业务模拟实验报告实验目的:我们在银行模拟操作过程中,能熟悉银行日常业务,如对私业务、对公业务等,对现代商业银行的架构、运营模式有所认识;我们可以在此看到每一个实验的业务图解教程,将银行经营管理的理论与实践相结合,系统地实践,体验和学习银行业务的相关业务,从而可以提高学习、判断、操作、分析等各个方面的能力;实验过程:在银行模拟操作过程中,我们扮演在银行中工作的柜员,进行了十个业务的模拟,分别是:活期储蓄业务、整存整取业务、零存整取业务、通知储蓄业务、代理中间业务、现金业务、本票业务、汇票业务、单位活期存款业务、定期存款业务;这些业务又分为对私业务和对公业务注意:在这些业务操作之前,都要进行工前处理9071网点开机,9073机构签到,而业务操作完成之后,都要进行日终处理9077柜员轧账—9078柜员日结—9075机构日结—机构签退—网点关机;在每项操作的开始,我们都必须根据客户所递交的凭证及钱钞进行判断客户需求是否正确,再进行业务操作;对私业务活期储蓄业务、整存整取业务、零存整取业务、通知储蓄业务、代理中间业务一、活期储蓄业务活期储蓄指不规定存期,储户随时可以存取款、存取金额不限的一种储蓄方式;对于活期储蓄业务,我们进行的模拟业务有:活期开户、活期续存、活期账户对转、活期存款账户支取、结清、销户等;活期储蓄的种类有:活期一折通储蓄卡借记卡一卡通注意:在办理此业务时,一定要看清客户的要求,当然,对客户的每一项信息都必须全神贯注地仔细核对;然后根据程序的步骤进行操作,要注意系统给予的提示;二、整存整取业务整存整取是一种由您选择存款期限,整笔存入,到期提取本息的一种定期储蓄;其特点是:有较高的稳定收入,起存金额低,存期选择多样;这种储蓄适合个人生活暂时不用的存储;整存整取储蓄的种类有:定期一折通定期存单储蓄卡借记卡三、通知储蓄业务通知存款是经中国人民银行批准的个人存款业务,是一种不约定存期,支取时需提前通知银行,约定支取日期和金额方能支取的一种大额存款方式;注意:在操作过程中,要根据客户要求,是否需要凭证,若要,就要判断是从财务箱中的重空凭证,还是从专夹保管箱取出;四、代理中间业务代理业务是银行利用自己的资源如营业网点、网络、人员优势为政府、企业、个人提供代理业务;它是银行为适应社会发展和居民经济生活需求,不运用或较少运用自己的资财,以代理人的身份替客户办理收付和其他委托事项,提供各类金融服务并适当收取手续费的业务;代收费业务的种类(1)代缴与居民家庭日常生活有关的公用事业费:包括水费、电费、煤气费、固定电话费、移动电话费、物业管理费及其他公用事业费等;(2)代收代缴企事业单位之间或单位与个人之间的收费项目:包括税款、社会保险基金、工商管理费、各类罚没款等;注意:在操作过程中,要记住,在黑画面的系统操作菜单中,要按要求填写各项,并查看客户所要交的金额,要先请客户交钱,再继续输入完成各项,然后提交;五、零存整取业务零存整取定期储蓄是为了适应群众将零星小额节余款积零成整的需要而设置的;零存整取定期储蓄的优点主要表现在:一是可以聚零钱为整钱,积小钱办大事,改善生活,解决特定用途的需要;二是零存整取需要月月存储,具有一定的约束性,有利于培养参加储蓄的习惯;三是零存整取具有积零成整的功能,能起到将零星款过渡到参加整存整取定期储蓄的桥梁作用,这是扩大储源的一个非常重要的途径;对公业务现金业务、本票业务、汇票业务、单位活期存款业务、定期存款业务一、汇票业务银行汇票是出票银行签发的,由其在见票时按实际结算金额无条件支付给收款人或持票人的票据;银行汇票的出票银行为银行汇票的付款人;银行汇票可以用于单位或个人的各种款项结算;银行汇票可以用于转账,填明“现金”字样的银行汇票也可以用于支取现金;银行汇票按使用范围可分为现金银行汇票和转账银行汇票;注意:在操作过程中,要注意,其中可能会用到压数机,一定要仔细分清,到底是汇票压数还是本票压数;二、单位定期存款业务单位人民币定期存款是一种事先约定支取日的存款,即银行与存款人双方在存款时事先约定期限、利率,到期后支取本息的存款;单位定期存款不含大额可转让定期存款实行账户管理;单位定期存款的基本流程注意:在模拟业务流程中,要先清楚客户需求,是否是已开立活期存款账户的客户;分为以下两种:1)若是已开立活期存款账户的客户办理单位定期人民币存款业务首先,要看客户是否持开户申请书、经过年检的营业执照正本或副本、加盖单位公章、财务专用章、个人名章法定代表人或财务负责人的预留印鉴、法定代表人授权书等材料;其次, 要根据客户的申请为单位开立定期存款账户,并从活期账户中将相应的资金转至定期存款账户中;然后, 要向客户出具“单位定期存款开户证实书”2)若是未开立活期存款账户的客户办理单位定期人民币存款业务首先,要看客户是否携开户申请书、经过年检的营业执照正本或副本、加盖单位公章、财务专用章、个人名章法定代表人或财务负责人的预留印鉴、法定代表人授权书等材料,并持发票、银行汇票;其次,要根据客户的申请为单位开立定期存款账户并将支票、银行汇票资金存入定期存款账户中;然后,要向客户出具“单位定期存款开户证实书三、本票业务银行本票是由银行签发的,承诺自己在见票时无条件支付确定的金额给收款人或持票人的票据;银行本票的适用范围单位和个人在同一票据交换区域需要支付的各种款项,均可使用银行本票;银行本票仅限于出票人向其票据交换区域内的收款人出票;注意:用于转账的本票,需在本票上划去“现金”字样;用于支取现金的本票,需在本票上划去“转账”的字样;注:在国内的商业银行中,目前,定额银行本票只在一些地区如上海、广州等使用;四、现金业务1)人民币银行结算账户是指银行为存款人开立的用于办理现金存取、转账结算等资金收付活动的人民币活期存款账户;它是存款人办理存、贷款和资金收付活动的基础;按照存款人的不同,可分为单位银行结算账户和个人银行结算账户;2)单位银行结算账户是指存款人以单位名称开立的银行结算账户;个体工商户凭营业执照以字号或经营者姓名开立的银行结算账户纳入单位银行结算账户管理;3)现金结算是收付款双方直接以现金进行的收付;票据转让是以票据的给付表明债权债务关系;转账结算是通过银行将款项从付款单位账户划转到收款单位账户的货币收付行为;五、单位活期存款业务单位人民币活期存款是单位客户存入银行后随时可以支取的存款;包括各类企事业单位的结算户存款和基金户存款;对公活期基本结算账户基本流程:客户填制开户申请书,提供企业法人执照或营业执照正本或其他规定的材料,送交盖有存款人印章的印鉴卡片,经审核同意后开立活期存款账;对公活期一般结算账户基本流程:客户填制开户申请书,提供企业法人执照或营业执照正本或其他规定的材料,送交盖有存款人印章的印鉴卡片,银行审核同意后开立活期存款账户;开立基本存款账户的,银行审核同意后,客户还应向中国人民银行当地分支机构申请核发开户许可证;实验心得:通过银行业务模拟业务操作,加强了我们对商业银行理论知识的理解,训练了我们实际动手能力;经过学习,我了解了银行业务运作的基本流程,明确了银行柜员的工作内容及职责,加深了对银行经营实践的认识;在高度仿真的模拟环境中,获得实践的经验,掌握不同柜面业务的处理方法;在每项操作的开始,我们都会根据客户所递交的凭证及钱钞进行判断客户需求是否正确;可以说这项操作看似简单但意义重大,操作中我深切体会到了这点;实验要求我们对每一项信息都必须全神贯注地仔细核对,工作相对比较枯燥,重复,还比较容易出现差错,但是如果是真心要从事这一方面工作,就要耐得住日复一日的循环往复;所谓,事无巨细,成功就是简单的事情重复做,;我们在往后的工作中也应该力求做到理论联系实际,将知识应用到实践当中,同时,要时刻锻炼自己的细心和恒心,要认真负责,切忌粗心大意,马虎了事;这些繁琐细小的工作若是一时疏忽,系统会自动提示有误,于是查找错误再重复劳动;特别是对私环节,我往往会因为忘记点钞后再返回,或是取出金额有误而造成重复劳动;对公众业务中又因为信息输入有误、遗漏选项而不断更正纠错;这些错误一方面是因为我对于操作环节的不熟练造成,另一方面也是因为个人对于银行业务欠乏明锐感;这也让我意识到一点,这些在模拟操作中产生错误可以重来,但在现实生活就必须为自己的过错负责;现实中往往是自己独立完成,不会有人在一旁提醒、检查;这也就要求我们在工作时,一定要本着认真严谨负责的态度,既是对自己负责也是对客户负责;总之,这次的模拟实验让我亲身体验到了银行业务操作;使我从理论层面向实际操作层面迈出了一大步,学习能力、判断能力、操作能力、分析能力都有所提高;了解了银行业务的办理流程及操作、明确了业务员的职责;今后可以不再拘泥于理论知识的局限而是更多的通过动手操作获取实际经验,为今后步入岗位奠定坚实的基础;。
目录一、实验问题描述-------------------------2二、实验需求分析-------------------------3三、软件概要设计-------------------------4四、软件详细设计-------------------------5五、编码与调试分析----------------------14六、程序运行操作说明--------------------15七、测试结果----------------------------16八、课程设计心得体会--------------------18九、自主学习参考文献--------------------19一、实验问题描述:本课程设计的目的就是要达到能够灵活运用程序设计基础所讲授内容,能够针对一个需求比较明确的小型软件,设计合理的解决方案,并能够用编程语言转化为可执行程序,以解决实际问题。
进一步掌握开发一个小型实用软件系统的基本步骤和方法、进一步培养良好的编程习惯、提升学习能力,熟练掌握数据结构中所学知识,并加以运用到实际软件开发中去,掌握调试代码的基本方法,通过调试找出BUG出现的地方以及原因,并运用正确的方法进行DEBUG。
设银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候, 当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。
写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。
基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。
提高要求:设计图形用户界面,模拟中国银行真实的打号机操作界面,当用户选择一种业务后,要提示用户排在前面的人数。
基于职业能力本位的《商业银行业务》实验设计摘要:针对金融行业发展迅速过程中对高职金融人才需求最多的是基层业务第一线人才现状,对金融专业核心课程《商业银行业务》进行实验项目教学活动载体设计,围绕职业(岗位)关键能力来进行高职金融专业课程体系开发,在原有的传统知识传授型课程教学体系中,植入以职业能力为本位的实验教学项目。
关键词:商业银行业务金融人才职业能力本位实验近年来中国金融行业对高职金融人才需求最多的是基层业务第一线人才,高职院校金融专业所培养的应是适应金融服务领域一线需要、掌握金融业的基本业务操作技能、具备“一技之长+综合素质”的有职业生涯发展基础的高素质技能型金融人才。
针对此现状,对金融专业核心课程《商业银行业务》进行实验项目教学活动载体设计,围绕职业(岗位)关键能力来进行高职金融专业课程体系开发,在原有的传统知识传授型课程教学体系中,植入以职业能力为本位的实验教学项目。
具体设计思路如下所述:一、实验目的通过本实验,使学生加深对商业银行业务理论知识的理解,初步掌握商业银行传统业务操作方法,学会利用计算机软件处理银行业务,为以后工作打下基础。
二、知识准备此实验要求学生具备银行会计课程知识,以及一定的计算机网络基础知识和计算机网络安全技术知识。
实验安排在理论教学内容讲授结束之后,要求学生在课堂授课阶段,掌握商业银行业务处理流程。
结合课堂讲授的知识,理解储蓄、对公、信贷、信用卡业务系统模块功能结构。
三、实验软件实验软件主要采用西南财经大学的“现代商业银行业务模拟系统”,分单机版和网络版,两个版本具有相同的功能模块。
单机版主要用于分步教学时使用,以便于使用者熟悉每个环节的操作过程。
网络版主要用于多人教学(全系统的运行)和实际应用,采用c /s(客户机,服务器)结构,后台操作系统为win—bit,数据库系统为oracle,前台操作系统为win9x/nt/2000。
该软件系统功能分为:系统管理、业务管理、对公业务、储蓄业务、信贷业务等五大部分,功能涵盖了现代商业银行日常业务处理的多个方面。
#include<iostream>#include<fstream>#include<string>#include <time.h>using namespace std;const int aa=70,bb=150,cc=130,dd=50;//不同业务所需时间struct data//客户资料{int usetime;//客户在银行时间int bianhao;//客户编号int yewutime;//客户所办业务时间string yewu;//业务名int yewunum;//业务标号int chutime[3];//客户到达时间,chutime[0]是秒钟,chutime[1]是分钟,chutime[2]是时钟int motime[3];//客户离开时间int windownum;};class Bank{private:int windowsum[4][5]; //窗口数long sumtime; //所有办理完业务客户总共所用时间int suijitime; //最后两个客户间隔时间int stilltime[4]; //每个窗口还需等待时间int s,f,m; //分别是时、分、秒int wind[5]; //wind[0]是空闲窗口数量,wind[1/2/3/4]存放具体窗口名public:Bank(); //初始化data kehu[900]; //8小时内最多客户人数void timelocal(Bank &); //记录时间int windows(int,int); //为客户排队void calculatechu(int,Bank&);//记录客户到达时间void print(int,int ,Bank); //输出客户数据void averagetime(int,Bank); //计算平均时间void window_dail(); //输出窗口信息int fanhui(Bank &); //求随机时间void custerm_dail(int,int,Bank);//选择客户编号void choose(int,int,Bank); //选择查看内容void todaynum(int,int,Bank);//显示今日客户量void writetotext(int,Bank);//文件函数操作};Bank::Bank()//构造{s=8;//时间f=0;m=0;suijitime=0; //随机间隔时间sumtime=0; //所有客户在银行所用时间之和for(int i=0;i<4;i++){stilltime[i]=0; //每个窗口处理剩下业务还需要的时间for(int j=0;j<5;j++)windowsum[i][j]=0; //每个窗口处理客户数}for(int a=0;a<5;a++)wind[a]=0; //wind[0]是空闲窗口数量,wind[1/2/3/4]存放具体窗口名}int Bank::fanhui(Bank &wait){suijitime=rand()%60; //客人随机到达m=m+suijitime; //m即是当地时间while(m/60>=1) //完成时间格式{m=m-60;f++;}while(f/60>=1){f=f-60;s++;}return s;}void Bank::timelocal(Bank &wait) //记录银行时间{cout<<"您到达的时间是: ";if(s<10)cout<<"0"<<s<<":";//特定格式输出else cout<<s<<":";if(f<10)cout<<"0"<<f<<":";else cout<<f<<":";if(m<10)cout<<"0"<<m<<endl;else cout<<m<<endl;}void Bank::averagetime(int x,Bank wait)//计算所有客户的平均等待时间{long aver=0;//平均时间int fen=0,miao=0;//平均时间以分、秒表示int j;sumtime=0;for(j=0;j<x;j++){sumtime=sumtime+wait.kehu[j].usetime;//总共时间}aver=sumtime/(x);//计算fen=aver/60;miao=aver;cout<<"所有客户平均等待了 "<<fen<<"分"<<miao<<"秒!"<<endl<<endl;}//求空窗口数int Bank::windows(int x,int i)//x是办理业务的客户数,i是最后一位顾客的编号,wait 是主函数里定义的对象{int a,b=1,t=0;for(a=0;a<5;a++)//初始化窗口空闲信息wind[a]=0;for(a=0;a<4;a++){stilltime[a]=stilltime[a]-suijitime;//特定窗口处理还需的时间等于上次处理所需的时间减去随机等待时间if(stilltime[a]<=0) //如果时间为负,重新赋值{stilltime[a]=0;wind[0]++; //空余窗口数wind[b++]=a+1; //指出特定的空闲窗口}}t=wind[0];b=1;while(x<=i && t>0) //窗口不空{stilltime[wind[b]-1]=stilltime[wind[b]-1]+kehu[x].yewutime;//特定窗口处理完业务所需时间等于处理完上次业务所需时间加上此次业务时间kehu[x].motime[0]=m;//客户离开时的秒钟kehu[x].motime[1]=f;//客户离开时的分钟kehu[x].motime[2]=s;//客户离开时的时钟kehu[x].usetime=kehu[x].motime[0]-kehu[x].chutime[0]+(kehu[x].motime[1]-kehu[x]. chutime[1])*60+(kehu[x].motime[2]-kehu[x].chutime[2])*3600+kehu[x].yewutime;//客户在银行等待时间windowsum[wind[b]-1][0]++;//特定窗口处理的客户数windowsum[wind[b]-1][kehu[x].yewunum]++; //特定窗口处理的业务数b++;x++;t--;}return x;}void Bank::calculatechu(int i,Bank &Custerm)//客户的到达时间{int j;for(j=0;j<3;j++)//初始化客户到达时间Custerm.kehu[i].chutime[j]=0;Custerm.kehu[i].chutime[0]=m;//为客户到达时间赋值Custerm.kehu[i].chutime[1]=f;Custerm.kehu[i].chutime[2]=s;}void Bank::print(int x,int i,Bank Custerm)//输出客户信息{int sec,min,hour;sec=Custerm.kehu[x].motime[0]+Custerm.kehu[x].yewutime;min=Custerm.kehu[x].motime[1];hour=Custerm.kehu[x].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}cout<<"以下是"<<Custerm.kehu[x].bianhao<<"号客户的详细资料:"<<endl;cout<<"选择的业务:"<<Custerm.kehu[x].yewu<<endl;cout<<"选择的业务所需的时间:"<<Custerm.kehu[x].yewutime<<endl;cout<<"客户到达的时间:";for(int k=2;k>0;k--){if(Custerm.kehu[x].chutime[k]<10)cout<<"0"<<Custerm.kehu[x].chutime[k]<<":"; else cout<<Custerm.kehu[x].chutime[k]<<":";}if(Custerm.kehu[x].chutime[0]<10)cout<<"0"<<Custerm.kehu[x].chutime[0];else cout<<Custerm.kehu[x].chutime[0];cout<<endl;cout<<"客户离开的时间:";if(hour<10)cout<<"0"<<hour<<":";//特定格式输出else cout<<hour<<":";if(min<10)cout<<"0"<<min<<":";else cout<<min<<":";if(sec<10)cout<<"0"<<sec<<endl;else cout<<sec<<endl;cout<<endl;}void Bank::window_dail()//输出窗口办理业务的情况{int i;while(1){cout<<"请选择窗口(1--4),以0结束:"<<endl;cin>>i;if(i==0){system("cls");break;}if(i>=5){system("cls");cout<<"没有这个窗口,请重新选择"<<endl;}else{system("cls");cout<<" "<<i<<"窗口共处理了 "<<windowsum[i-1][0]<<"人"<<endl;cout<<"其中"<<endl;cout<<" 存款业务 "<<windowsum[i-1][1]<<"人"<<endl;cout<<" 取款业务 "<<windowsum[i-1][2]<<"人"<<endl;cout<<" 挂失业务 "<<windowsum[i-1][3]<<"人"<<endl;cout<<" 还贷业务 "<<windowsum[i-1][4]<<"人"<<endl;}}}void Bank::todaynum(int x,int i,Bank Custerm)//输出客户量{cout<<endl<<" 今日共来了"<<i<<"位客户!"<<endl;cout<<" 其中,处理了"<<x<<"位客户,还有"<<i-x<<"位客户未得到处理!"<<endl<<endl;}void Bank::custerm_dail(int i,int x,Bank Custerm)//选择输出的客户编号{int h;while(1){cout<<"请输入您想知道的客户编号(以 0 结束):";cin>>h;if(h==0){cout<<endl;break;}else if(h>i){system("cls");cout<<"没有这个编号,请重新选择!"<<endl<<endl;}else if(h>x&&h<i){system("cls");cout<<"银行停业前未处理该客户!"<<endl<<endl;}else {system("cls");print(h-1,i,Custerm);}}}void Bank::choose(int x,int i,Bank Custerm)//选择输出详细信息{int n;int flag=0;while(1){cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<endl;cout<<" ◎ 0 退出◎"<<endl<<endl;cout<<" ◎ 1 查看今日银行客户数量◎"<<endl<<endl;cout<<" ◎ 2 第n号窗口的详细信息◎"<<endl<<endl;cout<<" ◎ 3 客户平均等待时间◎"<<endl<<endl;cout<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl<<endl; cout<<" 请选择: ";cin>>n;switch(n){case 0:{flag=1;break;}case1:system("cls");todaynum(x,i,Custerm);system("pause");system("cls");break;case 2:system("cls");window_dail();break;// case 3:system("cls");custerm_dail(i,x,Custerm) ;break;case3:system("cls");averagetime(x,Custerm);system("pause");system("cls");break; default:system("cls");cout<<"没有这个选项,请重新选择!"<<endl;break;}if(flag==1)break;}}void Bank::writetotext(int x,Bank Custerm)//文件操作{int sec,min,hour;int j=0;char ch;sec=Custerm.kehu[j].motime[0]+Custerm.kehu[j].yewutime;min=Custerm.kehu[j].motime[1];hour=Custerm.kehu[j].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}cout<<"是否生成文件?(y/n): ";cin>>ch;if(ch=='y'){if(x==0)cout<<"数据记录为空!"<<endl;else{ofstream outfile("f1.txt",ios::out);if(!outfile){cout<<"打开失败"<<endl;exit(1);}while(j<x){outfile<<" * * * * * * * * * * "<<endl;outfile<<" 客户编号: "<<kehu[j].bianhao<<endl;;outfile<<" 办理业务: "<<kehu[j].yewu<<endl;outfile<<" 业务时间: "<<kehu[j].yewutime<<endl;outfile<<" 到达时间: ";if(kehu[j].chutime[2]<10)outfile<<"0"<<kehu[j].chutime[2]<<":";else outfile<<kehu[j].chutime[2]<<":";if(kehu[j].chutime[1]<10)outfile<<"0"<<kehu[j].chutime[1]<<":";else outfile<<kehu[j].chutime[1]<<":";if(kehu[j].chutime[0]<10)outfile<<"0"<<kehu[j].chutime[0]<<":"<<endl;else outfile<<kehu[j].chutime[0]<<":"<<endl;outfile<<" 离开时间: ";sec=Custerm.kehu[j].motime[0]+Custerm.kehu[j].yewutime;min=Custerm.kehu[j].motime[1];hour=Custerm.kehu[j].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}if(hour<10)outfile<<"0"<<hour<<":";else outfile<<hour<<":";if(min<10)outfile<<"0"<<min<<":";else outfile<<min<<":";if(sec<10)outfile<<"0"<<sec<<":"<<endl;else outfile<<sec<<":"<<endl;j++;}outfile.close();cout<<"成功生成文件!"<<endl;}}}int main (){int ff;time_t t = time(0); //时间函数char tmp[64];int x=0,i=0; //i是最后到的客户编号int flag1=1,flag=1,flag2=1; //x排在最前面的客户编号,,flag1是第一次选项的关键标志,flag标志int s=8; //16:00之前营业,s是时钟,m是最后两位客户间隔时间 int ch;Bank Custerm;string a="存款",b="取款",c="挂失",d="还贷";//业务名while(flag1){cout<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<endl;cout<<" …………0:退出……………… "<<endl;cout<<" …………1:随机结果………… "<<endl;cout<<" …………2:输入业务………… "<<endl;cout<<" …………3:从文件读入…………"<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<" 请选择: ";scanf("%d",&ch);switch(ch){case 0:exit(0);case 1:{flag=0;//选择是否使用系统暂停函数flag1=0;//停止本项选择break;}case 2:{flag1=0;break;}/*case 3:{flag1=0;break;}*/default:{cout<<" 没有这个选项,请重新选择!"<<endl;system("pause");break;}}system("cls");}while(s){cout<<endl;cout<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"<<endl;cout<<endl;cout<<" ★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cout<<" ★★★★★★欢迎来到小辉辉银行★★★★★★"<<endl;cout<<" ★★★★★★"<<endl;cout<<" ★★"<<endl;cout<<" ★…………1:存款……………★"<<endl;cout<<" ★…………2:取款……………★"<<endl;cout<<" ★…………3:挂失……………★"<<endl;cout<<" ★…………4:还贷……………★"<<endl;cout<<" ★…………0:退出……………★"<<endl;cout<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"<<endl;if(flag==1){cin>>ff;}else{ff=(rand()%4+1);//随机选择4种业务}switch(ff){case 0:system("cls");break;{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime(tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );//显示当地时间的函数puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;//赋值编号Custerm.kehu[i].yewu=a;//赋值业务名Custerm.kehu[i].yewunum=1;//赋值业务编号Custerm.kehu[i].yewutime=aa;//赋值业务所用时间Custerm.timelocal(Custerm);//16:00之前营业,s是时钟Custerm.calculatechu(i,Custerm);//计算到达时间x=Custerm.windows(x,i);//x是排在前面的顾客编号i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<a<<endl<<endl;cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 2:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=b;Custerm.kehu[i].yewunum=2;Custerm.kehu[i].yewutime=bb;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<b<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 3:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=c;Custerm.kehu[i].yewunum=3;Custerm.kehu[i].yewutime=cc;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<c<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 4:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=d;Custerm.kehu[i].yewunum=4;Custerm.kehu[i].yewutime=dd;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<d<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}default:cout<<"没有这个选项!"<<endl;break;}if(ff==0){break;}if(flag==1){system("pause");}system("cls");if(flag2==0){break;}}Custerm.choose(x,i,Custerm);Custerm.writetotext(x,Custerm);return 0;}。