源代码:
01.//使用函数的版本
02.
03.#include <stdio.h>
04.#include <stdlib.h>
05.int pass(); //验证密码
06.void work(); //业务驱动
07.double getBalance(); //获得余额
08.void showMenu(); //显示菜单
09.void updatePassword(); //更改密码
10.double withdraw(double d); //取款
11.double save(double d); //存款
12.void saveBalance(double d); //退出系统时保存数据
13.
14./*主函数:*/
15.int main()
16.{
17. printf("欢迎您光临CSDN银行\n");
18. if (pass())
19. {
20. work();
21. }
22. return 0;
23.}
24./*
25.功能:验证用户密码
26.返回值:密码正确,返回1;
27. 不能通过密码验证,返回0
28.*/
29.int pass()
30.{
31. int iPass; //用户验证时输入的密码
32. int iPassInFile; //记录正确的密码
33. int iTry=3; //进入系统时尝试的次数
34. FILE *fp; //用于文件操作
35. //密码保存在文件中,先取出
36. if ((fp=fopen("password.txt", "r"))==NULL)
37. {
38. printf("password file cannot open!");
39. exit(0);
40. }
41. fscanf(fp, "%d", &iPassInFile);
42. fclose(fp);
43.
44. //进入系统,密码三次不对将退出
45. do
46. {
47. iTry--;
48. printf("请输入密码:");
49. scanf("%d", &iPass);
50. if(iPass==iPassInFile)
51. break;
52. else
53. {
54. if(iTry>0)
55. printf("超过3次将退出,你已经尝试%d次!\n", iTry);
56. else
57. {
58. printf("对不起,你不能进入系统\n");
59. }
60. }
61. }
62. while(iTry);
63. return iTry;
64.}
65.
66./*
67.功能:办理业务
68.*/
69.void work()
70.{
71. int iChoice; //用于选择系统功能
72. double dBalance; //账户余额
73. dBalance = getBalance();
74. //办理业务
75. do
76. {
77. showMenu();
78. printf("请输入(0-4):");
79. scanf("%d", &iChoice);
80. switch(iChoice)
81. {
82. case 1:
83. printf("您的余额有%.2lf元. \n",dBalance);
84. break;
85. case 2:
86. dBalance = withdraw(dBalance);
87. break;
88. case 3:
89. dBalance = save(dBalance);
90. break;
91. case 4:
92. updatePassword();
93. break;
94. case 0:
95. printf("欢迎您再来. \n");
96. }
97. }
98. while(iChoice);
99. saveBalance(dBalance);
100.}
101.
102.
103./*
104.功能:获得账户余额
105.返回值:账户余额
106.*/
107.double getBalance()
108.{
109. double dBalance; //账户余额
110. FILE *fp; //用于文件操作
111. //从文件中取出余额
112. if ((fp=fopen("balance.dat", "r"))==NULL)
113. {
114. printf("data file cannot open!");
115. exit(0);
116. }
117. fscanf(fp, "%lf", &dBalance);
118. fclose(fp);
119. return dBalance;
120.}
121.
122./*功能:显示菜单*/
123.void showMenu()
124.{
125. printf("\n您可以办理下面的业务:\n");
126. printf(" 1.查询\n");
127. printf(" 2.取款\n");
128. printf(" 3.存款\n");
129. printf(" 4.改密码\n");
130. printf(" 0.退出\n");
131.}
132.
133./*功能:更改密码*/
134.void updatePassword()
135.{
136. FILE *fp; //用于文件操作
137. int iPassInFile;
138. int iNewPass1, iNewPass2; //用于修改密码
139. printf("请输入新密码:");
140. scanf("%d", &iNewPass1);
141. printf("再输入新密码:");
142. scanf("%d", &iNewPass2);
143. if(iNewPass1==iNewPass2)
144. {
145. iPassInFile = iNewPass1;
146. printf("密码修改成功,请注意保密.\n");
147. //保存密码(可能修改过)
148. if ((fp=fopen("password.txt", "w"))==NULL)
149. {
150. printf("password file cannot open!");
151. exit(0);
152. }
153. fprintf(fp, "%d", iPassInFile);
154. fclose(fp);
155. }
156. else
157. printf("两次输入不一致,密码修改失败.\n");
158.}
159.
160./*
161.功能:取款
162.参数:取款前的余额
163.返回值:取款后的余额
164.*/
165.double withdraw(double d)
166.{
167. double dMoney; //取款金额
168. printf("输入取款额: ");
169. scanf("%lf", &dMoney);
170. if(d>dMoney)
171. {
172. d-=dMoney;
173. printf("取款后,您还有%.2lf元. \n",d);
174. }
175. else
176. printf("余额不足,取款失败. \n");
177. return d;
178.}
179.
180./*
181.功能:存款
182.参数:存款前的余额
183.返回值:存款后的余额
184.*/
185.double save(double d)
186.{
187. double dMoney; //存款金额
188. printf("输入存款额: ");
189. scanf("%lf", &dMoney);
190. d+=dMoney;
191. printf("存款后,您有%.2f元. \n",d);
192. return d;
193.}
194.
195./*
196.功能:将余额保存到文件中
197.参数值:账户余额
198.*/
199.void saveBalance(double d)
200.{
201. FILE *fp; //用于文件操作
202. //保存余额
203. if ((fp=fopen("balance.dat", "w"))==NULL)
204. {
205. printf("data file cannot open!");
206. exit(0);
207. }
208. fprintf(fp, "%f", d);
209. fclose(fp);
210.}
多文件后代码
main.c:
#include "main.h"
/*主函数:*/
int main()
{
printf("欢迎您光临CSDN银行\n");
if (pass())
{
work();
}
return 0;
}
/*
25.功能:验证用户密码
26.返回值:密码正确,返回1;
27. 不能通过密码验证,返回0
28.*/
main.h:
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
int pass(); //验证密码
void work(); //业务驱动
double getBalance(); //获得余额
void showMenu(); //显示菜单
void updatePassword(); //更改密码
double withdraw(double d); //取款
double save(double d); //存款
void saveBalance(double d); //退出系统时保存数据
#endif // MAIN_H_INCLUDED
pass.c:
#include"main.h"
int pass()
{
int iPass; //用户验证时输入的密码
int iPassInFile; //记录正确的密码
int iTry=3; //进入系统时尝试的次数
FILE *fp; //用于文件操作
//密码保存在文件中,先取出
if ((fp=fopen("password.txt", "r"))==NULL)
{
printf("password file cannot open!");
exit(0);
}
fscanf(fp, "%d", &iPassInFile);
fclose(fp);
//进入系统,密码三次不对将退出
do
{
iTry--;
printf("请输入密码:");
scanf("%d", &iPass);
if(iPass==iPassInFile)
break;
else
{
if(iTry>0)
printf("超过3次将退出,你已经尝试%d次!\n", iTry);
else
{
printf("对不起,你不能进入系统\n");
}
}
}
while(iTry);
return iTry;
}
work.c:
#include"main.h"
void work()
{
int iChoice; //用于选择系统功能
double dBalance; //账户余额
dBalance = getBalance();
//办理业务
do
{
showMenu();
printf("请输入(0-4):");
scanf("%d", &iChoice);
switch(iChoice)
{
case 1:
printf("您的余额有%.2lf元. \n",dBalance);
break;
case 2:
dBalance = withdraw(dBalance);
break;
case 3:
dBalance = save(dBalance);
break;
case 4:
updatePassword();
break;
case 0:
printf("欢迎您再来. \n");
}
}
while(iChoice);
saveBalance(dBalance);
}
/*
104.功能:获得账户余额
105.返回值:账户余额
106.*/
double getBalance()
{
double dBalance; //账户余额
FILE *fp; //用于文件操作
//从文件中取出余额
if ((fp=fopen("balance.dat", "r"))==NULL)
{
printf("data file cannot open!");
exit(0);
}
fscanf(fp, "%lf", &dBalance);
fclose(fp);
return dBalance;
}
/*功能:显示菜单*/
void showMenu()
{
printf("\n您可以办理下面的业务:\n");
printf(" 1.查询\n");
printf(" 2.取款\n");
printf(" 3.存款\n");
printf(" 4.改密码\n");
printf(" 0.退出\n");
}
/*功能:更改密码*/
void updatePassword()
{
FILE *fp; //用于文件操作
int iPassInFile;
int iNewPass1, iNewPass2; //用于修改密码
printf("请输入新密码:");
scanf("%d", &iNewPass1);
printf("再输入新密码:");
scanf("%d", &iNewPass2);
if(iNewPass1==iNewPass2)
{
iPassInFile = iNewPass1;
printf("密码修改成功,请注意保密.\n");
//保存密码(可能修改过)
if ((fp=fopen("password.txt", "w"))==NULL)
{
printf("password file cannot open!");
exit(0);
}
fprintf(fp, "%d", iPassInFile);
fclose(fp);
}
else
printf("两次输入不一致,密码修改失败.\n");
}
/*
161.功能:取款
162.参数:取款前的余额
163.返回值:取款后的余额
164.*/
double withdraw(double d)
{
double dMoney; //取款金额
printf("输入取款额: ");
scanf("%lf", &dMoney);
if(d>dMoney)
{
d-=dMoney;
printf("取款后,您还有%.2lf元. \n",d);
}
else
printf("余额不足,取款失败. \n");
return d;
}
/*
181.功能:存款
182.参数:存款前的余额
183.返回值:存款后的余额
184.*/
double save(double d)
{
double dMoney; //存款金额
printf("输入存款额: ");
scanf("%lf", &dMoney);
d+=dMoney;
printf("存款后,您有%.2f元. \n",d);
return d;
}
/*
功能:将余额保存到文件中
参数值:账户余额
*/
void saveBalance(double d)
{
FILE *fp; //用于文件操作
//保存余额
if ((fp=fopen("balance.dat", "w"))==NULL)
{
printf("data file cannot open!");
exit(0);
}
fprintf(fp, "%f", d);
fclose(fp);
}
运行结果:
知识点总结:
通过学习,进一步巩固了多文件组织,复习了文件的创立。
学习心得,这次绊倒我的不是多文件,而是文件的创立,破电脑居然默认隐藏文件拓展名,不过最后算是解决了。ps:存了一个亿,完成了一个小目标
。