ATM模拟终端操作系统


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define N 20
void Initial();     //初始化界面
void BuildUser();      //管理员新建用户
int UserLogin();      //用户登陆界面
void AdminLogin();     //管理员登陆界面
void Menu(int n);           //主界菜单
void ChangePassword();      //密码修改
typedef struct User
{
    char UserID[N];              //用户ID
    char Name[N];                  //姓名
    char UserPassword[N];     //用户密码
	float money;               //用户当前余额
	char time[N];          //用户最后一次使用系统时间
}USERDATA;
typedef struct D
{
	char id[N];
	char o;
	char money;
	char balance;
	char tim[N];
}PDATA;
float MoneySave(struct User *p);
float DrawMoney(struct User *p);
float Trans(struct User *p);
void Balance();
USERDATA userdata[500];
int main()
{
    system("cls");
	system("title ATM终端模拟系统");
	system("color 0b");
	Initial();
	//printf("调试");
}

void Initial()
{
	int a,ret,b;
	do{                      //错误输入非1或2,重新输入

	printf("\n\n\n\n\n\n                                                \n");
	printf("                                               *欢迎使用ATM终端服务系统*\n");
	printf("                                               \n\n\n");
	printf("                                    _________________________________________________\n");
	printf("                                   |                    1 用户登录                   |\n\n\n");
	printf("                                    _________________________________________________\n");
	printf("                                   |                    2 前台服务                   |\n\n\n\n\n\n\n");
	printf("                                                                                                      ");
	system("date /t");
	printf("                                                                                                      ");
	system("time /t");
	do{                     //实现检错,错误输入重新输
	   printf("                   请输入您的选择 ;\n");
	   printf("                                    ");
	   scanf("%d",&a);
	   switch(a)             //初始选项 非1,2重新输入。
	   {
	    case 1: b=1;break;
		case 2: b=1;break;
		default:
		    printf("                                    ");
		    printf("错误输入,请重试。\n");break;
	   }
	   getchar();
	}while(b!=1);
	if(a==1)
	{
		ret=UserLogin();
		Menu(ret);
        ret=1;
	}
	else if(a==2)
	{
		system("cls");        //清屏
        AdminLogin();
        ret=1;
	}
	}while(ret!=1);
}
int UserLogin()
{
	char a[N],b[N];
	FILE *fp;

		if((fp=fopen("iddata.txt","a+"))==NULL)
	{
		printf("打开失败\n");
		exit(0);
	}
	int i=0,j,k=0,s;
	do{
		 fscanf(fp,"%s%s%s%f",&userdata[i].Name,&userdata[i].UserID,&userdata[i].UserPassword,&userdata[i].money);
		 i++;
	}while(!feof(fp));
	fclose(fp);
	printf("                                    ");
	printf("请输入用户账号:\n");
	printf("                                    ");
    gets(a);
    printf("                                    ");
    printf("请输入用户密码:\n");
    printf("                                    ");
    gets(b);
	for(j=0;j<i;j++)
	{
		if(strcmp(a,userdata[j].UserID)==0)
		{
		    for(k=0;k<3;k++)
            {
                if(strcmp(b,userdata[j].UserPassword)==0) return j;
                else
                {
                    printf("                                    ");
                    printf("密码错误请重新输入:\n");
                    printf("                                    ");
                    gets(b);
                }
            }
            printf("                                    ");
            printf("密码已输入错误三次,即将退出程序。\n");
            printf("                                    ");
            getch();
            exit(0);
        }
	}
	printf("查无该用户,请检查后重新输入。\n");
	UserLogin();
}
void AdminLogin()
{
    char adminID[N]="1",adminPassword[N]="1";//管理员id 和 密码
    char a[N],b[N];
    int i=0,j=0,s;
   /* FILE *fp;
    if((fp=fopen("admin.txt","r"))==NULL)
    {
        printf("Failure to open admin.txt!\n");
        exit(0);
    }
    fscanf(fp,"%s%s",adminID,adminPassword);   //将管理员的ID和Password从文件中读入内存
    fclose(fp);*/
	do{
            printf("                                    ");
    printf("请输入管理员账号:\n");
    printf("                                    ");
    gets(a);
    printf("                                    ");
    printf("请输入管理员密码:\n");
    printf("                                    ");
    gets(b);
    if(strcmp(a,adminID)==0)  //判断管理员账号是否相同
    {
        if(strcmp(b,adminPassword)==0)
		{
			printf("登陆成功,请按任意键开始录入用户。\n");
			getch();
			system("cls");
			BuildUser();
			printf("录入完成,退出程序");
			exit(0);
		}
		else
		{
			printf("密码错误,请重新输入。\n");
			s=1;
		}

    }
	else
	{
		printf("账号密码不匹配,请重试。\n");
		s=1;
	}
	if(s==1)
	{
		getch();
		system("cls");
	}
	}while(s==1);
}
void Menu(int n)
{
    FILE *fp,*fp1;
    time_t timep;
    time(&timep);
    int i=0,o;float money=0;
    if((fp=fopen("iddata.txt","a+"))==NULL)
	{
		printf("打开失败\n");
		exit(0);
	}
	do{
		 fscanf(fp,"%s%s%s%f",&userdata[i].Name,&userdata[i].UserID,&userdata[i].UserPassword,&userdata[i].money);
		 i++;
	}while(!feof(fp));                              //printf("调试");
    fclose(fp);
    char path[30]="G:\\1\\ATM\\private_record\\",suffix[]=".txt";
    strcat(path,userdata[n].UserID);
    strcat(path,suffix);
    if((fp1=fopen(path,"r+"))==NULL)
	{
	    fp1=fopen(path,"w+");
	    fprintf(fp1,"%-20s%-10s%-10s%-10s% 10s\n","账号","操作","金额","余额","时间");
	}
	else fp=fopen(path,"a+");
	//money=0;
	do{
	system("cls");
	printf("\n\n\n\n\n\n\n\n\n                                     ");
	printf("=========================================\n");
    printf("                                     ");
	printf("|              1.用户存款               |\n");
	printf("                                     ");
	printf("|              2.用户取款               |\n");
	printf("                                     ");
	printf("|              3.用户转账               |\n");
	printf("                                     ");
	printf("|              4.查看余额               |\n");
	printf("                                     ");
	printf("|              5.修改密码               |\n");
	printf("                                     ");
	printf("|              6.退出登录               |\n");
	printf("                                     ");
	printf("=========================================\n");
	printf("                                    ");
	printf("请选择您的操作:\n");
	printf("                                    ");
    scanf("%d",&o);
    switch(o)
    {
        case 1:money=MoneySave(&userdata[n]);break;
		case 2:money=DrawMoney(&userdata[n]);break;
		case 3:money=Trans(&userdata[n]);break;
		case 4:printf("                                    ");
		    printf("你的当前余额为:%.2fRMB。\n",userdata[n].money);
		    printf("                                                         ");
			 printf("请按键返回。");getch();break;
		case 5:ChangePassword();break;
		case 6:printf("                                    ");
		    printf("欢迎下次使用,谢谢。\n");getch();break;
    }
	time(&timep);
	if(o!=6&&o!=4&&o!=5&&money!=0)
	   fprintf(fp1,"%-20s%-10d%-10.2f%-10.2f%10s\n",userdata[n].UserID,o,money,userdata[n].money,ctime(&timep));
	}while(o!=6);
	fclose(fp1);

}
void BuildUser()
{
	USERDATA userdata;
	int i=0;FILE *fp;    //判断是否继续录入,如果继续按1,否则按2
	char ch;
		if((fp=fopen("iddata.txt","a+"))==NULL)
    {
        printf("Failure to open admin.txt!\n");
        exit(0);
    }
	do{
        printf("                                    ");
		printf("请输入用户姓名:\n");
    printf("                                    ");
		gets(userdata.Name);
		printf("                                    ");
		printf("请输入用户卡号:\n");
		printf("                                    ");
		gets(userdata.UserID);
		printf("                                    ");
		printf("请输入用户密码\n");
		printf("                                    ");
		gets(userdata.UserPassword);
		printf("                                    ");
		printf("请输入用户当前金额\n");
		printf("                                    ");
		scanf("%f",&userdata.money);
		fprintf(fp,"%-10s%-10s%-10s%-10.2f\n",userdata.Name,userdata.UserID,userdata.UserPassword,userdata.money);
		system("cls");
		printf("录入成功。\n继续录入请按 1 。\n结束录入并推出登陆请按 2。\n");
	 	scanf("%d",&i);
		ch=getchar();
		}while(i==1);
		fclose(fp);
		if(i==2) main();
}
float MoneySave(struct User *p)
{
    float money;
    printf("                                    ");
    printf("请输入您的存款金额:\n");
	do{
        printf("                                    ");
		scanf("%f",&money);
		if((int)money%50!=0){
                printf("                                    ");
		printf("对不起,银行有些垃圾。只能存入50或100元的钞票。\n请重新开始你的存款:\n");}
	}while((int)money%50!=0);
	p->money+=money;
	printf("                                    ");
	printf("成功存入%.2f元,请按任意键返回上层。\n",money);
	printf("                                    ");
	getch();
	return money;
}
float DrawMoney(struct User *p)
{
	float money;
	printf("                                    ");
	printf("请输入您的取款金额:\n");
	do{
        printf("                                    ");
		scanf("%f",&money);
		if(money>p->money)
		{
			printf("您卡里没有辣么多钱了\n");
		}
		if(money>2500)
		{
		    printf("                                    ");
            printf("一次最多可以取2500元\n");
		}
		if((int)money%50!=0)
		{
		    printf("                                    ");
			printf("只能取出面值为50或100的RMB。\n");
		}
	}while(money>p->money||money>2500||(int)money%50!=0);
	p->money-=money;
	printf("                                    ");
	printf("成功取出%.2f元。请按任意键返回上层。\n",money);
	getch();
	return -money;
}
float Trans(struct User *p)
{
	FILE *fp;
	char a[N];
	float money;
	printf("                                    ");
	printf("请输入您要转账的同行账户:\n");
re:
    printf("                                    ");
	scanf(" %s",a);
	char path[30]="G:\\1\\ATM\\private_record\\",suffix[]=".txt";
    strcat(path,a);
    strcat(path,suffix);
	if((fp=fopen(path,"r+"))==NULL)
	{
	    fp=fopen(path,"w+");
	    printf("                                    ");
	    printf("该账户不存在,请重新输入转账账户。\n");
		goto re;
	}
	else
	{
	    printf("                                    ");
		printf("请输入转账金额:\n");
		printf("                                    ");
		scanf("%f",&money);
		while(money>p->money||money<=0)
		{
			if(money>p->money)
            {
            printf("                                    ");
			printf("您卡里没有辣么多钱了\n");
			printf("                                    ");
			printf("请先按键查询余额后重新确认转账金额:\n");
			printf("                                    ");
			getch();return 0;
			break;
            }
		}
		p->money-=money;
		printf("                                    ");
		printf("成功转入目标账户%.2f元,请按任意键返回上层。\n",money);
		fclose(fp);
		printf("                                    ");
		getch();
		return -money;
	}
}
void ChangePassword()
{
	char str1[7],str2[7];
	do{
        printf("                                    ");
		printf("请输入新的密码,密码为6位:\n");
        printf("                                    ");
		scanf("%s",str1);
		printf("                                    ");
		printf("请再输入一次:\n");
		printf("                                    ");
		scanf("%s",str2);
		if(strcmp(str1,str2)!=0)
        {
            printf("                                    ");
            printf("你输入的密码有误,请重新输入一遍。\n");
        }

	}while(strcmp(str1,str2)!=0);
	printf("                                    ");
	printf("密码修改成功,请选择其他操作。");
}




















  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值