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
运行结果:
运行后的文件:
阅读全文
1 0
- c语言项目实践---设计简单银行登录、存取款、改密系统
- 简易银行存取款系统-建立数据库
- 数据结构课程设计《银行存取款系统》
- 银行ATM存取款机系统
- 银行ATM存取款机系统
- <1>c语言实现ATM存取款系统(数组)
- <4>c语言实现ATM存取款系统(链表)
- C语言实现 ATM机存取款系统
- C语言综合实践-----银行储蓄系统
- 第九章:银行ATM存取款机系统
- 银行ATM存取款机
- 银行ATM机存取款
- ATM银行取款系统
- C语言项目—银行储蓄系统
- <3>c语言实现ATM存取款系统(数组实现)
- <5>c语言实现ATM存取款系统(文件、排序)
- Java设计的银行取款系统-Mysql数据库
- 项目实践: 银行储蓄系统的设计和实现
- Tinker的简单接入
- 配置Nodejs
- Android 与gradle常见相关问题及解答(1)
- STL之bitset
- CSU 1104: 盒子游戏
- c语言项目实践---设计简单银行登录、存取款、改密系统
- Memcache集群环境下缓存解决方案
- Android dimens 生成类
- java中的计时器
- 技术文章 | 不懂技术如何判断一个页面的开发复杂度
- 计算机专业是否该读研
- Spring任务调度之Spring-Task--应用实例:实现邮件(带附件)定时发送功能
- Java NIO框架Netty教程(一)
- 【APIGateway】微服务,ApiGateway