C语言模拟ATM机

合集下载

C语言 ATM 程序设计

C语言 ATM 程序设计

C语言 ATM 程序设计概述:本文将详细介绍如何使用C语言设计一个简单的ATM(自动取款机)程序。

ATM程序的主要功能包括用户登录、查询余额、取款、存款和退出等。

1. 用户登录:用户需要输入正确的账户号码和密码才干成功登录。

账户号码和密码可以存储在一个预定义的用户数据库中。

用户输入账户号码和密码后,程序将验证其有效性并赋予相应的登录状态。

2. 查询余额:用户成功登录后,可以选择查询余额。

程序将从用户数据库中获取用户的余额信息并显示在屏幕上。

3. 取款:用户成功登录后,可以选择取款。

用户需要输入取款金额,程序将验证用户账户余额是否足够。

如果余额足够,则扣除相应金额并更新用户数据库中的余额信息;如果余额不足,则提示用户余额不足。

4. 存款:用户成功登录后,可以选择存款。

用户需要输入存款金额,程序将将其加到用户账户的余额中,并更新用户数据库中的余额信息。

5. 退出:用户可以选择退出程序。

退出前,程序将提示用户是否确认退出,并根据用户的选择执行相应的操作。

6. 错误处理:程序需要对用户的输入进行错误处理。

例如,当用户输入错误的账户号码或者密码时,程序应该赋予相应的错误提示;当用户输入非法金额时,程序应该赋予相应的错误提示。

7. 数据存储:程序需要使用文件或者数据库来存储用户的账户信息和余额信息。

可以使用文本文件、二进制文件或者关系型数据库等。

8. 用户界面:程序需要提供一个友好的用户界面,以便用户能够轻松地进行操作。

可以使用控制台界面或者图形界面,根据需要选择合适的界面设计。

9. 安全性:程序需要确保用户的账户信息和余额信息的安全性。

可以使用加密算法来加密用户的密码,在存储和传输过程中保护用户的隐私。

10. 测试和调试:在完成程序的编写后,需要进行充分的测试和调试,以确保程序的稳定性和正确性。

可以编写测试用例,并对程序进行单元测试和集成测试。

总结:本文详细介绍了使用C语言设计一个简单的ATM程序的要求和功能。

c模拟取款机课程设计

c模拟取款机课程设计

c 模拟取款机课程设计一、课程目标知识目标:1. 学生能够理解ATM机的基本工作原理和功能操作流程;2. 学生能够掌握运用编程语言进行ATM机模拟程序的设计;3. 学生能够运用基本的数学运算实现账户余额的查询、取款和存款功能。

技能目标:1. 学生能够运用所学知识,独立设计并编写一个简单的ATM取款机模拟程序;2. 学生能够通过编程解决实际问题,提高逻辑思维和问题解决能力;3. 学生能够通过团队协作,共同完成项目任务,提高沟通与协作能力。

情感态度价值观目标:1. 学生能够认识到编程在生活中的实际应用,增强学习信息技术的兴趣;2. 学生能够在项目实践中体会团队合作的重要性,培养合作精神;3. 学生能够通过解决实际问题,认识到学习知识可以改善生活,提高社会责任感。

分析课程性质、学生特点和教学要求,本课程旨在帮助学生在掌握ATM机基本知识的基础上,运用编程技能实现模拟程序的设计,培养学生解决实际问题的能力。

课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。

二、教学内容1. 理论知识:- 了解ATM机的基本功能及其工作原理;- 学习编程语言的基本语法和结构;- 掌握条件语句、循环语句和函数的定义与使用。

2. 实践操作:- 设计并编写ATM机模拟程序;- 实现账户余额查询、取款、存款和退出功能;- 学习调试程序,解决编程过程中遇到的问题。

3. 教学大纲:- 第一周:ATM机基本功能介绍,学习编程语言基础;- 第二周:编写ATM机模拟程序,实现查询余额和取款功能;- 第三周:实现存款和退出功能,学习调试程序;- 第四周:项目展示与评价,总结反馈。

4. 教材章节:- 《信息技术》第三章:程序设计基础;- 《信息技术》第四章:算法与程序设计。

教学内容根据课程目标进行选择和组织,保证科学性和系统性。

教学大纲明确了教学内容的安排和进度,确保学生在学习过程中逐步掌握所需知识,为实践操作打下坚实基础。

C语言-模仿ATM

C语言-模仿ATM

2.7.1.4 练习4 模仿A TM模仿ATM取款程序,包括清空、存钱、取钱、查询余额、计算利息、有界面//atm.c#include<stdi o.h>#include<stdlib.h>float total=0;//全¨?局?变À?量¢?,ê?用®?于®¨²所¨´有®D函¡¥数ºyvoid clear(void){total=0;}void save(void){printf("Input Save Amount:");float amount;scanf("%f",&amount);scanf("%*c");total+=amount;}void get(void){printf("Input Get Amount:");int amount;scanf("%d",&amount);scanf("%*c");if(amount>total){printf("Amount Error!\n");get();}elsetotal-=amount;}void inquiry(void){printf("You balance is: %f.\n",total);}void menu(){printf("+------------------------------+\n");printf(" Welcome to Bank of Set \n");printf("+------------------------------+\n");printf("[1]Press 1 to Save money.\n");printf("[2]Press 2 to inquiry balance.\n");printf("[3]Press 3 to get money.\n");printf("[4]Press 4 to clear account.\n");printf("C hoose:");int i;scanf("%d",&i);scanf("%*c");switch(i){case 1:save();break;case 2:inquiry();break;case 3:get();break;case 4:clear();break;default:printf("Press Error!\n");menu();break;}}void Exit(){printf("Press <R> to return menu.\n");printf("Press <Q> to quit.\n");char ch;scanf("%c",&ch);scanf("%*c");//去除缓冲区里面输入的回车键if(ch=='Q'||ch=='q')exit(0);}int main(){while(1){menu();Exit();system("cls");//清屏}return 0;。

C语言课程设计ATM机模拟操作附源码

C语言课程设计ATM机模拟操作附源码

C语言课程设计A T M机模拟操作附源码Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】C语言-ATM机模拟操作程序实现功能点:a.查询:查询帐户的存款余额。

按任意键返回主菜单;b.取款:输入100、500、1000、2000、5000、其它金额为取款金额,取款金额不超过帐户余额,操作后帐户余额应相应减少,之后可返回主菜单;c.存款:输入100、500、1000、2000、5000、其它金额为存款金额,存款金额不超过20000元,操作后帐户余额应相应增加。

之后可返回主菜单;d.转帐:输入一个帐户号,程序判断与文件信息是否相符,储户确认无误后,再输入100、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过帐户余额,操作后帐户余额应相应减少。

之后可返回主菜单;e.修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。

之后可返回主菜单;f.退出:退出系统;g.帮助:增加趣味性;h.存款时,可正可负,正表示存款,负表示取款;i.帐户信息存放在文件,储户存取款记录保存在中;(在目录下创建这两个文件)j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用;k.储户一天内输错密码的次数不能超过3次,否则无法进入系统;l.有效避免输入存款金额、取款金额为负数等异常情况的出现。

较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。

是否超过余额,是否不符合格式,是否为冲突操作。

(2)程序运行截图及说明(每图限50到100字);进入程序,menu1可选择登录、注册功能。

选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。

若登录失败,则重新选择。

选择注册,输入账号密码,写入文件中。

进入menu2,有五大功能选择,输入对应的序列号进入。

用c语言编写的一个ATM取款机程序

用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机的编写程序

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你的账单为:******。

c语言atm机编程代码

c语言atm机编程代码

c语言atm机编程代码下面是一个简单的C语言ATM机编程代码示例:#include <stdio.h>// ATM机账户结构体typedef struct {int account_number;float balance;} Account;// 初始化账户信息void init_account(Account *account, int acc_no, float bal) { account->account_number = acc_no;account->balance = bal;}// 存款void deposit(Account *account, float amount) {account->balance += amount;}// 取款void withdraw(Account *account, float amount) {if (account->balance >= amount) {account->balance -= amount;} else {printf("余额不足!\n");}}// 查询余额void check_balance(Account *account) {printf("当前余额:%.2f\n", account->balance); }// 主函数int main() {Account my_account;int choice;float amount;// 初始化账户信息init_account(&my_account, 123456789, 5000.0);// ATM机操作菜单printf("欢迎使用ATM机!\n");printf("请选择操作:\n");printf("1. 存款\n");printf("2. 取款\n");printf("3. 查询余额\n");printf("0. 退出\n");do {printf("请输入操作代码:");scanf("%d", &choice);switch (choice) {case 1:printf("请输入存款金额:");scanf("%f", &amount);deposit(&my_account, amount); break;case 2:printf("请输入取款金额:");scanf("%f", &amount);withdraw(&my_account, amount); break;case 3:check_balance(&my_account);break;case 0:printf("退出程序!\n");break;default:printf("无效的操作!\n");}} while (choice != 0);return 0;}。

自动取款机(ATM)模拟程序(C#控制台应用程序)

自动取款机(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的本质就是一组帐号的组合,并负责管理帐号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过设计一个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.帐户信息存放在文件,储户存取款记录保存在中;
4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。

5.附加功能:
储户一天内输错密码的次数不能超过3次,否则无法进入系统;
应避免输入存款金额、取款金额为负数等异常情况的出现。

二、程序已经实现的功能点
实验要求均已实现。

此外还有:
1.卡号、密码位数输错时,提示并返回重新输入,
2.简化取款时的输入
3.转账时,转账账户为原账户时,提示并返回重新输入
4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统
5.在查询模块中加入了存取记录明细查询
三、程序运行截图及说明
1.登陆模块
1)卡号不为16位时,输出提示并返回重新输入
2)卡号不存在时,输出提示并返回重新输入
3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号
4)密码连续输错三次时,锁定卡号,今日无法登录
2.登录后的系统主菜单
3.查询模块
1)查询模块主菜单
2)查询明细
4.取款模块
1)当余额不足50时,无法进入取款模块
2)取款模块主菜单
3)便捷取款
4)手动输入取款金额
输错时,返回重新输入
5)取款后的菜单
6)取款完成后选择显示余额
5.存款模块
1)解决输入错误问题
2)存款成功
6.密码修改模块
1)原密码输错时,返回重新输入,不提供退出功能
2)密码位数输错、两次输入新密码不一致时,返回重新输入
3)输入无误时
7.转账模块
1)转入卡号位数输错时,提示并返回重新输入
2)未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入
3)转入卡号与当前卡号相同时,输出提示
4)输出转入卡账户的部分用户名
5)解决转账金额输错的问题
6)转账成功
四、采用的主要技术
1.宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替
2.链表:账户信息采用链表结构,内存动态分配,使用内存无限制,可以扩展到所有可以使用的内存
3.switch多分支选择结构
4.文本文件的读写
5.利用头文件,简便地获取系统日期
6.system()函数和fflush()函数的简单使用
五、设计心得
1.各函数的功能要相对独立,逐步求精。

2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体内被意外修改
附:程序代码
/***
* 运行本程序前,请在本程序根目录下建立文件“”,格式如下:
* 卡号1(16位)姓名1 账户余额1 密码1
* 卡号2(16位)姓名2 账户余额2 密码2
* ……
****/
#include <>
#include <>
#include <>
#include <>
#define PR printf
typedef struct
{
short int year;
short int month;
short int day;
}Date;.\n");
if (!(fp = fopen("", "r")))
{
PR("\07");.”提示
}
/**********登录**********/
void Login()
{
do
{
char no[17];
system("cls");
PR("\n\n\n\n\t\t\t请输入16位卡号:");
fflush(stdin);
gets(no);
if (strlen(no) != 16)
{
PR("卡号应为16位\n");
system("pause");
system("cls");
continue;
}
if (LockAccountTopic(no))
{.\n");
now_acc->balance -= money;
Save();
Log(-money, now_acc->no);
PR("取款成功\n\n");
system("pause");
}
/**********存款**********/
void Depositing()
{
long money;
do
{
PR("请输入存款金额(50的倍数),单次存款金额不得超过20000元:");
fflush(stdin);
scanf("%ld", &money);
if (money < 0 || money > 20000 || money % 50)
{.\n");
now_acc->balance += money;
Save();.\n");
now_acc->balance -= money;
aimsite->balance += money;
Save();//保存账户数据
Log(-money, now_acc->no);//当前账户存取记录
Log(money, aimsite->no);//转入卡存取记录
PR("转账成功\n\n");
system("pause");
break;
} while (1);
}
/**********掩盖部分用户名**********/
char *CoverUpName(const char *name)
{
char temp[20];
strcpy(temp, name);
int words = 0;//用于存放姓名的字数
for (char* i = temp; *i; i += 2)
words++;//计算姓名的字数
switch (words)
{
case 2:
temp[0] = '*', temp[1] = '*';//当姓名字数为2时,掩盖姓
strcpy(temp + 1, temp + 2);//消除一个*号
break;
case 3:
temp[2] = '*', temp[3] = '*';//当姓名字数为3时,掩盖名字中的第一个字
strcpy(temp + 3, temp + 4);//消除一个*号
break;
default:
temp[0] = '*', temp[1] = '*', temp[2] = '*', temp[3] = '*';//姓名字数大于3时,掩盖姓和名字中的第一个字
strcpy(temp + 2, temp + 4);//消除两个*号
}
return temp;
}
/**********释放链表空间**********/
void FreeData()
{
Account* t;
while (head)
{
t = head;
head = head->next;
free(t);
}
}。

相关文档
最新文档