一.设计目标
二.软件结构
三.接口设计
1.设计各个功能函数
int 函数_验证密码();
void 函数_业务驱动();
void 函数_显示菜单();
double 函数_获得余额();
double 函数_取款业务(double);
double 函数_存款业务(double);
void 函数_改密业务();
void 函数_保存数据(double);
2.公共数据(账户余额)的处理方案:
1.用全局变量存储;(一般不建议,增加耦合,不易阅读)
2.用局部变量存储,在各模块间通过参数传递;(建议)
三.整体框架
/声明头文件及自定义函数;/
#include <stdio.h>
#include <Windows.h>
int 函数_验证密码();
void 函数_业务驱动();
void 函数_显示菜单();
double 函数_获得余额();
double 函数_取款业务(double);
double 函数_存款业务(double);
void 函数_改密业务();
void 函数_保存数据(double);
/主函数内,写好基本框架;/
int main()
{
if (函数_验证密码())
{
函数_业务驱动();
}
return 0;
}
/定义各个功能函数;/
int 函数_验证密码() {...}
void 函数_业务驱动() {...}
void 函数_显示菜单() {...}
double 函数_获得余额() {...}
double 函数_取款业务(double 变量_账户余额) {...}
double 函数_存款业务(double 变量_账户余额) {...}
void 函数_改密业务() {...}
void 函数_保存数据(double 变量_账户余额) {...}
四.具体代码
(变量/函数用中文命名…英文不好,想名字太费脑,以后努力…)
//声明头文件及自定义函数;
#include <stdio.h>
#include <Windows.h>
int 函数_验证密码();
void 函数_业务驱动();
void 函数_显示菜单();
double 函数_获得余额();
double 函数_取款业务(double);
double 函数_存款业务(double);
void 函数_改密业务();
void 函数_保存数据(double);
//主函数内,写好基本框架;
int main()
{
printf("欢迎光临CSDN银行!\n");
if (函数_验证密码())
{
函数_业务驱动();
}
return 0;
}
//定义各个功能函数;
int 函数_验证密码()
{
int 变量_输入密码;
int 变量_正确密码;
int 变量_尝试次数 = 3;
FILE* 指针_文件操作;
fopen_s(&指针_文件操作, "密码文件.txt", "r");
if (指针_文件操作 == NULL)
{
printf("密码文件打开失败!\n");
exit(0);
}
fscanf_s(指针_文件操作, "%d", &变量_正确密码);
fclose(指针_文件操作);
printf("密码文件读取成功!\n");
do
{
变量_尝试次数--;
printf("请输入密码: ");
scanf_s("%d", &变量_输入密码);
if (变量_输入密码 == 变量_正确密码)
{
printf("密码验证通过!\n");
break;
}
else if(变量_尝试次数>0)
{
printf("密码错误,您还有%d次机会.\n", 变量_尝试次数);
}
else
{
printf("三次密码输入错误,不能进入系统.\n");
}
} while (变量_尝试次数);
return 变量_尝试次数;
}
void 函数_业务驱动()
{
int 变量_菜单选择;
double 变量_账户余额;
变量_账户余额 = 函数_获得余额();
do
{
函数_显示菜单();
printf("请输入(0-4): ");
scanf_s("%d", &变量_菜单选择);
switch (变量_菜单选择)
{
case 1:
printf("您的余额有%.2f元.\n", 变量_账户余额); break;
case 2:
变量_账户余额 = 函数_取款业务(变量_账户余额); break;
case 3:
变量_账户余额 = 函数_存款业务(变量_账户余额); break;
case 4:
函数_改密业务(); break;
case 0:
printf("欢迎您再来!\n");
}
} while (变量_菜单选择);
函数_保存数据(变量_账户余额);
}
void 函数_显示菜单()
{
printf("\n选择业务: \n");
printf(" 1.查询\n");
printf(" 2.取款\n");
printf(" 3.存款\n");
printf(" 4.改密\n");
printf(" 0.退出\n");
}
double 函数_获得余额()
{
double 变量_账户余额;
FILE* 指针_文件操作;
fopen_s(&指针_文件操作, "余额文件.dat", "r");
if (指针_文件操作 == NULL)
{
printf("打开余额文件失败!\n");
exit(0);
}
printf("余额文件打开成功!\n");
fscanf_s(指针_文件操作, "%lf", &变量_账户余额);
fclose(指针_文件操作);
return 变量_账户余额;
}
double 函数_取款业务(double 变量_账户余额)
{
double 变量_取款金额;
printf("请输入取款金额: ");
scanf_s("%lf", &变量_取款金额);
if (变量_取款金额 <= 变量_账户余额)
{
变量_账户余额 -= 变量_取款金额;
printf("取款后,您有%.2f元.\n", 变量_账户余额);
}
else
{
printf("余额不足,取款失败!\n");
}
return 变量_账户余额;
}
double 函数_存款业务(double 变量_账户余额)
{
double 变量_存款金额;
printf("输入存款额度: ");
scanf_s("%lf", &变量_存款金额);
变量_账户余额 += 变量_存款金额;
printf("存款后,您有%.2f元.\n", 变量_账户余额);
return 变量_账户余额;
}
void 函数_改密业务()
{
FILE* 指针_文件操作;
int 变量_新密码一, 变量_新密码二;
printf("请输入新密码: ");
scanf_s("%d", &变量_新密码一);
printf("再输入新密码: ");
scanf_s("%d", &变量_新密码二);
if (变量_新密码一 == 变量_新密码二)
{
printf("密码修改成功,请注意保密!\n");
fopen_s(&指针_文件操作, "密码文件.txt", "w");
if (指针_文件操作 == NULL)
{
printf("密码文件打开失败!\n");
exit(0);
}
fprintf(指针_文件操作, "%d", 变量_新密码一);
fclose(指针_文件操作);
}
else
{
printf("两次输入不一致,密码修改失败!\n");
}
}
void 函数_保存数据(double 变量_账户余额)
{
FILE* 指针_文件操作;
fopen_s(&指针_文件操作, "余额文件.dat", "w");
if (指针_文件操作 == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
fprintf(指针_文件操作, "%f", 变量_账户余额);
fclose(指针_文件操作);
}
五.分析/分解
1.分析: 善于通过现象看本质,提炼出类似"通用公式"的规律性的东西;
2.分解: 善于将一个动作分解为细小的步骤,再逐步细化大而复杂的问题.