自动取款机(ATM)模拟程序(C#控制台应用程序)
C语言 ATM 程序设计
C语言 ATM 程序设计概述:本文将详细介绍如何使用C语言设计一个简单的ATM(自动取款机)程序。
ATM程序的主要功能包括用户登录、查询余额、取款、存款和退出等。
1. 用户登录:用户需要输入正确的账户号码和密码才干成功登录。
账户号码和密码可以存储在一个预定义的用户数据库中。
用户输入账户号码和密码后,程序将验证其有效性并赋予相应的登录状态。
2. 查询余额:用户成功登录后,可以选择查询余额。
程序将从用户数据库中获取用户的余额信息并显示在屏幕上。
3. 取款:用户成功登录后,可以选择取款。
用户需要输入取款金额,程序将验证用户账户余额是否足够。
如果余额足够,则扣除相应金额并更新用户数据库中的余额信息;如果余额不足,则提示用户余额不足。
4. 存款:用户成功登录后,可以选择存款。
用户需要输入存款金额,程序将将其加到用户账户的余额中,并更新用户数据库中的余额信息。
5. 退出:用户可以选择退出程序。
退出前,程序将提示用户是否确认退出,并根据用户的选择执行相应的操作。
6. 错误处理:程序需要对用户的输入进行错误处理。
例如,当用户输入错误的账户号码或者密码时,程序应该赋予相应的错误提示;当用户输入非法金额时,程序应该赋予相应的错误提示。
7. 数据存储:程序需要使用文件或者数据库来存储用户的账户信息和余额信息。
可以使用文本文件、二进制文件或者关系型数据库等。
8. 用户界面:程序需要提供一个友好的用户界面,以便用户能够轻松地进行操作。
可以使用控制台界面或者图形界面,根据需要选择合适的界面设计。
9. 安全性:程序需要确保用户的账户信息和余额信息的安全性。
可以使用加密算法来加密用户的密码,在存储和传输过程中保护用户的隐私。
10. 测试和调试:在完成程序的编写后,需要进行充分的测试和调试,以确保程序的稳定性和正确性。
可以编写测试用例,并对程序进行单元测试和集成测试。
总结:本文详细介绍了使用C语言设计一个简单的ATM程序的要求和功能。
c模拟取款机课程设计
c 模拟取款机课程设计一、课程目标知识目标:1. 学生能够理解ATM机的基本工作原理和功能操作流程;2. 学生能够掌握运用编程语言进行ATM机模拟程序的设计;3. 学生能够运用基本的数学运算实现账户余额的查询、取款和存款功能。
技能目标:1. 学生能够运用所学知识,独立设计并编写一个简单的ATM取款机模拟程序;2. 学生能够通过编程解决实际问题,提高逻辑思维和问题解决能力;3. 学生能够通过团队协作,共同完成项目任务,提高沟通与协作能力。
情感态度价值观目标:1. 学生能够认识到编程在生活中的实际应用,增强学习信息技术的兴趣;2. 学生能够在项目实践中体会团队合作的重要性,培养合作精神;3. 学生能够通过解决实际问题,认识到学习知识可以改善生活,提高社会责任感。
分析课程性质、学生特点和教学要求,本课程旨在帮助学生在掌握ATM机基本知识的基础上,运用编程技能实现模拟程序的设计,培养学生解决实际问题的能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。
二、教学内容1. 理论知识:- 了解ATM机的基本功能及其工作原理;- 学习编程语言的基本语法和结构;- 掌握条件语句、循环语句和函数的定义与使用。
2. 实践操作:- 设计并编写ATM机模拟程序;- 实现账户余额查询、取款、存款和退出功能;- 学习调试程序,解决编程过程中遇到的问题。
3. 教学大纲:- 第一周:ATM机基本功能介绍,学习编程语言基础;- 第二周:编写ATM机模拟程序,实现查询余额和取款功能;- 第三周:实现存款和退出功能,学习调试程序;- 第四周:项目展示与评价,总结反馈。
4. 教材章节:- 《信息技术》第三章:程序设计基础;- 《信息技术》第四章:算法与程序设计。
教学内容根据课程目标进行选择和组织,保证科学性和系统性。
教学大纲明确了教学内容的安排和进度,确保学生在学习过程中逐步掌握所需知识,为实践操作打下坚实基础。
模拟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)修改密码。
C++编写的ATM自动取款机模拟程序分析
C++编写的ATM自动取款机模拟程序分析第一篇:C++编写的ATM自动取款机模拟程序分析// ************************************ // * * // * function.h * // * * // ************************************ #includeclass consumer;class ATM // ATM取款机{ public: ATM(consumer& cn):cnsm(cn){ } void welcome();// 登陆界面bool check_passwd(char n[],char pwd[]);// 核对密码void change_passwd();// 修改密码 void fetchmoney();// 取款void information();// 查询信息 void exitATM();// 退出系统void functionshow();// 功能界面 void lock();// 锁机 private: int times;// 记录密码输入次数consumer& cnsm;};class consumer // 用户 { public: friend class ATM;consumer(char Name[],char Num[], float Money,char Password[]);protected: char* get_name();// 取得姓名 char* get_num();// 取得卡号 char* get_passwd();// 取得密码float get_money();// 取得余额void set_passwd(char pwd[]);// 设置密码void set_money(float m);// 取钱 private: char passwd[8];// 用户密码 char name[20];// 用户姓名 char num[20];float money;};// ************************************ // * * // * consumer类的成员&&函数 * // * * // ************************************ #include“function.h” #includeconsumer::consumer(char Name[], char Num[],float Money,char Password[]){ strcpy(name,Name);strcpy(num,Num);money=Money;strcpy(passwd,Password);} float consumer::get_money(){ return money;}char* consumer::get_name(){ return name;}char* consumer::get_num(){ return num;}char* consumer::get_passwd(){ return passwd;}void consumer::set_money(float m){ money-=m;} voidconsumer::set_passwd(char pwd[]){ strcpy(passwd,pwd);} // ************************************ // * * // * ATM类的成员&&函数 * // * * // ************************************#include “function.h” #include #include void ATM::welcome(){ times=0;cout<<“$ 欢迎使用若雪银行ATM自动取款机!~!”<”;cin>>n;while(n<1||n>4){ cout<<“请输入正确的操作序号!”<”;cin>>n;} switch(n){ case 1: change_passwd();break;case 2: fetchmoney();break;case 3: information();break;case 4: exitATM();break;} }while(true);} void ATM::change_passwd(){ char pwd[8],repwd[8];times=0;do { cout<>pwd;if(!check_passwd(cnsm.get_num(),pwd))times++;el se break;}while(times<3);if(times==3)lock();int t=0;do { cout<<“请输入新密码:”;cin>>pwd;cout<<“请再输入一次新密码:”;cin>>repwd;if((t=strcmp(pwd,repwd))!=0)cout<<“你输入的两次密码不一样,请重新输入!”<”<>m;while(m<=0){ cout<<“请输入正确的数字!”< ”;cin>>m;} if(cnsm.get_money()-m<0){ cou t<<“对不起,你的余额不足!” < ”;cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){ cou t<<“$ >”;cin>>ch;} }while(ch=='y'||ch=='Y');} void ATM::information(){ cout<<“**********************************”< #include“function.h” void main(){ consumer c1(“jim”,“12345”,5200.3f,“123”);// 先构造一个用户ATM atm(c1);atm.welcome();}第二篇:ATM自动取款机C++课程设计C++课程设计学校:惠州学院题目:设计ATM自动取款机系统系别:电子科学系班级: 11电信2班学号: 110703229 姓名:王志勇2014年4月21日一、课程设计目的及要求1.1设计目的1.提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。
用c语言编写的一个ATM取款机程序
⽤c语⾔编写的⼀个ATM取款机程序学了⼀个多星期的c语⾔了,⽼师布置来了作业,⽤C编写个ATM机的模拟程序,客户界⾯有,取款,2存款,3转账,4退出。
并且要求输⼊错误后,有三次机会重输,定义输⼊密码hellowold,⽤switch分⽀。
#include<stdio.h>#include<string.h>#define key "hellowold"//定义密码#define zhanghu "123456789"#define line "==================\n"int num;//选择类型char arr[20];//定义数组char password[20];//定义数组int money;//取款⾦额int i=0;int main(){printf(line);printf("\t1取款\n");printf("\t2存款\n");printf("\t3转账\n");printf("\t4退出\n");printf(line);printf("请选择操作类型: \n");scanf("%d",&num);switch(num){case1:{ do{printf("请输⼊密码:\n");scanf("%s",&password);if(strcmp(key,password)==0){printf("请输⼊取款⾦额:\n");scanf("%d",&money);printf("请取⾛你的%d⽑爷爷",money);break;}else{printf("密码输⼊错误");}i++;}while((strcmp(key,password)!=0)&&i<=2);}}第⼆步存款,定义账号#include<stdio.h>#include<string.h>#define key "hellowold"//定义密码#define zhanghu "#define other "ni de mao ye ye"#define line "==================\n"int num;//选择类型char arr[20];//定义数组char password[20];//定义数组char others[20];int money;//取款⾦额int num2;//存款⾦额int i=0;int main(){printf(line);printf("\t1取款\n");printf("\t2存款\n");printf("\t3转账\n");printf("\t4退出\n");printf(line);printf("请选择操作类型: \n");scanf("%d",&num);switch(num){case1:{ do{printf("请输⼊密码:\n");scanf("%s",&password);if(strcmp(key,password)==0){printf("请输⼊取款⾦额:\n");scanf("%d",&money);printf("请取⾛你的%d⽑爷爷",money);break;}else{printf("密码输⼊错误");}i++;}while((strcmp(key,password)!=0)&&i<=2);break;}今天先变到这⾥吧,作业还多着了,排版不是很好看,就将就这看吧。
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银行自动取款系统.cpp 源代码和视图
模拟ATM银行自动取款系统.cpp 源代码和视图:#include<stdio.h>#include<conio.h>void part1();void part2();int c;void main(){part1();}void part1(){int a,b=622202;puts("********************************************************************** ***");puts(" 欢迎使用ATM银行自动取款系统!");printf("请插入您的卡!\n");scanf("%d",&a);if(a==b){ printf("请输入您的密码:");scanf("%d",&c);part2();//函数调用}else{printf("您的卡号不正确!");printf("谢谢惠顾!\n");getch();//从键盘接收一个字符,不回显;此处用作屏幕显示器缓冲关闭处理}}void part2(){int d=199092;if(c==d){printf("请输入取款金额:");scanf("%d",&c);printf("您的取款钱数为:%d RMB\n",c);printf("谢谢使用!\n");printf("************************************************************************* \n");getch();//从键盘接收一个字符,不回显;此处用作屏幕显示器缓冲关闭处理}elseprintf("您输入的密码错误!\n");getch();//从键盘接收一个字符,不回显;此处用作屏幕显示器缓冲关闭处理}。
高级语言程序设计(C#)项目十五 模拟ATM
if( == name)
returnfalse;
}
account =newAccount(name, password);
accounts.Add(account);
returntrue;
}
protectedList<string> GetAccounts()
{
stringfolder =bine(Environment.CurrentDirectory,"AbcBank");
{
thrownewApplicationException("帐号信息错误");
}
}
~Account()
{
fs.Close();
}
publicboolDeposit(decimalamount)
{
if(amount<=0)
returnfalse;
decimaloldBalance = balance;
图15-2新建项目设置界面
2.创建Account类
publicclassAccount
{
protectedstringname;
protectedstringpassword;
protecteddecimalbalance;//帐号余额
protectedstringfileName;
protectedFileStreamfs;
}
}
【理论知识】(对此任务所涉及到的关键知识点的讲解)
请按F1键,查一下MSDN上的FileStream类、BinaryReader类和BinaryWriter类,FileInfo类,将FileStream类、BinaryReader类和BinaryWriter类中的构造方法和这些类中方法的详细内容记下来。
C语言模拟ATM机
C语言模拟ATM机一、实验目的通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、实验要求要求每人独立完成设计,编写一个ATM机模拟操作程序。
提交实验报告、源程序、程序运行截图。
1.程序具有以下功能:1)登录系统:输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统;2)操作功能:查询:查询帐户的存款余额。
按任意键返回主菜单;修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。
之后可返回主菜单;取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。
之后可返回主菜单;存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。
之后可返回主菜单;转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张某山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。
之后可返回主菜单;退出:退出系统。
2.定义如下结构体类型:“日期”结构体Date:成员有:year(年)、month(月)、day(日);“帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额)“存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)3.帐户信息存放在account.t某t文件,储户存取款记录保存在record.t某t中;4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
5.附加功能:储户一天内输错密码的次数不能超过3次,否则无法进入系统;应避免输入存款金额、取款金额为负数等异常情况的出现。
自动取款机(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(。
c语言atm机的编程
C语言ATM机的编程1. 简介ATM(Automated Teller Machine)机是一种自动提款机,它能够为用户提供多种服务,如取款、存款、查询余额、转账等。
本文将介绍如何使用C语言编写一个简单的ATM机程序。
2. 功能需求我们的ATM机程序需要实现以下功能: 1. 用户登录:用户可以输入正确的账号和密码进行登录。
2. 查询余额:用户登录成功后可以查询账户余额。
3. 存款:用户登录成功后可以存入指定金额到账户中。
4. 取款:用户登录成功后可以从账户中取出指定金额。
5. 转账:用户登录成功后可以将指定金额转入其他账户。
3. 程序设计我们将使用结构体来表示用户信息及其相关操作。
首先定义一个结构体User,其中包含用户名、密码和余额三个字段:typedef struct {char username[20];char password[20];double balance;} User;接下来,我们需要实现几个函数来完成不同的操作。
首先是登录函数login():int login(User* users, int numUsers) {char username[20];char password[20];printf("请输入用户名: ");scanf("%s", username);printf("请输入密码: ");scanf("%s", password);for (int i = 0; i < numUsers; i++) {if (strcmp(username, users[i].username) == 0 && strcmp(password, users[i].password) == 0) {printf("登录成功!\n");return i; // 返回用户索引}}printf("用户名或密码错误!\n");return -1; // 登录失败}登录函数会提示用户输入用户名和密码,并与已有的用户信息进行匹配。
模拟自动取款机(ATM)CPPT课件
二、案例分析
➢ 本案例涉及一个银行卡和ATM机之间的“对话”。 需要处理两个对象,即ATM和银行卡,因此可以 定义两个类来解决这个问题。
➢ ATM机类有“单笔取款最高限制”、“每日取款 总金额限制”、“余额”等基本属性。需要实现 “核对密码”、“修改密码”、“取款”、“查 询信息”、“退出系统”、“锁机吞卡”等功能。 将这些操作定义为ATM机类的成员函数。
It'S An Honor To Walk With You All The Way
演讲人:XXXXXX
时 间:XX年XX月XX日
41
目录
目退录出
27
目录
目退录出
28
目录
目退录出
29
目录
目退录出
30
目录
目退录出
31
目录
目退录出
32
目录
目退录出
33
目录
目退录出
34
目录
目退录出
35
目录
目退录出
36
目录
目退录出
37
目录
目退录出
38
目录
目退录出
五、案例总结与提高
➢ 案例总结
c语言银行自动存取款机模拟
沈阳航空航天大学课程设计任务书学院:自动化学院专业:测控技术与仪器班级:04070101 学号:2010040701021 题目:自动存取款机模拟一、课程设计时刻2011~12第1学期第4周,共计1周,20学时。
二、课程设计内容请你仿照自动存取款机系统,用C语言编写软件完成以下任务:1.登陆功能:某个用户输入账户名和密码,能够登陆ATM。
注意:应有多个用户,并把信息储存在文件中。
2.查询功能:登陆后,能够查询存款余额。
3.存款功能:登陆后,能够向账户中存款。
4.取款功能:登陆后,能够取款。
注意:取款金额不能超过存款金额。
提示:用户(账号、密码、存款余额、利率、开户银行)三、课程设计要求1.程序质量:✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括、“数据输入”、“数据储存”、“信息查询”、“数据修改”、“退出”5项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:课程终止后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字指导教师:学生签名:五、成绩六、教师评语名目一、需求分析 (1)二、设计分析 (2)三、要紧界面截图 (4)四、技术要点 (5)五、个人总结 (7)六、参考文献 (8)七、源程序 (8)一、需求分析依照任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个较典型的银行存取款模拟系统,其使用者被假定为银行信用卡用户,系统应该具有安全、稳固、功能齐全的特点。
1. 安全性分析银行存取款机的数据涉及到取款机内储存的所有用户,数据量较大且对保密性的需求专门高,因此要通过设置密码等手段确保数据不能被随意的删减和修改。
2. 稳固性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是显现令用户感到意外的系统错误或系统崩溃。
3. 要紧功能分析(1)账号及密码输入:承诺用户输入账号、密码,对用户由于疏忽录入的非法数据,能够及时提示并更正。
C语言程序设计报告(模拟ATM取款机)
仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号 4317指导教师王成仲恺农业工程学院教务处制目录1 需求分析........................................................... 错误!未定义书签。
2 系统总框图和功能模块说明........................................... 错误!未定义书签。
系统总框图...................................................... 错误!未定义书签。
功能模块说明.................................................... 错误!未定义书签。
3 系统设计........................................................... 错误!未定义书签。
主要结构体....................................................... 错误!未定义书签。
主要功能函数...................................................... 错误!未定义书签。
关键函数的流程图................................................. 错误!未定义书签。
4 系统调试........................................................... 错误!未定义书签。
5 总结............................................................... 错误!未定义书签。
6 源程序清单......................................................... 错误!未定义书签。
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机模拟程序(c++)
#include<iostream.h>#include<string.h>#include<fstream.h>class Card{public:Card(char a[10],int b,double c){strcpy(num,a);code=b;money=c;}char num[10];int code;double money;};struct node{Card *cod;node *next;};node *createlist(int n);//创建链表node *findnum(char m[10],node *head);//核对卡号int findcode(int q,node *head);//核对密码void fetchmoney(node *head);//取款void search(node *head);//查询余额void zhuan(node *head,node *curnode);//转帐void change_code(node *head);//更改密码void exit();//退卡void lock();//锁卡void save(node *head);//保存信息int main(){node *temp, *listhead=NULL;int times=0;listhead=createlist(2);cout<<"★☆★☆★☆★☆★☆欢迎使用本银行A TM取款机☆★☆★☆★☆★☆★"<<endl;cout<<"请输入您的卡号:";char p[10];10cin>>p;temp=findnum(p,listhead);if(temp){while(times<3){cout<<"请输入您的密码:";int q;cin>>q;if(findcode(q,temp)==0){cout<<"您输入的密码有误,请重新输入!"<<endl;times++;}else{for(int i=0; ;i++){cout<<"本机可办理以下业务:"<<endl;cout<<"********************"<<endl;cout<<"1>取款"<<" "<<"2>查询余额"<<endl;cout<<"3>转帐"<<" "<<"4>更改密码"<<endl;cout<<"5>退出"<<endl;cout<<"********************"<<endl;cout<<"请选择您需要的操作:";int r;cin>>r;if(r==1){cout<<"【取款】"<<endl;fetchmoney(temp);save(listhead);}if(r==2){cout<<"【查询余额】"<<endl;search(temp);save(listhead);}if(r==3){cout<<"【转帐】"<<endl;zhuan(temp,listhead);11save(listhead);}if(r==4){cout<<"【更改密码】"<<endl;change_code(temp);save(listhead);}if(r==5){exit();goto end;}}}}if(times==3)lock();}elsecout<<"对不起,您输入的卡号不存在,请查正后再输!"<<endl;return 0;end:return 1;}node *createlist(int n){node *temp, *tail=NULL, *head=NULL;head=new node;char x[10];int y;double z;ifstream infile("outfile.txt",ios::in);infile>>x>>y>>z;if(head==NULL){cout<<"No memory available!";return NULL;}else{head->cod=new Card(x,y,z);head->next=NULL;12tail=head;}for(int i=0;i<n-1;i++){temp=new node;char x[10];int y;double z;if(temp==NULL){cout<<"No memory available!";return head;}else{while(!infile.eof())infile>>x>>y>>z;infile.close();temp->next=NULL;temp->cod=new Card(x,y,z);tail->next=temp;tail=temp;}}return head;}node *findnum(char m[10],node *head){while(head){if((strcmp(head->cod->num,m))==0){return head;}head=head->next;}return NULL;}int findcode(int q,node *head){if(head->cod->code==q)return 1;13 return 0;}void fetchmoney(node *head){cout<<"请输入取款金额:";double s;cin>>s;if(head->cod->money<0)cout<<"请输入正确的数字!"<<endl;if((head->cod->money)>s){head->cod->money=(head->cod->money)-s;cout<<"交易成功,请收好钱!"<<endl;}else{cout<<"对不起,您的余额不足!"<<endl;}}void search(node *head){cout<<"您的帐户余额为:"<<head->cod->money<<"!"<<endl; }void zhuan(node *head,node *curnode){cout<<"请输入对方卡号:";char t[10];cin>>t;node *hold=findnum(t,curnode);if(hold){cout<<"请输入转帐金额:";double d;cin>>d;if((head->cod->money)>d){cout<<"交易成功!"<<endl;head->cod->money=(head->cod->money)-d;hold->cod->money=(hold->cod->money)+d;}elsecout<<"对不起,您的余额不足!"<<endl;}14elsecout<<"对不起,您输入的卡号不存在,请查正后再输!"; }void change_code(node *head){cout<<"请输入您的原密码:";int e,f,g;cin>>e;if((head->cod->code)==e){cout<<"请输入您的新密码:";cin>>f;cout<<"请再次输入您的新密码:";cin>>g;if(f==g){(head->cod->code)=g;cout<<"密码修改成功,请牢记!"<<endl;}elsecout<<"您两次输入的密码不一致,操作失败!"<<endl;}elsecout<<"原密码输入错误,操作失败!"<<endl;}void exit(){cout<<"谢谢使用,欢迎下次光临!"<<endl;cout<<"请取回卡!"<<endl;}void lock(){cout<<"对不起,由于您三次密码输入错误,卡已被锁!"<<endl;}void save(node *head){ ofstream outfile("outfile.txt",ios::out);while(head){outfile<<head->cod->num<<" "<<head->cod->code<<" "<<head->cod->money<<endl;head=head->next;}outfile.close();}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动取款机(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的本质就是一组帐号的组合,并负责管理帐号。
基本的银行信息包括:●银行名name●已经开户的帐号数usedAccountNum●可以容纳的最大账户数MaxAccountNum●帐号集accounts主要的银行操作包括:●开户OpenAccount●登录帐号LoginAccount●撤销帐号,但是由于A TM不能撤销帐号,因此我们不关心这个操作3)ATM类ATM类与银行类之间在一对一的关联关系,ATM提供用户界面,并将用户的请求提交给银行、将银行的反馈提交给用户。
基本的ATM信息包括:●银行Bank主要的ATM操作包括:●启动Start●开户OpenAccount●登录帐号LoginAccount●管理帐号ManageAccount●一些显示不同信息的辅助操作(PrintLogo、Print、Pause等)。
4)启动程序类Program启动程序类Program的唯一功能就是创建银行类和ATM类的实例,并将它们关联起来,然后启动ATM(执行A TM对象的Start方法)。
因此,这个类仅仅包含程序的入口点Main方法。
5)ATM模拟程序的类图根据上述各类的分析,可以画出A TM模拟程序的类图:注意:Bank类和Account类的数据成员都使用protected访问模式,主要是为了使它们的之类都能集成它们的这些数据成员。
3.动态模型ATM模拟程序的基本工作流程:三、设计经过分析,我们已经了解了A TM模拟程序中的四个类的基本结构。
在设计阶段需要进一步细化个各类的结构。
对Account类,我们将进行如下的调整:●用只读属性来实现Get_Balance方法●增加赌气name的只读属性。
●增加构造函数。
●重载Deposit方法,并提供三个重载方法。
●重载Withdraw方法,并提供三个重载方法。
对Bank类,主要调整包括:●提供构造函数,传入银行的名称。
●增加读取name的只读属性。
●用数组来实现帐号集。
●用常量来表示MaxAccountNum对ATM类,主要增加几个与用户交互的函数(打印信息和输入信息),以及一个退出系统的密码。
在设计类的时候,为了提供代码的重用性,一个重要的原则是,不要将功能与用户界面紧密耦合在一起。
在这个程序中,Account类和Bank类是功能类,A TM类是用户界面类。
因此,在设计Account类和Bank类时候,不要涉及任何的用户界面操作。
所有的用户界面都放在ATM类中。
这样做的好处是:功能类可以适用于任何的用户界面,比如,Bank类和Account 可以用于网上银行,用户界面类可以适用于其他功能,比如,ATM类可以用于信用卡机构。
四、实现1)在ATM项目中增加Account类using System;using System.Collections.Generic;using System.Text;//Account.cs//ATM项目中的Account类源文件namespace ATM{class Account{protected string name;protected string password;protected decimal balance;public decimal Banlance{get{return balance;}}public string Name{get{return name;}}public Account(string name,string password) {this.balance = 0; = name;this.password = password;}public bool Deposit(decimal amount){if(amount<=0){return false;}balance += amount;return true;}public bool Deposit(double amount){return Deposit((decimal)amount);}public bool Deposit(int amount){return Deposit((decimal)amount);}public bool Deposit(decimal amount,out decimal balance){bool succeed = Deposit(amount);balance = this.balance;return succeed;}public bool Withdraw(decimal amount){if (amount > balance || amount <= 0){return false;}balance -= amount;return true;}public bool Withdraw(double amount){return Withdraw((decimal)amount);}public bool Withdraw(int amount){return Withdraw((decimal)amount);}public bool Withdraw(decimal amount, out decimal balance){bool succeed = Withdraw(amount);balance = this.balance;return succeed;}public bool ChangePassword(string oldPassword, string newPassword) {if(oldPassword!=password){return false;}password = newPassword;return true;}public bool Login(string name,string password){return (==name&&this.password==password);}}}2)在ATM项目中增加Bank类using System;using System.Collections.Generic;using System.Text;//Bank.cs//ATM项目中的Bank类源文件namespace ATM{class Bank{protected string name;protected const int MaxAccountNum = 2048;protected int usedAccountNum;protected Account[] accounts;public string Name{get{return name;}}public Bank(string name){ = name;edAccountNum = 0;accounts=new Account[MaxAccountNum];}public bool LoginAccount(string name,string password,out Account account) {account = null;for (int i = 0; i < usedAccountNum;++i ){if(accounts[i].Login(name,password)){account=accounts[i];return true;}}return false;}public bool OpenAccount(string name, string password, out Account account) {account = null;for (int i = 0; i < usedAccountNum;++i ){if(accounts[i].Name==name){return false;}}account = new Account(name, password);accounts[usedAccountNum++] = account;return true;}}}3)在ATM项目中增加ATM类using System;using System.Collections.Generic;using System.Text;//ATM.cs//ATM项目中的ATM类源文件namespace ATM{class ATM{private const string quitcode = "20130814";private Bank bank;public ATM(Bank bank){this.bank = bank;}public void Start(){while (true){//主界面PrintLogo();Console.WriteLine("---------------1.开户---------------");Console.WriteLine("---------------2.登录---------------");Console.WriteLine("---------------3.退出---------------");Console.WriteLine("------------------------------------");Console.WriteLine("");Console.Write("请输入您的选择(回车结束):");string code = Console.ReadLine();//quit systemif (code == quitcode){return;}if (code == "1"){OpenAccount();}else if(code=="2"){LoginAccount();}else if (code == "3"){Console.WriteLine("按一下任意键直接退出...");Console.ReadKey();return;}}}private void LoginAccount(){PrintLogo();Console.WriteLine("---------------请输入您的帐号的用户名和密码:---------------");Console.WriteLine("------------------------------------------------------------");Console.WriteLine("");string name = Input("用户名(回车结束):");string password = Input("密码(回车结束):");//登录帐号Account account;if (!bank.LoginAccount(name, password, out account)){Console.WriteLine("---登录错误,请检查用户名和密码是否正确。