問題描述:
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);
?
?
?
?
=