实现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;