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

简介: 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,项目类型为控制台项目,并选择空项目,如下图所示

80a9e4f5abfc42cf995e659cc1775149.png


然后输入项目的名称和选择项目的路径如下图所示


1e18168a371f40c685e70c647e4390df.png


创建好项目后,向项目中添加ATM.h头文件和ATM.c源文件如下所示

9029dead26364f11a89990fbdd6deeda.png



然后编写相关的代码如下

ATM.h头文件代码


#pragma once
#include <stdio.h>    // 包含相应的头文件
#include <stdlib.h>


ATM.c源文件代码


#define _CRT_SECURE_NO_WARNINGS
#include "ATM.h"
int main()
{
  system("color 3E");
  system("pause");
  return 0;
}


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


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


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


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

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

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


//账号输入
void EnterAccount()
{
  system("cls");
  printf("*********************************\n");
  printf("*   欢迎使用 ATM 自动服务系统   *\n");
  printf("*     1.登入       2.退出       *\n");
  printf("*********************************\n");
  printf("请选择功能:");
}


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


while (1)
  {
    EnterAccount();
  }


在主函数中,使用一个while死循环,防止程序退出。

调试结果如下所示。

cdda3a1d49094f3c895d97fe12a6d84b.png


到这一步,本文已经实现了登入页面的显示的功能


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


当用户在登入页面选择输入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时,就会退出ATM自动取款机系统,其调试结果如下


87d74f7b5c294584ae2c497a255ba6f4.png

8e51ce8fff5b4f9fab6e186fad77932e.png

到这一步,本文已经实现了登入页面的退出功能


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


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


3.1登入用户账号功能

  if (select == 1)
  {
    printf("请输入卡号:");
    scanf("%d", &user);
    if (user != 123456)
    {
      printf("    账户不存在,请从新输入!!!\n");
      system("pause");
      EnterAccount();
    }
    else
    {
      EnterPassword();
    }
  }


根据输入给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();
}

其中有三次机会给用户输入密码,若三次输入密码都不对,则进入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");
  }
}


根据用户输入的数字赋值给变量select,然后使用Switch语句进行判据程序应该进入哪一个函数,并执行相应的函数功能。

登入调试结果如下

用户账号不对时



f0d0d8ac41394261a69846d6e9fd047a.png


2762b1cb490f498b8b4c560a6b28a119.png


用户账号符合,但是密码输入错误时


f2b5c58e7b1b40a68b32052132db0451.png


用户账号和密码都符合时


ce1c2e34b02e44f6ae6168f21e32e483.png

d7ddd59ba8b848fb94215afed9bd4363.png

到这一步,本文已经实现了登入页面的登入和系统主页面显示的功能


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


在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();       // 返回系统的主页面
}


其调试结果如下

输入旧密码不对时


789c7077509940e48c2dc127431f5137.png

63fd167c21b2486ea94026d98fe945de.png

确认密码不对时



d4bde76c89f446a284be313dc88a8d4e.png


修改密码成功时


03a21a7ba4da4b50b271bdcb6f9447dc.png


到这一步,本文已经实现了主页面修改用户密码的功能


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


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

//余额查询
void balanceQuery()
{
  system("cls");
  printf("          您的余额为          \n");
  printf("          %d元          \n", balance);
  printf("    按任意键返回主页面\n");
  system("pause");
  Menu();
}


其调试结果如下所示


45f76a87f90441ebafe5f4975007aa31.png


到这一步,本文已经实现了主页面查询用户余额的功能


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


在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();
}

在moneyTakeOut函数中可以显示取出钱的数目,并进行选择,然后调用takeOutJudge函数对账户余额进行判断是否充足等功能。

其调试结果如下所示


323894829a934ac49bc40d29b94e2fb7.png

e276d35b012b4314bb5d5c7dbbde0add.png


101bd0ab09d04c96abb6fee7614c32b2.png


取了两次款,其调试结果正确。

到这一步,本文已经实现了主页面查询用户余额的功能


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


在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();
}

可以对输入的数据是否合法进行有效的判断。

其调试结果如下所示


8f35ad9e22e5411cbd2aa978af261f7e.png


到这一步,本文已经实现了主页面用户存款的功能。


八、返回登入页面的功能


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

//返回登入页面
void returnEnter()
{
  system("cls");
  printf("********************************\n");
  printf("*        欢迎您的再次使用      *\n");
  printf("*  按任意键将返回登入页面!!!*\n");
  printf("********************************\n");
  system("pause");
  EnterAccount();
}


调试结果如下

4b00fcd747f74e93a66df9064dcc0924.png

总结


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

相关文章
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
714 82
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
345 4
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
1755 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
845 12
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
497 6
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
602 0
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
831 2