C语言模拟ATM机
C语言ATM自动存取款机全套代码
C语言ATM自动存取款机全套代码#include#include#include#include#include#define N 6char b[N]={'8','8','8','8','8','8'};//存放密码int money=5000;int securitytime=3;void Login();void JieMian();void SaveMoney();void GetMoney();void Query();void Return();//密码验证函数,验证成功返回1,否则返回0void Login(){char a[20],ch; //用户登录密码,用以验证int i=0,n=1,k;printf("\n\t\t欢迎使用ICBC ATM自动存取款机\n"); printf("\n请输入密码:");for(n=1;n<=5;n++){while((a[i]=getch())!=13){ i=i+1;printf("*");//将用户输入的密码以*显示}for(k=0;k<6;k++)if(a[k]!=b[k]) break;if (k==6){printf("\n密码正确,请继续!!\n");JieMian(); }else//printf("\n密码错误,请重新输入:\n");printf("\n密码错误,您还有%d次机会,请重新输入:\n",5-n);}printf("\n您已经输入5次错误,您的卡将被没收,请去相关网点办理!\n");exit(1);}// 界面设计void JieMian(){int SelectKey;//system("cls");//清屏幕函数while(1){puts("\n= = = = = = = = = = = = = = = =");puts("| 请选择相应功能: |");puts("| 1. 修改密码PassWord |");puts("| 2. 查询功能Query |");puts("| 3. 取款功能Get Money |");puts("| 4. 存款功能Save Money | ");puts("| 5. 转帐功能Trans Money | ");puts("| 6. 退出功能Return | ");puts("\n= = = = = = = = = = = = = = = = ");printf("\n请选择功能:");scanf("%d",&SelectKey);switch(SelectKey){ case 1:printf("\n修改密码功能\n");//PassWord();break;case 2:printf("\n查询功能\n");Query();break;case 3:printf("\n取款功能\n");GetMoney();break;case 4:printf("\n存款功能\n");SaveMoney();break;case 5:printf("\n转帐功能\n");//Trans();break;case 6:printf("\n退出功能\n");Return();break;}}}/*Query查询功能*/void Query(){system("cls");puts("================================== ==");printf("| Your Query balance is $%ld |\n",money);puts("| Press any key to return... |");puts("================================== ==");return;}/*GetMoney取钱功能*/void GetMoney(){char GetMoney;char kahao[20];long y;//输入待转入的相关信息//卡号,姓名do{puts("=================================");puts("| Please select GetMoney: |");puts("| 1. $100 |");puts("| 2. $200 |");puts("| 3. other |");puts("| 4. Return |");puts("=================================");GetMoney = getch();}while(GetMoney!='1'&&GetMoney!='2'&&GetMoney!='3' && GetMoney!='4');switch(GetMoney){case '1':system("cls");if(money>100){puts("================================== =========");puts("| Your GetMoney is $100,Thank you! |");puts("| Press any key to return... |");puts("===========================================");money=money-100;printf("\n您的余额为%d",money);}else printf("\n您的余额不足!");getch();break;case '2':system("cls");if(money>200){puts("================================== ======");puts("| Your GetMoney is $200,Thank you! |");puts("| Press any key to return... |");puts("================================== ======");money=money-200;printf("\n 您的余额为%d",money);}else printf("\n您的余额不足!");getch();break;case '3':system("cls");printf("please get some money:");scanf("%ld",&y);if(money>y){money=money-y;printf("\n您的余额为%d",money);}else{printf("\n您的余额不足!");printf("\n您的余额为%d",money);}getch();break;case '4': break;}return;}/*SaveMoney存钱功能*/void SaveMoney(){ char SaveMoney;long y;do{system("cls");puts("================================== ========");puts("| Please select Save Money: |");puts("| 1. $100 |");puts("| 2. $500 |");puts("| 3. $1000 |");puts("| 4. other |");puts("| 5. Return |");puts("================================== ========");SaveMoney = getch();}while(SaveMoney!='1'&&SaveMoney!='2'&& SaveMoney!='3'&&SaveMoney!='4'&&SaveMoney!='5');switch(SaveMoney){ case '1':{{system("cls");puts("================================== =========");puts("| Your save money is $100,Thank you! |");puts("| Press any key to return... |");puts("================================== ========");}money=money+100;printf("\n您的余额为%d",money);getch();}break;case '2':{system("cls");puts("================================== ============");puts("| Your Save Money is $500,Thank you! |");puts("| Press any key to return... |");puts("================================== ============");money=money+500;printf("\n您的余额为%d",money);getch();}break;case '3':{system("cls");puts("============================================");puts("| Your Save Money is $1000,Thank you! |");puts("| Press any key to return... |");puts("================================== ==========");money=money+1000;printf("\n您的余额为%d",money);getch();}break;case '4':{system("cls");puts("================================== ===========");puts("| Your Save some Money,Thank you! |");puts("| Press any key to return... |");puts("================================== ===========");puts("please save some money:");scanf("%ld",&y);if(y%100!=0)printf("该存款机只能处理整百的操作,请核查!!");else{money=money+y;printf("\n您的余额为%d",money);}getch();}break;case '5':break; }return;}/*Return,退出功能*/void Return(){system("cls");puts("================================== ==");puts("| Thank you for your using! |");puts("| RETURN! |");puts("================================== ==");exit(1);}//主函数int main(){Login();}上一页下一页。
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.帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
5.附加功能:●储户一天内输错密码的次数不能超过3次,否则无法进入系统;●应避免输入存款金额、取款金额为负数等异常情况的出现。
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语⾔了,⽼师布置来了作业,⽤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你的账单为:******。
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)模拟程序一、需求我们需要设计一个具备如下功能的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的本质就是一组帐号的组合,并负责管理帐号。
[VIP专享]C语言课程设计…………银行自动存取款机模拟
需求分析: 本程序设计的任务为银行自助存取款机,程序要求实 现 atm 机的基本功能,如 开户.查询.存款.取款.转账. 容而生成操作日志。 2.概要设计: 数据类型:int,char,FILE. 主程序流程:int main () 1:进入 dl()函数。 2:核对输入账户与密码。 3.核对成功则进入 dljm()函数。 4.选择操作功能。 5.完成操作,回到功能选择一栏。 6.可选择退卡以结束所有操作。 标准函数名称和自定义名称:
Void dl ()
Void dljm ()
int level(BinTreeNodlesevt}r*Beutsl,icnBt(rtrTuiontrcaoTetgtert,_eyapNnpetg)oy;oeN_pddinoeeodtd;fde*esreafc*ttrphsB*au{l)ti;cilrn/duh/tT;ciB/lr/tdo1eiTt;u1ea//NcnrNgoto_loiu(fdn(dtnbe*oetpivdlt{(roe(e}TbidpEititrcfrl(ero!-pbmu>tintrTvritgaey-l(>hlpbulteeie,rtrf=xdt)e,=apr{xkextta,)rt;ru{;k,kr)sd+n;tra+;u1t;ac}0txyBpieTNxv},ooidi{ndet&m*lkac)hi}nil(de)}l;s/e/ js+tr}+uj;cBf+BtoB.+Bid.r.L(;+adikTe+taanN=;t[agojB]e[tdkh=l.se+L+eA1e*+]nr.i;dfc=g(d.-[d;{aiB]1a/it;f/a.;t(dkaA[}ia[]>.kBtdB<}=a];aii.T[BLjt+;aNke.+d[Loni;-]aed-g>t)netahg,B[jt*]+h.)wBd+]{avhi;T=otilareiAedi[n(Be.i{dtm;.<Laive=etAoarngi.0[dLgie],e;jt2Ch=n(o{Sg-0ut9q1h,n/kAL])/t)/iL/[;2s1/e1AtA…aABBmf"…,.S(h+Bq"mniLT6m+irsnet8]e&mhBTen),amidn+dtn&a2Ot*acx(7o10u)n+t)0x{11*ixf=0( nT+o1)d*{ex2i_1f c(+(o!uT2/xn/-*10>tx+l2+cxh=1il;+dnx)o&2/d/h&e=tt_(pn!c:To0o//-duw>1enrw*_c2t/wchx-oi0.1ldu;xon)/)1c*t;cinx6o42.1ucleonfmtt+d/+5ap;t-a5//r7iLg9Cihs4ot8lNuet5nmof9ttdreLp4iegme.=h*ap3tMfAmBol(a[aTrTlit]ex(-;(><i2)nAlccetl[ha0i]}ise=l=ds1,0}A…Tc;[yoine2pu<-nT6ein=-yH>12tp)(]Te;v;enn[Co1-A-ti1o3m1d[u]nA)pHin-[/;in(tv-kL21]ene;]1reyais=A+)nef=[+(t-nm(k1Ta])eAT-p){y>nyA;r-p%c2eh…1iAld3e[2,1]3c,2e1oi20Vn0(u3e=bt×n4i{)n3t1a5)B0);,5b20A}{7,B(2ce[2a150,(l0)ds0cn(a20e,a)]×ie[13j1)1cnr2,a17Af2e0A4,i58g2jtB]b1u(B03}(a5r4,21[En)]06a1B;=07A51([}{0]b937S<A/3)56/HaL([06C0c,sT1b3)]uo[A.>81A0c5u,493]cBn<B0.]=taC5H[L8(0,A1De(4g]k/,Aa5>2EBef0,[)Fy,<]*4C[G)G]b[=2B1,,DHk)g+[]e>,I1AEJy,/[<(,81%C1c]-[8,a5bD1)]C>3C]B,D1<[D1]2Bd62,GFc3E>=41A,V5</1I5EdH475,Gf1231>01+0*J5,91<420G4+0e*30G241,7W1d+*787>13P031,4*9<1L74=41f=0+,515a24953>**/546,17<5+15=0g37413,2*0c5572>/4+517,5<6451*g524,0d+3>956,*5<0315f9+2,3e5W12>14P,12*<3L157g+=56,52f13053>105*693}64*1,{73+80217+9596510*77046873+1*71249264+*9503182+79012*176208590=*2092+8123169831731237*793}W2+531P352L5*0313173+s3T3125158*,21T2052=5,2…915W063…303P5,LTS Tini k1i(2i={a1b,2c,d…e…fg}S0)1,1k10in1i011k11k10n+1kk1Pn21>r+0ikm…00…11+1k0s1=0n11+n21K…ru…snkas1l ns,s=nk,nk a11a121a02K1)aru2s2kaa=2l203*:9(a1i+03/1jA2-03aB(3a131+Aa12=3B+42[…0+]3A…+a3aij1+n3inn149-+iH10-41au+jnfi84+fnm4+16a5B8n+58F1544):52=5706305306.986,2T76:0150,D811:00148110683171,F10ST6:06D413S024H515,1H12:007412101402H*1291u60+22f{f7m4*63a2+n58307*71836+21102*72306+722774*0674128+493}*()4+86*312=513219 5:13/5671(130+7822+6261+p03a1+341352+401143,41)p0=83,21a.8425,913,,p66331:121,0A1a24B13G,,CP4pJ9AD3KG21EHD12AFDaJ3GBH,EPaDHKBApGIBM3J2HEKIF1AJMCKCAEFCMFIIM
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(自动柜员机)界面设计
项目目标
知识目标 了解函数的概念,掌握函数定义与说明的方法,掌握函数调用中参数的传递方法,掌握函数的调用方法,熟悉函数的编程与使用方法。能力目标 培养学生使用集成开发环境进行软件开发、调试的综合能力。素质目标 使学生养成良好的编程习惯,具有团结协作的团队精神,具备岗位需要的职业能力。
分析:实现ATM机上的普通功能,当进入柜员机界面后,程序由main主函数、Query查询余额函数、Get Money取款函数、Save Money存款函数和返回Return函数组成。
任务三:ATM查询功能:Query()
case '1':system("cls");puts("================================");puts("| Your Query balance is$%6d |\n",x);puts("| Press any key to return... |");puts("================================");ge务一:ATM密码验证功能:PassWord()任务二:ATM自动柜员机操作主界面任务三:ATM查询功能:Query()任务四:ATM取款功能:Get Money()任务五:ATM存款功能:Save Money()任务六:ATM退出功能:Return()
任务一:ATM密码验证功能:PassWord()
分析:使用Query语句实现查询功能。
任务四:ATM取款功能:Get Money()
case '2':do{system("cls");puts("========================");puts("| Please select GetMoney: |");puts("| 1. $100 |");puts("| 2. $200 |");puts("| 3. other |");puts("| 4. Return |");puts("========================");GetMoney = getch(); }while(GetMoney!='1'&&GetMoney!='2'&&GetMoney!='3' && GetMoney!='4');switch(GetMoney){ case '1':system("cls"); puts("======================"); puts("| Your GetMoney is $100,Thank you! |"); puts("| Press any key to return... |"); puts("======================");
C语言课程计…………银行自动存取款机模拟
作者:周鸣需求分析:本程序设计的任务为银行自助存取款机,程序要求实现atm机的基本功能,如开户.查询.存款.取款.转账.容而生成操作日志。
2.概要设计:数据类型:int,char,FILE.主程序流程:int main ()1:进入dl()函数。
2:核对输入账户与密码。
3.核对成功则进入dljm()函数。
4.选择操作功能。
5.完成操作,回到功能选择一栏。
6.可选择退卡以结束所有操作。
标准函数名称和自定义名称:Void dl ()V oid dljm ()V oid cx()V oid ck()V oid qk()V oid zz()3.主程序的流程及各函数之间的流程关系。
(用图来描述)进入dl函数输入账号输入密码进入dljm函数选择atm机功能1 2 34 5进入cx函数进入qk函数进入ck函数进入zz函数进入tk函数开始程序#include<stdio.h>#include<stdlib.h>int x,k;void dl();int dljm();void cx();void qk();void zz();void ck();void tk();FILE *fp;FILE *fg;struct atm{char name[10];int account;short password;float money;}at[10]={{"AA",1,1,4000},{"BB",2,2,4000},{"CC",3,3,4000},{"DD",4,4,4000},{"EE",5,5,4000},{"GG",6,6,4000},{"HH",7,7,4000},{"II",8,8,4000},{"JJ",9,9,4000},{"kk",10,10,4000}};void main(){char filename[]="zhouming.txt";char mode[]="w",b[]="AA 1 1 4000 BB 2 2 4000 CC 3 3 4000 DD 4 4 4000 EE 5 5 4000 GG 6 6 4000 HH 7 7 4000 II 8 8 4000 JJ 9 9 4000 KK 10 10 4000";clrscr();if((fg=fopen("x.txt","a+"))==NULL){printf("cannot open the file zhouming!strike any exit");getch();exit(1);}dl();if((fp=fopen(filename,mode))!=NULL){fputs(b,fp);fclose(fp);} }void dl(){int account,i,j;short password;printf("please enter the card number:");fprintf(fg,"please enter the card number:\n");scanf("%d",&account);fprintf(fg,"%d\n",account);if(account>10)dl();for(k=0;k<=9;k++){if(account==at[k].account){ x=k;fprintf(fp,"please enter the card number:%d\n"); printf("please enter password:");fprintf(fg,"please enter password:\n");scanf("%d",&password);fprintf(fg,"%d\n",password);for(i=1;i<4;i++){if(password==at[k].password){ fprintf(fg,"please enter the password:%d\n");printf("log in successfully,please select operation\n"); fprintf(fg,"log in successfully,please select operation\n"); dljm();break;}else{printf("password input error\n");printf("enter password again!");fprintf(fg,"password input error\n");fprintf(fg,"enter password again!\n");scanf("%d",&password);fprintf(fg,"%d\n",password);while(i==3){system("cls");main(); } } }}}}int dljm(){int z;printf("query balance-----------1\n");printf("withdrawals-----------2\n");printf("deposit----------3\n");printf("transfer----------4\n");printf("take the card--------5\n");fprintf(fg,"query balance-----------1\n");fprintf(fg,"withdrawals-----------2\n");fprintf(fg,"deposit------------3\n");fprintf(fg,"transfer---------4\n");fprintf(fg,"take the card-----------5\n");while(1){printf("\n\n please enter serial number:");fprintf(fg,"\n\n please enter sercial number:");scanf("%d",&z);fprintf(fg,"%d\n",z);switch(z){case 1:{fprintf(fg,"query balance\n");cx();break;}case 2:{fprintf(fg,"withdrawals\n");qk();break;}case 3:{fprintf(fg,"deposit \n");ck();break;}case 4:{fprintf(fg,"transfer\n");zz();break;}case 5:{fprintf(fg,"take the card\n");tk();break;}default:{fprintf(fg,"operation sequence number is illegal");printf("operation sequence number is illeagal!");}return; } }}void cx(){printf("%s your card balance:%7.2f yuan",at[k].name,at[k].money); fprintf(fg,"%s your card balance:%7.2f yuan",at[k].name,at[k].money);}void qk(){float a;printf("please enter withdrawal amount:");fprintf(fg,"please enter withdrawal amount:");scanf("%f",&a);fprintf(fg,"%f\n",a);if(a>at[k].money){printf("lack of balance");fprintf(fg,"lack of banlance");}else{printf("you have taken out %7.2f yuan ",a);fprintf(fg,"you have taken out %7.2f yuan",a);at[k].money=at[k].money-a;} }void zz(){float a;int t,account,i=1;printf("please enter transfer amount:");fprintf(fg,"please enter transfer amount:");scanf("%f",&a);fprintf(fg,"%\nf",a);if(a>at[k].money){printf("lack of money,please input again!");fprintf(fg,"lack of money,please input again!");scanf("%f",&a);fprintf(fg,"%f\n",a);}printf("please enter the transfered bank account:");fprintf(fg,"please enter the transfered bank account:");scanf("%d",&account);fprintf(fg,"%d\n",account);while(i!=3){ for(t=0;t<=9;t++){ if(account==at[t].account){ x=t;at[k].money=at[k].money-a;at[t].money=at[t].money+a;printf("transfer success !");fprintf(fg,"transfer success!");dljm();}if(t>9)break;}i=i+1;printf("error! input again!\n");fprintf(fg,"error!input again!\n");scanf("%d",&account);fprintf(fg,"%d\n",account);if(i==3){ system("cls");main();}}}void ck(){int a;int i;printf("please put the money into the slot\n");fprintf(fg,"please put the money into the slot\n");for(i=0;i<1000000000000000;i++);scanf("%d",&a);fprintf(fg,"%d\n",a);printf("please make sure the number of bill !\n");fprintf(fg,"please make sure the number of bill!\n");at[k].money=at[k].money+a;fprintf(fg,"operation is successful");printf("operation is successful"); }void tk(){ int i,j;printf("please get back your card \n");fprintf(fg,"please get back your card\n");for(i=0;i<1000000000000000;i++);system("cls");main();printf("enter ,if you want go out ");scanf("%d",&j);if(j==100)exit(1);}4.调试分析:(1)调试发现许多语法或逻辑错误,然都已搞定。
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; // 登录失败}登录函数会提示用户输入用户名和密码,并与已有的用户信息进行匹配。
C语言程序设计报告(模拟ATM取款机)
仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号 4317指导教师王成仲恺农业工程学院教务处制目录1 需求分析........................................................... 错误!未定义书签。
2 系统总框图和功能模块说明........................................... 错误!未定义书签。
系统总框图...................................................... 错误!未定义书签。
功能模块说明.................................................... 错误!未定义书签。
3 系统设计........................................................... 错误!未定义书签。
主要结构体....................................................... 错误!未定义书签。
主要功能函数...................................................... 错误!未定义书签。
关键函数的流程图................................................. 错误!未定义书签。
4 系统调试........................................................... 错误!未定义书签。
5 总结............................................................... 错误!未定义书签。
6 源程序清单......................................................... 错误!未定义书签。
c语言课程设计ATM机
c语言课程设计ATM机一、教学目标本章节的教学目标是让学生掌握C语言编程的基本知识,能够运用C语言设计简单的ATM机模拟程序。
具体来说,知识目标包括:理解C语言的基本语法、数据类型、运算符、控制结构等;技能目标包括:能够使用C语言编写并调试程序,掌握基本的编程技巧;情感态度价值观目标包括:培养学生对计算机编程的兴趣,提高学生解决问题的能力。
二、教学内容本章节的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等。
具体安排如下:1.第一课时:介绍C语言的基本语法和数据类型,讲解变量、常量的声明和使用。
2.第二课时:讲解运算符的用法,包括算术运算符、关系运算符、逻辑运算符等。
3.第三课时:介绍控制结构,包括条件语句(if-else)和循环语句(for、while)。
4.第四课时:讲解函数的定义和调用,包括主函数和用户自定义函数。
5.第五课时:讲解数组和字符串的基本操作,包括数组的声明和使用、字符串的输入输出等。
6.第六课时:介绍指针的概念和用法,包括指针的声明、指针与数组、指针与函数等。
7.第七课时:讲解结构体和文件的操作,包括结构体的声明和使用、文件的打开、读写等。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法相结合的方式。
具体包括:1.讲授法:教师讲解C语言的基本语法、数据类型、运算符、控制结构等知识点。
2.案例分析法:通过分析实际案例,让学生理解并掌握编程技巧。
3.实验法:安排上机实验,让学生动手编写程序,巩固所学知识。
4.小组讨论法:分组进行讨论,培养学生团队合作精神和问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本章节将准备以下教学资源:1.教材:《C语言程序设计》或《C语言入门教程》等。
2.参考书:《C语言编程实践》、《C语言深度探索》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习平台等。
4.实验设备:计算机、编程软件(如Code::Blocks、Visual Studio等)。
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)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
5.附加功能:●储户一天输错密码的次数不能超过3次,否则无法进入系统;●应避免输入存款金额、取款金额为负数等异常情况的出现。
三、程序已经实现的功能点实验要求均已实现。
此外还有:1.卡号、密码位数输错时,提示并返回重新输入,2.简化取款时的输入3.转账时,转账账户为原账户时,提示并返回重新输入4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统5.在查询模块中加入了存取记录明细查询四、程序运行截图及说明1.登陆模块1)卡号不为16位时,输出提示并返回重新输入2)卡号不存在时,输出提示并返回重新输入3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号4)密码连续输错三次时,锁定卡号,今日无法登录2.登录后的系统主菜单1)查询模块主菜单2)查询明细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.利用time.h头文件,简便地获取系统日期6.system()函数和fflush()函数的简单使用六、设计心得1.各函数的功能要相对独立,逐步求精。
2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体被意外修改附:程序代码/**** 运行本程序前,请在本程序根目录下建立文件“accounts.txt”,格式如下:* 卡号1(16位) 1 账户余额1 密码1* 卡号2(16位) 2 账户余额2 密码2* ……****/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define PR printftypedef struct{short int year;short int month;short int day;}Date;//日期typedef struct Account{char no[17];char name[20];double balance;char password[7];struct Account* next;}Account;typedef struct{char no[17];Date date;double number;}Record;//记录Account *head = NULL;//账户信息链表表头Account *now_acc = NULL;//当前账户/************函数申明************/void InitializeAccount();//导入账户信息//--------------------------------------char LockAccountT opic(const char *no);//检测账户是否被锁定void LockAccount(const char *no);//锁定账户//--------------------------------------void Login();//登录Account* FindbyNo(const char *no);//查找卡号对应账户信息在链表中的地址//--------------------------------------void Demand();//查询主菜单void PrintBalance();//输出余额void Printetail();//输出明细//--------------------------------------void Modifiy();//修改密码//--------------------------------------void Withdrawal();//取款主界面void WithdrawalOt(long money);//取款//--------------------------------------void Depositing();//存款//--------------------------------------void Transfer();//转账char *CoverUpName(const char *name);//掩盖部分用户名//--------------------------------------void Log(double money, const char *no);//将存款记录写入文件中void Save();//保存账号信息void FreeData();//释放链表空间//--------------------------------------int main(){char choose;InitializeAccount();//导入账户信息Login();//登录do{system("cls");PR("\t\t \n");PR("\t\t 请选择服务\n");PR("\t\t+-+---------+ +---------+-+\n");PR("\t\t|5|\33转账| |查询\32|1|\n");PR("\t\t+-+---------+ +---------+-+\n\n");PR("\t\t +---------+-+\n");PR("\t\t |取款\32|2|\n");PR("\t\t +---------+-+\n\n");PR("\t\t +---------+-+\n");PR("\t\t |存款\32|3|\n");PR("\t\t +---------+-+\n\n");PR("\t\t+-+---------+ +---------+-+\n");PR("\t\t|0|\33退出系统| |修改密码\32|4|\n");PR("\t\t+-+---------+ +---------+-+\n\n");PR("请选择服务:");fflush(stdin);choose = getchar();switch (choose){case '1': Demand(); break;//查询case '2': Withdrawal(); break;//取款case '3': Depositing(); break;//存款case '4': Modifiy(); break;//修改密码case '5': Transfer(); break;//转账case '0': FreeData(); return 0;//退出default:printf("输入错误,请重新选择\n"); //解决用户可能的输入错误system("pause");}} while (1);return 0;}/**********导入账户信息**********/void InitializeAccount(){FILE *fp;Account temp;PR("系统初始化中,请稍侯...\n");if (!(fp = fopen("accounts.txt", "r"))){PR("\07");//响铃PR("读取信息失败,请在本程序根目录建立信息文件(accounts.txt)。
格式如下:\n");PR("卡号1(16位) 1 账户余额1 密码1\n");PR("卡号2(16位) 2 账户余额2 密码2\n");PR("……\n");exit(0);}while (fscanf(fp, "%s %s %lf %s", temp.no, , &temp.balance, temp.password) == 4){//读入账户信息Account *t = head;head = (Account*)malloc(sizeof(Account));*head = temp;head->next = t;}fclose(fp);system("cls");//清除“系统初始化中,请稍侯...”提示}/**********登录**********/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 (LockAccountT opic(no)){//当该卡号被锁定时PR("\07");//响铃PR("\n\n您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。