C语言程序设计提高篇应用程序设计-CSDN银行2.0

#include <stdio.h>
#include <stdlib.h>
//C语言及程序设计初步,综合练习,CSDN银行2.0,功能说明
/* 1.输入密码进行登录(错误三次后退出程序),输入0-4选择不同功能,1-查询、2-取款,3-存款,4-改密码,0-退出.
   2.只支持单个用户,密码和存款余额分别保存在本地两个文件中
   3.取款功能支持超出额度提示.
   4.修改密码需要输入两次新密码,先要输入原密码
   5.取款和存款操作需要加入确认提示,点击确认后才会继续操作,取消的话回退会上一级
*/
//第二版,代码优化,模块化思路
int passwd();//函数功能:判断密码是否正确
void work();//函数功能:主业务模块,被main函数调用
void Out();//取款模块,被主业务模块调用
void In();//存款模块,被主业务模块带哦用
void change_passwd();//修改密码模块,被主业务模块调用
long getsalary();//获得余额模块,被多个其他模块调用
void show_menu();//展示业务菜单模块,被主业务模块调用
void change_money(long);//修改余额模块,被存取款模块调用
int main()
{
    printf("欢迎使用CSDN银行\n");
    if(passwd()==0)
    {
        printf("密码错误三次,账号锁定!\n");
        exit(0);
    }
    work();
    printf("谢谢您的使用,欢迎下次光临!\n");
    return 0;
}
int passwd()
{
    long iPass_file,iPass;
    int iErr_count=1,r;
    FILE *fp;
    fp=fopen("passwd.dat","r");
    fscanf(fp,"%ld",&iPass_file);
    fclose(fp);
    while(iErr_count<=3)
    {
        if(iErr_count==1)
            printf("请输入密码:");
        else
            printf("密码错误,请再次输入密码: ");
        scanf("%ld",&iPass);
        if(iPass==iPass_file)
            break;
        else
            iErr_count++;
    }
    if(iErr_count>3)
        r=0;
    else
        r=1;
    return r;
}
void work()
{
    int iErr_count;
    int flag=0,choice;
    while(flag==0)
    {
        show_menu();
        scanf("%d",&choice);
        switch(choice)
        {
            case 1:
            {
                printf("当前的存款余额为:%ld\n",getsalary());
                break;
            }
            case 2:
            {
                Out();
                break;
            }
            case 3:
            {
                In();
                break;
            }
            case 4:
            {
                iErr_count=1;
                printf("修改密码需要校验原密码\n");
                if(passwd()==1)
                {
                    change_passwd();
                }
                else
                {
                    printf("错误三次,请重新选择\n");
                }
                break;
            }
            case 0:
            {
                flag=1;
                break;
            }
            default:
            {
                printf("输入错误,请重新输入!\n");
            }
        }
    }
}
void show_menu()
{
    printf("本行提供以下业务:\n");
    printf("1.  查询.\n");
    printf("2.  取款.\n");
    printf("3.  存款.\n");
    printf("4.  改密码.\n");
    printf("0.  退出.\n");
    printf("请选择需要办理的业务(1-4),按0退出:");
}
long getsalary()
{
    long money;
    FILE *fp;
    fp=fopen("money.dat","r");
    fscanf(fp,"%ld",&money);
    fclose(fp);
    return money;
}
void change_money(long iMoney)
{
    FILE *fp;
    fp=fopen("money.dat","w");
    fprintf(fp,"%ld",iMoney);
    fclose(fp);
}
void Out()
{
    long iOut,iMoney;
    char choice_temp;
    iMoney=getsalary();
    printf("请输入需要取出的金额:");
    scanf("%ld",&iOut);
    printf("确认取出%ld元(输入n取消,任意键确认)\n",iOut);
    choice_temp=getchar();//接收前一个字符串的\n
    choice_temp=getchar();
    if(choice_temp!='n'&&choice_temp!='N')
    {
        if(iOut<=iMoney)
        {
            iMoney-=iOut;
            change_money(iMoney);
            printf("成功取出%ld元!\n",iOut);
        }
        else
        {
            printf("余额不足!\n");
        }
    }
}
void In()
{
    long iPut,iMoney;
    char choice_temp;
    iMoney=getsalary();
    printf("请输入需要存入的金额:");
    scanf("%ld",&iPut);
    printf("确认存入%ld元(输入n取消,任意键确认)\n",iPut);
    choice_temp=getchar();//接收前一个字符串的\n
    choice_temp=getchar();
    if(choice_temp!='n'&&choice_temp!='N')
    {
        iMoney+=iPut;
        change_money(iMoney);
        printf("成功存入%ld元!\n",iPut);
    }
}
void change_passwd()
{
    long iPass_change_new1,iPass_change_new2;
    long iPass;
    FILE *fp;
    fp=fopen("passwd.dat","w");
    printf("校验通过,请输入新密码:");
    scanf("%ld",&iPass_change_new1);
    printf("请再次输入新密码:");
    scanf("%ld",&iPass_change_new2);
    while(iPass_change_new1!=iPass_change_new2)
    {
        printf("两次结果不一致,请重新输入!\n");
        printf("校验通过,请输入新密码:");
        scanf("%ld",&iPass_change_new1);
        printf("请再次输入新密码:");
        scanf("%ld",&iPass_change_new2);
    }
    iPass=iPass_change_new1;
    fprintf(fp,"%ld",iPass);
    fclose(fp);
    printf("修改密码成功!\n");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章