ATM机C++代码(精选3篇)
篇1:ATM机C++代码
C++课程设计
学校: 惠州学院
题目: 设计ATM自动取款机系统 系别: 电子科学系 班级: 11电信2班 学号: 110703229 姓名: 王志勇
2014年4月21日
一、课程设计目的及要求
1.1设计目的
1.提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。
2.培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。
3.学习和掌握础。C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基
1.2 ATM自动取款机设计要求
1.实现ATM取款机的基本功能,如给用户提供开户、查询余额、取款、修改密码、吃卡、退出系统等服务,可根据实际情况添加(如缴费、转账等服务)。
2.对于用户要求输入相应的帐号和密码,如果三次出错则将卡吃掉并打印出相应凭条。
若输入的取款金额超出账户余额,则提示用户输入有误并提供更正功能
二、课程设计具体实现
2.1.1总体设计
根据C++类的基本知识和类的基本性质去实现ATM自动取款机基本功能;
ATM自动取款系统开户用户登录退出存款取款查询余额修改密码转账退出系统
2.1.2详细设计
1.登陆模块
主要完成功能为:当用户开始使用本系统,进入登陆模块。屏幕显示菜单提示,用户可根据需要选择相应功能。具体如下:开户、用户登录、退出系统;用户登录里面还有存款、取款、查询余额、修改密码、转账等功能
主要适用技术:登陆函数主要是使用了循环函数和do while函数,还有许多的成员函OpenAccount()、SaveMoney()、TakeMoney()、Inquiry()、Changepsw()、Transfer();Menus();关键代码如下: void main();主函数;
do{} while(1);//循环结构语句 switch(i);case 1: default: UserLogin();//用户登录界面函数 Menus();//用户操作函数 bank k;//默认构造函数 OpenAccount();break;//开户
SaveMoney();break;//存款 TakeMoney();break;//取款 Inquiry();break;//查询余额 Changepsw();break;//修改密码 Transfer();break;//转账
2.开户模块
主要完成功能为:进入开户模块。屏幕显示菜单提示,可根据要求依次输入姓名、身份证号、卡号、密码和预存款金额,完成以上操作之后,屏幕上显示恭喜您,开户成功;主要适用技术:开户函数使用了基本函数;
主要代码如下:void OpenAccount()//开户函数
3.存款模块
主要完成功能为:当开始使用本系统,进入存款模块。屏幕显示菜单提示,根据要求依 主要使用技术:存款函数使用了循环语句函数、判断函数和选择函数 主要代码如下:
void SaveMoney()//存款函数
4.取款模块
主要完成功能为:进入取款模块。如果全款金额小于或者等于卡上余额,则取款进行,否则重新输入取款金额。取款成功后显示卡上余额
主要适用技术:存款函数使用了循环语句函数、判断函数和选择函数 主要代码如下:
void TakeMoney()//取款函数
5.查询余额
主要完成功能为:进入查询余额模块。屏幕显示菜单提示,屏幕上将显示你的余额,然后进入修改密码模块;
主要适用技术:存款函数使用了循环语句函数、判断函数和选择函数 主要代码如下:
voidInquiry()//查询余额函数
6.修改密码
主要完成功能为:进入修改密码模块。屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和原始密码正确,则将进行修改密码的步骤,先输入原始密码,然后再输入新密码,之后确认新密码,确认正确之后,密码修改成功,接下来进入转账模块; 主要适用技术:存款函数使用了循环语句函数、判断函数和选择函数 主要代码如下:
void Changepsw()//修改密码函数
for(int i=1;i<=N;i++)else //循环结果语句 exit(1);//结束函数
7.转账模块
主要完成功能为:进入转账模块。输入所要转账的账号并输入转账金额,如果转账金额小于余额,转账成功输出卡上余额,主要适用技术:存款函数使用了循环语句函数、判断函数和选择函数 主要代码如下:
voidTransfer()//转账函数
8.退出系统模块
主要完成功能为:退出ATM自动取款系统,用条件if(i==7)break;或exist(1)实现。
三、源程序代码
#include
//默认构造函数,并初始化
void UserLogin();
//用户登录声明
void OpenAccount();
//开户函数声明
void Menus();
//用户操作函数声明
void SaveMoney();
//存款函数声明
void TakeMoney();
//取款函数声明
void Inquiry();
//查询函数声明
void Transfer();
//转账函数声明
void Changepsw();
//修改密码函数声明 private:
char name[20];
long cardID;
double SFZ;
long psw;
int money;};void Bank::UserLogin()
//用户登录函数定义 { long ID;long psw1;cout< //用户操作函数定义 { int a;do{ cout<<“1.存款n”;cout<<“2.取款n”;cout<<“3.查询余额n”;cout<<“4.修改密码n”;cout<<“5.转账n”;cout<<“6.退出系统n”;cout<<“请输入您要办理业务的序号:”;cin>>a;switch(a){ case 1: SaveMoney();break; case 2: TakeMoney();break; case 3: Inquiry();break; case 4: Changepsw();break; case 5: Transfer();break; case 6: exit(0);break; default:{cout<<“你的输入有误,请输入1-7之间的整数!n”;} } for(int j=0;j<=20;j++)cout<<“**”;cout< { cout<<“欢迎开户:”< cout<<“请输入您的姓名:”< cin>>name;cout<<“请输入身份证号码:”< 号:“< //存款 //取款 //查询余额 //修改密码 //转账 //退出 //开户函数定义 //cout<<”请输入您的卡 cin>>money;cout<<“恭喜您,开户成功!”< //存款函数定义 {int money1;cout<<“欢迎您使用取款业务”< void Bank::TakeMoney() { int money1;cout<<“欢迎您使用取款业务n”;cout<<“每次取款不能超过5000元”< cout<<“取款金额超出账户余额,请重新输入取款金额:”;cin>>money1;money=money-money1;cout<<“取款成功,您卡上余额为:”< 义 { cout<<“欢迎进行查询余额业务n”;cout<<“卡上余额为:”< //取款函数定义 //查询余额函数定 void Bank::Transfer() //转账函数定义 { long ID2;int money1;cout<<“欢迎使用转账业务n”< cout<<“金额超出账户余额,请重新输入取款金额:”;cin>>money1;money=money-money1;cout<<“转账成功,您卡上余额为:”< 修改密码函数定义 { long ID;long psw1;long psw2;cout<<“欢迎使用修改密码业务n”< // cin>>psw1;cout<<“请输入您的新密码:”< ICBC ”< case 2: k.UserLogin();break; default:{cout<<“你的输入有误,请输入1-3之间的整数!n”;} } for(int j=0;j<=20;j++)cout<<“**”;cout< //开户函数调用//用户登录 四、总结 在为期二周的课程设计中,我体会颇多,学到很多东西,通过完成C++程序设计的任务,使我熟练和掌握了这学期所学的有关visual c++6.0中的一些主要知识点和应用点,比如面向对象中的类的定义、类的实现、对象的定义、类的继承、类的多态性等等;还有面向过程的许多基础知识,结构体的基本类型,基本应用、结构体的堆栈基础知识等等。应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题,这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。 时间总是过得很快,转眼间C++课程设计就要结束了,通过这次课程设计,我们学会了很多,也懂得了很多,知道自己的C++只是哈有很大的提高空间。感谢老师,是您让我们知道了这些,是您一次次的帮助我们那些被我们收拾的面目全非的程序,让我们的程序起死回生;感谢老师,是您让我们看到自己的差距,看到了自己的基础知识还很薄弱,还有许多的只是我们还不懂,我们需要再接再厉去提高自己;感谢老师,是您让我们懂得了原来C++的许多程序原来是很深奥很深奥的,原来C++的许多程序是可以那样完成的,还有调试还可以是以那种形式去调试的;总之感谢您老师,是我们的C++有了进一步的提高,谢谢您老师,你们辛苦了。 “实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。C++程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。 同C程序一样, 每个C++程序都包含一个或多个函数, 而且必须有一个函数命名为main, 并且每个函数都由具有一定功能的语句序列组成。操作系统将main作为程序入口, 调用main函数执行程序;main函数执行其语句序列, 并返回一个值给操作系统。在大多数系统中, main函数的返回值用于说明程序的退出状态。如果返回0, 则代表main函数成功执行完毕, 程序正常退出, 否则代表程序异常退出。 然而在编写C++程序入口函数main的时候, 很多程序员, 特别是一些具有C基础的C++程序员时经常会写出如下格式的main函数: 上述代码在VC++中是可以正确编译、链接、执行的。编译信息如下所示: 1.1>------已启动生成:项目:MainCpp, 配置:Debug Win32------ 2.1>main.cpp 3.1>MainCpp.vcxproj->G:MainCppDebugMainCpp.exe ==========生成:成功1个, 失败0个, 最新0个, 跳过0个========== 但是当你将代码放在Linux环境下, 采用GCC编译器进行编译时, 你会吃惊地发现编译器抛出了如下错误信息: 1.[develop@localhost~]g++main.cpp main.cpp:2:错误:′::main′必须返回′int′ 为什么同样的代码会出现两种不同的结果呢?这还是跨平台的C/C++语言吗?不要对C/C++的跨平台性产生质疑, 之所以会这样, 在很大程度上要归咎于市面上一些书的“误导”, 以及微软对VC++编译器main返回值问题的纵容。在C和C++中, 不接收任何参数也不返回任何信息的函数原型为“void f (void) ;”, 所以很多人认为, 不需要程序返回值时可以把main函数定义成void main (void) , 然而这种想法是非常错误的。有一点必须明确:C/C++标准从来没有定义过void main () 这样的代码形式。C++之父Bjarne Stroustrup在他的主页FAQ中明确地写着这样一句话:“在C++中绝对没有出现过void main () {/*...*/}这样的函数定义, 在C语言中也是。” main函数的返回值应该定义为int类型, 在C和C++标准中都是这样规定的。在C99标准中规定, 只有以下两种定义方式是正确的: 1.int main (void) 2.int main (int argc, char*argv[]) 在C++03中也给出了如下两种main函数的定义方式: 1.int main ( ) 2.int main (int argc, char*argv[]) 虽然C和C++标准并不支持void main () , 但在部分编译器中void main () 依旧是可以通过编译并执行的, 比如微软的VC++。由于微软产品的市场占有率与影响力很大, 因此在某种程度上加剧了这种不良习惯的蔓延。不过, 并非所有的编译器都支持void main () , gcc就站在了VC++的对立面, 它是这一不良习气的坚定抵制者, 它会在编译时就明确地给出一个错误。 如果你坚持在某些编译器中使用void main () 这种非标准形式的代码, 那么当你把程序从一个编译器移植到另一个编译器时, 你就要对可能出现的错误负责。除了有void main () 这样的不规范格式外, 在C语言程序中, 尤其是一些老版本的C代码中, 你还会经常看到main () 这样的代码形式。 一些老的C标准 (诸如C90) 是支持main () 这样的形式的。之所以支持, 是因为在第一版的C语言中只有int一种数据类型, 并不存在char、long、float、double等这些内置数据类型。既然只有int一种类型, 也就不必显式地为main函数标明返回类型了。在Brian W.Kernighan和Dennis M.Ritchie的经典巨著The C Programming Language, Second Edition中用的就是main () 。后来, 在C语言的改进版中数据类型得到了扩充, 为了能兼容以前的代码, 标准委员会就做出了如下规定:不明确标明返回值的, 默认返回值为int。在C99标准中, 则要求编译器对于main () 这种用法至少要抛出一个警告。 main函数返回值的作用, 可以采用下面的方法加以验证。 首先, 编写main.cpp文件, 文件内容如下所示: 在Linux环境下, 采用命令:g++main.cpp 生成可执行文件a.out。然后, 执行命令:./a.out&&ehco“success” 结果输出success。 修改上述程序: 做同样测试, 无输出。 命令A&&B中的&&类似于C++中的并操作 (&&) , 如果A命令正确执行, 接着就会执行命令B;如果A出现异常, 则B不执行。通过以上分析可知, 当main () 返回0时, a.out正确执行并返回;但是如果返回-1, 程序就不能正常返回了。 最后, 还要说明C++标准中一个“好坏难定”的规定:在main函数中, return语句的作用在于离开main函数 (析构掉所有具有动态生存时间的对象) , 并将其返回值作为参数调用exit函数。如果函数执行到结尾而没有遇到return语句, 则其效果等同于执行了return 0。 也就是说, 如果函数执行到main结束处时没有遇到return语句, 编译器就会隐式地为你加上return 0;, 效果与返回0相同。之所以说这条规定“好坏难定”, 一方面是因为它让你省去了多敲几个字的麻烦, 另一方面是因为这种便捷会让某些程序员忽视编译器代替他做的工作, 而在思维中形成一种错误的认识:此函数可以无返回。 在应用这一规则时, 需要注意以下两点: (1) main函数的返回类型是int, 不是void或其他类型。 (2) 该规则仅仅对main函数适用。 1936年冬天,新德里街头飘着柳絮般的雪花,约翰·谢珀德·巴伦跑到一个商店,对营业员说:“先生,请给我拿一块巧克力。”这时,一个金发小女孩也跑进来,“给我也拿一块巧克力。” 营业员抱歉地指着巴伦手中的巧克力说:“对不起,小姑娘,那是最后一块巧克力了。” 正要离去的巴伦闻言,把手中的巧克力掰成两半,很绅士地递给小女孩:“我叫约翰·谢珀德·巴伦,这块巧克力我们一人一半。”小女孩欢快地接过巧克力:“你好,我叫卡罗琳。”巴伦和卡罗琳一见如故,很快成了最好的朋友。 1938年,巴伦的父母由于生意需要要带他回到英国。临走前,巴伦几乎跑遍新德里,买来所有商店的巧克力送给卡罗琳。他紧紧地握着卡罗琳的手说:“你回英国,一定要来找我。”他们谁也不会想到,一别就是十年。 1948年的一天,巴伦走在去图书馆的路上,忽然有个少女叫住了他:“巴伦……”巴伦抬起头,发现眼前这个女孩正是他魂牵梦绕的卡罗琳!不久,他们就结为了夫妻。 巴伦每天都会买卡罗琳最喜欢吃的巧克力送给她。1965年春天的一个周末,刚好巴伦生日,卡罗琳特意在小镇上订了一份蛋糕庆祝,结果因为去蛋糕店取蛋糕被冻得发起了高烧。 巴伦连夜将卡罗琳送到医院。第二天中午,卡罗琳才清醒过来。巴伦想起妻子已经很久没吃东西了:“卡罗琳,你想吃什么,我去给你买。” 卡罗琳嫣然一笑:“你知道的。”巴伦习惯性地摸索着口袋,但口袋里空空如也。由于匆忙,他忘记给她买巧克力了,更要命的是,交完医疗费,他的钱包里已没有现金了。当他赶到银行时,营业员却说已经下班不能取钱了。 巴伦无助地徘徊在街头,看到地铁月台上竖立着的巧克力贩卖机,心想,要是巧克力贩卖机旁有一台可以随时取款的机器就好了。 凭借这种灵感,巴伦带领他的团队开始了艰苦的制造实验,经过无数次的失败,终于成功造出了ATM的雏形。 1967年6月,英国巴克莱银行在恩费尔德分行安装了世界上第一部ATM。巴伦双眼含着热泪快步回到家中,拥抱着妻子:“以后无论在什么地方、在什么时候,我都能取到钱为你买巧克力了。” 此后,巴伦的生意蒸蒸日上。然而这种席卷全球的设备从来没有申请专利。当人们提及此事时,巴伦给出了解释:“我发明这个设备并不是为了钱,而是为了一个叫卡罗琳的女人,这是我送给她的礼物。”篇2:如何优化C++程序代码编写
篇3:ATM机:甜蜜的礼物