<4>c语言实现ATM存取款系统(链表)
2012-10-03 19:24
579 查看
数组是比较基础的东西,真正的是要会用链表,这样灵活性更高,更方便
#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; struct info *next; }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); int search(char *s,int psw); int searchAC(char *s); /*flagI标记当前登录账户,flagN标记当前转账的账户*/ int n = 0; struct info *pt, *head = NULL, *tail, *p0; 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; 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); flag = search(my_act,password); if(flag == 1) { printf("\t\t登录成功,正在跳转页面...\n"); p0 = pt; Sleep(2000); system("cls"); while(1) { X = menu();//成功进入 if(X == 1) { system("cls"); menu(); } else return; } } else if(flag == 0) { printf("\t\t账号或密码错误,请重新输入...\n"); Sleep(2000); system("cls"); return; } } int search(char *s,int psw) { if(head == NULL) { return 0; } pt = head; while(1) { if(strcmp(pt->account, s)==0&&pt->pw==psw) { return 1; } if(pt->next == NULL) break; pt = pt->next; } return 0; } int searchAC(char *s) { if(head == NULL) { return 0; } pt = head; while(1) { if(strcmp(pt->account, s)==0) { return 1; } if(pt->next == NULL) break; pt = pt->next; } return 0; } ///////////////////////////////////注册//////////////////////////////////////////// void regist() { printf("\t\t=================****注册****=================\n\n"); struct info *p1; p1 = (struct info*)malloc(sizeof(struct info)); p1->next = NULL; int flag; printf("\t\t请输入您的账户....\n"); printf("\t\t"); scanf("%s", p1->account); printf("\t\t请输入用户名......\n"); printf("\t\t"); scanf("%s", p1->user); printf("\t\t输入您的密码......\n"); printf("\t\t"); scanf("%ld", &p1->pw); flag = search(p1->account,p1->pw); if(flag == 1) { printf("\t\t账户已存在,请重新注册......\n"); Sleep(2000); system("cls"); return; } else if(flag == 0) { printf("\t\t注册成功\n"); //flagN = N; //标记当前注册账户是链表中的第几个 p1->dsit = 0; if(n == 0) { head = p1; tail = p1; n ++; Sleep(2000); system("cls"); return; } else { tail->next = p1; tail = p1; 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", p0->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; } p0->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 > p0->dsit) { printf("\t\t* 余额不足...\n\n"); system("cls"); return 1; } p0->dsit -= omoney; printf("\t\t* 取钱成功...\n\n"); Sleep(2000); system("cls"); return 1; } //////////////////////////////////转账///////////////////////////////////////////// int transfer() { struct info *pFlag; char ob[20]; int key, i; long money; int flag; printf("\t\t=================****转账****=================\n\n"); printf("\t\t* 请输入您要转账的账户...\n"); printf("\t\t* "); scanf("%s", ob); flag = searchAC(ob); pFlag = pt; if(flag == 1) { printf("\t\t* 输入要转出的钱数(整百):\n"); printf("\t\t* "); scanf("%ld", &money); if(money%100 != 0) { printf("\t\t *"); printf("\t\t出现错误,请重试...\n"); Sleep(2000); system("cls"); return 1; } if(money > p0->dsit) { printf("\t\t* 余额不足.....\n"); return 1; } p0->dsit -= money; pFlag->dsit += money; Sleep(2000); printf("\t\t* 转账成功..."); Sleep(2000); system("cls"); return 1; } else if(flag == 0) { 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(p0->pw == password1 && p0->pw == password2) { printf("\t\t* 输入新密码...\n\n"); printf("\t\t* "); scanf("%ld", &newpassword); if(judgePW(newpassword) == 1) { p0->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; }
相关文章推荐
- <5>c语言实现ATM存取款系统(文件、排序)
- <1>c语言实现ATM存取款系统(数组)
- <3>c语言实现ATM存取款系统(数组实现)
- <C语言>使用一个二维数组实现学生姓名管理系统,要求不能使用链表
- tensorflow Examples:<4>实现RNN
- C语言链表实现班级管理系统
- 红黑树<C语言实现>
- 《C语言及程序设计》教学视频 <18 链表中结点的插入和删除> 示例代码
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- <系统安全运维> Server 2008 R2 事件查看器实现日志分析
- C语言实现学生信息管理系统(单链表)
- 多样化实现Windows Phone 7本地数据访问<4>——Rapid Repository
- c语言深入理解<4>
- <<C语言接口与实现>> 第三章 原子
- <数据结构>单链表的C语言实现
- <<C语言接口与实现>> 第五章 内存管理
- 《C语言及程序设计》教学视频 <18 链表中结点的插入和删除> 示例代码
- <Unity UGUI> 在Unity5 的UGUI系统上实现图片的遮罩
- Spring Cloud版——电影售票系统<八>使用 Spring Sleuth 实现微服务追踪
- 多样化实现Windows Phone 7本地数据访问<4>——Rapid Repository