#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct users
{
char username[20];
char password[7];
float money;
int account;//账号
}user;//定义结构体
FILE*fp;//定义数据结构
int /*注销*/logout() //注销后进入主界面
{
int isLogout;//标记注销
char choise;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t确定注销登陆? Y/N:");
fflush(stdin);
scanf("%c",&choise);
if(choise=='y'||choise=='Y')
{
isLogout=1;
printf("\n\n\n\t\t\t\t\t\t按任意键继续");
}
else
{isLogout=0;}
return isLogout;
}
void /*等待*/loading()//等待界面
{
int t=1;
for(int i=1;i<=100;i++)
{
printf("\n\n\n\t\t\t\t\t\t欢迎使用ATM请稍后");
printf("%d%%",i);
for( int k=1;k<=t;k++)
{
printf(".");
}
t++;
if(t==10)t=1;
for(int j=0;j<9000000;j++);//调整速度
system("cls");//清屏
}
}
void /*隐秘*/inputPass(char pass[])//隐藏密码
{
int i=0;//密码字符数组最后一位
char ch;
while(1)//获取
{
ch=getch();
if(ch!='\r') //判断输入的是否是回车
{
if(ch!='\b')//将输入的字符存入到数组的第0位
{
pass[i]=ch;
i++;
printf("*");
}
else
{
if(i>0)
{
i--;
printf("\b \b");//删除*
}
}
}
else
{
break;
}
}
pass[i]='\0';
}
void /*注册*/regist()//注册用户
{
fp=fopen("atm.txt","ab+");
if(fp==NULL)
{
printf("\n\n\t\t\t\t\t\t文件操作失败");
return;
}
system("cls");//清屏
char rePassword[7];
struct users t;//上一个注册的用户
printf("\n\n\t\t\t\t\t\t 注册界面");
printf("\n\n\n\t\t\t\t\t\t请输入用户名:");//默认不重复
fflush(stdin);//清除字符缓冲区
gets(user.username);
while(1)
{
while(1)
{
printf("\n\n\n\t\t\t\t\t\t请输入六位密码:");
fflush(stdin);//清除字符缓冲区
inputPass(user.password);
//判断密码长度
int length=strlen(user.password);
if(length==6)
{
break;
}
else
{
system("cls");//清屏
printf("\n\n\t\t\t\t\t\t\t尊敬的%s",user.username);
printf("\n\n\n\t\t\t\t\t\t您的输入有误,请您输入6位数密码");
}
}
printf("\n\n\n\t\t\t\t\t\t请确认密码:");
inputPass(rePassword);
if(strcmp(user.password,rePassword)==0)
{
rewind(fp);//将指针位置定位到文件的开头
if(fread(&t,sizeof(t),1,fp)==1)
{
//此时指针指向的是文件的末尾
//1.将指针向前移动sizeof(user)单位
fseek(fp,-sizeof(t),2);
//2.从此时的指针位置开始读取sizeof(user)单位
//3.将读取出的数据赋值给一个临时变量(上一个注册的用户)
fread(&t,sizeof(t),1,fp);
//4.取出这个临时变量的帐号
user.account=t.account+1;
}
else
{
user.account=20180001;
}
fseek(fp,0,2);
fwrite(&user,sizeof(user),1,fp);
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t注册成功");
printf("\n\n\n\t\t\t\t\t\t信息如下:");
printf("\n\n\n\t\t\t\t\t\t用户名为:%s",user.username);
printf("\n\n\n\t\t\t\t\t\t账号是:%d",user.account);
fclose(fp);
getch();
break;
}
else
{
printf("\n\n\t\t\t\t\t\t注册两次密码不一致 请重新输入:");
}
}
}
void /*存款*/saveMoney()
{
int money;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用存款功能");
printf("\n\n\n\t\t\t\t\t\t请输入存款金额:");
scanf("%d",&money);
if(money>10000)
{
printf("\n\n\n\t\t\t\t\t\t操作失败! 单次存款不能超过一万元");
}
else
{
user.money=user.money+money;
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功");
}
}
void /*退出*/quit() //退出程序函数
{
char choise;
printf("\n\n\n\t\t\t\t\t\t确定退出系统?Y/N");
fflush(stdin);
scanf("%c",&choise);
if(choise=='y'||choise=='Y')
exit(0);
else
return;
}
void /*注销*/selectMoney()
{
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用查询余额功能");
printf("\n\n\n\t\t\t\t\t\t您的余额是:");
printf("%.2fRMB",user.money);
}
void /*取款*/getMoney()
{
int money;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用取款功能");
printf("\n\n\n\t\t\t\t\t\t请输入取款金额:");
scanf("%d",&money);
if(money>user.money)
{
printf("\n\n\n\t\t\t\t\t\t操作失败,您的余额不足");
}
else
{
user.money=user.money-money;//修改内存
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功");
}
}
void /*转账*/transferMoney()
{
int account;
int i;
int f=0;
int money;
int n=ftell(fp);
struct users t;//临时
system("cls");
printf("\n\n\n\n\t\t\t\t您正在使用转账功能");
printf("\n\n\n\t\t\t\t\t\t请输入对方账号:");
scanf("%d",&account);
fseek(fp,0,2);
int length=ftell(fp);
rewind(fp);
while(ftell(fp)<length){
fread(&t,sizeof(t),1,fp);
if(t.account==account){
f=1;
break;
}
}
if(f==1){
printf("\n\n\n\t\t\t\t\t\t请输入转账金额:");
scanf("%d",&money);
if(money>user.money){
printf("\n\n\n\t\t\t\t\t\t操作失败,余额不足!");
}else{
user.money=user.money-money;
t.money=t.money+money;
fseek(fp,-sizeof(t),1);
fwrite(&t,sizeof(t),1,fp);
fseek(fp,n-sizeof(user),0);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功!");
}
}else{
printf("\n\n\n\t\t\t\t\t\t对方账号不存在");
}
}
void /*改密*/updatePassword() //修改密码
{
char newPassword[7];
char reNewPassword[7];
char oldPassword[7];
int i;
for(i=1;i<=3;i++){
system("cls");
printf("\n\n\n\t\t\t\t\t\t您正在使用修改密码功能");
printf("\n\n\n\t\t\t\t\t\t请输入原始密码:");
fflush(stdin);
inputPass(oldPassword);
if(strcmp(user.password,oldPassword)==0){
break;
}else{
if(i==3){
printf("\n\n\n\t\t\t\t\t\t原始密码输入错误三次,已锁定!");
return;
}
printf("\n\n\n\t\t\t\t\t\t原始密码输入错误,请重新输入!");
printf("\n\n\n\t\t\t\t\t\t按任意键继续...");
getch();
}
}
while(1){
printf("\n\n\n\t\t\t\t\t\t请输入新密码:");
fflush(stdin);
inputPass(newPassword);
if(strlen(newPassword)!=6){
printf("\n\n\n\t\t\t\t\t\t密码输入有误,请输入6位密码!");
continue;
}
printf("\n\n\n\t\t\t\t\t\t请再次输入新密码:");
fflush(stdin);
inputPass(reNewPassword);
if(strcmp(newPassword,reNewPassword)==0){
strcpy(user.password,newPassword);//修改的内存
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t密码修改成功");
break;
}else{
printf("\n\n\n\t\t\t\t\t\t两次密码输入不一致,请重新输入");
}
}
}
void /*服务*/service() //服务函数
{
char choise;
while(1)
{
system("cls");
int isLogout;//标记注销
printf("\n\n\n\t\t\t\t\t\t服务界面");
printf("\n\n\n\t\t\t\t\t\tA.查询余额");
printf("\n\n\n\t\t\t\t\t\tB.存款");
printf("\n\n\n\t\t\t\t\t\tC.取款");
printf("\n\n\n\t\t\t\t\t\tD.转账");
printf("\n\n\n\t\t\t\t\t\tE.修改密码");
printf("\n\n\n\t\t\t\t\t\tF.注销");
printf("\n\n\n\t\t\t\t\t\tG.退出系统");
printf("\n\n\n\t\t\t\t\t\t请选择:");
fflush(stdin);
scanf("%c",&choise);
switch(choise)
{
case 'a':
case 'A':
printf("\n\n\n\t\t\t\t\t\t正在查询余额");
selectMoney();
break;
case 'b':
case 'B':
printf("\n\n\n\t\t\t\t\t\t正在存款");
saveMoney();
break;
case 'c':
case 'C':
getMoney();
break;
case 'd':
case 'D':
transferMoney();
break;
case 'e':
case 'E':
updatePassword();
break;
case 'f':
case 'F':
isLogout=logout();
if(isLogout==1)
{
return;
}
break;
case 'g':
case 'G':
quit();
break;
default:
printf("\n\n\n\t\t\t\t\t\t输入有误,请重新输入:");
break;
}
printf("\n\n\n\t\t\t\t\t\t按任意键继续");
getch();
}
}
void /*登录*/login(){
int account;
int length;
int f=0;
char password[7];
fp=fopen("atm.txt","rb+");
if(fp==NULL)
{
printf("\n\n\n\t\t\t\t\t\t文件丢失");
return;
}
system("cls");
printf("\n\n\n\t\t\t\t\t\t登录界面");
printf("\n\n\n\t\t\t\t\t\t请输入账号:");
scanf("%d",&account);
fseek(fp,0,2);
length=ftell(fp);
rewind(fp);
while(ftell(fp)<length){//判断指针后是否还有数据
fread(&user,sizeof(user),1,fp);
//将输入的账号与文件中的对比
if(user.account==account){
f=1;
break;
}
}
if (f==1){
for(int j=1;j<=3;j++){
printf("\n\n\n\t\t\t\t\t\t请输入密码");
fflush(stdin);
inputPass(password);
if(strcmp(user.password ,password)==0){//密码正确
printf("\n\n\n\t\t\t\t\t\t登录成功");
printf("\n\n\n\t\t\t\t\t\t即将进入服务界面,按任意键继续....");
getch();
service();
break;
}else{
if(j==3){
printf("\n\n\n\t\t\t\t\t\t密码输入错误三次,已锁定....");
getch();
break;
}
printf("\n\n\n\t\t\t\t\t\t密码错误,请重新输入");
}
}
}else{
printf("\n\n\n\t\t\t\t\t\t账号不存在! 按任意键继续: ");
}
}
void main()
{
//loading();
while(1)
{
printf("\n\n\n\n\t\t\t\t\t\ta.用户注册");
printf("\n\n\t\t\t\t\t\tb.用户登陆");
printf("\n\n\t\t\t\t\t\tc.退出系统");
printf("\n\n\t\t\t\t\t\t请输入一个选项:");
char choise;
fflush(stdin);//清除字符缓冲区
scanf("%c",&choise);
if(choise=='a'||choise=='A')
{
printf("\n\n\n\t\t\t\t\t\t正在注册......");
regist();
}
else if(choise=='b'||choise=='B')
{
printf("\n\n\n\t\t\t\t\t\t正在登陆......");
login();
}
else if(choise=='c'||choise=='C')
quit();
else
printf("\n\n\n\t\t\t\t\t\t您的输入有误......");
getch();
system("cls");//清屏
}
//quiting();
}
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct users
{
char username[20];
char password[7];
float money;
int account;//账号
}user;//定义结构体
FILE*fp;//定义数据结构
int /*注销*/logout() //注销后进入主界面
{
int isLogout;//标记注销
char choise;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t确定注销登陆? Y/N:");
fflush(stdin);
scanf("%c",&choise);
if(choise=='y'||choise=='Y')
{
isLogout=1;
printf("\n\n\n\t\t\t\t\t\t按任意键继续");
}
else
{isLogout=0;}
return isLogout;
}
void /*等待*/loading()//等待界面
{
int t=1;
for(int i=1;i<=100;i++)
{
printf("\n\n\n\t\t\t\t\t\t欢迎使用ATM请稍后");
printf("%d%%",i);
for( int k=1;k<=t;k++)
{
printf(".");
}
t++;
if(t==10)t=1;
for(int j=0;j<9000000;j++);//调整速度
system("cls");//清屏
}
}
void /*隐秘*/inputPass(char pass[])//隐藏密码
{
int i=0;//密码字符数组最后一位
char ch;
while(1)//获取
{
ch=getch();
if(ch!='\r') //判断输入的是否是回车
{
if(ch!='\b')//将输入的字符存入到数组的第0位
{
pass[i]=ch;
i++;
printf("*");
}
else
{
if(i>0)
{
i--;
printf("\b \b");//删除*
}
}
}
else
{
break;
}
}
pass[i]='\0';
}
void /*注册*/regist()//注册用户
{
fp=fopen("atm.txt","ab+");
if(fp==NULL)
{
printf("\n\n\t\t\t\t\t\t文件操作失败");
return;
}
system("cls");//清屏
char rePassword[7];
struct users t;//上一个注册的用户
printf("\n\n\t\t\t\t\t\t 注册界面");
printf("\n\n\n\t\t\t\t\t\t请输入用户名:");//默认不重复
fflush(stdin);//清除字符缓冲区
gets(user.username);
while(1)
{
while(1)
{
printf("\n\n\n\t\t\t\t\t\t请输入六位密码:");
fflush(stdin);//清除字符缓冲区
inputPass(user.password);
//判断密码长度
int length=strlen(user.password);
if(length==6)
{
break;
}
else
{
system("cls");//清屏
printf("\n\n\t\t\t\t\t\t\t尊敬的%s",user.username);
printf("\n\n\n\t\t\t\t\t\t您的输入有误,请您输入6位数密码");
}
}
printf("\n\n\n\t\t\t\t\t\t请确认密码:");
inputPass(rePassword);
if(strcmp(user.password,rePassword)==0)
{
rewind(fp);//将指针位置定位到文件的开头
if(fread(&t,sizeof(t),1,fp)==1)
{
//此时指针指向的是文件的末尾
//1.将指针向前移动sizeof(user)单位
fseek(fp,-sizeof(t),2);
//2.从此时的指针位置开始读取sizeof(user)单位
//3.将读取出的数据赋值给一个临时变量(上一个注册的用户)
fread(&t,sizeof(t),1,fp);
//4.取出这个临时变量的帐号
user.account=t.account+1;
}
else
{
user.account=20180001;
}
fseek(fp,0,2);
fwrite(&user,sizeof(user),1,fp);
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t注册成功");
printf("\n\n\n\t\t\t\t\t\t信息如下:");
printf("\n\n\n\t\t\t\t\t\t用户名为:%s",user.username);
printf("\n\n\n\t\t\t\t\t\t账号是:%d",user.account);
fclose(fp);
getch();
break;
}
else
{
printf("\n\n\t\t\t\t\t\t注册两次密码不一致 请重新输入:");
}
}
}
void /*存款*/saveMoney()
{
int money;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用存款功能");
printf("\n\n\n\t\t\t\t\t\t请输入存款金额:");
scanf("%d",&money);
if(money>10000)
{
printf("\n\n\n\t\t\t\t\t\t操作失败! 单次存款不能超过一万元");
}
else
{
user.money=user.money+money;
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功");
}
}
void /*退出*/quit() //退出程序函数
{
char choise;
printf("\n\n\n\t\t\t\t\t\t确定退出系统?Y/N");
fflush(stdin);
scanf("%c",&choise);
if(choise=='y'||choise=='Y')
exit(0);
else
return;
}
void /*注销*/selectMoney()
{
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用查询余额功能");
printf("\n\n\n\t\t\t\t\t\t您的余额是:");
printf("%.2fRMB",user.money);
}
void /*取款*/getMoney()
{
int money;
system("cls");//清屏
printf("\n\n\n\t\t\t\t\t\t您正在使用取款功能");
printf("\n\n\n\t\t\t\t\t\t请输入取款金额:");
scanf("%d",&money);
if(money>user.money)
{
printf("\n\n\n\t\t\t\t\t\t操作失败,您的余额不足");
}
else
{
user.money=user.money-money;//修改内存
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功");
}
}
void /*转账*/transferMoney()
{
int account;
int i;
int f=0;
int money;
int n=ftell(fp);
struct users t;//临时
system("cls");
printf("\n\n\n\n\t\t\t\t您正在使用转账功能");
printf("\n\n\n\t\t\t\t\t\t请输入对方账号:");
scanf("%d",&account);
fseek(fp,0,2);
int length=ftell(fp);
rewind(fp);
while(ftell(fp)<length){
fread(&t,sizeof(t),1,fp);
if(t.account==account){
f=1;
break;
}
}
if(f==1){
printf("\n\n\n\t\t\t\t\t\t请输入转账金额:");
scanf("%d",&money);
if(money>user.money){
printf("\n\n\n\t\t\t\t\t\t操作失败,余额不足!");
}else{
user.money=user.money-money;
t.money=t.money+money;
fseek(fp,-sizeof(t),1);
fwrite(&t,sizeof(t),1,fp);
fseek(fp,n-sizeof(user),0);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t操作成功!");
}
}else{
printf("\n\n\n\t\t\t\t\t\t对方账号不存在");
}
}
void /*改密*/updatePassword() //修改密码
{
char newPassword[7];
char reNewPassword[7];
char oldPassword[7];
int i;
for(i=1;i<=3;i++){
system("cls");
printf("\n\n\n\t\t\t\t\t\t您正在使用修改密码功能");
printf("\n\n\n\t\t\t\t\t\t请输入原始密码:");
fflush(stdin);
inputPass(oldPassword);
if(strcmp(user.password,oldPassword)==0){
break;
}else{
if(i==3){
printf("\n\n\n\t\t\t\t\t\t原始密码输入错误三次,已锁定!");
return;
}
printf("\n\n\n\t\t\t\t\t\t原始密码输入错误,请重新输入!");
printf("\n\n\n\t\t\t\t\t\t按任意键继续...");
getch();
}
}
while(1){
printf("\n\n\n\t\t\t\t\t\t请输入新密码:");
fflush(stdin);
inputPass(newPassword);
if(strlen(newPassword)!=6){
printf("\n\n\n\t\t\t\t\t\t密码输入有误,请输入6位密码!");
continue;
}
printf("\n\n\n\t\t\t\t\t\t请再次输入新密码:");
fflush(stdin);
inputPass(reNewPassword);
if(strcmp(newPassword,reNewPassword)==0){
strcpy(user.password,newPassword);//修改的内存
fseek(fp,-sizeof(user),1);
fwrite(&user,sizeof(user),1,fp);
printf("\n\n\n\t\t\t\t\t\t密码修改成功");
break;
}else{
printf("\n\n\n\t\t\t\t\t\t两次密码输入不一致,请重新输入");
}
}
}
void /*服务*/service() //服务函数
{
char choise;
while(1)
{
system("cls");
int isLogout;//标记注销
printf("\n\n\n\t\t\t\t\t\t服务界面");
printf("\n\n\n\t\t\t\t\t\tA.查询余额");
printf("\n\n\n\t\t\t\t\t\tB.存款");
printf("\n\n\n\t\t\t\t\t\tC.取款");
printf("\n\n\n\t\t\t\t\t\tD.转账");
printf("\n\n\n\t\t\t\t\t\tE.修改密码");
printf("\n\n\n\t\t\t\t\t\tF.注销");
printf("\n\n\n\t\t\t\t\t\tG.退出系统");
printf("\n\n\n\t\t\t\t\t\t请选择:");
fflush(stdin);
scanf("%c",&choise);
switch(choise)
{
case 'a':
case 'A':
printf("\n\n\n\t\t\t\t\t\t正在查询余额");
selectMoney();
break;
case 'b':
case 'B':
printf("\n\n\n\t\t\t\t\t\t正在存款");
saveMoney();
break;
case 'c':
case 'C':
getMoney();
break;
case 'd':
case 'D':
transferMoney();
break;
case 'e':
case 'E':
updatePassword();
break;
case 'f':
case 'F':
isLogout=logout();
if(isLogout==1)
{
return;
}
break;
case 'g':
case 'G':
quit();
break;
default:
printf("\n\n\n\t\t\t\t\t\t输入有误,请重新输入:");
break;
}
printf("\n\n\n\t\t\t\t\t\t按任意键继续");
getch();
}
}
void /*登录*/login(){
int account;
int length;
int f=0;
char password[7];
fp=fopen("atm.txt","rb+");
if(fp==NULL)
{
printf("\n\n\n\t\t\t\t\t\t文件丢失");
return;
}
system("cls");
printf("\n\n\n\t\t\t\t\t\t登录界面");
printf("\n\n\n\t\t\t\t\t\t请输入账号:");
scanf("%d",&account);
fseek(fp,0,2);
length=ftell(fp);
rewind(fp);
while(ftell(fp)<length){//判断指针后是否还有数据
fread(&user,sizeof(user),1,fp);
//将输入的账号与文件中的对比
if(user.account==account){
f=1;
break;
}
}
if (f==1){
for(int j=1;j<=3;j++){
printf("\n\n\n\t\t\t\t\t\t请输入密码");
fflush(stdin);
inputPass(password);
if(strcmp(user.password ,password)==0){//密码正确
printf("\n\n\n\t\t\t\t\t\t登录成功");
printf("\n\n\n\t\t\t\t\t\t即将进入服务界面,按任意键继续....");
getch();
service();
break;
}else{
if(j==3){
printf("\n\n\n\t\t\t\t\t\t密码输入错误三次,已锁定....");
getch();
break;
}
printf("\n\n\n\t\t\t\t\t\t密码错误,请重新输入");
}
}
}else{
printf("\n\n\n\t\t\t\t\t\t账号不存在! 按任意键继续: ");
}
}
void main()
{
//loading();
while(1)
{
printf("\n\n\n\n\t\t\t\t\t\ta.用户注册");
printf("\n\n\t\t\t\t\t\tb.用户登陆");
printf("\n\n\t\t\t\t\t\tc.退出系统");
printf("\n\n\t\t\t\t\t\t请输入一个选项:");
char choise;
fflush(stdin);//清除字符缓冲区
scanf("%c",&choise);
if(choise=='a'||choise=='A')
{
printf("\n\n\n\t\t\t\t\t\t正在注册......");
regist();
}
else if(choise=='b'||choise=='B')
{
printf("\n\n\n\t\t\t\t\t\t正在登陆......");
login();
}
else if(choise=='c'||choise=='C')
quit();
else
printf("\n\n\n\t\t\t\t\t\t您的输入有误......");
getch();
system("cls");//清屏
}
//quiting();
}