C语言实现ATM系统程序的完整代码

 更新时间:2021年5月2日 15:01  点击:2145

实现效果如图:

在这里插入图片描述

代码如下:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
//开户信息
typedef struct _Person
{
	char name[20];
	char account[20];
	char password[7];
	float money;
}Person;
//结点
typedef struct _Node
{
	Person P;	//客户
	struct _Node* next;
}Node;
Node* HeadNode = NULL;//链表头

/*----------------函数--------------------*/
void Login();
void Menu();
void Register();
void LoginMenu(Node* pNode);
void FindAccount(Node* pNode);
void DrawMoney(Node* pNode);
void Deposit(Node* pNode);
void Transfer(Node* pNode);
void LoginMenu(Node* pNode);

//主菜单
void Menu()
{
	printf("\n\t\t\t欢迎进入ATM银行管理系统\n");
	printf("\t\t 1. 注册\n");
	printf("\t\t 2. 登录\n");
	printf("\t\t 3. 系统帮助\n");
	printf("\t\t 4. 查询账号\n");
	printf("\t\t 5. 退出\n");
}
//注册
void Register()
{
	Node* NewNode = (Node*)malloc(sizeof(Node));
	NewNode->next = NULL;
	NewNode->P.money = 0;

	printf("请输入您的名字:");
	scanf("%s", NewNode->P.name);
	printf("请输入您的密码:");
	scanf("%s", NewNode->P.password);

	char Password[7];
	printf("请再次输入您的密码:");
	scanf("%s", Password);

	for (int i = 1; i < 4; i++)
	{
		if (strcmp(NewNode->P.password, Password) != 0)
		{
			printf("您输入的密码有误,还有%d次机会.\n", 3 - i);
			printf("请再次输入您的密码:");
			scanf("%s", Password);
		}
		else
		{
			srand((unsigned int)time(NULL));
			sprintf(NewNode->P.account, "%d%d%d%d%d", rand() % 9000 + 1000, rand() % 9000 + 1000,
				rand() % 9000 + 1000, rand() % 9000 + 1000, rand() % 900 + 100);
			//头插法
			if (HeadNode == NULL)
			{
				HeadNode = NewNode;
			}
			else
			{
				NewNode->next = HeadNode;
				HeadNode = NewNode;
			}
			printf("\n\n\n\n\t\t\t\t恭喜你已经成功注册账户,以下是您的账户信息.\n");
			printf("\t\t\t\t姓名:%s\n", NewNode->P.name);
			printf("\t\t\t\t账户:%s\n", NewNode->P.account);
			printf("\t\t\t\t余额:%.2f\n", NewNode->P.money);
			getch();
			return 1;
		}

	}
	printf("您的账号已被锁定,请稍后再试.");
	return 1;
}
//取款
void DrawMoney(Node* pNode)
{
	Node* mNode = pNode;
	float Money = 0;
	printf("欢迎进入ATM银行管理系统\n");
	printf("请选择你取款金额\n");
	printf("100\t\t2000\n");
	printf("500\t\t5000\n");
	printf("10000\t\t其他金额\n");
	scanf("%f", &Money);
	mNode->P.money = mNode->P.money - Money;
	return mNode;	
}
//存款
void Deposit(Node* pNode)
{
	Node* mNode = pNode;
	float Money = 0;
	printf("请存取您的金额:");
	scanf("%f", &Money);
	mNode->P.money = mNode->P.money + Money;
	return mNode;
}
//转账
void Transfer(Node* pNode)
{
	Node* TNode = HeadNode;
	char Account[20];
	printf("请输入转账的号码:");
	scanf("%s", Account);
	while (TNode != NULL)
	{
		if (strcmp(TNode->P.account, Account) != 0)
		{
			TNode = TNode->next;
			continue;
		}
		else
		{
			float Money = 0;
			printf("请输入您要转账的金额:");
			printf("100\t\t2000\n");
			printf("500\t\t5000\n");
			printf("10000\t\t其他金额\n");
			scanf("%f", &Money);
			TNode->P.money = TNode->P.money + Money;
			pNode->P.money = pNode->P.money - Money;
			return 1;
		}
	}
	return 1;
}
//登录菜单
void LoginMenu(Node * pNode)
{

	while (1)
	{
		printf("欢迎进入ATM银行管理系统\n");
		printf("请选择以下服务:\n");
		printf("1.取款\t\t2.查询\n");
		printf("3.存款\t\t4.转账\n");
		printf("5.修改密码\t6.退出\n");

		char ch = getch();
		switch (ch)
		{
		case '1':
			DrawMoney(pNode);
			break;
		case '2':
			printf("您的账户余额为:%.2f", pNode->P.money);
			getch();
			break;
		case '3':
			Deposit(pNode);
			break;
		case '4':
			Transfer(pNode);
			break;
		case '5':
			break;
		case '6':
			return 0;
			break;
		default:
			break;
		}
		system("cls");
	}
	

}
//登录
void Login()
{
	system("cls");
	Node* pNode = HeadNode;

	char P_account[20];
	char P_password[7];
	printf("请输入您的卡号:");
	scanf("%s", P_account);

	while (pNode != NULL)
	{
		if (strcmp(P_account,pNode->P.account) != 0)
		{
			pNode = pNode->next;
			continue;
		}
		else
		{
			for (int i = 1; i < 4; i++)
			{
				printf("请输入您的密码:");
				scanf("%s", P_password);
				if (strcmp(P_password, pNode->P.password) != 0)
				{
					printf("您输入的密码有误,还有%d次机会.\n", 3 - i);
				}
				else
				{
					system("cls");
					LoginMenu(pNode);
					return 1;
				}
			}
			printf("\n对不起,您输入的密码有误,请重新登录.\n");
			system("pause");
			return 1;

		}
		
	}
	return 1;
}
//系统帮助信息
void Help()
{
	system("cls");
	printf( "\n\n\n\n\t——————————-----—---——ATM系统帮助----------------------------------------\n"
			"\t1、初始界面:客户插卡前或者退卡后ATM显示的界面,提示客户插卡操作及银行广告.\n"

			"\t2、身份认证:需要客户插入银行卡后输入密码来验证所有权.\n"

			"\t3、吞卡:客服若连续输入密码3次错误后,则将卡吞入ATM内.\n"

			"\t4、账户:账户由银行卡的卡号、密码、银行系统用户信息组成.\n"

			"\t5、业务操作:由查询余额、取款、存款、转账、取卡等事项组成.\n"

			"\t6、查询余额:显示该账户中剩余金额.\n"

			"\t7、取款:根据客户输入的金额从账户中扣除相应的金额,客户可以提取相应数额的现金.\n"

			"\t8、存款:客户存入现金,账户根据现金数额增加剩余金额.\n"

			"\t9、转账:客户输入另外一个账户号码和金额,从本账户的余额中减去该金额,增加到那个账号中.\n"

			"\t10、打印凭条:凭条由日期,银行卡的卡号,交易流水号组成.\n"

			"\t11、取卡:客户取回银行卡.\n"
			"\t————————————————-------------------------------------------------------\n"
	);
	getch();
	return 1;
}
//查询账号
void FindAccount(Node* pNode)
{
	Node* FNode = pNode;
	char AccountName[7];
	printf("请输入账号姓名:");
	scanf("%s", AccountName);

	while (FNode != NULL)
	{
		if (strcmp(AccountName, FNode->P.name) != 0)
		{
			FNode = FNode->next;
			continue;
		}
		else
		{
			printf("该姓名的账户为:%s", FNode->P.account);
			return 1;
		}
	}
	printf("抱歉!该姓名未注册账号.");
	return 1;
}
int main()
{
	system("color b0");
		
	while (1)
	{
		system("cls");
		Menu();
		char ch = _getch();
		switch (ch)
		{
		case '1':
			Register();
			break;
		case '2':
			Login();
			break;
		case '3':
			Help();
			break;
		case '4':
			FindAccount(HeadNode);
			getch();
			break;
		case '5':
			exit(0);
		default:
			break;
		}
	}
	return 0;
}

到此这篇关于C语言实现ATM系统程序的完整代码的文章就介绍到这了,更多相关c语言ATM系统程序内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • C语言实现放烟花的程序

    这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
  • C语言中的字符(char)详细讲解

    本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 详解如何将c语言文件打包成exe可执行程序

    这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • BootStrap栅格系统、表单样式与按钮样式源码解析

    这篇文章主要为大家详细解析了BootStrap栅格系统、表单样式与按钮样式源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • C语言中计算正弦的相关函数总结

    这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
  • 详解C语言中的rename()函数和remove()函数的使用方法

    这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10