ATM项目
- 格式:doc
- 大小:118.50 KB
- 文档页数:20
实训报告实训题目:ATM系统的设计与实现院系:计算机科学与工程学院专业:网络工程班级: 10网络二班组员姓名:李德新指导教师:罗程果实训地点:N6开课时间:2012 至2013 学年第2 学期常熟理工学院计算机科学与工程学院制账户:account.h 银行:bank.h 用户:user.h 管理员:admin.h 文件操作:file.h 界面打印:print.h 主函数:main.c//account.h文件#ifndef _ACCOUNT_H_#define _ACCOUNT_H_#include "common.h"typedef struct{char name[20];char id[20];char passwd[20];float balance;}account;account * account_create(char *name, char *id, char *passwd, float balance); void account_destory(account *ac);float account_deposit(account *ac, float amount);float account_withdraw(account *ac, float amount);void account_query(account *ac);int account_changepwd(account *ac, char *newpasswd);#endif//account.c文件#include "account.h"account * account_create(char *name, char *id, char *passwd, float balance) {account *a = (account*)malloc(sizeof(account));strcpy(a->name, name);strcpy(a->id, id);strcpy(a->passwd, passwd);a->balance = balance;return a;}void account_destory(account *ac){if(ac != NULL){free(ac);ac = NULL;}}float account_deposit(account *ac, float amount){if(ac == NULL) return 0;if(amount < 0) return 0;ac->balance += amount;return ac->balance;}float account_withdraw(account *ac, float amount){if(ac == NULL) return 0;if(amount < 0 || amount > ac->balance){printf("??\n");return -1;}ac->balance -= amount;return ac->balance;}void account_query(account *ac){printf("account_name: %s,\taccount_id: %s,\taccount_passwd: %s,\tbalance: %.2f\n", ac->name, ac->id, ac->passwd, ac->balance);}int account_changepwd(account *ac, char *newpasswd){if(ac == NULL) return 0;strcpy(ac->passwd,newpasswd);return 1;}//bank.h文件#ifndef _BANK_H_#define _BANK_H_#include "common.h"#include "account.h"typedef struct{char name[20];int counter;int maxcounter;account *_array;}bank;bank* bank_create(char *name, int max);void bank_destory(bank *pb);int bank_add_account(bank *pb, account *pa);int bank_delete_account(bank *pb, char *id);account* bank_get_account(bank *pb, char *id);void bank_query(bank *pb);int bank_transfer(bank *pb, char *s_id, char *d_id,float amount);#endif//bank.c文件#include "bank.h"bank* bank_create(char *name, int maxcounter){bank *b = (bank*)malloc(sizeof(bank));strcpy(b->name,name);b->counter = 0;b->maxcounter = maxcounter;b->_array = (account*)malloc(sizeof(account)*b->maxcounter);if(b->_array == NULL) return 0;return b;}void bank_destory(bank *pb){if(pb != NULL){free(pb->_array);pb->_array = NULL;free(pb);pb = NULL;}}void expland(bank *pb){account* _newarray;if(pb->counter >= pb->maxcounter-1){printf("expland maxcounter....\n");pb->maxcounter+=10;_newarray = (account*)malloc(sizeof(account)*pb->maxcounter);memcpy(_newarray,pb->_array,sizeof(account)*pb->counter);free(pb->_array);pb->_array = _newarray;}}int bank_add_account(bank *pb, account *pa){if(pb == NULL || pa == NULL)return 0;expland(pb);memcpy(pb->_array+pb->counter,pa,sizeof(account));pb->counter++;return 1;}int get_index(bank *pb,char *id){int i;for(i=0;i<pb->counter;i++){if(strcmp(pb->_array[i].id,id) == 0)return i;}return -1;}int bank_delete_account(bank *pb, char *id){int i,index;char yn;index=get_index(pb,id);if(index == -1){printf("Can't find ,input id error!\n");return 0;}printf("确定删除该账户:%s\t(y/n) __ ",pb->_array[index].id); yn = getchar();if(yn == 'n') return 0;for(i=index;i<pb->counter;i++){pb->_array[i]=pb->_array[i+1];}pb->counter--;return 1;}account* bank_get_account(bank *pb, char *id){int index;index = get_index(pb,id);if(index == -1){printf("帐户不存在!\n");return 0;}return &(pb->_array[index]);}void bank_query(bank *pb){int i;printf("\n*********************\n");printf("bank_name: %s\n",pb->name);printf("bank_name: %s, bank_counter: %d, bank_maxcounter: %d\n",pb->name,pb->counter,pb->maxcounter);for(i=0;i<pb->counter;i++){account_query(&(pb->_array[i]));}}int bank_transfer(bank *pb, char *s_id, char *d_id,float amount){account *s = bank_get_account(pb,s_id);account *d = bank_get_account(pb,d_id);account_withdraw(s,amount);account_deposit(d,amount);return 1;}//user.h文件#ifndef _USER_H_#define _USER_H_#include "common.h"#include "account.h"#include "bank.h"#include "print.h"typedef struct userchar id[20];char pwd[20];}user;int user_login(bank *pb);int user_withdraw_account(bank *pb,account *ac); int user_deposit_account(bank *pb,account *ac); int user_transfer_account(bank *pb,account *ac); void user_check_account(bank *pb,account *ac); int user_changepwd(bank *pb,account *ac);#endif//user.c文件#include "user.h"void user_choice(bank *pb, account *ac){int ichoice;printf("\n输入命令选项(0-4):");scanf("%d",&ichoice);switch(ichoice){case 1:user_withdraw_account(pb,ac);getchar();break;case 2:user_deposit_account(pb,ac);getchar();break;case 3:user_transfer_account(pb,ac);getchar();break;case 4:user_check_account(pb,ac);getchar();break;case 5:user_changepwd(pb,ac);getchar();break;case 0:return ;default :fflush(stdin);break;}user_choice(pb,ac);}int user_login(bank *pb){char input_id[20];char input_pwd[20];int i;int icounter=0;while(icounter<3){printf("输入用户ID:");scanf("%s",input_id);getchar();printf("输入用户密码:");xin_pwd(input_pwd);printf("\n");for(i=0;i<pb->counter;i++){if(strcmp(pb->_array[i].id,input_id)==0 && strcmp(pb->_array[i].passwd,input_pwd)==0) {printf("user login successfully!\n");printf("Press any key to user_menu!\n");getchar();user_menu();user_choice(pb,&(pb->_array[i]));return 1;}}printf("用户名/密码输错!或账户不存在!\n");icounter++;}if(icounter >= 3)printf("输错超过三次以上,重新操作!\n");return -1;}int user_withdraw_account(bank *pb,account *ac){float amount;int flag;printf("输入取款金额:");scanf("%f",&amount);getchar();flag=account_withdraw(ac, amount);if(flag == -1){printf("取款失败!\n");return 0;}printf("取款成功,余额为:%.2f\n",ac->balance); return 1;}int user_deposit_account(bank *pb,account *ac) {float amount;char yn;while(1){printf("输入存款金额:");scanf("%f",&amount);getchar();account_deposit(ac, amount);printf("存款成功,余额为:%.2f\n",ac->balance); printf("是否继续存款:(y/n) ");yn = getchar();if(yn == 'n' || yn == 'N'){printf("结束放钞!\n");break;}continue;}return 1;}int user_transfer_account(bank *pb,account *ac) {float amount;char d_id[20];account *ac_temp;printf("余额为:%.2f\n",ac->balance);printf("输入转移金额:");scanf("%f",&amount);getchar();printf("输入对方帐户ID:");scanf("%s",d_id);getchar();ac_temp = bank_get_account(pb, d_id);if(!ac_temp){printf("转账失败!\n");return 0;}if(amount > (ac->balance)){printf("余额不足,转帐失败!\n");return 0;}bank_transfer(pb, ac->id ,d_id, amount);printf("转账成功,余额为:%.2f\n",ac->balance); return 1;}int user_changepwd(bank *pb,account *ac){char new1_pwd[20];char new2_pwd[20];char old_pwd[20];while(1){printf("输入原密码:");scanf("%s",old_pwd);getchar();printf("输入新密码:");scanf("%s",new1_pwd);getchar();printf("重新确认新密码:");scanf("%s",new2_pwd);getchar();if(strcmp(ac->passwd,old_pwd)==0){if(strcmp(new1_pwd,new2_pwd)==0)account_changepwd(ac, new1_pwd);printf("修改成功!\n\n");break;}else{printf("新密码不匹配,请重新输入!\n\n\n");}}else{printf("原始密码错误,请重输!\n\n\n");}}}void user_check_account(bank *pb,account *ac) {account_query(ac);}//admin.h文件#ifndef _ADMIN_H_#define _ADMIN_H_#include "common.h"#include "bank.h"#include"print.h"typedef struct admin{char id[20];char pwd[20];}admin;int admin_login(bank *pb,char *id, char *passwd); int open_account(bank *pb);int remove_account(bank*pb);void query_admin(bank*pb);//admin.c文件#include "admin.h"void admin_choice(bank *pb){int ichoice;printf("\n输入命令选项(0-3):");scanf("%d",&ichoice);getchar();switch(ichoice){case 1:open_account(pb);break;case 2:remove_account(pb);break;case 3:query_admin(pb);break;case 0:return ;default :fflush(stdin);}admin_choice(pb);}int admin_login(bank *pb,char *id, char *passwd) {int icount=1;char input_id[20]={'\0'};char input_passwd[20];admin *ad = (admin*)malloc(sizeof(admin)); strcpy(ad->id, id);strcpy(ad->pwd, passwd);while(icount<=3){printf("输入管理员用户名:");scanf("%s",input_id);getchar();printf("输入管理员密码:");xin_pwd(input_passwd);printf("\n");if(strcmp(ad->id, input_id)==0 && strcmp(ad->pwd, input_passwd)==0) {printf("admin login successfully!\n");printf("Press any key to admin_menu!\n");getchar();admin_menu();admin_choice(pb);return 1;}else{printf("输入错误......\n");icount++;}}if(icount >= 3){printf("输入错误,超过三次!!\n");return 0;}}int open_account(bank *pb){char pwd_again[20];char ch;int i;int flag1;int flag2=0;printf("开始添加:(y/n)");ch=getchar();while(ch!='n'){account *pa = (account*)malloc(sizeof(account));printf("输入帐户:");scanf("%s",pa->name);getchar();while(flag2 == 0){printf("输入id:");scanf("%s",pa->id);getchar();for(i=0;i<pb->counter;i++){if(strcmp(pa->id, pb->_array[i].id)==0){printf("该帐户已存在,请重新输入!\n");flag1 = 0;break;}else flag1 =1;}if(flag1 == 0) flag2 = 0;else flag2 = 1;}printf("输入passwd:");scanf("%s",pa->passwd);getchar();printf("再次输入passwd:");scanf("%s",pwd_again);getchar();while(strcmp(pa->passwd, pwd_again) != 0){printf("密码不一样,请再次输入密码。