ATM机C语言程序(共4篇)
ATM机C语言程序 篇1
直接运行没有错误的代码c----n ==>==>请输入你要转入的金额:“);
scanf(”%f“,&zj);
if(zj>0.00 && zj<0.01)zj=0.01;
if(zj<0){system(”cls“);
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>对不起,转入的金额不能为负值!n“);
break;}
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>你要将本账户中的 %.2f 元 RMB 转入账户 %d 中:nn ==>==>确认请按1nn ==>==>==> 重新输入请按其他键nn“,zj,zh[j]);
for(i=1;i<=80;i++)printf(”=“);
printf(”n“);
scanf(”%d“,&c);
if(c==1){
system(”cls“);
printf(”n“);
if(ck[m]>=zj){
for(i=1;i<=80;i++)printf(”=“);
ck[m]=ck[m]-zj;
ck[j]+=zj;
jf[j]+=zj/100;
printf(”n ==>恭喜你,转账成功!n“);}
else {
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>==>对不起,你的余额不足,请重新选择操作!n“);}
break;}
}
}
else {system(”cls“);
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==> 操作错误!nn ==>==> 请重新选择操作!n“);
}
}
}
else {system(”cls“);
printf(”n“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>>>>> 你输入的账号或密码错误,请重新输入!nn “);
for(i=1;i<80;i++)printf(”=“);}
}
else if(kk==1){system(”cls“);
printf(”nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>对不起,此功能暂时不能实现!nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”n“);} else {system(”cls“);
printf(”nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>对不起,你的输入有误!nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”n");} } } }
ATM机操作手册(胡) 篇2
一、岗位职责
资金部各成员对ATM机的管理分工如下:
ATM机管理员(许燕萍)负责公司工资卡及ATM机的日常管理,包括:(1)工资卡的发放、挂失、补办、密码重置、注销等;(2)ATM机的加钞操作和日常维护,以及出现硬件故障时及时报修;(3)ATM软件的操作管理,如员工工资数据录入、卡内资金的转出和离职结算、ATM机资金流数据的提取和整理、报告等;(4)负责保管ATM机保险箱的密码。
出纳(廖丽丽)与ATM机管理员共同负责ATM机的加钞,其中出纳负责保管ATM机保险箱钥匙、对加钞前ATM机里的留存现金及新加入ATM机的现金进行清点,参与加钞的全过程;保管ATM机钥匙。
工资卡内资金转出的相关业务也须有资金部主管(复核)(朱辉英)、出纳、资金部汇款管理员,并与ATM机管理员共同完成。如:资金部主管负责核查卡内资金转出额;出纳负责卡内资金提现业务的现金提交;资金部银行业务专员负责卡内资金转入银行卡业务的资金转存。
最后,由资金部主管核查每月员工工资表等数据,并督促ATM机管理员和其他相关职员的日常工作情况。
二、ATM机的加钞制度
一)加钞机制
ATM机的加钞过程包括:加钞前准备、机内余额核算、下钱箱、加钞、上钱箱等。
1.加钞前准备:资金部在加钞前15分钟通知保安作好加钞准
备,保安进入警戒状态,通知机旁等待人员暂停取款,并将取款人群控制在警戒线外。
2.加钞人员进入机室:在保安戒严环境下,ATM机管理员、ATM机保险箱钥匙管理人(出纳)一同进入ATM机室内,关闭机室大门。留在现场的保安挂出暂停取款招牌,并维持现场秩序。
3.机内余额核算准备:出纳打开上部机箱,由ATM机管理员操作行员操作面板,进行加钞前未结帐的交易额小计或合计,通过流水日志打印机得到ATM机内应有资金余额,记录在本子上以备核查;
4.下钱箱:ATM机管理员开启钱箱的电子锁,和出纳共同将保险箱打开,取出钱箱,在保安的护送下返回资金部。
5.机内余额核算:加钞人员关闭资金部大门,由随行保安在大门外保持警戒状态。是时,资金部出纳将钱箱钥匙交ATM机管理员,由其开启钱箱,将箱内剩余现金取出交由出纳进行清点,并与ATM机留存打印机日志上的小计或合计数进行核对。若箱内剩余现金与流水日志上的应有金额不符,立即进行查找,保证每次加钞时ATM剩余资金数与流水日志打印机上的剩余资金数相符。若无误,进行加钞。
5.加钞:出纳将所需添加的资金与ATM管理员共同进行清点,清点无误后,加入钱箱。
6.上钱箱:两名加钞人员开启资金部大门,在保安的护送下一同返回ATM机室,关闭机室大门。重新开启ATM机保险箱,将钱箱放入ATM机。ATM机管理员打乱密码,出纳锁好保险箱,ATM机管理员在行员操作面板上输入加钞数,并锁上钱箱电子锁。最后,加钞人员将ATM机机箱重新锁上,开启机室大门,取下暂停取款广告牌,恢复取款。
二)加钞注意事项
1.ATM机保险箱的开箱密码和钥匙必须交由ATM机管理员与出
纳分开保管,除非二人同时在场,否则无法打开;
2.每次ATM机加钞的全过程,都必须有ATM机管理员出纳双方同时到场,才能进行;
3.在资金部加钞前必须保证没有无关人员在场,加钞时必须给资金部大门上锁,并由保安在门外保持警戒。
4.清点钱箱余额时,如果发现箱内余额和ATM机流水日志上所显示的余额不同,必须立刻查找原因,做到当天问题当天解决。
三、工资卡的发放管理
1.工资卡办理:ATM机管理员根据人力资源部提供的编号制作好员工资料导入表,由资金部主管授权导入ATM软件。ATM机管理员通过读卡仪将员工数据写入工资卡中,在卡背面写上员工号以备员工领取。
员工凭身份证领取工资卡。新工资卡初始密码均为111111,ATM机管理员需提醒员工尽快修改密码。
2.工资卡的挂失、补办、重置密码:由员工携身份证到资金部办理,ATM机管理员通过操作ATM软件及读卡仪等完成。
3.现金领取和离职结薪:ATM机管理员对ATM软件进行相应操作后,填写资金转出凭证或者离职结薪凭证,5000元(含)以上交资金部主管进行复核;资金部主管复核无误后签字,交由出纳发放现金并在凭条上签字;5000元以下直接交出纳取款,每天下班前统一由复核人复核(奉赛嫦)。
3.工资卡资金转入银行卡或还信用卡:由员工自己填写“代汇款凭证”或“信用卡还款凭证”,ATM机管理员对所需转出资金的员工作取款处理,填写工资卡转出凭证签字后,开具收据一起交出纳办理,由出纳确认后签字,并将收据一联交员工保存,另一联与工资卡转出凭证做帐,汇款单由资金部银行业务管理专员汇至员工银行帐
号,汇入成功后该管理专员在工资卡转出凭证上签字。
四、ATM机相关报表
ATM机相关报表由ATM机管理员负责制作、整理,包括:每次发薪明细表、每日加薪提取款报表、加钞报表、累计发薪和累计取款报表等。
1.每日加薪提取款报表:包括每日导入的发薪总额、取款总额、工资转出总额,附带结薪和转出资金备注。通过此表可以看出每天ATM机资金的流动情况。
2.加钞报表:包含上期ATM机结余额、加钞方式、加钞数量、加钞后ATM机余额,通过此卡可以看出ATM机的加钞明细情况。
3.累计发薪和提款报表:包含从ATM机投入运作日起,到报告日的累计发放工资数、累计提现数、累计余额数。通过此表可以看出ATM机资金使用概况和留存资金比例。
资金部须每日做一次报表,做到帐实相符。定期将报表提交核算部进行审核。相关数据每日提交给财务部黄华波总监处,以便公司领导监督及决策。
五、ATM机故障处理机制
ATM机出现硬件故障无法正常工作时,ATM管理员须在第一时间通知服务商前来修理,总经办负责维修所需的零件的购买。在修理期间资金部开放柜台提现以保证广大员工能随时取款。
自助设备、ATM机管理办法 篇3
第一章 总则
第一条 为加强和规范自动柜员机管理,保证自动柜员机正常运行,实现自动柜员机“管理规范化、操作标准化”目标,有效防范业务风险,根据监管部门有关规定,特制定本办法。
第二条 自动柜员机是为客户提供自助服务的电子设备,根据提供服务类型分为自动取款机、自动存款机、存取款一体机。
第三条 持卡人可凭密码,在自动柜员机上办理存取款、转账、查询、修改密码等多种银行业务。
第二章 基本规定
第四条 自动柜员机应用模式分为在行式和离行式。
(一)在行式是指自动柜员机在营业网点内运行的应用模式,包括单台布放的在行式自动柜员机和多台集中布放在营业网点自助服务区的在行式自动柜员机。
(二)离行式是指自动柜员机在网点外运行的应用模式,包括单台布放的离行式自动柜员机、自助银行和具有独立营业场所、多台集中布放在离行自助服务区的自动柜员机。
第五条 各县级联社在银行卡部应设立自动柜员机业务管理岗,负责辖内自动柜员机业务管理、渠道推广、市场营销、考核培训等工作。各营业网点应设立自动柜员机运行管理岗,负责管辖自动柜员机日常运行、账务核算、现金运营和客户服务等工作。
第六条 自动柜员机的选型购臵由省联社按照有关集中采购管理办法统一组织实施。
第七条 自动柜员机服务时间应按照“安全、方便”的原则、由自动柜员机所在场所营业时间决定。自动柜员机服务时间应对外公布。
第八条 自动柜员机应保证服务界面、交易流程、外观形象、操作提示、受理标识和服务环境的标准化,符合省联社企业形象管理和营业网点视觉形象规范等规定。
第三章 部门和机构职责
第九条 银行卡部负责自动柜员机制度建设、规划布局、提交需求、市场营销、业务推广、统计分析、考核评价等工作。
(一)负责管理自动柜员机业务,了解和掌握管辖自动
柜员机运行状况,制定和修改自动柜员机业务考核指标,分析评价自动柜员机业务发展状况,协调有关部门确保自动柜员机正常运行;
(二)负责制定、修改和完善自动柜员机业务管理办法;
(三)负责自动柜员机差错业务的处理;
(四)负责制订辖内自动柜员机需求计划,提交可行性立项报告,配合相关部门做好自动柜员机、配套运行监控设备和安全防护设施的安装工作;
(五)负责自动柜员机的选址、分配及布局调整等工作;
(六)负责审批自动柜员机新业务、新功能,制定自动柜员机自助服务营销推广计划,组织开展营销活动;
(七)负责向客户宣传正确使用自动柜员机的操作方法,及时妥善处理客户对自动柜员机的投诉;
(八)负责自动柜员机的业务培训。
第十条 科技部负责自动柜员机(含配套视频监控设备)的安装管理、故障处理、预防性维护、升级管理、停机管理和服务质量管理等技术管理工作。
(一)负责制定自动柜员机选型、订购、验收、安装、故障处理、预防性维护、升级、停机、报废、服务质量等技术管理制度和维护管理流程,做好自动柜员机维护管理工作;
(二)负责自动柜员机相关版本及相关管理系统版本的研发、测试、投产、支持等系统维护工作;
(三)负责自动柜员机安装实施、投产推广工作和设备操作培训工作;
(四)负责组织评估自动柜员机技术研究和技术测评工作;
(五)负责配合集中采购部门做好自动柜员机技术产品采购和保外设备维护服务采购工作;
(六)负责自动柜员机供应商和服务商的监督管理,监督供应商履行假币赔偿承诺工作;
(七)负责组织评估自动柜员机运行状况及维护管理工作;
(八)负责做好自动柜员机和配套视频监控设备技术交流和技术操作的培训工作。
第十一条 会计部负责自动柜员机现金管理、账务核算和收单清算等工作。
(一)负责提交自动柜员机账务核算业务应用需求,并参与测试;
(二)负责制订、修改、完善自动柜员机现金管理、账务核算和收单清算管理办法和操作流程。
(三)负责自动柜员机现金管理和账务核算业务检查和培训;
(四)负责自动柜员机受理国内他行卡调单和差错账务处理,配合处理自动柜员机账务差错的客户投诉。
第十二条 监察保卫部门负责自动柜员机安全保卫工作。
(一)负责配合本地区公安机关对新建、改建自动柜员机安全防范设施进行审批和验收;
(二)负责研究自动柜员机案件和欺诈事件的外部风险防范方案,制订、修改和完善自动柜员机安全防范设施规范和防范措施,督导安装符合有关规范的安全防范设施,检查安全防范设施运行维护情况和防范措施落实情况;
(三)负责协助公安机关侦破撬盗破坏自动柜员机、自助服务区抢盗及人身伤害、在自动柜员机外部或周边环境安(改)装非法设备、利用自动柜员机窃取客户资金等风险事件和案件。统计案件信息,并按有关案件报告制度报告案件情况;
(四)负责指导营业机构做好自动柜员机日常安全巡查、调阅检查视频监控录像等外部风险防范工作;
(五)负责组织自动柜员机安全专项检查,监督整改措施落实情况。
第十三条 营业机构负责自动柜员机日常运行管理工作。
(一)负责组织管理自动柜员机的现金清点、钞箱装卸、钥匙和密码保管、账务核算等工作;
(二)负责提供符合自动柜员机用钞质量、券别和数量
要求的现钞,确保自动柜员机支付;
(三)负责协助处理存入假币索赔等相关工作;
(四)负责管辖自动柜员机的运行监控、业务故障处理、技术故障报修、吞没卡、耗材领用、安全巡查、解决客户求助等工作;
(五)负责新投入运行或排除故障后再投入运行的自动柜员机的测试验收;
(六)负责每日监控管辖自动柜员机运行状态,发现故障应立即检查,业务故障应及时排除;遇有技术故障,应及时通知科技部门;
(七)负责协助查询自动柜员机账务差错、调阅交易流水信息,协调处理自动柜员机账务差错的客户投诉;
(八)负责管辖自动柜员机周围环境的安全巡查。重点检查自动柜员机出钞口、插卡口是否被安装异常装臵,视频监控摄像头是否被堵住,键盘上是否有薄膜(密码记录器),周围有无非法张贴物,检查自动柜员机及自动柜员机视频监控系统是否运行正常等,发现异常情况立即报告,同时做好检查记录;
(九)负责管辖自动柜员机服务环境的日常管理。
第四章 自动柜员机业务限额与收入核算管理
第十四条 金信卡在自动柜员机上存款、取款、转账等业务限额,以及自动柜员机单笔最高取现限额,根据监管部门有关规定或业务发展情况由省联社制定并适时调整。
第十五条 利用自动柜员机渠道办理的各类离柜业务手续费收入应归属自动柜员机业务收入,并按照有关规定计入对应的中间业务收入科目。
第五章 自动柜员机钥匙和密码管理
第十六条 自动柜员机保险柜钥匙和密码须双人分别保管、单线传递,电子柜钥匙可兼管,并做好记录。
第十七条 自动柜员机保险柜钥匙用毕,不得随身携带,必须入库(保险柜)保管。
第十八条 保管密码的人员临时变更或工作调动,接管人员必须及时更换保险柜密码。掌管钥匙人员临时变更或工作调动,必须办理定向交接(掌管密码人员不能接管钥匙)手续,办理钥匙和密码交接时,必须做好记录。
第十九条 保管密码的人员输入密码时,应注意遮掩,其他人员应主动回避。密码须不定期更换,每季度至少更换一次,密码更换后,应及时更新备用密码记录。
第二十条 自动柜员机备用密码记录和备用钥匙应在分别密封后,交由自动柜员机主管负责人分别入保险柜保管并
登记备案,以备应急之用。如需启封,按现金库房钥匙管理的有关规定办理。
第二十一条 如发现保险柜或电子柜钥匙遗失,必须立即采取措施,确保款项安全,同时查明事故原因,及时上报。
第六章 自动柜员机现金出纳管理
第二十二条 自动柜员机现金业务须在电子摄像监控下实施双人管理。凡办理自动柜员机钞箱开闭、装钞、卸钞、整点、账款核对、钞箱检查等工作,必须双人到场、双人办理、发生差错换人复核,做到手续清楚、责任分明、数字准确、账款相符。
第二十三条 自动柜员机钞箱备付金的领用、钞箱余款及客户存入现金的上缴,必须按网点领缴现金办理。领用的备付金必须经过清分、复点,符合使用标准。客户存入现金必须经过整点方可入库。
因特殊情况无法开箱取钞时,应立即报告主管负责人,迅速查明原因,并会同有关技术人员共同开箱。
第二十四条 自动柜员机中的现金须按券别分钞箱管理,严禁将不同券别的现金混装一箱。
第二十五条 每次自动柜员机装填现钞前应进行轧账处理,装钞后对外营业前,必须进行实地吐钞测试,测试无误
后方可投入使用。测试情况要记录在案,以备查考。
第二十六条 自动柜员机备付现钞必须经过票币整点,保证无破损、无断裂、无透明纸粘贴、无褶皱及卷角等符合自动柜员机使用的人民币。禁止使用原封新钞和潮湿的现钞。
第二十七条 自动柜员机交易日志是账款核对和事后检查的重要依据,应按有关规定保管和调阅。
第二十八条 自动柜员机内的现金原则上于营业前一次性装入,遇特殊情况需中途添加现金时,经有关负责人授权后,按照运送和加装自动柜员机备付金的规定执行。
第二十九条 运送自动柜员机备付金必须坚持双人调款,双人武装押运和运钞车接送。
第三十条 自动柜员机如发生错款或存入假币,必须立即报告上级管理部门,核实有关取(存)款人操作记录,核点现金实物,确认错款金额后,按照现金错款溢短处理的相关规定及时处理。
第三十一条 自动柜员机现金和账务核算等业务应实行定期或不定期检查制度,并做好检查记录。检查内容包括:
(一)自动柜员机的备付金与有关分户账是否一致;
(二)日常现金的领取、上缴、装钞、卸钞等手续是否坚持双人办理;
(三)长短款及错账记录是否清楚,是否纳入有关科目核算;
(四)款项清点、交接、运送工作是否符合安全要求;
(五)钥匙、密码的交接和备用钥匙、密码副本的保管是否符合规定;
(六)其他需检查事项。
第七章 自动柜员机吞没卡管理
第三十二条 吞没卡登记。管辖机构应及时取回吞没卡,摘录有关内容和吞卡原因,核对吞没卡数量和交易流水清单,登记《银行卡登记簿》。
第三十三条 吞没卡领取。离行式自动柜员机吞没的银行卡,由就近营业网点负责吞没卡的领取和销毁。
(一)吞没卡为辽宁省农村信用社发行的银行卡,客户在吞卡后5日(自吞卡次日起计算)内要求领取银行卡时,须提交本人有效身份证件。查明吞卡原因、核验有效身份证件,对持卡人身份验证无误后,登记《银行卡登记簿》,摘录客户身份证件内容,将吞没卡返回客户,并由客户签收;
(二)吞没卡为他行发行的银行卡,按照中国银联股份有限公司规定执行:持卡人在吞卡后次日起5个工作日内,持本人有效身份证件及其他可以证明为卡片持有者的材料到自动柜员机管辖机构办理领卡手续。
第三十四条
吞没卡销毁。
吞没卡辽宁省农村信用社发行的银行卡,凡超过日期持卡人未领取且未收到发卡银行查询的,按有关办法和操作规程破坏磁条完整性;
吞没卡为他行卡,凡超过日期无人认领的卡片或按发卡机构吞卡指令吞没的卡片,自动柜员机管辖机构须对卡片作剪角处理,并逐张抄列清单交事后监督部门,由事后监督部门根据银联有关规定处理。
第八章 自动柜员机安全管理
第三十五条 新建或改建的自动柜员机须符合国家安全行业标准及技术规范要求,安装电子摄像监控、防撬窃报警和联网报警等安全防范设施。
第三十六条 离行式自动柜员机应按照国家有关标准实现联网报警;与自动柜员机所在单位签订合作协议,约定双方责任义务,协同做好自动柜员机安全防范。
第三十七条 自动柜员机管辖机构要加强自动柜员机安全防范,互相配合,发现隐患,及时整改。
第三十八条 发生自动柜员机风险事件及案件,应立即上报,迅速查明原因,及时处理解决。
第九章 附则
第三十九条 本办法由省联社负责解释和修订。
第四十条
ATM机C语言程序 篇4
课程设计报告
题
目:
ATM柜员机
专
业:
信息与计算科学
学
号:
姓
名:
单
焱
指导教师:
李
又
良
成绩:
2010 年 12 月 10 日
目 录
1课程设计研究背景及意义.......................................2 2 课程设计题目描述和基本功能设计要求...........................2 3 系统需求分析.................................................2 3.1 功能需求分析............................................2 3.2 其他需求分析............................................3 4 系统设计.....................................................3 4.1 总体设计................................................3 4.2 ATM柜员机界面设计......................................4 4.3 各功能模块设计..........................................5
4.3.1 登陆页面模块设计................................5 4.3.2 选择服务模块设计................................6 4.3.3 取款模块设计....................................7 4.3.4 修改密码模块设计................................8 4.3.5 查询余额模块设计................................9 4.3.6 退卡模块设计....................................9 4.4 异常处理情况说明.......................................10 5 系统实现与测试..............................................10 6 课程设计总结................................................13 6.1 遇到的问题及解决办法...................................13 6.2 心得体会...............................................14 参考文献......................................................14 附录(源码)..................................................14
1课程设计研究背景及意义
这次课程设计是通过JAVA编程来实现ATM柜员机的功能。以前,人们用手算取钱,不管从方便的角度还是速度的角度来看都不及现在。电子技术的不断发展使得ATM自动化的功能不断完善。在二十一世纪的今天,ATM柜员机是人们生活中重要的工具,所以,对ATM柜员机的研究的课程设计具有重大意义。
这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。课程设计题目描述和基本功能设计要求
本次设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。组员分工:
组长(单焱): 负责分配其他组员的任务,构建需求分析,系统实现及异常处理情况,调试程序等,把握ATM柜员机的整体布局。
组员1(刘星):负责登陆界面模块,选择服务模块及退卡模块,编写相应代码。组员2(王玲玲):负责取款、修改密码、查询余额模块,编写相应代码。系统需求分析 3.1 功能需求分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.2 其他需求分析
(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束 开发工具:Eclipse3.2.运行环境:Windows 2000以上。(3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。系统设计 4.1 总体设计
本次设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。如图:
图1
ATM功能结构示意图
4.2 ATM柜员机界面设计
一个系统的界面应该要简单明了,当然样式美观就更好了。本次设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s){super(s);}、Selection(String s,Account act){ } 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);super(s);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//处理窗口关闭事件
{ System.exit(0);} });}(2)窗体的主要结构的设计(网格布局)
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
4.3 各功能模块设计 4.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。
我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:
public void actionPerformed(ActionEvent e){
Account act;
String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*选择各种服务*/
if(e.getSource()== button1){
String number1,number2;
number1=tf1.getText();
number2=tf2.getText();
/*判断密码和卡号是否正确*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡号和密码都正确则进入功能选择窗口*/
Selection s = new Selection(“选择服务”,act);
}else{
dispose();
JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);
new WindowBox(“登录界面”);
}
}
/*退卡*/ if(e.getSource()==button2){
dispose();
JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);
} } 4.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:
p.add(new Label(“请选择你要的服务”));
this.add(p);
button1 = new Button(“存款”);
p1.add(button1);
this.add(p1);
button2 = new Button(“取款”);
p2.add(button2);
this.add(p2);
button3 = new Button(“查询余额”);
p3.add(button3);
this.add(p3);
button4 = new Button(“退出”);
p4.add(button4);
this.add(p4);
button5 = new Button(“修改密码”);
p5.add(button5);
this.add(p5);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
});button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300,300,300,300);setVisible(true);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==button2){//取款
dispose();
GetBalance gb = new GetBalance(“取款”,act);} if(e.getSource()==button3){//查询余额
Query q =new Query(“查询余额”,act);
dispose();} else if(e.getSource()==button4){//退出
dispose();
} JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);
} else if(e.getSource()==button5){//修改密码
ChangePassword cp = new ChangePassword(“修改密码”,act);
dispose();} 4.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:
if(e.getSource()== button){
if(act.get_Money()< 0){// 判断余额是否为负
dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额
if(money % 100 == 0){
dispose();
JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}
if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口
}
”每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服} else if(money > act.get_Money()){// 判断取款数额是否大于余额
dispose();
JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
} Selection s = new Selection(“选择服务”, act);} 4.3.4 修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:
/*判断旧密码是是否正确*/ if(pwd2.equals(act.get_Password())){ /*判断两次输入的密码是否匹配*/
if(pwd3.equals(pwd4)){
/*如果都正确的话就设置新密码*/
act.setPassword(pwd3);
dispose();
Selection s = new Selection(“选择”,act);}else{
dispose();
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);
} }else{
this.setVisible(false);
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();} 4.3.5 查询余额模块设计
在查询余额模块设计中, 和其他的界面的结构相差不多。有一个余额显示和一个按钮还有标签组成的。查询时用到的方法:
Query(String s, Account act){// 构造函数
super(s);this.act = act;button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的button.addActionListener(this);panel.add(button);this.add(panel);this.add(panel1);this.setLayout(new GridLayout(2, 1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });setBounds(300, 300, 300, 300);setVisible(true);
方法
} 4.3.6 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==button4){//退出
dispose();JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} 这个方法就可以实现了,这里就不再多说了。
4.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException(3)加载类时的异常处理
需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。
(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。系统实现与测试
(1)编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。
图5 输入错误1 当取款时如果超过卡里的余额的话就会报图6的错误。
图6 输入错误2(4)查询余额界面,如图7所示。
图7 查询余额界面
(5)修改密码界面,如图8所示。
图8 修改密码界面
当输入的初始密码不正确会报图9所示错误。
图9 输入错误1
当2次输入的新密码不同会报图10所示错误。
图10 输入错误2
经过测试,所有的功能基本上都实现了,而且运行正常。课程设计总结
6.1 遇到的问题及解决办法
在此次课程设计中遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进
行实际的练习与操作,才能有大的进步。
6.2 心得体会
在这次的课程设计中,主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
通过这次课程设计我学到了一些东西,这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。
通过努力,这次课程设计终于完成了,在这个过程当中,学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。
参考文献
[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录(源码)
/******登陆页面首窗口*******/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
import java.io.*;
public class WindowBox extends Frame implements ActionListener { Box baseBox, box1, box2;TextField tf1, tf2;Button button1;Button button2;
WindowBox(String s){// 构造方法
super(s);tf1 = new TextField(6);tf2 = new TextField(6);box1 = Box.createVerticalBox();
box1.add(new Label(“请输入你的卡号”));// 输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(“请输入你的密码”));// 输入密码 box2 = Box.createVerticalBox();box2.add(tf1);// box2.add(new TextField(16));
box2.add(Box.createVerticalStrut(8));box2.add(tf2);// box2.add(new TextField(16));
baseBox = Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1 = new Button(“确定”);// 加入按钮 button1.addActionListener(this);add(button1);button2 = new Button(“退卡”);// 退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/* 监听器 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });setBounds(300,300,220,220);setVisible(true);} public void actionPerformed(ActionEvent e){
Account act;String card;String pwd;act = new Account(“000000”, “Devil”, “123456”, 50000);// 初始化 /* 选择各种服务 */
if(e.getSource()== button1){
String number1, number2;// 输入的两个卡号和密码的变量 number1 = tf1.getText();number2 = tf2.getText();/* 判断两次输入的卡号和密码是否正确 */
if((act.get_Code().equals(number1))
&&(act.get_Password().equals(number2))){ dispose();Selection s = new Selection(“选择服务”, act);} else { dispose();
JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);
// 报输入密码或卡号不正确
new WindowBox(“登录界面”);
}
}
if(e.getSource()== button2){
System.exit(0);
dispose();// 退出
} } }
/*************主函数****************/ public class ATM { public static void main(String[] args){
new WindowBox(“登录页面”);} } /********* 选择服务窗口 ***************/ import java.awt.*;import java.awt.event.*;
public class Selection extends Frame implements ActionListener { Button button1, button2, button3, button4, button5;
Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;public Selection(){ } Selection(String s, Account act){ super(s);this.act = act;this.setLayout(null);this.setLayout(new GridLayout(6, 1));
p.add(new Label(“请选择你要的服务”));this.add(p);/* 各种服务功能 */
button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查询余额”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密码”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300, 300, 300, 300);setVisible(true);validate();
} } public void actionPerformed(ActionEvent e){
} if(e.getSource()== button2){// 取款
dispose();GetBalance gb = new GetBalance(“取款”, act);} if(e.getSource()== button3){// 查询余额
Query q = new Query(“查询余额”, act);dispose();} else if(e.getSource()== button4){// 退出
dispose();
JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} else if(e.getSource()== button5){// 修改密码
ChangePassword cp = new ChangePassword(“修改密码”, act);dispose();} /**********取款功能************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
public class GetBalance extends Frame implements ActionListener { Box baseBox, box1, box2;Button button;TextField tf;Account act;
GetBalance(String s, Account act){// 构造函数
super(s);this.act = act;
button = new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2, 1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);
this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
} });setBounds(300, 300, 300, 300);this.setVisible(true);} public void actionPerformed(ActionEvent e){ // System.out.println(e.getActionCommand());
double money;money = Double.parseDouble(tf.getText().trim());if(e.getSource()== button){
if(act.get_Money()< 0){// 判断余额是否为负
dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额
if(money % 100 == 0){
dispose();
JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}
if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口
”每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服 // dispose();} } else if(money > act.get_Money()){// 判断取款数额是否大于余额
dispose();JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入
你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);口
Selection s = new Selection(“选择服务”, act);// 返回选择服务窗
} } } }
/********修改密码功能*************/ import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JOptionPane;
public class ChangePassword extends Frame implements ActionListener { Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();TextField tf4, tf5, tf6;Button button;Account act;ChangePassword(String s, Account act){
super(s);
this.act = act;
tf4 = new TextField(6);
tf5 = new TextField(6);
tf6 = new TextField(6);
button = new Button(“确定”);button.addActionListener(this);/* 建立新密码 */
panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);
} panel3.add(new Label(“请再次输入你的新密码”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4, 1));setBounds(300, 300, 300, 300);this.setVisible(true);/* 窗口事件 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });/* 判断事件源,看条件是否成立再修改密码 */
public void actionPerformed(ActionEvent e){ if(e.getSource()== button){
String pwd2, pwd3, pwd4;
pwd2 = tf4.getText();
pwd3 = tf5.getText();
pwd4 = tf6.getText();
if(pwd2.equals(act.get_Password())){// 判断旧密码是否正确
if(pwd3.equals(pwd4)){// 判断两次输入的新密码是个匹配
act.setPassword(pwd3);// 启用新的密码
dispose();
JOptionPane.showMessageDialog(null, “密码修改成功!”, “消息
JOptionPane.INFORMATION_MESSAGE);
”,Selection s = new Selection(“选择”, act);// 返回服务窗口 } else { this.setVisible(true);
// ErrorWarn2 ew = new ErrorWarn2(“消息”,act);dispose();JOptionPane.showMessageDialog(null, “两次密码输入不匹配”, “
JOptionPane.INFORMATION_MESSAGE);
消息”,Selection s = new Selection(“选择”, act);// 返回服务窗口
} } else { this.setVisible(false);dispose();
“,} JOptionPane.showMessageDialog(null, ”初始密码输入错误“, ”消息
JOptionPane.INFORMATION_MESSAGE);
Selection s = new Selection(“选择”, act);// 返回选择服务窗口
} } } /**************查询余额功能******************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
public class Query extends Frame implements ActionListener { Button button;Account act;
Query(String s, Account act){// 构造函数
super(s);this.act = act;
button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();
panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的方法
// panel1.add(tf);
button.addActionListener(this);
panel.add(button);
this.add(panel);
this.add(panel1);
this.setLayout(new GridLayout(2, 1));
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(300, 300, 300, 300);
setVisible(true);} public void actionPerformed(ActionEvent e){
if(e.getSource()== button){
dispose();
Selection s = new Selection(“选择服务”, act);// 返回选择服务窗口
} } }
/***********账户****************/ import java.io.*;/* 该类为实现客户信息及部分功能 */ public class Account {
{
} private String code = null;// 信用卡号 private String name = null;// 客户姓名
private String password = null;// 客户密码 private double money = 0.0;// 卡里金额
public Account(String code, String name, String password, double money)
} this.code = code;this.name = name;this.password = password;this.money = money;public String get_Code(){// 取得卡号
return code;} public String get_Name(){// 取得名字
return name;} public String get_Password(){// 取得密码
return password;} public double get_Money(){// 重置余额
return money;} /* 得到剩余的钱的数目 */
protected void set_Balance(double mon){ money-= mon;} /* 重置密码的方法 */
【ATM机C语言程序】推荐阅读:
atm取款模拟程序c12-13
C语言程序06-30
c语言程序学习心得06-14
公共C语言程序设计07-30
C语言程序设计教学11-27
C语言程序设计题12-06
c语言程序设计205-10
c语言高级程序设计01-14
在一个c语言程序中07-03
C语言程序设计实验九08-21