• C语言ATM自动取款机系统项目的设计与开发


    基于C语言的ATM自动取款机系统项目设计与开发

    一、ATM自动取款机系统功能分析与介绍

    ATM自动取款机系统是银行业务流程中十分重要且必备的环节之一,在银行业务流程中起着承上启下的作用,其重要性不言而喻。但是,目前许多银行在具体的一此业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力,效率低下,而且无法达到理想的效果。

    本应用主要模拟ATM设备的常用功能,如登录系统、身份验证、余额查询、取款、存款和修改密码等功能。

    在设计的过程中也以此为依据,每一 种具体功能使用一 个或几个函数来实现。

    该系统的主要功能如下几个要点所示:
    1、显示登入页面功能:系统运行可以显示ATM自动取款机系统的登入页面,功能包括了登入和退出的两个功能。

    2、登入页面的用户登入功能:用户可以用账号,根据相关的提示登入ATM自动取款机系统。

    3、修改密码功能:用户可以更改自己登入ATM自动取款机系统账号的密码功能。

    4、查询余额功能:用户可以查询自己账号的余额。

    5、取款功能:用户可以将自己账号里面存放的钱取出来。

    6、存款功能 :用户可以将自己的现金存入到自己的账号中

    7、返回登入页面功能:用户可以返回登入页面,进而可以选择登入自己或其他的账号,或者选择退出ATM自动取款机系统。

    二、开发ATM自动取款机系统的工具以及创建项目的过程

    2.1、本项目使用Visual Studio 2019作为开发工具。

    2.2、项目创建的过程

    打开VS2019,选择语言为C++,所属平台为Windows,项目类型为控制台项目,并选择空项目,如下图所示
    在这里插入图片描述

    然后输入项目的名称和选择项目的路径如下图所示
    在这里插入图片描述

    创建好项目后,向项目中添加ATM.h头文件和ATM.c源文件如下所示
    在这里插入图片描述

    然后编写相关的代码如下
    ATM.h头文件代码

    #pragma once
    
    #include 		// 包含相应的头文件
    #include 
    
    • 1
    • 2
    • 3
    • 4

    ATM.c源文件代码

    #define _CRT_SECURE_NO_WARNINGS
    
    #include "ATM.h"
    
    int main()
    {
    	system("color 3E");
    
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    现在ATM自动取款机系统项目就创建好了。

    ATM自动取款机系统的设计与开发的步骤

    一、设计登入页面的显示功能

    在ATM.h头文件中定义一个账号的登入密码和账号登入之后的初始余额大小,如下所示

    long int CODE = 123456;			// 登入密码
    long int balance = 10000;		// 存款的数目
    
    • 1
    • 2

    然后在ATM.h头文件中声明一个EnterAccount函数,用于用户登入账号的功能,并在ATM.c源文件中定义这个函数的功能。如下所示

    //账号输入
    void EnterAccount()
    {
    	system("cls");
    
    	printf("*********************************\n");
    	printf("*   欢迎使用 ATM 自动服务系统   *\n");
    	printf("*     1.登入       2.退出       *\n");
    	printf("*********************************\n");
    	
    	printf("请选择功能:");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后在main函数中添加如下的代码

    	while (1)
    	{
    		EnterAccount();
    	}
    
    • 1
    • 2
    • 3
    • 4

    在主函数中,使用一个while死循环,防止程序退出。
    调试结果如下所示。
    在这里插入图片描述
    到这一步,本文已经实现了登入页面的显示的功能

    二、设计登入页面退出功能

    当用户在登入页面选择输入2时,则会退出ATM自动取款机系统。在ATM.c源文件的EnterAccount函数中添加如下的代码

    	long int user;
    	int select;
    	
    	scanf("%d", &select);
    
    	if (select == 1)
    	{
    	
    	}
    	else
    	{
    		system("cls");
    
    		printf("********************************\n");
    		printf("*        欢迎您的再次使用      *\n");
    		printf("*   按任意键将退出ATM系统!!!*\n");
    		printf("********************************\n");
    
    		system("pause");
    		exit(0);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    当输入不是1时,就会退出ATM自动取款机系统,其调试结果如下
    在这里插入图片描述
    在这里插入图片描述
    到这一步,本文已经实现了登入页面的退出功能

    三、设计登入页面登入和系统主页面显示的功能

    当用户在登入页面选择输入1时,则会登入ATM自动取款机系统。在ATM.c源文件的EnterAccount函数中添加如下的代码

    3.1登入用户账号功能

    	if (select == 1)
    	{
    		printf("请输入卡号:");
    
    		scanf("%d", &user);
    
    		if (user != 123456)
    		{
    			printf("    账户不存在,请从新输入!!!\n");
    
    			system("pause");
    			EnterAccount();
    		}
    		else
    		{
    			EnterPassword();
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    根据输入给user 值是否等于123456来进行是否进入输入密码的操作,若输入的用户账号不对,则要求重新输入。若输入的账号符合要求,则进入输入密码的页面

    3.2登入用户密码功能

    在在ATM.h头文件中声明一个EnterPassword函数,用于用户输入密码的功能,并在ATM.c源文件中定义这个函数的功能。如下所示

    //密码输入
    void EnterPassword()
    {
    	long int code;
    	int temp = 3;
    
    	printf("********************************\n");
    	printf("*          请输入密码          *\n");
    	printf("********************************\n");
    
    	printf("请输入密码:");
    
    	scanf("%d", &code);
    
    	while (code != CODE)
    	{
    		temp--;
    		if (temp == 0)
    		{
    			printf("********************************\n");
    			printf("*      您已经 3 次输入密码     *\n");
    			printf("*  按任意键将返回登入系统!!!*\n");
    			printf("********************************\n");
    
    			system("pause");
    			EnterAccount();
    		}
    
    		printf("********************************\n");
    		printf("*     密码错误,请重新输入     *\n");
    		printf("*        您还有 ");
    		printf("%d", temp);
    		printf(" 次机会       *\n");
    		printf("********************************\n");
    
    		printf("请输入密码:");
    		scanf("%d", &code);
    	}
    
    	Menu();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    其中有三次机会给用户输入密码,若三次输入密码都不对,则进入ATM自动取款机系统的登入页面,否则进入系统机的主页面。

    3.3主页面显示功能

    在在ATM.h头文件中声明一个Menu函数,用于ATM自动取款机系统主页面的功能,并在ATM.c源文件中定义这个函数的功能。如下所示

    //基本操作界面
    void Menu()
    {
    	int select = 0;
    
    	system("cls");
    
    	printf("********************************\n");
    	printf("*    欢迎来到ATM自动取款系统   *\n");
    	printf("*         请选择一下业务       *\n");
    	printf("*          1.修改密码          *\n");
    	printf("*          2.查询余额          *\n");
    	printf("*          3.取款              *\n");
    	printf("*          4.存款              *\n");
    	printf("*          5.返回              *\n");
    	printf("********************************\n");
    
    	printf("请选择功能:");
    	scanf("%d", &select);
    
    	switch (select)
    	{
    	case 1:
    		pwModify();				// 修改密码  
    		break;
    	case 2:
    		balanceQuery();			// 查询余额
    		break;
    	case 3:
    		moneyTakeOut();			// 取款   
    		break;
    	case 4:
    		moneySave();			// 存款
    		break;
    	case 5:
    		returnEnter();			// 返回
    		break;
    	default:
    		printf("error\n");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    根据用户输入的数字赋值给变量select,然后使用Switch语句进行判据程序应该进入哪一个函数,并执行相应的函数功能。
    登入调试结果如下
    用户账号不对时
    在这里插入图片描述
    在这里插入图片描述
    用户账号符合,但是密码输入错误时
    在这里插入图片描述
    用户账号和密码都符合时
    在这里插入图片描述
    在这里插入图片描述
    到这一步,本文已经实现了登入页面的登入和系统主页面显示的功能

    四、设计主页面修改用户密码的功能

    在ATM.h头文件中声明一个pwModify函数,用于用户修改用户登入密码的功能,并在ATM.c源文件中定义这个函数的功能。如下所示

    //修改密码
    void pwModify()
    {
    	long int mm1, mm2, mm3;
    	char temp;
    
    	system("cls");
    	printf("        密码修改            \n");
    	printf("输入旧密码:\n");
    	scanf("%d", &mm1);
    
    	while (mm1 != CODE)					// 判决旧密码是否输入有误
    	{
    		printf("旧密码错误\n");
    		printf("请重新输入!!!\n");
    
    		system("pause");
    
    		printf("旧密码:");
    		scanf("%d", &mm1);
    	}
    
    	printf("\n输入新密码: ");
    	scanf("%d", &mm2);
    
    	if (mm1 == mm2)							// 判断旧密码与输入的新密码是否相同
    	{
    		printf("\n输入的新密码与旧密码一样!!!\n");
    		printf("重新输入新密码\n");
    
    		printf("\n输入新密码: ");
    		scanf("%d", &mm2);
    	}
    
    	printf("\n确认新密码:");
    	scanf("%d", &mm3);
    
    	if (mm2 != mm3)				// 验证输入的新密码
    	{
    		printf("确认密码不一致\n");
    		printf("请重新输入!!!\n");
    
    		system("pause");
    		pwModify();
    	}
    
    	if (mm2 < 100000)			// 防止输入的密码过于短
    	{
    		printf("密码必须大于或等于6位数\n");
    		printf("请重新输入!!!\n");
    
    		system("pause");
    		pwModify();
    	}
    
    	temp = (char)mm2 % 111111;
    	if (temp == 0)				// 防止输入的密码过于简单
    	{
    		printf("密码过于简单\n");
    		printf("请重新输入!!!\n");
    
    		system("pause");
    		pwModify();
    	}
    
    	CODE = mm2;				// 更新变量的值,即修改密码成功
    	system("cls");
    	printf("        修改密码操作成功          \n");
    	printf("    按任意键返回主页面\n");
    
    	system("pause");
    	Menu();				// 返回系统的主页面
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    其调试结果如下
    输入旧密码不对时
    在这里插入图片描述
    在这里插入图片描述
    确认密码不对时
    在这里插入图片描述
    修改密码成功时
    在这里插入图片描述
    到这一步,本文已经实现了主页面修改用户密码的功能

    五、设计主页面查询用户余额的功能

    在ATM.h头文件中声明一个balanceQuery函数,用于用户查询自己账户的余额功能,并在ATM.c源文件中定义这个函数的功能。如下所示

    //余额查询
    void balanceQuery()
    {
    	system("cls");
    
    	printf("          您的余额为          \n");
    	printf("          %d元          \n", balance);
    	printf("    按任意键返回主页面\n");
    
    	system("pause");
    	Menu();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    其调试结果如下所示

    在这里插入图片描述
    到这一步,本文已经实现了主页面查询用户余额的功能

    六、设计主页面用户取款的功能

    在ATM.h头文件中声明一个moneyTakeOut函数和takeOutJudge函数,用于用户取出自己账户中的钱的功能,并在ATM.c源文件中定义这两个函数的功能。如下所示

    // 取款
    void moneyTakeOut()
    {
    	long int temp;
    	int select = 0;
    
    	system("cls");
    
    	printf("********************************\n");
    	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");
    	printf("********************************\n");
    
    	printf("     请输入选择序号:");
    	scanf("%d", &select);
    
    	switch (select)
    	{
    	case 1:
    		takeOutJudge(100);
    		break;
    	case 2:
    		takeOutJudge(200);
    		break;
    	case 3:
    		takeOutJudge(500);
    		break;
    	case 4:
    		takeOutJudge(800);
    		break;
    	case 5:
    		takeOutJudge(1000);
    		break;
    	case 6:
    		printf("     请输入您要取款的金额:");
    		scanf("%d", &temp);
    		takeOutJudge(temp);
    		break;
    	case 7:
    		Menu();
    		break;
    	}
    }
    
    void takeOutJudge(int takeOutMoney)
    {
    	if (takeOutMoney > balance)
    	{
    		printf("           余额不足!         \n");
    		printf("          请重新操作          \n");
    		printf("       按任意键返回主页面\n");
    
    		system("pause");
    		Menu();
    	}
    
    	if (takeOutMoney > 500000)
    	{
    		printf("    每次取款不能超过 50000 元  \n");
    		printf("           请重新操作         \n");
    		printf("    按任意键返回主页面\n");
    
    		system("pause");
    		Menu();
    	}
    
    	balance = balance - takeOutMoney;
    
    	printf("           取款操作成功         \n");
    	printf("         按任意键返回主页面\n");
    
    	system("pause");
    	Menu();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    在moneyTakeOut函数中可以显示取出钱的数目,并进行选择,然后调用takeOutJudge函数对账户余额进行判断是否充足等功能。
    其调试结果如下所示
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    取了两次款,其调试结果正确。
    到这一步,本文已经实现了主页面查询用户余额的功能

    七、设计主页面用户存款的功能

    在ATM.h头文件中声明一个moneySave函数,用于用户将自己的现金存入系统的账户中的功能,并在ATM.c源文件中定义这两个函数的功能。如下所示

    // 存款
    void moneySave()
    {
    	long int tempMoney;
    
    	system("cls");
    
    	printf("请输入存放的人民币:");
    	scanf("%d", &tempMoney);
    
    	while (tempMoney < 0)
    	{
    		printf("输入的存款数据不能为负数!!!\n");
    		printf("请重新输入存放的人民币:");
    		scanf("%d", &tempMoney);
    	}
    
    	balance = balance + tempMoney;
    
    	printf("           存款操作成功         \n");
    	printf("         按任意键返回主页面\n");
    
    	system("pause");
    	Menu();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    可以对输入的数据是否合法进行有效的判断。
    其调试结果如下所示

    在这里插入图片描述
    到这一步,本文已经实现了主页面用户存款的功能。

    八、返回登入页面的功能

    在ATM.h头文件中声明一个returnEnter函数,用于用户返回系统登入页面的功能,并在ATM.c源文件中定义这两个函数的功能。如下所示

    //返回登入页面
    void returnEnter()
    {
    	system("cls");
    	printf("********************************\n");
    	printf("*        欢迎您的再次使用      *\n");
    	printf("*  按任意键将返回登入页面!!!*\n");
    	printf("********************************\n");
    
    	system("pause");
    
    	EnterAccount();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    调试结果如下
    在这里插入图片描述

    总结

    到这里我们完成了ATM自动取款机系统的设计与开发。在设计的工程中,我们主要使用了C语言的函数,while循环、system库函数等知识。本文的项目可以让刚刚入门的小白C语言选手可以很快掌握C语言编程的基本编程能力。

  • 相关阅读:
    你需要知道的ES6—ES13开发技巧
    现代卷积网络实战系列2:PyTorch构建训练函数、LeNet网络
    【方向盘】IDEA跟Eclipse险些打一架。Maven:都住手,我来一统天下
    php万年历源代码!源代码![上一年、上一月、下一月、下一年、附加当天日期加背景颜色]-私聊源码
    Java | 生产者和消费者模型
    javaScript 中的宏任务、微任务
    Floyd 算法
    Power BI 傻瓜入门 14. 深入挖掘DAX
    【C++】:STL——标准模板库介绍 || string类
    【python运维脚本实践】python实践篇之使用Python处理有序文件数据的多线程实例
  • 原文地址:https://blog.csdn.net/m0_47419053/article/details/126016332