银行ATM自动取款机模拟程序
ATM柜员机模拟程序
ATM柜员机模拟系统目录1.设计目的 (2)2.功能介绍 (2)3.概要设计 (2)3.1 需求分析 (2)3.2 自定义类说明 (2)3.3 界面设计思想 (3)3.4 方法定义说明 (3)4.详细设计 (3)4.1程序流程图 (3)4.2登陆界面设计 (4)具体实现过程 (4)关键代码设计 (5)5.设计心得与体会 (25)1·设计目的使用图形用户界面。
当输入给定的卡号和密码(初始卡号和初始密码)时,系统能登录ATM柜员机系统2·功能介绍(1)查询余额:初始余额为10000元(2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
(3)ATM存款:不能出现负存款。
(4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3·概要设计3.1 需求分析使用ATM机可以节约人力资源,方便用户进行简单常用操作,并且可以为用户提供全天候的服务,提高银行效率。
3.2 自定义类说明a:Guest类定义客户类,该类主要提供用户的各种操作提供定义变量 b:DENGRU类为主类,主要有按钮、文本框,组合框,标签,在组合中选择账号,在密码的文本框中输入各个账号所对应的密码,单击登录按钮可以进入选择界面,如果密码错误,就会弹出对话框,提示“密码错误,拒绝登录”。
c:KQ类为选择界面模块,在选择模块服务中,有各种ATM的服务功能,只要在用户该界面中选择按钮,它会弹出各个相应的界面。
d:Zdqk类为取款类,在取款模块中,用户在文本框中输入它想取的数额,但必须是100的倍数,否则会弹出报错窗口,而且每一次最多只能去5000快,否则会弹出报错窗口,当然取款时不能超过卡里的余额没卡里的余额不可以为负数,否则会弹出报错的窗口。
e:Zdck类为自动存款类,用户在文本框中输入它想存入的数额,单击确定,就可以存入,如果输错了或者是不想存了,可以单击取消,退出的选择界面。
java课程设计ATM柜员机模拟程序
数据库连接:使用JDBC连接 数据库,进行数据查询
查询语句:编写SQL查询语句, 根据用户输入进行查询
结果展示:将查询结果以列表 或表格形式展示给用户
05
AT M 柜 员 机 的 数 据 库 设计
数据库表结构设计
用户表:存储用户信息,包括用户名、密码、余额等 交易表:记录用户的交易信息,包括交易时间、交易金额、交易类型等 账户表:存储账户信息,包括账户编号、账户类型、账户余额等 银行信息表:存储银行信息,包括银行名称、银行地址、银行电话等 系统日志表:记录系统操作日志,包括操作时间、操作人、操作内容等
网络中断等
性能测试与优化
测试方法:压力测 试、负载测试、稳 定性测试等
测试工具: JMeter、 LoadRunner等
优化目标:提高系 统响应速度、减少 资源消耗、提高系 统稳定性等
优化方法:代码优 化、数据库优化、 缓存优化等
调试过程与问题解决
测试环境搭建:安装Java开发环境,配置 数据库,安装模拟器等
06
AT M 柜 员 机 的 测试与调试
01 添加章节标题
02
AT M 柜 员 机 模 拟 程 序 概述
AT M 柜 员 机 的 基 本 功 能
存 款 : 用 户 可 以 将 现 金 存 入 AT M 柜 员 机 , 系统会自动识别并记录存款金额
转 账 : 用 户 可 以 通 过 AT M 柜 员 机 进 行 转 账操作,系统会自动记录转账信息
异地备份:将 备份数据存储 在异地,防止 自然灾害等意 外情况导致的
数据丢失
访问控制:设 置严格的访问 控制策略,防 止未授权访问
安全审计:定 期进行安全审 计,及时发现 并修复安全漏
模拟ATM柜员机程序 (C++)
课程设计任务书一、课程设计题目《模拟ATM柜员机程序》二、课程设计内容(含技术指标)1.使用文本命令行界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:查询余额:初始余额为10000元ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
2.建立银行账户类、文件读写类、界面显示类等以及各相关接口类。
三、进度安排1.1-4学时,分析需求、理解需求;2.5-8学时,程序设计,定义类、数据处理方式;3.9-12学时,编写程序、调试、测试;4.12-16学时,编写设计报告学时,答辩;四、基本要求1.只能使用C++语言,源程序要有适当的注释,程序容易阅读2.至少采用文本菜单界面(如果能采用图形菜单界面更好)3.学生可自动增加新功能模块(视情况可另外加分)4.用文件保存信息5.写出课程设计报告,具体要求见相关说明文档课程负责人签名:年月日课程设计分工安排摘要演示程序时,初始卡号和密码为123456,系统能登录ATM柜员机系统,进入功能界面,根据功能界面的提示,然后由用户进行相应的功能操作。
本程序使用C++语言,操作时,使用文本命令行界面。
该程序还需要一些改进,就是没有采用图形菜单界面。
关键词:登陆界面修改密码取款查询信息功能界面目录摘要 (I)目录 .............................................................................................................. I I 第一章需求分析 .. (1)1.1功能: (1)1.2操作: (1)第二章总体设计 (2)2.1 模拟ATM柜员机程序功能图 (2)2.2 整个程序的流程图 (3)第三章详细设计与实现 (4)3.1 类的设计 (4)3.2 ATM柜员机的登陆 (5)3.3 ATM柜员机修改密码功能 (5)3.4 ATM柜员机取款存款功能 (6)3.5 ATM柜员机查询余额功能 (7)第四章测试 (8)4.1程序开始运行的界面 (8)4.2 正确输入帐号密码后的界面 (9)4.3 取钱成功后的界面 (9)4.4 程序结束时的界面 (10)参考文献 (11)心得体会 (12)第一章需求分析1.1功能:(1)模拟ATM柜员机程序;(2)修改密码。
ATM柜员机模拟程序文档
西安科技大学软件工程课程设计报告题目:ATM柜员机模拟程序班级:信计0801学号:080806013008080601260808060125姓名:覃永贤上官恩辉申松2010年12月目录1概述1.1目的及意义1.2 设计内容1.3 人员组成及分工2系统分析2.1 问题背景及概况2.2 系统需求分析3 系统设计3.1 软件结构设计3.2 数据库设计4系统实现4.1 开发环境4.2 关键技术4.3 主要功能代码5系统测试参考文献日历系统设计文档1 概述1.1目的及意义目的:1、培养独立的Java语言与算法设计方法,具备初步的独立分析和设计能力;2、学习软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3、训练综合运用所学的理论知识和方法进行独立分析和解决问题的能力;4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
意义:模拟ATM柜员机的相关功能,实现其取款、余额查询、密码修改等相关功能,通过课程设计让我们了解其相关方面的运作过程。
1.2 设计内容使用图形用户界面模拟ATM柜员机的相关功能。
功能如下:1.实现用户登录功能。
2.实现余额查询功能。
3.实现取款功能。
4.实现密码修改功能。
1.3 人员组成及分工1、组员名单:覃永贤申松上官恩辉2、组员分工:(1)覃永贤负责程序设计(2)上官恩辉负责需求分析(3)申松负责软件测试2系统分析2.1 问题背景及概况人们日常生活中经常使用ATM柜员机,其极大的方便了人们的日常生活,同时在使用的过程中也会遇到这样那样的问题,如果有一款软件模拟ATM,可以帮助人们了解其运行过程,避免有些不必要的麻烦。
2.2 系统需求分析:2.2.1功能需求分析(1)用图形用户界面实现。
本系统基于JA V A采用多线程的程序设计,使得界面清晰直观,系统全部通过界面来实现系统的功能需求。
2.2.2性能需求分析(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如数据未初始化等,在出现不可知的错误以后,可以尽量安全的退出程序。
pta atm模拟程序的设计
pta atm模拟程序的设计PTA ATM模拟程序是一个用来模拟ATM机器的程序。
它可以用于测试ATM 机器的功能,并帮助用户学习如何使用ATM机器。
PTA ATM模拟程序的设计可以分为以下几个步骤:1.定义ATM机器的功能首先,需要定义ATM机器的功能。
这包括ATM机器可以执行的操作,以及这些操作的输入和输出。
ATM机器的基本功能包括:●登录●查询余额●取款●存款●转账●修改密码2.设计ATM机器的状态转换图根据ATM机器的功能,可以设计ATM机器的状态转换图。
状态转换图可以用来描述ATM机器的状态和状态之间的转换。
ATM机器的状态转换图如下所示:ATM机器的状态转换图的图片在新窗口中打开ATM机器的状态转换图状态转换图中的每个状态表示ATM机器的一种状态。
状态之间的箭头表示ATM机器从一种状态转换到另一种状态。
3.设计ATM机器的控制流程根据ATM机器的状态转换图,可以设计ATM机器的控制流程。
控制流程可以用来描述ATM机器的操作顺序。
控制流程中的每个步骤表示ATM机器要执行的操作。
4.实现ATM机器的功能根据ATM机器的功能、状态转换图和控制流程,可以实现ATM机器的功能。
ATM机器的功能可以使用多种编程语言来实现。
例如,可以使用Python来实现ATM机器的功能。
5.测试ATM机器的功能在实现ATM机器的功能后,需要测试ATM机器的功能。
测试可以用来验证ATM机器的功能是否正确。
ATM机器的功能可以使用多种方法来测试。
例如,可以使用自动化测试工具来测试ATM机器的功能。
6.发布ATM机器在测试ATM机器的功能后,可以发布ATM机器。
发布ATM机器后,用户可以使用ATM机器。
PTA ATM模拟程序的设计是一个复杂的过程,需要考虑多种因素。
通过仔细设计,可以开发出功能强大、易于使用的ATM模拟程序。
C语言模拟ATM机的编写程序
C语言模拟ATM机的编写程序#include <stdio.h>void main(){long int a,b,c,d,e,f,g,k,l,m,n,o,p,h;n=0;h=10000;k=123456;loop0: printf("\t\t\t欢迎使用中国邮政ATM取款机!\n\n");printf("请插入你的银行卡,并输入你的密码,三次密码输入错误,将终止程序:\n");scanf("%ld",&l);if(k==l){loop1: printf("请输入你选择的操作类型:\n");printf("请输入0-4进行选择:\n");printf("1:<转账>\t2:<查询>\t3:<取款>\t4:<修改密码>\t0:<取卡>\n");scanf("%ld",&a);switch(a){case 1: printf("请输入转账账号:\n");scanf("%d",&o);printf("请输入你需要转账的金额:\n");scanf("%d",&p);printf("请输入你选择的操作类型:\n");printf("请输入0或1进行选择:\n");printf("1:<确认>\t0:<返回>\n");h=10000-p;scanf("%ld",&b);switch(b){case 1:printf("\n转账%d元人民币成功!\n\n",p);goto loop1;break;case 0:goto loop1;break;default :printf("\n无此操作项!\n\n");goto loop1;}break;loop4:case 2:printf("请输入你选择的操作类型:\n");printf("请输入0-2进行选择:\n");printf("1:<查询余额>\t2:<查询明细>\t0:<返回>\n");scanf("%ld",&c);switch(c){case 1:printf("\n你的余额为:%5d\n\n",h);goto loop1;break;case 2:printf("\n你的账单为:******。
ATM取款机模拟程序 课程任务书
课程设计任务书课程名称:C++程序设计课程设计设计题目:ATM取款机模拟程序已知技术参数和设计要求:1. 问题描述:课题的任务是设计一个ATM取款机的模拟程序。
日常生活中,我们常使用ATM取款机,对它的操作过程有所了解。
这里我们要模拟的是用户所见的A TM取款机的属性和行为,ATM机与网络连接的部分不包括在这个任务中。
设计中应尽可能把它模拟得与真实的ATM接近一些,我们抽象出下列问题:(1) 用户插卡,A TM验证用户帐号信息。
(2) 用户首次操作须验证密码。
(3) 用户查询余额,ATM显示余额。
(4) 用户取款,A TM操作交易过程。
(5) 用户转账,A TM请求插入转入卡,然后操作交易过程。
(6) 用户更改密码,A TM受理此业务。
(7) 用户退卡。
A TM清理现场。
(8) 所有用户信息保存在文件中。
(9) 对于一个在线用户,如果超过一定时间用户没有任何操作,ATM锁机,直到用户退卡为止。
(10) ATM向用户显示欢迎词及其他提示信息。
2. 功能要求:(1)插卡功能(用卡号模拟);(2)取款功能;(3)查询余额功能;(4)验证帐号功能;(5)更改密码功能;(6)退卡功能;(7)锁卡功能。
3. 界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。
4. 技术要求:要求所有用户的信息以密文形式保存在数据文件中,加密算法为:字节各位取反,然后高半字节和低半字节交换位置。
用户输入密码时不能以明文形式显示在屏幕上,应以“*”号代替来显示用户密码的输入。
要求利用面向对象的方法以及C++的编程思想来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制来实现系统功能。
要求主函数(或图形界面下的主调函数)很“干净”,只有一些类对象的定义和某个类对象的一个成员函数的调用。
5. 课程设计时间:15周、16周6. 课程设计的考核方式及评分方法1)考核方式⏹课程设计结束时,在机房当场验收。
ATM自动取款机模拟程序
银行ATM自动取款机模拟程序本程序需要两个文件,ATM程序文件及系统管理员管理,两个文件必须在同一个文件或同一路径下!1.ATM程序文件://////CUser.h //////////#include<fstream>using namespace std;struct user{int Money;int User;int Password;};class CAtm{public:int Login();//登陆void GetBalance();//查询余额void ChangePassword();//修改密码void DrawMoney();//取款void TranserAccounts();//转账void BankSaving();//存款int Exit();//退出系统private:int Position;//数据位置user us[5];//保存文件内容user us[20];user s;};///////////User.cpp /////////////#include<iostream>#include<fstream>#include"CUser.h"using namespace std;int CAtm::Login() //登录{ int save[5];//保存被吃卡的用户的账号bool flag;int i,j,k,num;fstream iofile("atm.dat",ios::in|ios::binary);iofile.read((char*)&us,sizeof(us));fstream in("jiesuo.dat",ios::in|ios::out|ios::binary);in.read((char*)&save,sizeof(save));cout<<"请输入你的账号:";cin>>num;flag=true;for(i=0;i<5;i++){ if(us[i].User==num) {flag=false;j=i;}}if(flag==true) { cout<<"账号不存在!"<<endl;return 0;}for(k=0;k<5;k++)//判断账号是否已经被锁{if(save[k]==num){ cout<<"你的账号已锁,请寻系统管理员解锁!"<<endl;return 0;}}k=0;cout<<"请输入密码:";cin>>num;for(i=1;i<=3;i++){ k++;if(us[j].Password!=num){ if(k==3){ cout<<"你的卡被锁定了,请找系统管理员解锁!"<<endl;save[j]=us[j].User;in.close();fstream out("jiesuo.dat",ios::out|ios::binary);out.write((char*)&save,sizeof(save));out.close();return 0;}else { cout<<"请重新输入密码:";cin>>num;}}}cout<<"密码正确,进入系统!"<<endl;er=us[j].User;s.Money=us[j].Money;s.Password=us[j].Password;Position=j;iofile.close();return 1;}void CAtm::GetBalance()//查询余额{ cout<<"您的账户余额:"<<s.Money<<endl;}void CAtm::ChangePassword()// 修改密码{ fstream iofile("atm.dat",ios::in|ios::out|ios::binary);cout<<"请输入新密码:";cin>>s.Password;iofile.seekp((Position+1)*sizeof(s),ios::beg);iofile.write((char*)&s,sizeof(s));iofile.close();}void CAtm::DrawMoney()//取款{int j;cout<<"请输入取款金额:";cin>>j;while(j>s.Money){cout<<"金额不足,请重新输入取款金额:";cin>>j;}s.Money=s.Money-j;fstream iofile("atm.dat",ios::in|ios::out|ios::binary);iofile.seekp((Position+1)*sizeof(s),ios::beg);iofile.write((char*)&s,sizeof(s));cout<<"取款金额是:"<<j<<" "<<"取款成功!!"<<endl;iofile.close();}void CAtm::TranserAccounts()//转账{ int s1,p,i;cout<<"请输入要转入的账号:";cin>>s1;bool flag=true;for(i=0;i<5;i++){ if(us[i].User==s1) {flag=false; p=i;}}if(flag==true)cout<<"账号不存在!"<<"请重新输入账号:";cout<<"请输入要转入的金额:";cin>>s1;while(s1>s.Money){cout<<"请重新输入转入金额:";cin>>s1;}us[p].Money=s1;s.Money=s.Money-s1;us[Position].Money=s.Money;fstream iofile("atm.dat",ios::in|ios::out|ios::binary);iofile.write((char*)&us,sizeof(us));iofile.close();cout<<"转账成功!"<<endl;}void CAtm::BankSaving()//存款缴费{ int k;cout<<"请输入要存款的金额:";cin>>k;s.Money=s.Money+k;fstream iofile("atm.dat",ios::in|ios::out|ios::binary);iofile.seekp((Position+1)*sizeof(s),ios::beg);iofile.write((char*)&s,sizeof(s));iofile.close();}int CAtm::Exit()//退出系统{cout<<" 谢谢使用本程序!!!"<<endl;return 0;}//////////////main.cpp ////////////////#include<iostream>#include"CUser.h "using namespace std;int main(){ cout<<" 欢迎使用银行ATM自动取款机模拟程序!"<<endl;cout<<endl;cout<<" 首次使用本程序,请先运行系统管理员程序!"<<endl;cout<<endl;cout<<" 说明:账号,密码,金额相同"<<endl;cout<<endl;cout<<" 文件中定义为5个账户,分别为1.2.3.4.5 "<<endl;cout<<endl;cout<<" 初始化时,请注意这些!!!"<<endl;cout<<endl;CAtm atm;if(atm.Login()==1){ cout<<" 1 查询余额"<<endl;cout<<" 2 修改密码"<<endl;cout<<" 3 取款"<<endl;cout<<" 4 转账"<<endl;cout<<" 5 存款"<<endl;cout<<" 0 退出系统"<<endl;int n;cout<<"请选择操作:";while(cin>>n){if(n==0) return atm.Exit();//退出系统if(n==1) atm.GetBalance();//查询余额if(n==2) atm.ChangePassword();//修改密码if(n==3) atm.DrawMoney();//取款if(n==4) atm.TranserAccounts();//转账if(n==5) atm.BankSaving();//存款cout<<"请继续选择操作:";}}return 0;}2.系统管理员程序:#include<iostream>#include<fstream>using namespace std;struct user{int Money;int User;int Password;};int main(){ int a[5]={0,0,0,0,0};int n;user us[20];cout<<" 欢迎使用系统管理员程序"<<endl;cout<<endl;cout<<" 说明:本程序只能建立5个账户!"<<endl;cout<<endl;cout<<" 请输入相应数字选择操作:"<<endl;cout<<endl;cout<<"----------------------------"<<endl;cout<<"- 0 结束操作-"<<endl;cout<<"- 1 用户信息-"<<endl;cout<<"- 2 吃卡解锁-"<<endl;cout<<"- 3 系统初始化-"<<endl;cout<<"----------------------------"<<endl;cout<<endl;cout<<"说明:用户信息的操作是进行开户操作!"<<endl;cout<<" 系统初始化是采用已定义好的5个账户,即原始系统初始化!"<<endl;while(cin>>n){ if(n==1){ user u[5];int i;fstream iofile("..\\ATM自动取款机\\atm.dat",ios::in|ios::out|ios::binary);if(!iofile){cerr<<"打开文件失败!";return -1;}cout<<"请输入数据:"<<endl;cout<<"账号密码金额"<<endl;for(i=0;i<5;i++){cin>>u[i].User>>u[i].Password>>u[i].Money;}iofile.write((char*)&u,sizeof(u));iofile.close();cout<<endl;cout<<"数据输入结束!"<<endl;cout<<endl;continue;}if(n==2){ fstream iofile("..\\ATM自动取款机\\atm.dat",ios::in|ios::binary);iofile.read((char*)&us,sizeof(us));fstream in("..\\ATM自动取款机\\jiesuo.dat",ios::in|ios::out|ios::binary);int i,j,p;bool flag;cout<<"请输入要解锁的账号:";cin>>j;flag=true;while(flag==true){for(i=0;i<5;i++){ if(j==us[i].User) { flag=false;p=i; break; }if(flag==true) { cout<<"账号不存在!"<<endl;cout<<"请重新输入账号:"; }cin>>j;}}a[p]=0;cout<<"解锁成功"<<endl;in.write((char*)&a,sizeof(a));in.close();continue;}if(n==3){ cout<<"系统初始化"<<endl;fstream out("..\\ATM自动取款机\\jiesuo.dat",ios::out|ios::binary);out.write((char*)&a,sizeof(a));user u[5];int i;fstream iofile("..\\ATM自动取款机\\atm.dat",ios::out|ios::binary);if(!iofile){cerr<<"打开文件失败!";return -1;}for(i=0;i<5;i++){u[i].User=i+1;u[i].Password=i+1;u[i].Money=i+1;}iofile.write((char*)&u,sizeof(u));iofile.close();cout<<"初始化成功!!!"<<endl;continue;}if(n==0){ return 0;}}return 0;}。
C语言程序设计报告(模拟ATM取款机)
C语言程序设计报告(模拟ATM 取款机)仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号201110214317指导教师王成仲恺农业工程学院教务处制目录1 需求分析 (1)2 系统总框图和功能模块说明 (1)2.1 系统总框图 (1)2.2 功能模块说明 (1)3 系统设计 (2)3.1 主要结构体 (2)3.2主要功能函数 (3)3.3 关键函数的流程图 (3)4 系统调试 (11)5 总结 (21)6 源程序清单 (23)6.1头文件 (23)6.2主程序 (23)6.3 解除被冻结用户 (40)6.4 用户注册 (41)1 需求分析所设计的ATM取款机应具备以下功能:●插入银行卡(用账号输入的方式代替);●密码的输入;●用户信息查询;●用户余额查询;●取款;●转账;●修改密码;●退卡。
2 系统总框图和功能模块说明2.1 系统总框图图1 系统总框图2.2 功能模块说明输入用户账号模块:在运行时,完成用户账号的输入(代替插卡);输入账号密码模块:①在输入账号之后,完成用户密码的输入;②在修改密码的过程中,完成用户输入旧密码的功能;信息读取功能模块:完成用户信息的读取;冻结账号功能模块:当输入密码3次错误时,冻结用户账号:查询用户信息模块:完成用户的信息查询(不包括余额查询);查询余额功能模块:完成用户余额的查询;取款功能模块:完成取款功能模块:转账功能模块:完成转职功能;修改密码功能模块:完成用户修改密码功能;退卡功能模块:完成退卡功能(即:退出程序功能)。
3 系统设计3.1 主要结构体用户账号、姓名、密码、余额struct User //用户数据{char num[20]; //用户账号char name[10]; //姓名char password[7]; //密码float balance; //余额};3.2主要功能函数void read_info(); //用户信息读取void input_num(char * num); //输入账号void now_exist(char * num); //判断是否被冻结或不存在void existed(char * num);void input_password(char * p_word,char * W); //输入密码void face(); //界面显示void balance_refer(); //余额查询void choose(int c); //菜单选择void draw_money(); //取款void set_password(); //修改密码void input_new_password(char * old_password); //设置新密码void tran_account(); //转账void stamp(); //打印单条void info_refer(); //信息查询void out(); //退出程序void lock(); //冻结账号void save_info(); //存储信息3.3 关键函数的流程图Nnow_exitedinput_password 流choose 函数流程图draw_money 函数input_new_passwo 读取文件数lock 函数流程图save_info 函数流程图4 系统调试首先运行程序,系统提示输入账号。
自动取款机(ATM)模拟程序(C#控制台应用程序)
自动取款机(ATM)模拟程序一、需求我们需要设计一个具备如下功能的ATM模拟程序。
●开户:用户能够通过ATM来开设帐号,开户需要设置密码。
●登录:用户能够登录到已经开设的帐号上,登录需要验证密码。
●管理帐号:用户登录到帐号上后,能够进行如下的操作。
■存款:将指定的款项存到帐号中。
■取款:从帐号中取出指定的款项。
■查询余额:查询帐号的余额。
■修改密码:修改帐号的密码。
二、分析面向对象编程的第一步是进行面向对象分析。
面向对象分析的目标是建立问题领域的模型,包括如下模型。
●功能模型:即画出每一个功能要求的用例图。
●对象模型:对用例模型进行分析,把系统分解成互相协作的类,通过类图/对象图描述对象、对象的属性、对象间的关系。
●动态模型:描述系统的动态行为,通过序列图来描述对象的交互,以揭示对象间如何写作来完成每个具体的用例,单个对象的状态变化和动态行为可以通过状态图来表达。
1.功能模型根据我们的需求,可以很容易地画出A TM模拟程序的用例图:可以看出,用户可以开户和登录帐号,开户或者登录帐号之后就能管理帐号。
要管理账号,就必须首先登录帐号或者开户。
管理帐号的功能包括存款、取款、查询余额和修改密码。
2.对象模型ATM是银行相连的设备,因此银行是A TM模拟程序的相关对象,所有的操作都是针对帐号的,因此帐号是其中的核心对象。
此外,需要一个程序来启动ATM。
因此,在ATM模拟程序中,我们需要处理四个类,或者说四类对象:启动程序、A TM、银行及帐号。
1)帐号类Account帐号类Account包含所有的帐号信息负责所有的帐号操作。
基本的帐号信息包括:●帐号名name●帐号密码password●帐号余额balance主要的帐号操作包括:●登录Login●存款Deposit●取款Withdraw●查询余额Get_Balance●修改密码ChangePassword2)银行类Bank银行类Bank的本质就是一组帐号的组合,并负责管理帐号。
c语言银行自动存取款机模拟
C语言银行自动存取款机模拟介绍本文档将介绍如何使用C语言编写一个简单的银行自动存取款机模拟程序。
该程序可以模拟银行客户进行存款和取款操作,并实时更新账户余额。
功能此银行自动存取款机模拟程序具有以下功能:•登录功能:用户可以输入账号和密码进行登录。
•存款功能:用户可以输入存款金额进行存款,存款成功后会更新账户余额。
•取款功能:用户可以输入取款金额进行取款,取款成功后会更新账户余额。
•查询余额功能:用户可以查看账户余额。
•退出功能:用户可以选择退出程序。
程序设计数据结构在程序中,需要定义一个结构体来表示银行客户的账户信息。
每个账户包含账号、密码和余额:struct Account {int accountNumber;char password[20];double balance;};登录功能首先,用户需要输入账号和密码进行登录。
可以定义一个函数来实现登录功能:int login(struct Account *accounts, int numAccounts, int accountNumber, char *password) {for (int i = 0; i < numAccounts; i++) {if (accounts[i].accountNumber == accountNumber && strcmp(accounts[i].password, password) == 0) {return i; // 返回账号在数组中的索引}}return -1; // 登录失败,返回-1}存款和取款功能存款和取款功能可以分别定义两个函数来实现。
存款函数会增加账户余额,取款函数会减少账户余额。
```c void deposit(struct Account *account, double amount) { account->balance += amount; }void withdraw(struct Account *account, double amount) { if (account->balance >= amount) { account->balance -= amount; printf(。
ATM自动取款机模拟程序
2.3,ATM自动取款机模拟程序2.3.1总体设计:流程图2.3.2详细设计:登陆系统主界面开户业务模板:void openAccount()。
主要功能在于新开账户(也可为下面转账系统服务等做铺。
)且储存信息。
经提升,密码已可以包含字符。
用户可根据提示,一步步完成操作。
主要代码:void openAccount()//开户函数{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 开户业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用开户业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;cout<<"\t\t请输入你的用户名:";cin>>user[st].n;cout<<"\t\t请输入你的卡号:";int k1;//k1表示新用户输入的卡号cin>>k1;int a=-1;//用来做标示for(int i=0;i<st;i++){if(user[i].k==k1){a++;}}if(a==-1){user[st].k=k1;//将k1的数值赋值给user[st].k保存起来cout<<"\t\t请输入你的性别:";char xb[5];cin>>xb;strcpy(user[st].sex,xb);cout<<"\t\t请输入密码:";char m2[20];cin>>m2;strcpy(user[st].mm,m2);//保存用户输入可以包含字符的密码cout<<"\t\t请输入你的开户金额:";float km;cin>>km;//km表示用户的开户金额user[st].je=km;//je将开户时的金额赋值给user[st].je保存if(km<10){cout<<"\t\t你输入的金额小于10元或输入有误!\n";}else{cout<<"\t\t恭喜你,开户成功!\n"<<endl;cout<<"\t\t你的用户名为:"<<user[st].n<<endl;cout<<"\t\t你的卡号为:"<<user[st].k<<endl;cout<<"\t\t你的当前余额为:"<<user[st].je<<endl;cout<<"\n"<<endl;st++;//用于统计新开用户后现有的用户数}}else{cout<<"\t\t你输入的卡号已存在!请核实!\n"<<endl;}}缴费业务模板:主要提供给用户缴费服务关键代码:cout<<"\t\t请输入你要缴费的金额:";float j1;//j1表示用户存款时存取的金额cin>>j1;user[a].je=user[a].je+j1;cout<<"\t\t恭喜你,缴费成功!当前余额为:"<<user[a].je<<endl; 取款业务模板:主要功能用于用户的提款cout<<"\t\t请输入你要取出的金额:";float j1;//j1表示用户粗款时存取的金额cin>>j1;if(j1>user[a].je){cout<<"\t\t\a\a\a你输入账户余额仅为:"<<user[a].je;}else{user[a].je=user[a].je-j1;cout<<"\t\t取款成功!当前余额为:"<<user[a].je<<endl;查询余额业务模板:主要提供用户余额的查询服务cout<<"\t\t当前余额为:"<<user[a].je<<endl;查询个人信息业务模板:主要提供用户个人信息的模板cout<<"\t\t\t用户名:"<<user[a].n<<endl;cout<<"\t\t\t性别:"<<user[a].sex<<endl;cout<<"\t\t\t卡号:"<<user[a].k<<endl;cout<<"\t\t\t当前余额:"<<user[a].je<<endl;转账业务模板:提供用户转取个人金额服务的模板关键代码:cout<<"\t\t请输入你要转入的用户的账号:";int m2,b=-1;//b用来标示cin>>m2;for(int i=0;i<st;i++){if(user[i].k==m2){b=i;}} Array if(b!=-1){cout<<"\t\t你要转入用户的信息:\n"<<endl;cout<<"\t\t姓名:"<<user[b].n<<endl;cout<<"\t\t性别:"<<user[b].sex<<endl;cout<<"\t\t\a是否继续??继续请按任意键"<<endl;char n;n=getch();cout<<"\n\t\t请输入你要转取的金额:";float j1;//j1表示用户存款时存取的金额cin>>j1;if(j1>user[a].je){cout<<"\t\t你的账户余额不足,不能进行转账!"<<endl;}else{user[a].je=user[a].je-j1;cout<<"\t\t\a转账成功!当前你账户余额为:"<<user[a].je<<endl;}对卡服务模板:主要提供用户操作完毕后退卡的服务主要代码:cout<<"\t\t按Enter键返回主菜单!\n"<<endl;getchar();system("cls");代码:4.3 ATM自动取款机模拟程序(面向对象)#include<iostream.h>#include<stdio.h>#include<stdlib.h>class ATM{public:char name[10];//保存用户姓名long cardID;//保存卡号long psw;//密码ATM(){cardID=123123;psw=123;money=100;}void openAccount()//开户函数{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 开户业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用开户业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;cout<<"\t\t请输入您的姓名:"<<endl;cin>>name;cout<<"\t\t请输入您的卡号:"<<endl;cin>>cardID;cout<<"\t\t请输入您的密码:"<<endl;cin>>psw;cout<<"\t\t请输入您的预存金额:"<<endl;cin>>money;cout<<"\t\t恭喜您,开户成功!\n"<<endl;}void saveMoney()//缴费{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 存款业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用存款业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;long cid;long psw1;int money1;cout<<"\t\t请输入您的卡号:";cin>>cid;cout<<"\t\t请输入您的密码:";cin>>psw1;if(cid==cardID &&psw1==psw){cout<<"\t\t请输入您的存款金额:";cin>>money1;money=money+money1;cout<<"\t\t取款成功,卡上余额为:"<<money<<endl;}else{cout<<"\t\t您输入的卡号或密码有误!"<<endl;}}void takeMoney()//取款{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 取款业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用取款业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;long cid;long psw1;int money1;cout<<"\t\t请输入您的卡号:";cin>>cid;cout<<"\t\t请输入您的密码:";cin>>psw1;if(cid==cardID && psw1==psw){cout<<"\t\t请输入您取款的金额:";cin>>money1;money=money-money1;cout<<"\t\t取款成功,您卡上余额为:"<<money;}else{cout<<"\t\t温馨提示:您的卡号或密码错误,注意密码尝试三次后将被吞卡!\n"<<endl;}}void query()//查询余额{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 查询余额业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用查询余额业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;long cid;long psw1;cout<<"\t\t请输入您的卡号:";cin>>cid;cout<<"\t\t请输入您的密码:";cin>>psw1;if(cid==cardID && psw1==psw){cout<<"\t\t卡上余额为:"<<money<<endl;}else{cout<<"\t\t您的卡号或密码错误!\n";}}void transfer()//转账{system("cls");cout<<"\t************************************\n"<<endl;cout<<"\t* 转账业务*\n"<<endl;cout<<"\t************************************\n"<<endl;cout<<"\t欢迎使用转账业务,请按照提示操作!\n"<<endl;cout<<"\n"<<endl;long cid;long bcid;long psw1;int money1;cout<<"\t\t请输入您的卡号:"<<endl;cin>>cid;cout<<"\t\t请输入您的密码:"<<endl;cin>>psw1;if(cid==cardID && psw1==psw){cout<<"\t\t请输入您要转账的卡号:"<<endl;cin>>bcid;cout<<"\t\t请输入您要转账的金额:"<<endl;cin>>money1;money=money-money1;cout<<"\t\t转账成功!您卡上余额为:"<<money<<endl;}else{cout<<"\t\t您的卡号或者密码错误!"<<endl;}}int print1(){return cardID;}int print2(){return psw;}private:int number;int password;int money;};void main(){ATM per;int i=0,n,psw;int cardID;cout<<"\t*************************************************\n"<<endl;cout<<"\t* ICBC *\n"<<endl;cout<<"\t* 欢迎进入中国工商银行*\n"<<endl;cout<<"\t* ATM自助服务系统*\n"<<endl;cout<<"\t*************************************************\n"<<endl;cout<<"\n"<<endl;cout<<"请输入您的卡号:";cin>>cardID;cout<<"请输入您的密码:";cin>>psw;for(;;){if(cardID==per.print1 () &&psw==per.print2 ()){cout<<"请选择您要办理的手续:\n";cout<<"1.开户\n";cout<<"2.缴费\n";cout<<"3.取款\n";cout<<"4.查询\n";cout<<"5.转账\n";cout<<"6.退出\n";cout<<"请选择你要办理的业务:";cin>>n;if(n==6)break;switch(n){case 1:void openAccount();//开户break;case 2:void saveMoney();//缴费break;case 3:void takeMoney();//取款break;case 4:void query();//查询余额break;case 5:void transfer();//转账default:cout<<"你的输入有误,请输入1--7之间的数:\n";continue;}}else{for(i=1;i<3;i++){cout<<"密码或账号错误,请重新输入"<<endl;cout<<"请输入您的卡号:";cin>>cardID;cout<<"请输入您的密码:";cin>>psw;if(cardID==per.print1 () &&psw==per.print2 ())break;elsecontinue;}if(i==3){cout<<"您的密码尝试次数已达到上限,卡已被系统吞吃。
java课程设计-ATM柜员机模拟程序
感谢您的耐心观看
汇报人:
添加标题
操作选择:用户选择 要进行的操作
添加标题
操作执行:执行用户 选择的操作,如存款、 取款、转账等
添加标题
操作结果:显示操作 结果,如存款成功、 取款成功、转账成功 等
添加标题
用户退出:用户选择 退出系统,结束程序
程序运行环境
操作系统: Windows、 Linux、Mac
OS等
开发环境: Java
登录按钮:点击登录,验证用户名和密 码
界面美化:使用美观的图标和颜色,提 高用户体验
账户管理模块实现
账户创建: 用户输入 账户信息, 系统自动 生成账户
账户查询: 用户输入 账户号, 系统返回 账户信息
账户修改: 用户输入 账户号和 修改信息, 系统更新 账户信息
账户删除: 用户输入 账户号, 系统删除 账户信息
系统从用户账户 中扣除存款金额
系统将存款金额 存入用户账户
查询余额模块实现
系统从数据库中获取用户银 行卡余额信息
系统将余额信息显示在界面 上
用户输入银行卡号,系统验 证银行卡号是否正确
用户可以查看自己的账户余 额
ATM柜员机模拟程序测 试
测试用例设计
不足:在程序实现过程中遇到了一些困难,如算法优化、界面设计等
展望:希望在未来的学习中,能够更深入地了解Java编程,提高编程能力,实现 更复杂的程序设计
对未来改进和发展的建议
增加用户界面友 好性,提高用户 体验
优化算法,提高 程序运行效率
增加安全机制, 确保用户数据安 全
拓展功能,如支 持在线支付、转 账等
转账:用户可以将资金从一个账户转移到另一个账户。
添加项标题
atm自助取款机模拟流程目标
atm自助取款机模拟流程目标ATM自助取款机模拟流程目标一、介绍ATM自助取款机(Automated Teller Machine)是一种方便快捷的自助设备,可以让用户在不需要人工干预的情况下完成取款操作。
本文将以ATM自助取款机模拟流程目标为标题,介绍ATM自助取款机的操作流程和注意事项。
二、流程步骤1. 插卡:用户首先需要将银行卡插入ATM自助取款机的卡槽中。
卡槽一般位于ATM机的正面或侧面,用户插入卡片时应确保卡片正面朝上,且插入深度适当。
2. 输入密码:在屏幕上出现提示后,用户需要输入自己的密码。
密码输入时需要注意遮挡,以防止密码泄露。
密码输入完成后,用户可以按下确认键进行下一步操作。
3. 选择取款金额:ATM自助取款机会显示用户的账户余额,并要求用户选择取款金额。
用户可以根据自己的需求选择合适的金额,一般可以通过按键或触摸屏完成选择。
4. 操作确认:在选择取款金额后,ATM自助取款机会要求用户确认取款操作。
用户需要仔细核对取款金额,确保无误后按下确认键。
5. 等待处理:ATM自助取款机会开始处理用户的取款请求,此时用户需要耐心等待。
在处理的过程中,ATM机会显示相应的提示信息,如“正在处理,请稍候”等。
6. 取款完成:当ATM自助取款机处理完用户的取款请求后,会弹出相应的纸币。
用户可以将纸币取出,并将其放入钱包或其他安全的地方。
7. 办理其他业务:在完成取款操作后,用户可以选择办理其他业务,如查询余额、转账等。
用户可以按照ATM机的提示,选择相应的功能进行操作。
8. 取卡结束:当用户办理完所有业务后,可以按下结束按钮或者按照ATM机的提示将银行卡取出。
取卡结束后,用户可以离开ATM 自助取款机。
三、注意事项1. 保护密码:用户在输入密码时,应注意遮挡,防止密码泄露。
同时,不要使用过于简单的密码,以免被他人猜测。
2. 核对金额:用户在选择取款金额和确认取款操作时,应仔细核对金额,确保无误。
银行ATM自动取款机模拟程序
四、系统设计
• 模块结构图:
模拟ATM取款机
ATM功能类 登陆界面 核对密码 取款 转账 查询信息 退出系统 锁卡
consumer用户类 获取姓名 获取卡号 获取密码 获取余额 核对密码
五、详细设计
否
登陆界面
输入卡号和密码 功能界面 1.修改密码 2.取款 3.转账 4.查询余额 5.退出系统
卡号密码错误 超过3次?
六、编码与调试
consumer::consumer(char Name[],char Kahao[], float Money,char Password[]) //构造函数,建立账户 { strcpy(name,Name); strcpy(kahao,Kahao); money=Money; strcpy(passwd,Password); } float consumer::get_money() //取得余额 { return money; } char*consumer::get_name() //取得姓名 { return name; } char*consumer::get_kahao() //取得卡号 { return kahao; }
五、详细设计
4.3 类的设计
1)、定义了一个ATM取款机类,类中包括以下几部分: 公有段: 依次为登陆界面,核对密码,修改密码,取款,转账,查询信息,退 出系统,功能界面,锁机。 私有段: 记录密码输入次数。 友元函数: 取款,转账,查询信息,账号,密码。 2、)定义了一个consumer 类,类中包括以下几部分: 公有继承了consumer类 私有段: 卡号,用户姓名,用户密码,存款钱数 保护段: 取得姓名,取得卡号,取得密码,取得余额,设置密码,取钱
六、编码与调试
C语言模拟ATM提款机
C语言模拟ATM提款机1.运用结构体2.运用文件调用源代码:#include "stdio.h"#include "stdlib.h"#include "conio.h"#define N 200void zhanghao(); //账号void xuanzhe(); //选择函数void enter_ATM(); //账号输入函数void input_code(); //密码输入函数void caozuo(); //基本操作界面void qukuan(); //取款函数void success(); //操作成功函数void delay(); //延时函数void YU_E(); //余额查询函数void cunkuan(); //存款函数void panduan(double z); //判断取款是否合法函数void exit(); //退出界面函数void mima(); //密码修改void zhuanzhang(); //转账函数void read(); //文件写入函数void write(); //文件读取函数void guanli(); //管理员函数void tequancode(); //管理员密码void hu(); //户void xinxi(); //信息void gmima(); //管理员改密void CAOZUO(); //管理员操作函数void yinghang(); //银行账户查询函数void jia(); //账户添加函数void shanchu(); //账户删除函数typedef struct{long int zhanghao;int mima;double yu_e;}atm;atm guan[N];int k;////////////////////////////////////////////////////////////主函数void main(){xuanzhe();}////////////////////////////////////////////////////////////功能选择函数void xuanzhe(){system("cls");printf("* 请选择功能*\n");printf("* 1.管理员 2.用户*\n");switch(getch()){case '1':tequancode();break;case '2':enter_ATM();break;default:{printf("\a非法输入");delay();system("cls");xuanzhe();};break;}}///////////////////////////////////////////////////////////柜台机账号输入函数void enter_ATM(){delay();system("cls");read();printf("* 欢迎使用ATM 柜台机*\n");printf("* 请输入卡号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误*\n");enter_ATM();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))input_code( );}system("cls");printf("* 账户不存在,请从新输入*\n");enter_ATM();}elseinput_code( );}////////////////////////////////////////////////////////////////密码输入函数void input_code( ){long int code;int temp=3;read();system("cls");printf("* 请输入密码*\n");scanf("%d",&code);while(code!=guan[k].mima){temp--;system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);if(temp==1){system("cls");printf("* 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();enter_ATM();}}caozuo();}//////////////////////////////////////////////////////////////////主操作界面函数void caozuo( ){system("cls");printf("********************************\n");printf("* 1.修改密码*\n");printf("* 2.查询余额*\n");printf("* 3.取款*\n");printf("* 4.存款*\n");printf("* 5.转账*\n");printf("* 6.退出*\n");printf("********************************\n");switch(getch( )){case '1': mima(); break;case '2': YU_E(); break;case '3': qukuan(); break;case '4': cunkuan(); break;case '5': zhuanzhang();break;case '6': exit(); break;default:{printf("\a非法操作\n");caozuo();};}}//////////////////////////////////////////////////////////////////////密码修改函数void mima(){long int mm1,mm2,mm3;int temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();mima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");delay();mima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );mima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );mima();}if(mm3=mm2){guan[k].mima=mm3;write();success();}}////////////////////////////////////////////////////////////////////余额查询函数void YU_E(){read();system("cls");printf("你的余额为:%lf\n",(guan[k].yu_e));printf("1.返回 2.退出\n");switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}/////////////////////////////////////////////////////////////////////////取款函数void qukuan(){double temp;system("cls");printf(" 请选择您要取款的金额\n");printf(" 1.100 2.200 \n");printf(" 3.500 4.800 \n");printf(" 5.1000 6.其它\n");printf(" \n");printf(" 7.返回8.退出\n");switch(getch()){case '1': panduan(100); break;case '2': panduan(200); break;case '3': panduan(500); break;case '4': panduan(800); break;case '5': panduan(1000); break;case '6':system("cls");printf("请输入您要取款的金额:");scanf("%lf",&temp);panduan(temp); break;case '7':caozuo(); break;case '8':exit(); break;}}///////////////////////////////////////////////////////////////////判断取款是否合法函数void panduan(double z){int beishu;if(z>(guan[k].yu_e)){system("cls");printf(" 余额不足!\n");printf(" 请重新操作\n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}beishu=(int)z%100;if(beishu!=0){system("cls");delay( );printf(" 本ATM机只支持100 的人民币\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}if(z==5000.00||z>5000.00){system("cls");printf(" 每次取款不能超过5000 元\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}(guan[k].yu_e)-=z;write();success();}/////////////////////////////////////////////////////////////////存款函数void cunkuan( ){double cun;system("cls");printf(" 请放入人民币:");scanf("%lf",&cun);while(cun<0){system("cls");printf(" 非法存款\n");printf(" 请重新放入人民币\n");scanf("%lf",&cun);}(guan[k].yu_e)+=cun;write();success();}/////////////////////////////////////////////////////////////////转账号函数void zhuanzhang(){int i,hao;double money;long int a=2109999999;system("cls");delay();read();printf("* 请输入账号*\n");scanf("%d",&hao);printf("* 请输入金额*\n");scanf("%lf",&money);if(hao<1000000000||hao>a){printf("* 账号错误,操作取消*\n");delay();delay();caozuo();}else if(money>guan[k].yu_e||money<0){printf("* 金额错误,操作取消*\n");delay();delay();caozuo();}else{read();for(i=1;i<N;i++){if(guan[i].zhanghao==hao)break;}guan[k].yu_e-=money;guan[i].yu_e+=money;write();success();}}///////////////////////////////////////////////////////延时函数void delay( ){long int bl1;int bl2;for(bl1=600000;bl1>0;bl1--){for(bl2=300;bl2>0;bl2--);}}/////////////////////////////////////////////////操作成功函数void success( ){system("cls");printf(" 操作已成功\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1':caozuo(); break;case '2':exit(); break;}}//////////////////////////////////////////////系统退出函数void exit(){system("cls");printf("* 欢迎您的再次使用*\n");printf("* 系统正在退出... *\n");delay();xuanzhe();}////////////////////////////////////////////////////文件读取函数void read(){int i;FILE *fp;fp=fopen("xinxi.txt","r");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fscanf(fp,"%d ",&(guan[i].zhanghao));fscanf(fp,"%d ",&(guan[i].mima));fscanf(fp,"%lf\n",&(guan[i].yu_e));}fclose(fp);}/////////////////////////////////////////////////////////////文件写入函数void write(){int i;FILE *fp;fp=fopen("xinxi.txt","w");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fprintf(fp,"%d ",guan[i].zhanghao);fprintf(fp,"%d ",guan[i].mima);fprintf(fp,"%lf\n",guan[i].yu_e);}fclose(fp);}void tequancode( ){long int code;int temp=2;read();system("cls");printf("* 请输入管理员密码*\n");scanf("%d",&code);while(code!=guan[0].mima){system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);temp--;if(temp==0){system("cls");printf("*\a 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();xuanzhe();}}guanli();}////////////////////////////////////////////////////////////////管理员函数void guanli(){system("cls");delay();printf("* 1.信息查询*\n");printf("* 2.操作*\n");printf("* 3.退出*\n");switch(getch()){case '1':zhanghao();break;case '2':CAOZUO();break;case '3':exit();break;default:{printf("\a非法操作");guanli();};}}/////////////////////////////////////账号void zhanghao(){system("cls");read();printf(" 请输入账号\n");long int user;scanf("%d",&user);if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))hu();}system("cls");printf("* 账户不存在,请从新输入*\n");delay();guanli();}else{delay();hu( );}}////////////////////////////////////////////////账户void hu(){system("cls");printf("* 1.信息 2.改密码*\n");printf("* 3.返回 4.退出*\n");switch(getch()){case '1':xinxi();break;case '2':gmima();break;case '3':zhanghao();break;case '4':guanli();break;default:{printf("\a非法操作\n");hu();};}}///////////////////////////////////////////////信息void xinxi(){system("cls");read();printf("*账号密码余额*\n");printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf \n",guan[k].yu_e);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':hu();break;case '2':guanli();break;}}///////////////////////////////////////////管理员改密void gmima(){long int mm1,mm2,mm3;char temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();gmima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入!\n");delay();gmima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );gmima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );gmima();}if(mm3=mm2){guan[k].mima=mm3;write();hu();}}///////////////////////////////////////////管理员操作函数void CAOZUO(){system("cls");delay();printf("* 1.查询所有账户*\n");printf("* 2.添加账户*\n");printf("* 3.删除账户*\n");printf("* 4.返回 5.退出*\n");switch(getch()){case '1':yinghang();break;case '2':jia();break;case '3':shanchu();break;case '4':guanli();break;case '5':xuanzhe();break;default:{printf("\a非法操作\n");CAOZUO();};}}//////////////////////////////////////////银行账户查询函数void yinghang(){system("cls");delay();read();printf("*账号密码余额*\n");for(;k<N;k++){if(guan[k].zhanghao!=0&&guan[k].zhanghao>0){printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf\n",guan[k].yu_e);}}printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}//////////////////////////////////////////账户添加函数void jia(){int mm1,mm2;int temp;system("cls");delay();read();printf("* 请输入密码*\n");scanf("%d",&mm1);if(mm1<100000||mm1>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入: \n");delay();scanf("%d",&mm1);}temp=mm1%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入: \n");delay( );scanf("%d",&mm1);}printf("\n");printf("确认密码:\n");scanf("%d",&mm2);if(mm1!=mm2){system("cls");printf("确认密码不一致,操作取消\n");delay( );CAOZUO();}if(mm1=mm2){for(;k<N;k++){if(guan[k].zhanghao==0){guan[k].zhanghao=guan[k-1].zhanghao+1;guan[k].mima=mm2;write();break;}}printf("账号创建成功!\n");printf("您的账号是%d,请妥善保管!\n",guan[k].zhanghao);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}/////////////////////////////////////////账户删除函数void shanchu(){system("cls");delay();read();printf("* 请输入账号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误,操作取消*\n");CAOZUO();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao)){for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}system("cls");printf("* 账户不存在*\n");delay();CAOZUO();}else{for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}。
c语言模拟ATM机程序
case 4: Xiugai(&a[6]);break;
case 5: Cunkuan(&Y);break;
case 6: exit(0);break;
default:printf("输入错误,请重新输入\n");
}
lp2:printf("继续操作请按1,退卡请按2\n");
else
{printf("非法操作,强制退出\n");
}
}
void Qukuan()
{
int i,j;
printf("1、100\t2、200\t3、500\t4、800\t5、请输入金额\n");
scanf("%d",&i);
switch(i)
{
case 1: panduan(100);break;
printf请选择服务项目n1取款t2查询服务t3转账服务t4修改密码t5存款t6退卡n
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
long int Y=100000;int c=0;char a[6]={'1','2','3','4','5','6'};
else
lp4:{
printf("请输入新密码:\n");
k=getch();
while(k!='\r'&&l<6)
银行ATM自动取款机模拟系统
用Vs2010写控制台应用程序银行ATM自动取款机系统教程要写出银行ATM自动取款机系统,我们先要梳理取款机的运作过程。
首先,一套完整的ATM系统包括取款界面,后台处理。
后台处理中,银行和账户是不可缺的因素。
所以,我们可以在项目中创建三个类:ATM类、Account账户类、Bank银行类。
下面是详细的代码:(本系统已成都银行为例)排版若有不妥,敬请原谅。
以下代码仅供参考。
一、Program为了方便大家学习,特讲一些构造函数、方法、获取属性等语法的书写方法注释在Program中。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ATM{class Program{static void Main(string[] args){//创建银行Bank bank = new Bank("成都银行");//创建自动提款机ATM atm = new ATM(bank);//调用Start()方法atm.Start();//1.无参构造函数创建对象并且赋值//实例化对象的语法://类对象名= new 类();//Student student = new Student();//设置属性的语法://对象名属性名= 值// = "小明";//student.Age = 18;//student.Sex = "男D";//student.ClassName = "0801T";////2.带参构函数创建对象并且赋值//Student wangwu = new Student("wangwu", "女", 20);//string studyResult = wangwu.StudyByName();//Console.WriteLine(studyResult);////获取属性的语法;////对象名属性名//string studentName = ;////调用方法的语法:////对象名方法名(实际参数1,实际参数2,….. 实际参数n);//student.Study(studentName);Console.ReadLine();}}}二、ATM类using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ATM{class ATM{private Bank bank;public ATM(Bank bank){this.bank = bank;}public void Start(){while (true){Console.WriteLine("================================================================== ==============");Console.WriteLine(">>>>欢迎使用{0}ATM自动取款机<<<<, );Console.WriteLine("");Console.WriteLine(" 请***************************************");Console.WriteLine(" 选**");Console.WriteLine(" 择* 1、开户2、登陆*");Console.WriteLine(" 业**");Console.WriteLine(" 务***************************************");Console.WriteLine("");Console.WriteLine("================================================================== ==============");Console.WriteLine("请选择:");string input = Console.ReadLine();//实际参数可以不赋初始值Account account;if (input == "1"){//开a户Console.Write("用户名:");string username = Console.ReadLine();Console.Write("密码:");string password = Console.ReadLine();int pa = password.Trim().IndexOf(" ");if (password.Trim() != "" && pa > 0){Console.WriteLine("您输入的密码不合法!");}//调用开a户方法bool openResult = bank.OpenAccount(username, password, out account);if (openResult == true){Console.WriteLine("开户成功!");Console.WriteLine("用户名:{0}", ername);Console.WriteLine("余额:{0}", account.Balance);}else{Console.WriteLine("开户失败!");}}else if (input == "2"){//登录Console.Write("用户名:");string username = Console.ReadLine();Console.Write("密码:");string password = Console.ReadLine();bool loginResult = bank.LoginAtm(username, password, out account);if (loginResult == true){//是否跳出当前循环标记bool isExsist = false;while (true){if (isExsist == true){break;}Console.WriteLine("=================================================================");Console.WriteLine(" >>>>欢迎使1用{0}ATM自动取款机<<<<", );Console.WriteLine(" 1.存款");Console.WriteLine(" 2.取款");Console.WriteLine(" 3.转a账");Console.WriteLine(" 4.查询余额");Console.WriteLine(" 5.修T改密码");Console.WriteLine(" 6.注é销");Console.WriteLine(" 7.退出");Console.WriteLine("=================================================================");Console.Write("请选择:");string inp = Console.ReadLine();switch (inp){case"1"://存款Console.WriteLine("请输入存款金e额:");string money = Console.ReadLine();//转a换为a十进制数ydecimal moneyDecimal = 0;try{moneyDecimal = decimal.Parse(money);}catch(Exception ex){Console.WriteLine("您的输入有误,请重新输入:"+ex.Message);}//调用账户里的存款方法bool depositResult = account.Deposit(moneyDecimal);if (depositResult == true){Console.WriteLine("存款成功!");Console.WriteLine("您的用户名:{0}", ername);Console.WriteLine("您的余额:{0}", account.Balance);}else{Console.WriteLine("存款失败!");}break;case"2"://取款Console.WriteLine("请输入取款金e额:");string moneyDraw = Console.ReadLine();decimal moneyDecimalq = 0;try{moneyDecimalq = decimal.Parse(moneyDraw);}catch (Exception ex){Console.WriteLine("您的输入有误,请重新输入:" + ex.Message);}bool drawResult = account.Draw(moneyDecimalq);if (drawResult == true){Console.WriteLine("取款成功!");Console.WriteLine("您的用户名:{0}", ername);Console.WriteLine("您的余额:{0}", account.Balance);}else{Console.WriteLine("取款失败!");}break;case"3"://1.提示输入转a入的用户名Console.WriteLine("请输入转入的用户名:");string transferUsername = Console.ReadLine();//2.判D断转a入的用户名是否存在Account transferAccount = null;// 2.1 获取银行D账户列D表,循环每一个账户foreach (Account item in bank.AccountList){// 2.2 与输出的用户名进行D比较,如果用户名存在,获取转a入的账户if (transferUsername == ername){//获取账入账户transferAccount = item;break;}}//3.提示输入转a账金e额Console.WriteLine("请输入转账金额:");string transferMoney = Console.ReadLine();decimal transferMoneyDecimal = 0;try{transferMoneyDecimal = decimal.Parse(transferMoney);}catch (Exception ex){Console.WriteLine("您的输入有误,请重新输入:" + ex.Message);}//4.调用当前账户的转账方法bool transferResult = account.TransferMoney(transferAccount, transferMoneyDecimal);//5.输出转账结果if (transferResult){Console.WriteLine("转a账成功!");Console.WriteLine("您的用户名:{0}", ername);Console.WriteLine("您的余额:{0}", account.Balance);}else{Console.WriteLine("转a账失败!");}//转a账break;case"4"://查询余额Console.WriteLine("您的余额为a:{0}", account.Balance);break;case"5"://修改密码//提示输入原密码Console.WriteLine("请输入旧密码:");string oldPassword = Console.ReadLine();//提示输入新密码Console.WriteLine("请输入新密码");string newPassword = Console.ReadLine();//提示再次输入新密码Console.WriteLine("请再次输入新密码");string newPasswordRepeat = Console.ReadLine();//验证两次密码是否一致if (newPassword.Equals(newPasswordRepeat)){//调用当前账户的修T改密码方法bool changeResult = account.ChangePassword(oldPassword, newPassword);if (changeResult){Console.WriteLine("修T改密码成功!");}else{Console.WriteLine("修T改密码失败!");}}else{Console.WriteLine("两次输入的密码不一致,请重新输入!");}break;case"6"://注é销isExsist = true;break;case"7"://退出return;default:Console.WriteLine("选择有误,请重新选择!");break;}}}else{Console.WriteLine("登录失败!");}}else{Console.WriteLine("您的输入有误,请重新输入:");}}}}}三、Bank类using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ATM{class Bank{private string name;///<summary>///银行名称///</summary>public string Name{get { return name; }set { name = value; }}//定义账户集合private List<Account> accountList;public List<Account> AccountList{get { return accountList; }}public Bank(string name){ = name;accountList = new List<Account>();}///<summary>///开户///</summary>///<param name="username">用户名</param>///<param name="password">密码</param>///<param name="account">账户</param>///<returns>是否成功</returns>public bool OpenAccount(string username, string password, out Account account) {account = null;bool result = true;//验证用户名是否存在foreach (Account item in accountList){if (ername == username){return false;}}//开a户Account acc = new Account(username, password);//将新账户添加到银行账户集合里accountList.Add(acc);//将新账户赋给输出账户account = acc;return result;}///<summary>///登录///</summary>///<param name="username">用户名</param>///<param name="password">密码</param>///<param name="account">当前账户</param>///<returns>是否成功</returns>public bool LoginAtm(string username, string password, out Account account){bool result = false;//out关键字的作用:为了在调用方法时返回该参数。
ATM模拟程序说明
ATM模拟程序说明
系统主程序为根目录下的:day5_credit_card.py
1.系统功能模块
Day5_ATM模拟程序是在python3.0环境下开发,主要功能模块如下图:
2.系统目录结构:
程序采用分层的方式编写,包括数据库访问层、数据库层(数据文件)、业务逻辑层(module层),业务处理层(主程序)、
主要分类如下图:
3.应用知识点:
a)字典、列表、元组的操作
b)文件的读写操作
c)函数的应用
d)类的使用
e)装饰器、反射
f)系统模块、自定义模块的操作
4 各模块功能图概要如下:
4.1 购物商城模块
4.2 用户登录模块(用户中心)
4.3 信用卡中心模块
4.4 后台管理模块
5.1 主菜单
5.2 进入商城
5.3 加入购物车
5.4 查看购物车
5.5 支付时装饰器验证登录
5.6 查看流水
5.7 查询购物记录
5.8 还款。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
制作组员: 组长 wzy 组员 lyz
目录
• 课程设计的目的 • 课程设计任务码与调试 • 系统使用手册 • 总结
一、课程设计目的
目的: 1. 掌握C++语言基本知识及其编程方法 2. 掌握类和对象的基本概念与使用方法 3. 掌握面要向求 对象中的继承与多态等面向 对象特性 4. 掌握文件流的基本操作
四、系统设计
• 模拟ATM取款机的操作:
㈠、登录功能:输入帐号和密码进行登录, 如密码错误提示重新输入密码,如帐号错误 提示无此帐户。 ㈡、查询功能:查询账户余额。 ㈢、取款功能:取款,更新余额。 ㈣、修改密码:输入原密码和新设置密码。 ㈤、吃卡功能:密码输错3次,锁卡。 ㈥、转账功能:输入转账的转出账户以及转 账金额,进行转账。
四、系统设计
• 5)查询功能
开始 主界面
图4-3-5
选择查询的操 作序号
结束
六、编码与调试
以下是程序的源代码
#include"iostream" using namespace std; class consumer; class ATM {public:
ATM(consumer & cn):cnsm(cn){ } void welcome(); //登陆界面 bool check_passwd(char n[],char pwd[]); void change_passwd(); //修改密码 void fetchmoney(); //取款 void zhuan();//转账 void information(); //查询信息 void exitATM(); //退出系统 void functionshow(); //功能界面 void lock(); //锁机
(2)银行卡类:具有“用户姓名”、“用户密码”、 “存款额”等特征。需要实现“身份验证”、“查询余额”、 “修改密码”、“交易成功更改余额”等操作。将这些操作 定义为银行卡类的成员函数。
四、系统设计
• 模拟ATM取款机的操作:
首先录入账户信息,格式如下
卡号
姓名
密码 余额
123456 wzy
123456 10000.00
2、)定义了一个consumer 类,类中包括以下几部分: 公有继承了consumer类
私有段: 卡号,用户姓名,用户密码,存款钱数
保护段: 取得姓名,取得卡号,取得密码,取得余额,设置密码,取钱
四、系统设计
• 1)登录流程
图4-3-1
开始
输入卡 号 输入密码 主界面
结束
四、系统设计
• 2)修改密码
protected:
char* get_name(); //取得姓名
char* get_kahao(); //取得卡号
char* get_passwd(); //取得密码
private: int times; //记录密码输入次数 consumer &cnsm;
};
//核对密码
六、编码与调试
class consumer
//用户
{
public:
friend class ATM;
consumer(char Name[],char Num[], float Money,char Password[]);
四、系统设计
• 模块结构图:
模拟ATM取款机
ATM功能类 登陆界面 核对密码 取款 转账 查询信息 退出系统 锁卡
consumer用户类 获取姓名 获取卡号 获取密码 获取余额 核对密码
五、详细设计 登陆界面
否 输入卡号和密码
卡号密码错误 超过3次?
否 卡号密码正确
是
选择一项功能执行
结束
功能界面 1.修改密码
二、课程设计任务与要求
任务: 编写一个银行ATM自动取款机模拟程序(2人)
实现ATM取款机的基本功能,如给用户提供查询 余额、取款、修改密码、吃卡、退出系统等服务,可 根据实际情况添加(如缴费、转账等服务)。
1)对于用户要求输入相应的帐号和密码,如果三 次出错则将卡吃掉并打印出相应凭条。 2)若输入的取款金额超出账户余额,则提示用户输入 有误并提供更正功能
开始
主界面
选择查询的操作 序号
请输入旧密 码 请输入新密码
图4-32
请再次输入新密 码
结束
四、系统设计
• 3)取款功能
图4-3-3
开始 主界面
选择需要的操作 序号
取款额数 是否继续
结束
四、系统设计 开始
• 4)转账功能
主界面
选择查询的操 作序号
图4-34
请输入所转账 号
请输入所转金 额
余额不足
转账成功, 余额
二、课程设计任务与要求
要求: 1. 要求利用面向对象的方法以及C++的 编程思想来完成系统的设计; 2. 要求在要设求 计的过程中,建立清晰的类 层次; 3. 在系统中至少要定义类,若有多个类, 每个类中要有各自的属性和方法; 4. 在系统的设计中,要求使用面向对象 的继承与多态等机制。
三、需求分析
2.取款 3.转账 4.查询余额 5.退出系统
总体流程图4.1
五、详细设计
4.2 相关数据结构的说明:
信息的载体用对象数组。系统录入信息的操作非常枯燥,所以创建 一个文件,把每次录入的信息保存入文件,在下一次进入系统是,它会 默认读取文件原有的信息,当然也可以随时添加录入ATM信息。然后系 统的各个功能仅仅是通过查询找到具体对象的具体数据进行操作。
本案例涉及一个银行卡和ATM机之间的“对话”。需 要处理两个对象,即:ATM和银行卡,因此可以考虑定 义两个类来解决这个问题
(1)ATM机类:有“单笔取款最高限制”、“每日取款 总金额限制”、“金额”等基本属性。需要实现:“核对密 码”、“修改密码”、“取款”、“查询信息”、“退出系 统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机 类的成员函数。
用户姓名:Name 字符型。 用户账号:Num 字符型。 用户密码:Password 字符型。 存款数额:Money 实型。
五、详细设计
4.3 类的设计
1)、定义了一个ATM取款机类,类中包括以下几部分: 公有段: 依次为登陆界面,核对密码,修改密码,取款,转账,查询信息,退
出系统,功能界面,锁机。 私有段: 记录密码输入次数。 友元函数: 取款,转账,查询信息,账号,密码。