<4>c语言实现ATM存取款系统(链表)

来源:互联网 发布:制作生日快乐贺卡软件 编辑:程序博客网 时间:2024/05/16 17:37

数组是比较基础的东西,真正的是要会用链表,这样灵活性更高,更方便

#include<stdio.h>#include<String.h>#include<math.h>#include<stdlib.h>#include<windows.h> #define N 100struct info {char account[30];char user[100];long dsit;long pw;struct info *next;}bank[N];/* = {{"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;}