C语言程序设计报告材料(模拟ATM取款机)

合集下载

C语言专周ATM模拟系统

C语言专周ATM模拟系统

C语言专周——ATM模拟系统实验报告指导老师:班级:学号:姓名:时间:一、实验目的:通过专周的学习和实践,认识到C语言是以函数为模块,让学生掌握基本常用的编程语句和方法,培养学生的动手能力,让学生在实践当中发现问题,解决问题,以及认识到自己的不足并且能够及时改正,从而起到提高学生水平的作用。

二、实验要求:1、要用函数调用语句;2、每执行完余额查询、密码修改、取款、转账要有是否继续语句;3、写出完整的ATM机运行程序;4、完成实验报告三、实验环境:编写程序的地方是学校的学生机房;所运用的编写软件是VC++6.0;四、程序的总体框架图ATM机系统余额查询密码修改取款转账五、部分模块流程图定义帐号密码佘额 r=0输入账号A判断账号是否正确 输入密码判断密码是否正确退出系统开始YESNO主函数:NOYES调用f1函数 调用f2函数调用f3函数 调用f4函数判断是否继续YES退出系统NOr++判断r 是否为3NO退出系统YES输出选择的语句调入佘额判断佘额是否为0调用f0看返回值是否为0调用f5进行返回佘额调用f0看返回值是否为0调用f0看返回值是否为0调用f5进行返回佘额调用f5进行返回佘额YESNO765 判断取款是否为50和100的倍数NONONOYESYES YESYES返回佘额NO取款函数:退出系统…………输出选择输入金额输出输入的金额不正确调入帐号佘额定义b 为当前帐号对应的佘额转账函数:判断输入的帐号是否为当前帐号YESNO判断输入的帐号是否存在YESNO判断2次输入的帐号是否相同YES输入转帐金额,调用f5函数进行佘额的返回判断返回的金额是否变化返回佘额YESNO输入帐号输出不能给自己转账输出确认对方帐号输出帐号错误输出两次帐号不一致输出转帐成功六、程序和对程序的具体分析 :#include <stdio.h> #include <stdlib.h> void f1(int a); int f2(int a);int f5(int g,int a); int f3(int g); int f0(int n); int m,q,w=0;int f4(int a0,int a1,int a2,int a3,int a4,int c0,int c1,int c2,int c3,int c4,int p,int a);void main () {int a[5]= {123451,123452,123453,123454,123455}; int b[5]={123451,123452,123453,123454,123455}; int c[5]={50000,50000,50000,50000,50000};int i,j;m=0; \*m 为控制运行一次程序取钱不超过20000的变量*\ printf("欢迎使用A**\n 进入系统请输入帐号\n");调入密码判断密码是否为六位数确认新密码密码修改函数:判断两次是否一致密码变为输入的值,输出密码修改成功返回密码YESYESNONO输入新密码输入密码错误(由于写标准的流程图不好写且对读程序的帮助不大,所以写成通俗的流程图)两次输入不一致scanf("%d",&i);int p;for(p=0;p<5;p++)if(i==a[p])break;if(p==5)exit(0); \*从for到这是找到帐号对应的a[]假如p会为5则退出*\int r=0; \*r是控制输入错误密码次数*\loop3: if(r==3) \*当r==3时为已输入错误密码3次退出糸统*\exit (0);elseprintf("请输入密码\n");scanf("%d",&j);if(j==b[p]) \*输入的密码正确执行下面语句*\{loop1: printf("************************************************\n1 查询余额\n2 密码修改\n3 取款\n4 转账\n************************************************\n"); scanf("%d",&i);switch(i){case 1:f1(c[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1; \*执行完f1后看是否继续(下一样)*\elseexit (0);case 2:b[p]=f2(b[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);case 3:c[p]=f3( c[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);case 4:c[p]=f4(a[0],a[1],a[2],a[3],a[4],c[0],c[1],c[2],c[3],c[4],a[p],c[p]);{for(j=0;j<5;j++) \* w是全局变量初值为0当执行f4后要是转帐成功后,为转入钱 if(a[j]==w) 的帐号for语句为找到帐号对应的余额*\c[j]=c[j]+q;}printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);default:exit(0);}}else {r++;goto loop3;} \*当密码错误时r+1返回loop3*\}void f1(int a) \*查询余额*\{printf("您的当前余额是:%d",a);}int f2(int a) \*密码修改*\{int b,c;printf("请输入新密码\n");scanf("%d",&b);if(b<=999999&&b>=100000&&b!=a) \*密码要六位且首位不为0*\printf("确认新密码\n" );else{printf("输入新密码错误\n");goto loop2;}scanf("%d",&c);if(b!=c){printf ("密码错误!!!!\n两次输入的密码不同");loop2: return a;}else{printf ("密码修改成功\n");return b;}}int f5(int g,int a) \*钱额的减*\{{g=g-a;printf("交易成功!!!");}elseif(a==0)printf("输入错误\n");elseprintf("余额不足!!!!!");return g;}int f3(int g) \*取款*\{if(g==0){printf("余额为0!!!!!");return g;}int i,j;printf("**************************************************************\n");printf("1是100, 2是200, 3是300, 4是500, 5是1000, 6是2000, 7是其他金额\n");printf("**************************************************************\n");scanf("%d",&i);if(i==1){if(f0(100))return g;else \*取钱时先看取钱总是否超过20000,g=f5(g,100); 超过进行返回佘额,不运行f5佘额的减*\}else if(i==2){if(f0(200))return g;elseg=f5(g,200);}else if(i==3){if(f0(300))return g;elseg=f5(g,300);}else if(i==4){if(f0(500))return g;elseg=f5(g,500);}else if(i==5){if(f0(1000))return g;elseg=f5(g,1000);}else if(i==6){if(f0(2000))return g;elseg=f5(g,2000);}else if(i==7){printf("请输入金额");scanf("%d",&j);if(j%50==0&&j<=g&&j<=5000){if(f0(j))return g;elseg=f5(g,j);}elseprintf("\n您输入的金额不正确\n ");return g;}elseexit (0);return g;}int f0(int n) \*控制运行一次程序取钱不超过20000,超过20000返回为1,不{ 超过20000返回为0*\int x=0;m=m+n;if(m>20000){printf("取钱不能超过20000!!!!!");x=1;}return x;}int f4(int a0,int a1,int a2,int a3,int a4,int c0,int c1,int c2,int c3,int c4,int p,int a) \* 转账*\{int i,j,b=a,k;printf("请输入对方帐号");scanf("%d",&i);if(i==p)printf("不能给自己转账"); \*先排除给自己转账*\else{if(i==a0||i==a1||i==a2||i==a3||i==a4){printf("再次确认对方帐号");scanf("%d",&j);if(j==i){printf("输入转账金额\n");scanf("%d",&q);a=f5(a,q);if(a!=b){w=j;printf("转账成功\n");} \* w为全局变量,当a不等于b时为转账成功w变为转入的帐号*\}elseprintf("两次帐号不一致\n");}elseprintf("帐号错误");}return a;}实验心得:这次专周使我更加明白C语言特点是以函数为模块和学会了怎样编大型程序的方法,一开始我一下子编了一大堆和序出来然后进行调试,发现一大堆错误,后来不知怎搞的把程序搞没了,我下午来的时候只能重新编。

ATM取款机模拟系统-程序设计-报告(完成版).doc

ATM取款机模拟系统-程序设计-报告(完成版).doc

目录三、编程题部分(银行ATM模拟存取系统)1、设计内容 (2)2、设计 (2)(1)数据分析 (2)(2)程序流程分析 (3)3、编码及调试 (13)4、程序运行截图 (32)四、总结与体会 (37)五、参考文献 (39)三、编程题部分1、设计内容完成一个管理类的综合型设计:银行ATM模拟存取系统。

要求学生进行数据结构的设计、对函数进行模块化结构化设计、并灵活运用数组、结构体、指针、文件等多种数据类型设计开发系统。

通过写程序,学生应掌握用计算机程序设计语言解决实际问题的方法、步骤。

该系统应该具有以下功能:1)账户管理功能a) 开户:完成账户注册的功能。

即输入账户的相关信息。

要求账户号长度12位,密码长度不得低于6位,必须使用暗码,账户信息保存到数组中,账户信息最后保存到相关文件中;b) 账户登录:输入账户、密码,验证是否能够登录该系统;c)密码修改:输入两次相同的密码方可修改。

2)账务管理功能a) 存款:每笔存款金额大于0元小于等于1000元,以50元为基本单位。

需记录交易日期和时间。

b) 取款:每笔取款金额大于等于100元小于等于2000元,以50元为基本单位。

需记录交易日期和时间。

c) 转账:每笔转账金额大于等于100元小于等于5000元。

需记录交易日期和时间。

3)查询功能a) 存款记录查询b) 取款记录查询c) 转账记录查询d) 余额查询4)文件功能及其它功能:数据都应保存在相关文件中。

2、设计(1)数据分析(描述定义的各主要变量的作用及意义);char zhanghao[16];/*用户账号*/char xingming[9];/*用户姓名*/char mima[7];/*账户密码*/char shengfenzheng[19];/*用户身份证号*/float yue;/*账户余额*/char kaihushijian[50];/*开户时间*/char zhanghao[16];/*交易的账号*/char jiaoyishijian[50];/*交易时间*/char leixing[5];/*交易类型*/float jiaoyijine;/*交易金额*/float jiaoyiyue;/*交易后的余额*/char duifangzhanghao[12];/*交易时的对方账号*/int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/注册函数:int baiwei,shiwei,gewei,len;/*定义账号的后三位*/char mima2[7];/*注册时第二次输入的密码*/登录函数:char zhanghao[16],mima[7];/*登录时输入的账号和密码*/装载和保存文件函数:FILE *fp;/*定义文件指针*/char wenjianming[13];/*定义输入的文件名*/存、取款,转账函数:float jine;/*输入的存、取款,转账金额*/char t[30];/*把取得的存、取款,转账时间赋给该数组*/转账函数:char duifangzhanghao[16],c;/*输入的对方账号赋给该数组。

C语言课程设计自动取款机

C语言课程设计自动取款机

C语言程序设计课程设计(论文)题目:自动取款机院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系):软件学院教研室:软件教研窒学号学生姓名专业班级程序设计(报告)题目自动取款机程序程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。

(2)较熟练地编写C语言应用程序。

(3)了解C语言的常用标准函数、编程技巧、异常处理。

(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。

(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。

(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。

课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。

正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。

指导教师评语及成绩成绩:指导教师签字:2011 年 12 月 22 日目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (3)2.2.2数据结构设计及用法说明 (3)2.2.3程序结构(流程图) (4)2.2.4各模块的功能及程序说明 (6)2.2.5程序结果 (7)2.3程序源代码及注释 (10)参考资料 (16)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。

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

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

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语言银行自动存取款机模拟

c语言银行自动存取款机模拟

沈阳航空航天大学课程设计任务书学院:自动化学院专业:测控技术与仪器班级:04070101 学号:2010040701021 题目:自动存取款机模拟一、课程设计时间2011~12第1学期第4周,共计1周,20学时。

二、课程设计内容请你模仿自动存取款机系统,用C语言编写软件完成以下任务:1.登陆功能:某个用户输入账户名和密码,可以登陆ATM。

注意:应有多个用户,并把信息保存在文件中。

2.查询功能:登陆后,可以查询存款余额。

3.存款功能:登陆后,可以向账户中存款。

4.取款功能:登陆后,可以取款。

注意:取款金额不能超过存款金额。

提示:用户(账号、密码、存款余额、利率、开户银行)三、课程设计要求1.程序质量:✧贯彻结构化的程序设计思想。

✧用户界面友好,功能明确,操作方便。

✧用户界面中的菜单至少应包括、“数据输入”、“数据保存”、“信息查询”、“数据修改”、“退出”5项。

✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。

2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。

课程设计说明书的内容参见提供的模板。

四、指导教师和学生签字指导教师:学生签名:五、成绩六、教师评语目录一、需求分析 (1)二、设计分析 (2)三、主要界面截图 (4)四、技术要点 (5)五、个人总结 (8)六、参考文献 (8)七、源程序 (8)一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。

该系统是一个较典型的银行存取款模拟系统,其使用者被假定为银行信用卡用户,系统应该具有安全、稳定、功能齐全的特点。

1. 安全性分析银行存取款机的数据涉及到取款机内储存的所有用户,数据量较大且对保密性的需求很高,所以要通过设置密码等手段确保数据不能被随意的删减和修改。

2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。

3. 主要功能分析(1)账号及密码输入:允许用户输入账号、密码,对用户由于疏忽录入的非法数据,能够及时提示并更正。

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

[VIP专享]C语言课程设计…………银行自动存取款机模拟

[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语言银行自动存取款机模拟介绍本文档将介绍如何使用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(自动柜员机)界面设计
函数间的调用示意图
项目目标
知识目标 了解函数的概念,掌握函数定义与说明的方法,掌握函数调用中参数的传递方法,掌握函数的调用方法,熟悉函数的编程与使用方法。能力目标 培养学生使用集成开发环境进行软件开发、调试的综合能力。素质目标 使学生养成良好的编程习惯,具有团结协作的团队精神,具备岗位需要的职业能力。
分析:实现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语言课程计…………银行自动存取款机模拟

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取款机)

仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号 4317指导教师王成仲恺农业工程学院教务处制目录1 需求分析........................................................... 错误!未定义书签。

2 系统总框图和功能模块说明........................................... 错误!未定义书签。

系统总框图...................................................... 错误!未定义书签。

功能模块说明.................................................... 错误!未定义书签。

3 系统设计........................................................... 错误!未定义书签。

主要结构体....................................................... 错误!未定义书签。

主要功能函数...................................................... 错误!未定义书签。

关键函数的流程图................................................. 错误!未定义书签。

4 系统调试........................................................... 错误!未定义书签。

5 总结............................................................... 错误!未定义书签。

6 源程序清单......................................................... 错误!未定义书签。

C语言模拟ATM提款机

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机程序

c语言模拟ATM机程序
case 3: Zhuanzhang(&Y,&a[6]);break;
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)

C语言ATM程序模拟

C语言ATM程序模拟

C语言A T M程序模拟As a person, we must have independent thoughts and personality.一、课题要求1、当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统。

2、查询余额:初始余额为10000元。

3、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。

4、ATM存款:不能出现负存款。

5、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

二、代码#include ""#include ""#include ""#include ""#include ""void gotoxy(int x,int y); 改密码 *\n");printf("* 2.查询余额 *\n");printf("* 3.取款 *\n");printf("* 4.实时存款 *\n");printf("* 5.退出 *\n");printf("********************************\n");switch(getch()){case '1': mima(); break;case '2': yu_e(); break;case '3': qukuan(); break;case '4': cunkuan(); break;case '5': exit(); break;default:printf("error\n");}}回 2.退出 *\n");printf("* *\n"); printf("* *\n"); printf("********************************\n"); switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}. *\n");printf("* *\n"); printf("* *\n");printf("********************************\n"); delay();delay();system("cls");printf("********************************\n"); printf("* *\n"); printf("* 您的余额为 *\n"); printf("* *\n"); printf(" ");printf("%d",YU_E);printf("\n* *\n"); printf("* 1.返回 2.退出 *\n"); printf("********************************\n"); switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}它 *\n");printf("* *\n"); printf("* 7.返回 8.退出 *\n"); printf("********************************\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("********************************\n");printf("* *\n");printf("* 请输入您要取款的金额 *\n");printf("* *\n");printf("* *\n");printf("* *\n");printf("* *\n");printf("********************************\n");gotoxy(14,4);scanf("%d",&temp);panduan(temp); break;case '7':caozuo(); break;case '8':exit(); break;}}回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}beishu=z%100;if(beishu!=0){system("cls");delay();printf("********************************\n");printf("* *\n");printf("* 本ATM机只支持 100 的人民币 *\n");printf("* 请重新操作 *\n");printf("* *\n");printf("* 1.返回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}if(z==5000||z>5000){system("cls");printf("********************************\n");printf("* *\n");printf("* 每次取款不能超过 5000 元 *\n");printf("* 请重新操作 *\n");printf("* *\n");printf("* 1.返回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}YU_E=YU_E-z;success();}. *\n");printf("* *\n"); printf("* *\n"); printf("********************************\n"); delay();delay();system("cls");printf("********************************\n"); printf("* *\n"); printf("* 操作已成功 *\n"); printf("* *\n"); printf("* 1.返回 2.退出 *\n"); printf("* *\n"); printf("* *\n"); printf("********************************\n"); switch(getch()){case '1':caozuo(); break;case '2':exit(); break;}}. *\n");printf("* *\n");printf("* *\n");printf("********************************\n");delay();delay();enter_ATM();}//================================================================/ ///============== 简单转移函数=============//void zhuangyi(){mima();}//========================================//三、部分效果截图。

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

仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号201110214317指导教师王成仲恺农业工程学院教务处制目录1 需求分析 (1)2 系统总框图和功能模块说明 (1)2.1 系统总框图 (1)2.2 功能模块说明 (1)3 系统设计 (2)3.1 主要结构体 (2)3.2主要功能函数 (2)3.3 关键函数的流程图 (3)4 系统调试 (11)5 总结 (21)6 源程序清单 (23)6.1头文件 (23)6.2主程序 (23)6.3 解除被冻结用户 (40)6.4 用户注册 (41)1 需求分析所设计的ATM取款机应具备以下功能:●插入银行卡(用账号输入的方式代替);●密码的输入;●用户信息查询;●用户余额查询;●取款;●转账;●修改密码;●退卡。

2 系统总框图和功能模块说明2.1 系统总框图图1 系统总框图2.2 功能模块说明输入用户账号模块:在运行时,完成用户账号的输入(代替插卡);输入账号密码模块:①在输入账号之后,完成用户密码的输入;②在修改密码的过程中,完成用户输入旧密码的功能;信息读取功能模块:完成用户信息的读取;冻结账号功能模块:当输入密码3次错误时,冻结用户账号:查询用户信息模块:完成用户的信息查询(不包括余额查询);查询余额功能模块:完成用户余额的查询;取款功能模块:完成取款功能模块:转账功能模块:完成转职功能;修改密码功能模块:完成用户修改密码功能;退卡功能模块:完成退卡功能(即:退出程序功能)。

3 系统设计3.1 主要结构体用户账号、姓名、密码、余额struct User //用户数据{char num[20]; //用户账号char name[10]; //姓名char password[7]; //密码float balance; //余额};3.2主要功能函数void read_info(); //用户信息读取void input_num(char * num); //输入账号void now_exist(char * num); //判断是否被冻结或不存在void existed(char * num);void input_password(char * p_word,char * W); //输入密码void face(); //界面显示void balance_refer(); //余额查询void choose(int c); //菜单选择void draw_money(); //取款void set_password(); //修改密码void input_new_password(char * old_password); //设置新密码void tran_account(); //转账void stamp(); //打印单条void info_refer(); //信息查询void out(); //退出程序void lock(); //冻结账号void save_info(); //存储信息3.3 关键函数的流程图Nnow_exited 函数流程图input_password 流程图choose 函数流程图draw_money 函数流程图input_new_password 函数流程图读取文件数据函数流程lock 函数流程图save_info 函数流程图4 系统调试首先运行程序,系统提示输入账号。

(1)当输入错误账号,系统提示:用户不存在,请从新输入。

,(2)当输入错误的密码时,系统提示:密码有误,请重新输入。

(3)当输入正确账号与密码时,进入主页面。

(4)主界面(5)在主界面选择数字1,进入查询余额界面,界面显示余额。

按任意键返回。

(6)在主页面选择数字2,进入取款界面,系统提示输入取款的金额,当输入不是整百数是,系统提示请输入正确的金额,请重新输入。

(8)当输入负数时,系统提示:请输入正确的金额,请重新输入。

(9)当输入超过卡里余额的数,系统会提示余额不足,请重新输入。

2(10)当输入超过3000的数时,系统会提示:对不起,一次最多能取3000元,请重新输入。

(11)当输入正确的金额时,系统提示:交易成功,按0返回主菜单,按9继续取款。

(12)在主菜单界面选择数字3,进入修改密码界面,首先系统会提示:请输入旧密码。

(13)当输入就密码正确时,系统提示:请输入新密码(6位数)。

(14)当输入的新密码含有非数字时,系统提示:请输入正确的数字。

(15)当输入的新密码不足六位时,系统提示:请输入六位的密码。

(16)当两次输入的新密码不相同时,系统会提示:两次输入的密码不同,请重新输入。

(17)当输入两次密码都正确时,系统提示:密码修改成功,请牢记新密码。

(18)在主菜单界面选择数字4时,进入转账界面。

系统提示:请输入对方的账号:(19)当输入的账号错误时,系统会提示:用户不存在,请重新输入。

(20)当输入自己的账号时,系统会提示:不能给自己转账,请重新输入账号。

(21)当输入正确的账号时,界面会显示对方的信息。

按0返回菜单,按9确定转账。

9(22)当确定转账时,系统会提示:请输入转账金额。

(23)当输入转账的金额超过3000元时,系统会提示:对不起,一次转账不能超过3000元,请重新输入。

(24)当输入正确的金额时,系统提示:交易成功。

按0返回主菜单,按9继续转账。

(25)在主菜单界面选择数字5,进入信息查询界面,界面将显示账号的信息。

(26)在主界面选择数字0,进去取款界面,系统提示:感谢您的使用,请拿回卡。

5 总结在确认了程序设计主题之后,首先第一步是画了大概的流程图,因为ATM取款机是我们经常接触的一个机器,所以相对来说话流程图比较容易。

在画完流程图之后,就是进行代码的编写了,我采用自顶向下的方式来规划我的整个代码流程,首先是确定了大概需要哪些函数来实现所需的功能,在函数命名的时候,我并不是随便命名的,而是采用书上介绍的方法,用英文来命名。

在命名过程中,由于英语功底不好的我遇到了小小的麻烦(有些单词不会拼),于是就用电子词典来解决这问题。

刚开始我是把所有的自定义函数定义为void型函数。

所有的函数申明写好之后就可以开始细化了,首先确定所需结构体,然后就是头文件的定义,最后确定了所有函数的编写顺序。

由于这次程序设计是ATM取款机,所有要用到文件的知识,但又没学过,所以只能先停止代码的编写来学习文件的知识。

通过了两天的学习,虽然只是略学了皮毛,但是勉强看着书可以来自己新建文件并不数据存入文件中。

所有的准备工作完成后,真正的可以进行代码编写了,首先把所有的函数都编写出来(内容为空),然后根据从易到难的顺序逐个功能的编写。

其顺序依次是:input_num 函数(用户账号输入),input_password函数(密码输入),lock函数(冻结用户账号),read_info函数(读取文件数据),now_exit函数(检查是账号是否存在且未被冻结),existed 函数(检查账号是否被冻结),face函数(主菜单),choose函数(功能选择),balance_refer 函数(余额查询),draw_money函数(取款),set_password函数(修改密码),input_new_password函数(输入新密码),tran_account函数(转账),info_refer函数(查询信息),out函数(退卡)。

在写input_password函数时,没办法实现密文的输出,所以研究了很久,最后通过找资料和询问师兄才解决了这一难题,并从中学到了这一技巧。

在写lock函数时,刚开始只是用空字符来覆盖原有的账号,但是在测试时发现这样冻结的方法行不通,因为这样子冻结的话虽然原账号没了,但是在输入账号时只要直接按Enter键就可以进入输入密码的程序,所以这又是一个难题。

在晚上睡觉时突然想到了曾经在课外书上看到的产生随机数的函数(rand函数),于是,第二天这个所谓的难题也解决了。

所有的函数编写完毕,想到了既然冻结了账号,肯定需要一个程序来解除冻结了的账号,所以,自己又摸索了如何解决这一问题,最后想到了一个方法:再新建一个文件(文件名为all uer in for mation)作为后台来存储用户的信息,但这个文件存储的是所有未被冻结前和未被冻结的账号信息(即所有原始账号信息)。

而解除的方法是:先读取all user in for mation这个文件里的信息,然后把里面的信息覆盖到在前台操作的文件即可。

当用户被冻结后想解除的话只需运行这个程序即可解除冻结。

写了解除冻结账号的函数后,又想到需要写一个注册账号的程序,于是也顺利的完成了,最后,通过多次的调试,把整个程序代码给完成了。

6 源程序清单6.1头文件/*头文件:user.h*/#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <time.h>struct User //用户数据{char num[20];char name[10];char password[7];float balance;};void read_info(); //用户信息读取void input_num(char * num); //输入账号void now_exist(char * num); //判断是否被冻结或不存在void existed(char * num);void input_password(char * p_word,char * W); //输入密码void face(); //界面显示void balance_refer(); //余额查询void choose(int c); //菜单选择void draw_money(); //取款void set_password(); //设置密码void input_new_password(char * old_password);void tran_account(); //转账void stamp(); //打印单条void info_refer(); //信息查询void out(); //退出程序void lock(); //冻结账号void save_info(); //存储信息6.2主程序/*主程序:main*//*模拟ATM取款机*/#include "user.h" //自定义头文件#define U 8struct User user[U];int f; //全局变量f 是用来记录用户下标(即哪个用户)int main(){char number[20]; //定义账号数组变量input_num(number); //调用input_num函数,输入用户账号return 0;}/*函数功能:输入用户账号*/void input_num(char num[12]){read_info(); //输入账号前先调用函数read_info读取所以用户信息,以便后面判//断账户是否存在以及密码是否正确system("cls");printf("\n\n\n\n\n\n\n\n\t\t请输入您的账号:");gets(num);now_exist(num); //调用exist函数检查该账号是否存在}/*函数功能:读取用户信息*/void read_info(){int i=0;FILE * fp;if ((fp=fopen("user information.dat","r"))==NULL) //通过文件指针来读取用户数据信息(不包括被冻结用户信息){printf("It cannot open !");exit(0);}while(!feof(fp)){fread(&user[i],sizeof(struct User),1,fp);i++;}fclose(fp);}/*函数功能:判断用户是否存在且未被冻结*/void now_exist(char * num){int s=0,i; // s是用来判断用户是否存在的条件,如果存在s=1,不存在s=0;char *w="input";while(1){for(i=0;i<12;i++){if ( 0 == strcmp( num, user[i].num ) ) //匹配用户{s=1;f=i; //如果用户存在则跳出循环,并用变量f记录用户下标,以便后面使用。

相关文档
最新文档