C语言ATM项目实践

实现ATM机的用户注册,账号自动生成,用户登录,以及登陆页面内的查询余额,存款,取款,转账,密码修改,以及注销账户等功能的构建,并实现了用户数据的永久保存。

挺离谱 自己的图 自己的码

广告涉嫌违规,外链过多,缺少代码,图片涉嫌违规。 直接限流

 

 代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
//函数调用
void regist();
void login();
void quit();
void selectmoney();
void savemoney();
void getmoney();
void movemoney();
void updatePassword();
//全局变量
int find;
int dfind;


struct bank
{
	char name1[20];//用户名
	char password[20];//账号密码
	int account;
	double money;
}kehu,t;
//声明指针变量 FILE    fopen("文件路径文件名",“打开模式”)
FILE *fp;
//密码函数
void inputPassword(char mima[])
{
	int i = 0;
	char ch;
	while (1)
	{
		ch = _getch();
		if (ch != '\r')
		{
			if (ch != '\b')
			{
				mima[i] = ch; i++; printf("*");
			}
			else
			{
				i--; printf("\b \b");
			}
		}
		else
		{
			break;
		}
	}
	mima[i] = '\0';
	printf("\n");
}

//注册函数                      
void regist()
{

	char password1[20];//确认密码

	//    fp=fopen("ATM.txt","ab+");
	fopen_s(&fp,"ATM.txt", "ab+");
	//    更改

	if (fp == NULL)
	{
		printf("打开文件失败");
		return;
	}
	fflush(stdin);
	char a[1];
	gets_s(a);
	printf("\n\t\t\t\t请输入用户名:");
	fflush(stdin);
	//scanf_s("%s", kehu[count].name1);
	gets_s(kehu.name1);
	fflush(stdin);//清楚键盘缓冲区的回车符
	printf("\n\t\t\t\t用户名是:%s", kehu.name1);
	//puts(kehu.name1);
	while (1)
	{
		while (1)
		{
			printf("\n\n\t\t\t\t请输入六位数密码:");
			fflush(stdin);
			inputPassword(kehu.password);
			int length = strlen(kehu.password);
			if (length == 6)break;//判断密码位数要求是否符合
			else
				printf("\n\n\t\t\t\t密码长度必须为六位");
		}
		printf("\t\t\t\t请确认密码:");
		fflush(stdin);
		inputPassword(password1);
		if (strcmp(kehu.password, password1) == 0)break;
		else
			printf("\n\n\t\t\t\t两次密码不一致,请重新输入");
	}
	//printf("\n\n\t\t\t请输入用户账号:");
	//scanf_s("%d", &kehu.account);

	rewind(fp);//将文件指针定位到文件开头
	if(fread(&t,sizeof(t),1,fp)==1)
	{
		fseek(fp, -sizeof(kehu), 2);
		fread(&t, sizeof(t), 1, fp);//读取最后一条记录;
		kehu.account += 1;
	}
	else
	{
		kehu.account = 20210001;
	}

	kehu.money = 0;
	fseek(fp, 0, 2);
	fwrite(&kehu, sizeof(struct bank), 1, fp);
	fclose(fp);
	printf("\n\n\t\t\t注册成功\n");
	printf("\n\n\t\t\t您的账号为:%d\n", kehu.account);
	return;
}


//查询函数
void selectmoney()
{
	system("cls");
	printf("\n\n\t\t\t您现在使用的是查询功能");
	printf("\n\n\t\t\t您的账户余额为:%.2f", t.money);
}

//存款函数
void savemoney()
{
	system("cls");
	int qian;
	printf("\n\n\t\t\t您现在正在执行的是存款服务");
	printf("\n\n\t\t\t请输入存款金额:");
	scanf_s("%d", &qian);
	t.money += qian;//修改内存
	fseek(fp, -sizeof(t), 1);
	fwrite(&t, sizeof(t), 1, fp);
	printf("\n\n\t\t\t存款成功\n");
}

//取款函数
void getmoney()
{
	system("cls");
	int qian;
	printf("\n\n\t\t\t您现在正在执行的是取款服务");
	printf("\n\n\t\t\t请输入取款金额:");
	scanf_s("%d", &qian);
	if (t.money >= qian)
	{
		t.money -= qian;
		fseek(fp, -sizeof(t), 1);
		fwrite(&t, sizeof(t), 1, fp);
		printf("\n\n\t\t\t取款成功\n");
	}
	else
	{
		printf("\n\n\t\t\t余额不足");
	}
}

//转账函数
void movemoney()
{
	printf("\n\n\t\t\t您现在正在执行的是转账服务");
	int zhanghao, i, f=0, qian;
	struct bank temp;
	int n = ftell(fp);
	printf("\n\n\t\t\t请输入对方账号");
	scanf_s("%d", &zhanghao);
	rewind(fp);
	while (fread(&temp,sizeof(temp),1,fp)==1)
	{
		if (zhanghao == temp.account)
		{
			f = 1;
			break;
		}
	} 
	if (f == 1)
	{
		printf("\n\n\t\t\t请输入转账金额:");
		scanf_s("%d", &qian);
		if (t.money >= qian)
		{
			t.money -= qian;
			temp.money += qian;
			//修改文件数据
			fseek(fp, -sizeof(t), 1);
			fwrite(&temp, sizeof(t), 1, fp);
			fseek(fp, n - sizeof(t), 0);
			fwrite(&t, sizeof(t), 1, fp);
			printf("\n\n\t\t\t\t转账成功");
		}
		else
		{
			printf("\n\n\t\t\t余额不足\n");
		}
	}
	else
	{
		printf("\n\n\t\t\t不存在要转账的账号");
	}
}

//修改密码函数
void updatePassword()
{
	system("cls");
	int i;
	char password1[20], password2[20], password3[20];
	printf("\n\n\t\t\t您现在使用的是修改密码功能");
	for (i = 0; i <= 2; i++)
	{
		printf("\n\n\t\t\t请输入旧密码:");
		inputPassword(password1);
		if (strcmp(password1,t.password) == 0)
		{
			break;
		}
		else
		{
			printf("\n\n\t\t\t旧密码有误,请重新输入:");
		}
	}
	if (i < 3)
	{
		while (1)
		{
			printf("\n\n\t\t\t请输入新密码:");
			inputPassword(password2);
			printf("\n\n\t\t\t请输入确定新密码:");
			inputPassword(password3);
			if (strcmp(password2, password3) == 0)
			{
				strcpy_s(t.password, password3);
				fseek(fp, -sizeof(t), 1);
				fwrite(&t, sizeof(t), 1, fp);
				printf("\n\n\t\t\t修改成功\n");
				break;
			}
			else
			{
				printf("\n\n\t\t\t两次密码输入不一致,请重新输入/n");
			}
		}
	}
	else
	{
		printf("\n\n\t\t\t三次旧密码输入错误,吞卡.......");
	}
	_getch();
}

//注销函数
int zhuxiao()
{
	system("cls");
	char sf;
	int zx = 0;
	//fflush(stdin);
	printf("\n\n\t\t\t您现在使用的是注销功能");
	printf("\n\n\t\t\t您要注销的客户账号是:%d\n",t.account);
	printf("\n\n\t\t\t您是否要对此账号注销?\n \t\t\t注销【Y】         取消【N】\n");
	fflush(stdin);
	char a[1];
	gets_s(a);
	printf("\n\t\t\t\t");
	scanf_s("%c", &sf);
	if (sf == 'y' || sf == 'Y')
	{
		printf("\n\n\t\t\t正在对账号 %d 注销", t.account);
		zx = 1;
	}
	else
	{
		printf("\n\n\t\t\t已取消\n\n");
	}
	return zx;
}

//服务界面函数
void service()
{
	char o;
	while (1)
	{
		char a[1];
		gets_s(a);
		system("cls");
		printf("\n\n\t\t\t您正在使用服务功能页面");
		printf("\n\n\t\t\t a,查询余额");
		printf("\n\n\t\t\t b,存款");
		printf("\n\n\t\t\t c,取款");
		printf("\n\n\t\t\t d,转账");
		printf("\n\n\t\t\t e,修改密码");
		printf("\n\n\t\t\t f,注销");
		printf("\n\n\t\t\t g,退出系统");
		printf("\n\n\t\t\t\t请选择服务种类:");
		fflush(stdin);
  		scanf_s("%c", &o);
		switch (o)
		{
		case'A':
		case'a': {selectmoney(); break; }
		case'B':
		case'b': {savemoney(); break; }
		case'C':
		case'c': {getmoney(); break; }
		case'D':
		case'd': {movemoney(); break; }
		case'E':
		case'e': {updatePassword(); break; }
		case'F':
		case'f': {int zx = zhuxiao(); if (zx == 1) return; break; }
		case'G':
		case'g': {quit(); break; }
		}
		printf("按任意键继续......\n\n");
		_getch();
	}
}

//登录函数
void login()
{
	fp = fopen("ATM.txt", "rb+");
	if (fopen == NULL)
	{
		printf("\n\n\t\t\t\t打开失败\n");
		return;
	}
	printf("\n\t\t\t\t\t您正在执行的是登录函数");
	int zhanghao, f = 0, i;
	char password1[10];
	printf("\n\n\t\t\t\t请输入您的帐号:");
	scanf_s("%d", &zhanghao);
	while(fread(&t,sizeof(t),1,fp)==1)
	{
		if (zhanghao == t.account)
		{
			f = 1;
			break;
		}
	}
	int j = 0;
	if (f == 1)
	{
		for (int j = 0; j <= 3; j++)
		{
			printf("\n\t\t\t\t请输入您的密码:");
			inputPassword(password1);
			if (strcmp(password1,t.password) == 0)
			{
				printf("\n\n\t\t\t\t登陆成功");
				service();
				break;
			}
		}
		if (j == 3)
		{
			printf("三次密码验证都不成功,吞卡中......");
		}
	}
	else
	{
		printf("\n\n\t\t\t\t没有此账号");
	}
	fclose(fp);
}

//退出函数
void quit()
{
	system("cls");
	printf("\n\t\t\t\t\t退出ATM机");
	printf("正在退出,请稍等");
	exit(0);//退出系统函数
	return;
}

//主函数
int main()
{
	int i = 0, j = 0, n = 1, k = 0, p = 0, back1;
	char o;
	for (i = 1; i <= 100; i++)
	{
		printf("\n\n\t\t\t\t\t\t欢迎进入大连工业大学ATM系统\n");
		printf("\n\t\t\t\t\t正 在 进 入 页 面 , 请 稍 等 ");
		for (k = 1; k <= n; k++)
		{
			printf(".");
		}
		n++;
		if (n == 10)n = 1;
		printf("\n%d%%", i++);
		for (int m = 0; m <= 3; m++);
		system("cls");
	}
	while (1)
	{
		printf("\n\n\n\t\t\t\tATM系统正在为您服务\n\n");
		printf("\t\t\t\t服务【A】:用户注册\n\n");
		printf("\t\t\t\t服务【B】:用户登录\n\n");
		printf("\t\t\t\t服务【C】:退出系统\n\n");
		printf("\t\t\t\t请选择服务:");
		fflush(stdin);//清楚键盘缓冲区的回车符
		scanf_s("%c", &o);
		fflush(stdin);
		if (o == 'a' || o == 'A')
		{
			system("cls");
			regist();
		}
		else if (o == 'b' || o == 'B')
		{
			system("cls");
			login();
		}
		else if (o == 'c' || o == 'C')
		{
			system("cls");
			quit();
		}
		else
		{
			printf("\t\t\t\t输入有误,请重试\n");
		}
		printf("\n\t\t\t\t\t按任意键继续......");
		_getch();//不经过键盘缓冲区的字符输入
		char a[1];
		gets_s(a);
		fflush(stdin);
		system("cls");
	}
	return 0;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

find1star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值