c语言项目实践---设计简单银行登录、存取款、改密系统

来源:互联网 发布:功夫时时彩软件 编辑:程序博客网 时间:2024/05/16 06:45

要求:
1. 登录:输入账号、密码正确才能进入菜单系统,输入3次错误则退出系统
2. 菜单:含有(1)查询余额、(2)取款、(3)存款、(4)改密、(5)退卡


关于要使用的文件如何布局:
1.每条独立的信息单独一行
2.在密码、金额一行,右边需要许多空格(因为用的是“r+”打开模式,用空格可以填充字符)
3.下方图片中为演示布局,每3行为一个用户的信息(账户、密码、余额),另外红线表示有空格+一个回车
4.特别注意:如果在文件反复几次回车,可能一行会有几个换行符。一定要确保一行只有一个回车


这里写图片描述

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){    FILE* fpr;    double balance,tempmoney;//余额、临时存储的金额    char account[20],key[20];//用户输入的账号、密码    char systemaccount[100] = {0},systemkey[100] = {0},useless[100] = {0};//系统中存储的账户、密码、无用的信息    char sign = 0;//登录成功与否的标志,1表示登录成功,0表示失败    unsigned function;//菜单功能选项    int i,j;//循环计数变量    int locationkey,locationbalance;//密码在文件中的位置、余额在文件中的位置    //----------------------------------------------------    if((fpr = fopen("I:\\cstudy\\bank\\bank.txt","r+")) == NULL)    {        printf("系统发生错误,正在维护中\n");        exit(0);    }    for(i = 0;i<3;i++)    {        fflush(stdin);        printf("请输入账号:");        scanf("%s",account);        printf("\n请输入密码:");        scanf("%s",key);        while((fgets(systemaccount,99,fpr)) != NULL)        {            for(j = 0;*(systemaccount+j);j++)//去除文件中存储账号一行的换行符,如果按照二进制打开,要去除'\r''\n'            {                if(*(systemaccount+j) == '\n')                {                    *(systemaccount+j) = '\0';                }            }            locationkey = ftell(fpr);//返回密码在文件中的位置            fscanf(fpr,"%s",systemkey);            fgets(useless,99,fpr);//跳过空格            locationbalance = ftell(fpr);//返回余额在文件中的位置            fgets(useless,99,fpr);//跳过余额,因为登录只需要账号和密码            if(strcmp(account,systemaccount) == 0 && strcmp(key,systemkey) == 0)//当账户密码与系统中的账户密码一致            {                printf("登录成功\n");                sign = 1;                break;            }        }        if(sign == 0)//当没有与用户输入的账户及密码匹配时        {            printf("账号或者密码错误!\n您还有%d次输入机会\n",2-i);            if(i == 2)//i = 2时,说明用户已经输入了3次            {                printf("您已经3次输入错误,您的账户已被冻结,在冻结期内禁止登录!\n");                exit(1);            }        }        else        {            break;//退出登录系统,进入菜单系统        }    }    //-------------------------------------------------------------    do    {        printf("\n\n菜单:     \n");        printf("(1) 查询余额  \n");        printf("(2) 取款      \n");        printf("(3) 存款      \n");        printf("(4) 修改密码  \n");        printf("(5) 退卡      \n");        scanf("%d",&function);        switch(function)        {        case 1:            {                fseek(fpr,locationbalance,SEEK_SET);//将文件指针移动到余额位置                fscanf(fpr,"%lf",&balance);                printf("您的余额为:%.3f\n",balance);                break;            }        case 2:            {                fseek(fpr,locationbalance,SEEK_SET);                fscanf(fpr,"%lf",&balance);                printf("请输入金额:\n");                scanf("%lf",&tempmoney);                if(tempmoney < balance)//想要取的钱小于余额时                {                    balance -= tempmoney;                    printf("取款成功!\n");                    fseek(fpr,locationbalance,SEEK_SET);                    fprintf(fpr,"%-10.3lf",balance);                }                else                {                    printf("您的余额不足!\n");                }                break;            }        case 3:            {                fseek(fpr,locationbalance,SEEK_SET);                fscanf(fpr,"%lf",&balance);                printf("请输入金额:\n");                scanf("%lf",&tempmoney);                balance += tempmoney;                printf("存款成功!\n");                fseek(fpr,locationbalance,SEEK_SET);                fprintf(fpr,"%-10.3lf",balance);                break;            }        case 4:            {                fseek(fpr,locationkey,SEEK_SET);//将文件指针移动到密码位置                printf("请输入新密码:\n");                scanf("%s",key);                fprintf(fpr,"%-20s",key);                printf("修改密码成功!\n");                break;            }        case 5:            {                printf("已经退出成功!\n");                exit(1);            }        }    }while(sign);//此时sign = 1    fclose(fpr);    return 0;}

使用软件:code::block
运行结果:
这里写图片描述


运行后的文件:
这里写图片描述