第十五课 小小型应用系统开发指导(三)
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"); } }
运行结果:
简单的,登录密码错误,提示登录失败:
存款功能,输入存款金额,存款后显示余额:
取款功能,输入取款金额,取款后显示余额
查询余额功能:
修改密码功能,输入原密码,系统确认正确后输入新密码,再次输入新密码,两次一致后才能修改成功:
菜单选择错误:
最后退出:
内有彩蛋哦
如果程序内有多次输入字符的情况,或者是在循环内,要使用清除键盘输入缓存区的代码,不然会出现多次循环甚至死循环
相关文章推荐
- 第十课 调试技术-进入函数内部去【项目1-2】
- java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- 第七课 函数的嵌套调用【项目1-4】
- ##c提高篇## 第二课 体验函数【项目1-7】
- (2012-04-03 老物搬运)初识Robotlegs
- 【JQuery】右键菜单插件——contextmenu
- python多线程之Queue
- 推荐系统之矩阵分解
- 几种常见的排序算法
- yacc和lex的林林总总
- JavaScript 中的undefined and null 学习
- 求任意大小矩阵两点之间的最短路径(回溯)
- (2012-02-03 老物搬运)去除图片热区焦点框
- (2012-01-14 老物搬运)N1真题 错题汇总2
- 一些教训,或者叫做收获
- (2012-01-08 旧博文搬运)[EssentialActionScript3.0中文版]无责任翻译-23章屏幕更新(2)
- (2012-01-08 旧博文搬运)[EssentialActionScript3.0中文版]无责任翻译-22章交互性(4)
- (2012-01-08 旧博文搬运)[EssentialActionScript3.0中文版]无责任翻译-22章交互性(3)
- 给定两个有序数组,找出合并之后的数组中位数
- (2012-01-08 旧博文搬运)[EssentialActionScript3.0中文版]无责任翻译-22章交互性(1)