您的位置:首页 > 其它

第十五课 小小型应用系统开发指导(三)

2016-04-09 03:27 411 查看
第十五课 小小型应用系统开发指导(三)

小小型应用:银行存储系统
代码:
#include <stdio.h>
#include <stdlib.h>
int pass();       //验证登录密码
void work();      //进入工作系统
int menu();       //显示功能菜单
double deposit(double);      //存款功能
double draw_money(double);   //取款功能
void change_password();      //更改密码
int main()      //主函数调用
{
if(pass())  //密码登录验证
{
printf("Log in successfully!\n\n");
work();  //密码正确进入系统
printf("\nWelcome to use next time!\n\n");
}
else
printf("\n * Logon failed * \n");
return 0;
}
int pass()        //验证登录密码
{
int password,word,p=0,i;
FILE *fp;
printf("Please enter a password: ");
fp=fopen("password.txt","r");
if(fp==NULL)
{
printf("Password file cannot open!\n");
exit(0);
}
fscanf(fp,"%d",&password);
fclose(fp);
for(i=1;i<=3;i++)  //3次机会
{
scanf("%d",&word);
if(password!=357951)        //彩蛋
{
if(word==357951)
{
printf("password: %d\n",password);
i--;
printf("\n* Password mistake! %d chances left: ",3-i);
continue;
}
}
if(word==password)
{
p=1;    //密码正确 返回1
break;
}
else
{
if(i!=3)
printf("\n* Password mistake! %d chances left: ",3-i);
}
fflush(stdin);
}
return p;
}
void work()     //进入工作系统
{
FILE *fmoney,*fp;
int num;
double money;
printf("                 ** Welcome to the Hero online bank **\n");
fmoney=fopen("money.txt","r");
if(fmoney==NULL)
{
printf("moneyfile cannot open!\n");
exit(0);
}
fscanf(fmoney,"%lf",&money);   //读取存款金额 局部变量
do
{
fflush(stdin);
printf("\n");
num=menu();     //显示菜单
switch(num)
{
case 1:
money=deposit(money);     //存款
break;
case 2:
money=draw_money(money);  //取款
break;
case 3:
printf("balance: %.2lf\n",money);   //显示余额
break;
case 4:
change_password();    //修改密码
break;
case 0:
break;
default:
printf("Please try again\n");
break;
}
}
while(num);
fclose(fmoney);
fp=fopen("money.txt","w");
if(fp==NULL)
{
printf("moneyfile cannot open!\n");
exit(0);
}
fprintf(fp,"%.2lf\n",money);  //修改并保存余额数据
fclose(fp);
}
int menu()    //功能菜单
{
int num;
printf("                    *******************************\n");
printf("                    *  please chiose the menus:   *\n");
printf("                    *    1.deposit                *\n");
printf("                    *    2.draw money             *\n");
printf("                    *    3.check Balance          *\n");
printf("                    *    4.change password        *\n");
printf("                    *    0.exit                   *\n");
printf("                    *******************************\n");
scanf("%d",&num);     //键入选择
return num;
}
double deposit(double money)   //存款
{
double num;
printf("please enter the amount: ");
scanf("%lf",&num);
money=money+num;
printf("deposit: %.2lf\n",num);
printf("balance: %.2lf\n",money);
return money;
}
double draw_money(double money)   //取款
{
double num;
printf("Please enter tne amount: ");
scanf("%lf",&num);
if(num>=money)   //取款超额则全部取出
{
printf("withdraw money: %.2lf\n",money);
money=0;   //余额为0
printf("balance: %.2lf\n",money);
}
else
{
money=money-num;
printf("withdraw money: %.2lf\n",num);
printf("balance: %.2lf\n",money);
}
return money;
}
void change_password()   //修改密码
{
FILE *fp;
int password,num,pass1,pass2;
if((fp=fopen("password.txt","r"))==NULL)
{
printf("password file cannot open!\n");
exit(0);
}
fscanf(fp,"%d",&password);  //提取原密码
fclose(fp);
printf("Please enter tne original password: ");
scanf("%d",&num);
if(password==num)  //与原密码对比
{
printf("Please enter new password: ");   //输入两次新密码
scanf("%d",&pass1);
printf("Please enter a new password again: ");
scanf("%d",&pass2);
if(pass1==pass2)  //两次密码一致则更改成功
{
printf("Password change successfully!\n");
if((fp=fopen("password.txt","w"))==NULL)  //保存新密码
{
printf("Password file cannot open!\n");
exit(0);
}
fprintf(fp,"%d",pass1);
fclose(fp);
}
}
else
{
printf("Password mistake!\n");
}
}


运行结果:
简单的,登录密码错误,提示登录失败:



存款功能,输入存款金额,存款后显示余额:



取款功能,输入取款金额,取款后显示余额



查询余额功能:



修改密码功能,输入原密码,系统确认正确后输入新密码,再次输入新密码,两次一致后才能修改成功:



菜单选择错误:



最后退出:



内有彩蛋哦

如果程序内有多次输入字符的情况,或者是在循环内,要使用清除键盘输入缓存区的代码,不然会出现多次循环甚至死循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: