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语言编程的基本编程能力。

相关文章
|
14天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
7天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
19 1
|
10天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
1月前
|
存储 编译器 C语言
【C语言】学生管理系统:完整模拟与实现(一)
【C语言】学生管理系统:完整模拟与实现
|
2月前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
1月前
|
存储 C语言
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
|
1月前
|
测试技术 C语言
【C语言】学生管理系统:完整模拟与实现(三)
【C语言】学生管理系统:完整模拟与实现
|
1月前
|
C语言
【C语言】学生管理系统:完整模拟与实现(二)
【C语言】学生管理系统:完整模拟与实现
|
3月前
|
存储 C语言
【C语言】C语言-宾馆客房管理系统(源码+论文)【独一无二】
【C语言】C语言-宾馆客房管理系统(源码+论文)【独一无二】
【C语言】C语言-宾馆客房管理系统(源码+论文)【独一无二】
|
3月前
|
存储 C语言
学生管理系统(C语言简单实现)
这篇文章是关于使用C语言实现一个简单的学生管理系统,包括文件的基本应用、数据结构设计、函数实现以及用户界面交互。
学生管理系统(C语言简单实现)