小萌新学习C语言的第一个项目:“ATM”项目

#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();
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值