进阶第21课时,实践,简易银行系统开发第四版
来源:互联网 发布:不满意淘宝投诉结果 编辑:程序博客网 时间:2024/05/03 15:46
/**Copyright(c) 2015/6/3 CSDN博客*All rights reserved.*文件名称:main.c*作 者:金叶*完成日期:2015/6/3*版本号:V1.0*问题描述:小型银行应用程序*程序输出:*/#include <stdio.h>#include "bank.h"int main(){ if (ipass()==1) { downdate(); work(); update(); } return 0;}
#ifndef BANK_H_INCLUDED#define BANK_H_INCLUDED#define upNum 2000int ipass(); //银行员工密码确认void downdate(); //加载数据int iChoose(); //银行员工选择功能int search(int id); //用于查找账户对应的下标int inputpass(); //用于输入密码void work(); //主菜单void open_account(); //1开户void cancellation(); //2注销void deposit(); //3存款void withdraw_money(); //4取款void query(); //5查询void transfer_accounts(); //6转账void loss(); //7挂失void unloss(); //8解挂void change(); //9该密void update(); //保存数据,退出struct bank{ int num; char name[20]; int password; double balance; int state;};struct bank user[upNum];int N; //银行用户实际人数#endif // BANK_H_INCLUDED
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <conio.h>#include "bank.h"int ipass(){ int i,j=3,k; int right=0; char ch; char worker[20][20]; char ipass[20][20]; char worker1[20]; char ipass1[20]; FILE *fp; printf("+-------------------+\n"); printf("+ 欢迎光临CSDN银行 +\n"); printf("+-------------------+\n"); if ((fp=fopen("worker.txt","r"))==NULL) { printf("worker file cannot open!"); exit(0); } for (i=0; i<20; i++) { fscanf(fp,"%s %s",worker[i],ipass[i]); //读入工作人员用户名 } fclose(fp); do { printf("请输入业务员的用户名:"); scanf("%s",worker1); printf("请输入密码:"); i=0; while((ch=getch())!='\r') { ipass1[i++]=ch-1; //文件保存密码使用加密 putchar('*'); } ipass1[i]='\0'; fflush(stdin); printf("\n"); for (k=0; k<20; k++) { if (strcmp(worker1,worker[k])==0&&strcmp(ipass1,ipass[k])==0) right=1; } if (right==1) { break; } else { j--; if (j>0) { printf("超过3次将退出,你还可以尝试%d次!\n", j); } else { printf("对不起,你不能进入系统\n"); exit(0); } } } while (j); return right;}
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <conio.h>#include "bank.h"void downdate(){ int i=0; FILE *fp; if ((fp=fopen("bank.txt","r"))==NULL) { printf("bank file cannot open!"); exit(0); } while(fscanf(fp,"%d %s %d %lf %d",&user[i].num,user[i].name, &user[i].password, &user[i].balance,&user[i].state ) != EOF) { i++; } N=i; fclose(fp); return;}void work(){ int ichose; do { ichose=iChoose(); switch (ichose) { case 1: open_account(); //开户 break; case 2: cancellation(); //2注销 break; case 3: deposit(); //3存款 break; case 4: withdraw_money(); //4取款 break; case 5: query(); //5查询 break; case 6: transfer_accounts(); //6转账 break; case 7: loss(); //7挂失 break; case 8: unloss(); //8解挂 break; case 9: change(); //9该密 break; case 0: printf("欢迎再来\n"); update(); //保存退出 } } while (ichose);}int iChoose(){ int ichose; while (1) { printf("\n"); printf("+----------------------------+\n"); printf("+ 1 开户 2 销户 3 存款 +\n"); printf("+ 4 取款 5 查询 6 转账 +\n"); printf("+ 7 挂失 8 解挂 9 改密 +\n"); printf("+ 0 退出 +\n"); printf("+----------------------------+\n"); printf("请输入操作指令:"); scanf("%d",&ichose); if (ichose>=0 && ichose<=9) { break; } else printf("输入错误,请重新选择\n\n"); } return ichose;}void open_account(){ int ipass1,ipass2; if (N==upNum) { printf("银行用户达到上限,不能开户\n"); } printf("正在进行开户\n"); printf("请输入用户账号:"); scanf("%d",&user[N].num); printf("请输入用户姓名:"); scanf("%s",user[N].name); printf("请输入密码:"); ipass1=inputpass(); printf("请再次确认密码:"); ipass2=inputpass(); if (ipass1==ipass2) { user[N].password=ipass1; user[N].state=0; printf("存款金额:"); scanf("%lf",&user[N].balance); printf("开户成功!\n"); N++; } else { printf("密码错误,开户失败!\n"); }}void cancellation(){ int i; int cancel; int pass; printf("输入待销户账号:"); scanf("%d",&cancel); i=search(cancel); printf("姓名:%s\n",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password) { printf("余额:%.2lf",user[i].balance); printf("确认销户Y/N:"); if(tolower(getchar())=='y') { user[i].balance=0; //取款后余额变0 user[i].state=2; //状态变为注销 printf("取款 %.2f 元,销户成功!\n", user[i].balance); } else { printf("你取消了操作,销户失败!\n"); } } else { printf("密码错误,销户失败!\n"); }}void deposit(){ int i; int id; int pass; double money; printf("请输入账号:"); scanf("%d",&id); i=search(id); if (i<0) { printf("用户名不存在!\n"); } else { printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password&&user[i].state==0) { printf("输入存款金额:"); scanf("%lf",&money); printf("余额总计%.2lf,存款成功",money+user[i].balance); } else if (pass==user[i].password&&user[i].state==1) { printf("卡已挂失,存款失败!\n"); } else if (pass==user[i].password&&user[i].state==2) { printf("卡已注销,存款失败!\n"); } else { printf("密码错误,存款失败!\n"); } }}void withdraw_money(){ int i; int id; int pass; double money; printf("请输入账号:"); scanf("%d",&id); i=search(id); if(i<0) { printf("用户名不存在!\n"); } else { printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password&&user[i].state==0) { printf("余额 :%.2lf\n",user[i].balance); printf("取款金额:"); scanf("%lf",&money); if (money>user[i].balance) { printf("余额不足,取款失败"); } else { user[i].balance-=money; printf("余额:%.2lf",user[i].balance); } } else if (pass==user[i].password&&user[i].state==1) { printf("卡已挂失,取款失败!\n"); } else if (pass==user[i].password&&user[i].state==2) { printf("卡已注销,取款失败!\n"); } else { printf("密码错误,取款失败!\n"); } }}void query(){ int i; int id; int pass; printf("请输入账号:"); scanf("%d",&id); i=search(id); printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password) { printf("余额:%.2lf\n",user[i].balance); if (user[i].state==0) { printf("当前状态:正常\n"); } else if (user[i].state==1) { printf("当前状态:挂失\n"); } else printf("当前状态:注销\n"); printf("查询完毕!\n"); } else { printf("密码错误,查询失败\n"); }}void transfer_accounts(){ int id,id2; int i,i2; double money; int pass; printf("请输入转出账号:"); scanf("%d",&id); i=search(id); printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password&&user[i].state==0) { printf("请输入转入账号:"); scanf("%d",&id2); i2=search(id2); printf("转账金额:"); scanf("%lf",&money); if (money>user[i].balance) { printf("金额不足,转账失败!\n"); } else { printf("转账成功,余额 %.2lf\n",user[i].balance-money); user[i2].balance+=money; } }}void loss(){ int id; int i; int pass; printf("请输入账号:"); scanf("%d",&id); i=search(id); printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password) { printf("余额:%.2lf\n",user[i].balance); if (user[i].state==0) { printf("当前状态:正常\n"); user[i].state=1; printf("挂失成功!\n"); } else if (user[i].state==1) { printf("当前状态:挂失\n"); } else printf("当前状态:注销\n"); } else { printf("密码错误,挂失失败\n"); }}void unloss(){ int id; int i; int pass; printf("请输入账号:"); scanf("%d",&id); i=search(id); printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password) { printf("余额:%.2lf\n",user[i].balance); if (user[i].state==0) { printf("当前状态:正常\n"); } else if (user[i].state==1) { printf("当前状态:挂失\n"); user[i].state=0; printf("解挂成功!\n"); } else printf("当前状态:注销\n"); } else { printf("密码错误,解挂失败\n"); }}void change(){ int id; int i; int pass,pass1,pass2; printf("请输入账号:"); scanf("%d",&id); i=search(id); printf("姓名:%s",user[i].name); printf("密码:"); pass=inputpass(); if (pass==user[i].password&&user[i].state!=2) { printf("新密码:"); pass1=inputpass(); printf("再次输入:"); pass2=inputpass(); if (pass1==pass2) { user[i].password=pass1; } else { printf("2次输入不正确,改密码失败\n"); } } else { printf("密码不对!\n"); }}void update(){ FILE *p; int i=0; if ((p=fopen("bank.txt", "w"))==NULL) { printf("bank.txt file cannot open!"); exit(0); } for(i=0; i<N; i++) fprintf(p,"%d %s %d %lf %d\n",user[i].num, user[i].name, user[i].password, user[i].balance,user[i].state); fclose(p); exit(0);}
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <conio.h>#include "bank.h"int search(int id){ int index; index=-1; int i; for (i=0; i<N; i++) { if (user[i].num==id) { index=i; break; } } return index;}int inputpass(){ char ch; //接收字符形式密码 int iPass=0; //要转换为数字 int i; while(1) { for(i=0; i<6; i++) { ch=getch(); //输入但不显示 putchar('*'); //输出* if(isdigit(ch)) iPass=iPass*10+(ch-'0'); else { iPass=0; break; //退出for循环后,再次接受 } } fflush(stdin); //清除键盘缓存区中已经有的输入 printf("\n"); if(iPass==0) //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环 { printf("密码要求全为数字,且不能全0!\n"); printf("请重新输入密码: "); } else break; } return iPass;}
等老师把进阶的所有实践都完成了 重新再看一遍进阶,目前在复习之前的内容
0 0
- 进阶第21课时,实践,简易银行系统开发第四版
- 提高第40课时,实践,简易银行系统开发
- 提高第15课时,实践,简单银行系统的初步框架(加强版)v2.0
- 第47课时,简单银行系统的初步框架(加强版)
- C语言及程序设计进阶例程-21 银行储蓄系统(第五版)开发
- 第46课时,实践2,小学生算术能力测试系统
- C语言进阶-第39讲:银行储蓄系统(二进制版)开发
- 进阶第2课时,自测
- 进阶第4课时,自测
- 进阶第5课时,自测
- 简易银行系统
- 练习,简易银行系统
- 第4课时,实践1
- 第4课时,实践2
- 第4课时,实践3
- 第4课时,实践4
- 第4课时,实践5
- 提高第21课时,实践1,项目1-有几个
- 4.17~4.22
- leetcode[112]:Path Sum
- 黑马程序员---java反射机制的实现原理
- ARM异常处理
- 公共字符串个数
- 进阶第21课时,实践,简易银行系统开发第四版
- XRDP与VNC的关系
- GNU ARM伪指令
- 黑马程序员---工厂设计模式
- UVA10892 LCM Cardinality(gcd)
- framework制作
- 算术移位和逻辑移位
- LeetCode_Linked List_Remove Duplicates from Sorted List II
- Java基础