zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言 模拟ATM

2023-09-11 14:14:48 时间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <conio.h>

#define ZHANGHUSHU 100000000                 // 银行管理系统存储最多账号数量

// 定义账户的结构体数据类型

struct Zhanghu
{
	char zhanghao[16];          // 用户账号
	char xingming[9];           // 用户姓名
	char mima[7];               // 账户密码
	char shenfenzheng[19];      // 用户身份证号码
	float yue;                  // 账户余额
	char kaihushijian[50];      // 开户时间
};

// 定义交易记录的结构体数据类型
typedef struct
{
	char zhanghao[10];               // 交易账号
	char jiaoyishijian[50];          // 交易时间
	char leixing[5];                 // 交易类型
	float jiaoyijine;                // 交易金额
	float jiaoyiyue;                 // 交易后的余额
	char duifangzhanghao[16];        // 交易时的对方账号
 }Jiaoyi;

// 定义账户结构体数组,可以注册1000
struct Zhanghu zhanghu[1000];

// 账户序号 交易序号 当前登录的账户下标 转账时对方的账户下标
int zhanghuxuhao = 0, jiaoyixuhao = 0, dangqianxiabiao = 0, duifangzhanghuxiabiao=0;

// 定义交易记录的结构体数组,可以存储10000条交易记录
Jiaoyi jiaoyi[10000];

int menu();                         // 主菜单函数
void zhuce();                       // 注册函数



void main()
{
	system("color 2F");
	printf("\n\n\n\n\t\t\t◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n");
	printf("\t\t\t◇                                            ◇\n");
	printf("\t\t\t◇        欢迎使用人民银行ATM终端系统         ◇\n");
	printf("\t\t\t◇                                            ◇\n");
	printf("\t\t\t◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n");
	printf("\t\t\t◇                        2017年08月12日      ◇\n");
	printf("\t\t\t◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n");
	printf("\t\t\t");
	system("pause");            // 暂停功能
	system("CLS");              // 清屏

	while (1)
	{
		switch (menu())
		{
		case 1:      // 调用注册模块
			zhuce(); 
			printf("\t\t\t");
			break;

		case 2:
			break;
		case 3:
			break;
		case 4:
			break;
		case 0:
			printf("\t\t\t感谢使用人民银行ATM终端管理系统!\n");
			printf("\t\t\t");
			system("pause");
			exit(0);
		}

	}

}

int menu()
{
	char c;
	do
	{
		system("CLS");                // 每次选择执行之前清屏
		printf("\n\n\n\n\t\t\t□□□□□□□□□□□□□□□□□□□□□□□□\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□        人民银行ATM终端管理系统             □\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□□□□□□□□□□□□□□□□□□□□□□□□\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□      1.注册账号        2.登录系统          □\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□      3.导入数据        4.存储数据          □\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□      0.退出系统                            □\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□□□□□□□□□□□□□□□□□□□□□□□□\n");
		printf("\t\t\t请选择【0-4】:");
		c = getchar();
	} while (c<'0' || c>'4');

	return (c - '0');
}

void zhuce()
{
	int baiwei, shiwei, gewei, len;        // 定义账号最后三位数字
	char mima2[7];                         // 注册时密码需要输入两次
	char t[30];                            // 开户时间
	int i=0, j = 0;
	time_t rawtime;
	struct tm *timeinfo;
	time(&rawtime);                         // 调用时间函数取得开户时间
	timeinfo = localtime(&rawtime);
	strcpy(t, asctime(timeinfo));

	for (i = 0; i < strlen(t); i++)
	{
		if (t[i] == '\n')
		{
			t[i] = '\0';
			break;
		}

		// 银行账户前12位数字是固定
		strcpy(zhanghu[zhanghuxuhao].zhanghao, "201708126688");
		baiwei = zhanghuxuhao / 100;
		shiwei = zhanghuxuhao / 10 % 10;
		gewei = zhanghuxuhao % 10;

		zhanghu[zhanghuxuhao].zhanghao[12] = baiwei + '0';
		zhanghu[zhanghuxuhao].zhanghao[13] = shiwei + '0';
		zhanghu[zhanghuxuhao].zhanghao[14] = gewei + '0';
		zhanghu[zhanghuxuhao].zhanghao[15] = '\0';

		system("CLS");
		printf("\n\n\n\n\t\t\t□□□□□□□□□□□□□□□□□□□□□□□□\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□        ATM终端系统注册功能模块             □\n");
		printf("\t\t\t□                                            □\n");
		printf("\t\t\t□□□□□□□□□□□□□□□□□□□□□□□□\n");

		// 用户自己输入账号的姓名 
		printf("\t\t\t请输入账号姓名:");
		fflush(stdin);                 // 消耗输入字符后的回车操作
		scanf("%s", zhanghu[zhanghuxuhao].xingming);

		// 用户输入密码
		do
		{
			printf("\t\t\t请输入账号密码:");
			fflush(stdin);                 // 消耗输入字符后的回车操作
			scanf("%s", zhanghu[zhanghuxuhao].mima);
			len = strlen(zhanghu[zhanghuxuhao].mima);

			if (len != 6)
			{
				printf("\t\t\t银行账号密码必须是6个数字.\n");
				system("pause");
				return;
			}

			// 此处用户字符串长度函数进行判断密码的位数
			printf("\t\t\t请确认账号密码:");
			fflush(stdin);
			scanf("%s", mima2);

			// 判断密码是否一致
			if (strcmp(zhanghu[zhanghuxuhao].mima, mima2) != 0)
			{
				j++;
				printf("\t\t\t密码错误,你还有%d次机会\n",3-j);
			}

			// 密码输入超过三次自动退出
			if (j == 3)
			{
				system("pause");
				return;
			}


		} while (strcmp(zhanghu[zhanghuxuhao].mima, mima2) != 0);

		// 输入身份证号码
		do
		{
			printf("\t\t\t请输入身份证号码:");
			fflush(stdin);
			scanf("%s", zhanghu[zhanghuxuhao].shenfenzheng);
			len = strlen(zhanghu[zhanghuxuhao].shenfenzheng);
			if (len != 18)
			{
				printf("身份证号码错误,请输入18个字符.\n");
			}
			else  /* 110001201708086611或 11000120170808661X*/
			{

			}
		} while (len != 18);

		getch();
	}
}