<3>c语言实现ATM存取款系统(数组实现)
2012-10-03 19:20
465 查看
第一篇讲了用数实现的爆栈的ATM系统,第二篇的框架保证了每个函数都可以执行完,然后根据返回的值采取相应的措施,这一篇可以用数组实现相对比较正确的ATM系统了。
#include<stdio.h> #include<String.h> #include<math.h> #include<stdlib.h> #include<windows.h> #define N 100 struct info { char account[30]; char user[100]; long dsit; long pw; }bank ;/* = { {"2011021232", "ouyan", 10000, 892968} };*/ void login(); void regist(); int menu(); int refer(); int deposit(); int withdraw(); int transfer(); int resetPW(); int judgePW(long ps); /*flagI标记当前登录账户,flagN标记当前转账的账户*/ int flagI, flagN; int n = 0; main() { int choice = -1; while(1) { printf(" 欢迎使用银行存取款系统 \n"); printf("\n ================================ \n"); printf(" 1.登录 \n"); printf(" 2.注册 \n"); printf(" 3.退出 \n"); printf("\n ================================ \n"); printf("\t* 请输入您的选择:"); scanf("%d", &choice); switch(choice) { case 1: system("cls"); login(); break; case 2: system("cls"); regist(); break; case 3: exit(0); break; default: printf("输入有误,请重输...\n"); break; } } } ////////////////////////////////////登录/////////////////////////////////////////// void login() { int i; int flag = 0; char my_act[100]; long password; int X = -1; printf("\t\t=================****登录****=================\n\n"); printf("\t\t* 输入账户: "); scanf("%s", my_act); printf("\n"); printf("\t\t* 输入密码: "); scanf("%ld", &password); for(i=0; i<N; i++) { if(strcmp(my_act, bank[i].account) == 0 && password == bank[i].pw) { flagI = i; flag = 1; printf("\t\t登录成功,正在跳转页面...\n"); Sleep(2000); system("cls"); while(1) { X = menu();//成功进入 if(X == 1) { system("cls"); menu(); } else return; } } else { printf("\t\t账号或密码错误,请重新输入...\n"); Sleep(2000); system("cls"); return; } } } ///////////////////////////////////注册//////////////////////////////////////////// void regist() { int i; printf("\t\t=================****注册****=================\n\n"); printf("\t\t请输入您的账户....\n"); printf("\t\t"); scanf("%s", bank .account); printf("\t\t请输入用户名......\n"); printf("\t\t"); scanf("%s", bank .user); printf("\t\t输入您的密码......\n"); printf("\t\t"); scanf("%ld", &bank .pw); for(i=0; i<N && i != n; i++) { if(strcmp(bank .account, bank[i].account) == 0) { printf("\t\t账户已存在,请重新注册......\n"); n -= 1; Sleep(2000); system("cls"); return; } } printf("\t\t注册成功\n"); bank .dsit = 0; n ++; Sleep(2000); system("cls"); return; } ////////////////////////////////主页面//////////////////////////////////////////////// int menu() { printf("\t\t=================****主页面****=================\n\n"); printf("\t\t====================****************=================\n\n"); printf("\t\t* 1. 查询 \n"); printf("\t\t* 2. 存钱 \n"); printf("\t\t* 3. 取钱 \n"); printf("\t\t* 4. 转账 \n"); printf("\t\t* 5. 修改密码 \n"); printf("\t\t* 6. 安全退出 \n"); printf("\t\t=====================================================\n\n"); int choice = -1; int Y = -1; printf("\t\t *"); printf("我的选择:"); scanf("%d", &choice); while(1) { switch(choice) { case 1: system("cls"); Y = refer(); break; case 2: system("cls"); Y = deposit(); break; case 3: system("cls"); Y = withdraw(); break; case 4: system("cls"); Y = transfer(); break; case 5: system("cls"); Y = resetPW(); break; case 6: system("cls"); return 0; default: printf("输入有误,请重输...\n"); return 1; } switch(Y) { case 0: printf("出现错误!\n"); return 0; break; case 1: /*正常情况menu返回1重新进入menu*/ return 1; break; case 2: Y = deposit(); break; case 3: Y = withdraw(); break; case 4: Y = transfer(); break; case 5: Y = resetPW(); break; } } } /////////////////////////////////////查询/////////////////////////////////////////// int refer() { printf("\t\t=================****查询****=================\n\n"); printf("\t\t* 您的账户余额为:\n"); printf("\t\t* %ld\n", bank[flagI].dsit); Sleep(3000); system("cls"); return 1; } /////////////////////////////////////取款/////////////////////////////////////////// int deposit() { long rMoney; printf("\t\t=================****存款****=================\n\n"); printf("\t\t* 输入您要存入的钱数(整百):\n\n"); printf("\t\t* "); scanf("%ld", &rMoney); if(rMoney%100 != 0) { printf("\t\t* 出现错误,请重试...\n\n"); return 2; } bank[flagI].dsit += rMoney; printf("\t\t* 存钱成功...\n\n"); Sleep(2000); system("cls"); return 1; } ///////////////////////////////////取款/////////////////////////////////////////// int withdraw() { long omoney; printf("\t\t=================****取款****=================\n\n"); printf("\t\t* 输入您要取出的钱数...\n\n"); printf("\t\t* "); scanf("%ld", &omoney); if(omoney%100 != 0) { printf("\t\t* 出现错误...\n\n"); Sleep(2000); system("cls"); return 3; } if(omoney > bank[flagI].dsit) { printf("\t\t* 余额不足...\n\n"); system("cls"); return 1; } bank[flagI].dsit -= omoney; printf("\t\t* 取钱成功...\n\n"); Sleep(2000); system("cls"); return 1; } //////////////////////////////////转账///////////////////////////////////////////// int transfer() { char ob[20]; int key, i; long k; printf("\t\t=================****转账****=================\n\n"); printf("\t\t* 请输入您要转账的账户...\n"); printf("\t\t* "); scanf("%s", ob); for(i=0; i<N; i++) { if(i == flagI) continue; if(strcmp(ob, bank[i].account) == 0) { flagN = i; printf("\t\t* 输入要转出的钱数(整百):\n"); printf("\t\t* "); scanf("%ld", &k); if(k%100 != 0) { printf("\t\t *"); printf("\t\t出现错误,请重试...\n"); Sleep(2000); system("cls"); return 1; } if(k > bank[flagI].dsit) { printf("\t\t* 余额不足.....\n"); return 4; } bank[flagI].dsit -= k; bank[flagN].dsit += k; Sleep(2000); printf("\t\t* 转账成功..."); Sleep(2000); system("cls"); return 1; } } printf("\t\t* 对不起,您输入的账户不存在...\n"); printf("*****************请稍等*********************"); Sleep(2000); system("cls"); return 1; } //////////////////////////////////修改密码//////////////////////////////////////////// int resetPW() { long password1, password2; long newpassword; printf("\t\t=================****修改密码****=================\n\n"); printf("\t\t* 请输入原始密码...\n\n"); printf("\t\t* "); scanf("%ld", &password1); printf("\t\t* 请再次输入...\n\n"); printf("\t\t* "); scanf("%ld", &password2); if(bank[flagI].pw == password1 && bank[flagI].pw == password2) { printf("\t\t* 输入新密码...\n\n"); printf("\t\t* "); scanf("%ld", &newpassword); if(judgePW(newpassword) == 1) { bank[flagI].pw = newpassword; printf("\t\t* 密码重置成功...\n\n"); Sleep(2000); system("cls"); return 1; } else { printf("\t\t* 输入的密码不符合规则,请重试...\n"); Sleep(2000); system("cls"); return 5; } } else { printf("\t\t* 密码错误...\n"); Sleep(2000); system("cls"); return 1; } return 1; } //////////////////////////////////////密码判断//////////////////////////////////////// int judgePW(long ps) { int n, k; for(k=0; k<6; k++) { n = ps%10; ps = ps/10; if(n < 0 || n > 9) { return 2; } } return 1; }
相关文章推荐
- <1>c语言实现ATM存取款系统(数组)
- <5>c语言实现ATM存取款系统(文件、排序)
- <4>c语言实现ATM存取款系统(链表)
- <剑指offer 面试题3> 数组中重复的数字(Java实现)
- <C语言>使用一个二维数组实现学生姓名管理系统,要求不能使用链表
- C语言利用结构体数组实现学生成绩管理系统
- C语言实现 ATM机存取款系统
- <google面试题>实现两个N*N矩阵的乘法,矩阵由一维数组表示
- <模拟飞机票订票和退票系统>的c++实现
- <C语言>在C语言程序中实现shell命令的效果
- <二叉树 前中后 层序 非递归遍历 c语言实现>
- 图书管理系统c语言 结构体数组实现
- <C语言>实现输入几个数,先倒叙排列,再用“冒泡排序”方法从小到大排列
- C语言数组实现学生信息管理系统设计
- C语言 实现ATM系统
- [置顶] <无线自主点餐系统>html普通导航栏实现,仿宾之郎,不做商业用途
- <C语言>实现简单的计算器(循环输入,加减乘除法可选)
- < < PXE实现Linux系统无人值守批量安装 > >
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- <转>Win7系统下利用U盘安装Ubuntu_12.04实现双系统教程