问题描述:
https://edu.csdn.net/course/play/456/4808
// 银行系统.cpp: 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdlib.h>
#pragma warning (disable: 4996)int PassTest();
void ibalance();
void withdraw();
void deposit();
void PassChange();int main()
{int ichoice,testresult;printf("欢迎光临草泥马银行\n\n");testresult = PassTest();while (testresult){printf("\n您可办理下面的业务:\n");printf(" 1.查询余额\n");printf(" 2.取款\n");printf(" 3.存款\n");printf(" 4.改密码\n");printf(" 0.退出\n");printf("请输入(0-4):");scanf("%d", &ichoice);switch (ichoice){case 1:ibalance(); break; case 2:withdraw(); break;case 3:deposit(); break;case 4:PassChange(); break;default:break;}if (ichoice == 0){break;}}return 0;
}int PassTest()
{printf("请输入6位密码:");while (1){int pass, passstored, itry(1), righttime(0);FILE *fp;fp = fopen("D:\\code\\pass.dat", "r");if (fp == NULL){printf("File cannot open! ");exit(0);}for (int i = 0; i < 6; i++){scanf_s("%1d", &pass);fscanf(fp, "%1d", &passstored);if (pass == passstored){righttime++;}}if (righttime == 6){fclose(fp);return 1;break;}else if (itry<3){itry++;printf("密码错误累计%d次,请重新输入:", itry - 1);continue;}else{printf("密码错误累计%d次,系统终止\n", itry);fclose(fp);return 0;break;}}}void ibalance()
{double balance;FILE *fp;fp = fopen("D:\\code\\balance.dat", "r");if (fp == NULL){printf("File cannot open! ");exit(0);}fscanf(fp, "%lf", &balance);printf("余额:%.2lf\n\n", balance);fclose(fp);}void withdraw()
{double cash, balance, diff;printf("请输入取款额:");scanf("%lf", &cash);FILE *fp;fp = fopen("D:\\code\\balance.dat", "r");if (fp == NULL){printf("File cannot open! ");exit(0);}fscanf(fp, "%lf", &balance);if (balance>cash){diff = balance - cash;fclose(fp);fp = fopen("D:\\code\\balance.dat", "w");fprintf(fp, "%lf", diff);fclose(fp);fp = fopen("D:\\code\\balance.dat", "r");fscanf(fp, "%lf", &balance);printf("现余额:%.2lf\n\n", balance);fclose(fp);}else{printf("取款额大于余额,取款失败\n\n");fclose(fp);}}void deposit()
{double cash, balance, diff;printf("请输入存款额:");scanf("%lf", &cash);FILE *fp;fp = fopen("D:\\code\\balance.dat", "r");if (fp == NULL){printf("File cannot open! ");exit(0);}fscanf(fp, "%lf", &balance);diff = balance + cash;fclose(fp);fp = fopen("D:\\code\\balance.dat", "w");if (fp == NULL){printf("File cannot open! ");exit(0);}fprintf(fp, "%lf", diff);fclose(fp);fp = fopen("D:\\code\\balance.dat", "r");if (fp == NULL){printf("File cannot open! ");exit(0);}fscanf(fp, "%lf", &balance);printf("现余额:%.2lf\n", balance);fclose(fp);}void PassChange()
{while (1){int pass, pass2;printf("请输入新密码:");scanf("%d", &pass);if (pass>=100000 && pass <=999999){printf("请再输入新密码:");scanf("%d", &pass2);if (pass == pass2){FILE *fp;fp = fopen("D:\\code\\pass.dat", "w");fprintf(fp, "%d", pass);fclose(fp);printf("密码修改成功\n");}break;}else{printf("密码位数不足,请输满6位\n");continue;}}}
感想:
数据写入硬盘(如写入文本文档)似乎是在fclose之后才生效
比如取款后显示“现余额”,必须这么写
fp = fopen("D:\\code\\balance.dat", "w");fprintf(fp, "%lf", diff);fclose(fp);fp = fopen("D:\\code\\balance.dat", "r");fscanf(fp, "%lf", &balance);printf("现余额:%.2lf\n\n", balance);fclose(fp);
=