TA的每日心情 | 怒 2016-3-24 22:09 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
- #include<string.h>
- #include<stdio.h>
- #include<stdlib.h>
- //用户数据
- typedef struct bank
- {
- char account[10+1];
- char psw[16+1];
- long money;
- char name[10+1];
- char id[18+1];
- }Bank;
- //节点
- typedef struct node
- {
- Bank data;
- struct node *next;
- struct node *prev;
- }Node;
- //头指针
- Node *Head=NULL;
- //查找
- Bank *SearchLinkList(char *paccount)
- {
- Node *p=Head;
- if(p==NULL)
- return 0;
- while(p!=NULL&&strcmp((p->data).account,paccount))
- p=p->next;
- if(!p)
- return 0;
- else
- return &(p->data);
- }
- //追加
- void AppendLinkList(Bank *Data)
- {
- Node *pNode = (Node*)malloc(sizeof(Node));
- strcpy(pNode->data.account,Data->account);
- strcpy(pNode->data.psw,Data->psw);
- strcpy(pNode->data.name,Data->name);
- pNode->data.money=Data->money;
- strcpy(pNode->data.id,Data->id);
- pNode->next=NULL;
- Node *p=Head;
- if(p==NULL)
- {
- Head=pNode;
- pNode->next=NULL;
- pNode->prev=NULL;
- }
- else
- {
- while(p->next)
- p=p->next;
- p->next=pNode;
- pNode->prev=p;
- }
- }
- //删除
- int DeleteLinkList(char *paccount)
- {
- Node *p=Head;
- if(p==NULL)
- return 1;
- while(p!=NULL&&strcmp(p->data.account,paccount))
- p=p->next;
- if(!p)
- return 1;
- else
- free(p);
- return 0;
- }
- //读取文件里的数据并存入连表
- int ReadFile()
- {
- FILE* fp = fopen("bank.txt","a+");
- Bank *data =(Bank *) malloc(sizeof(Bank));
- if(!fp)
- {
- printf("打开文件失败 !\n");
- return -1;
- }
-
- else
- {
- while(1)
- {
- int i = fscanf(fp ,"%10s %16s %10ld %10s %18s",data->account,data->psw,&(data->money),data->name,data->id);
-
- fscanf(fp,"%*[^\n]");
- if(i==5)
- AppendLinkList(data);
- else
- break;
- }
- }
- free(data);
- fclose(fp);
- }
- //将连表里的数据定写入文件
- int WriteFile()
- {
- FILE* fp = fopen("bank.txt","w+");
- if(!fp)
- {
- printf("打开文件失败!\n");
- return -1;
- }
- else
- {
- Node* p=Head;
- while(p)
- {
- fprintf(fp,"%10s %16s %10ld %10s %18s\n ",p->data.account,p->data.psw,p->data.money,p->data.name,p->data.id);
- p=p->next;
- }
- }
- fclose(fp);
- exit(0);
- }
- //主界面
- void welcome1()
- {
- printf("\n*********欢迎使用虚拟银行自动取款机**********\n");
- printf("\n*********************************************\n");
- printf("\n|| 请选择业务种类 ||\n");
- printf("\n|| 1注册 ||\n");
- printf("\n|| 2登陆 ||\n");
- printf("\n|| 0退出 ||\n");
- printf("\n*********************************************\n");
-
- }
- //注册用户需知界面
- void welcome2()
- {
- printf("\n*********************************************\n");
- printf("\n|| 新用户注册需知 ||\n");
- printf("\n|| 1请填写真实身份 ||\n");
- printf("\n|| 2存款金额不得少于100元 ||\n");
- printf("\n|| 3若出现任资金丢失或信息泄漏本行概不负责 ||\n");
- printf("\n|| 4若取机多吐现金请及时送还否则视为盗窃 ||\n");
- printf("\n|| 继续请按1 返回请按2 退出请按0 ||\n");
- printf("\n*********************************************\n");
- }
- //登陆成功界面
- void welcome3()
- {
- printf("\n*********欢迎使用虚拟银行自动取款机***********\n");
- printf("\n**********************************************\n");
- printf("\n 登陆成功请选择业务种类 ||\n");
- printf("\n 1取款 2查询 ||\n");
- printf("\n 3存款 4注销 ||\n");
- printf("\n 5修改密码 6返回主页面 ||\n");
- printf("\n 退出请按0 ||\n");
- printf("\n**********************************************\n");
- }
- //查询显示
- void welcome4(Bank *Data)
- {
- printf("\n**************************************************\n");
- printf("\n|| 您的个人信息如下 ||\n");
- printf("\n|| 姓名:%10s ||\n",Data->name);
- printf("\n|| 账号:%10s ||\n",Data->account);
- printf("\n|| 身份证号:%18s ||\n",Data->id);
- printf("\n|| 余额:%10lu元 ||\n",Data->money);
- printf("\n|| 返回上级请按2 退出请按0 ||\n");
- printf("\n**************************************************\n");
- }
- //注册函数
- void reg()
- {
- int a=0;
- char account[10+1];
- char name[10+1];
- char id[18+1];
- char psw1[16+1];
- char psw[16+1];
- long Money=0;
- Bank newuser;
- for(;;)
- {
- welcome2();
- printf("请选择:\n");
- scanf("%d",&a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==1)
- {
- printf("请输入您的账号(10个字符以内):\n");
- scanf("%s",account);
- scanf("%*[^\n]");
- scanf("%*c");
- if(strlen(account)>10)
- {
- printf("\n********************************************\n");
- printf("\n|| 输入有误账号不能超过10个字符 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n********************************************\n");
- scanf("%d", &a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==1)
- continue;
- else if(a==2)
- break;
- else if(a==0)
- WriteFile();
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
-
- }
- if(SearchLinkList(account)!=NULL)
- {
- printf("该账号已存在请重新输入\n");
- break;
- }
- else
- strcpy(newuser.account,account);
- while(1)
- {
- printf("请输入您的密码(16个字符以内):\n");
- scanf("%s",psw);
- scanf("%*[^\n]");
- scanf("%*c");
- if(strlen(psw)>16)
- {
- printf("\n************************************************\n");
- printf("\n|| 输入有误密码不能超过16个字符 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==1)
- continue;
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- else
- {
- printf("请再次输入您的密码:\n");
- scanf("%s",psw1);
- scanf("%*[^\n]");
- scanf("%*c");
- if(!strcmp(psw,psw1))
- strcpy(newuser.psw,psw);
- else
- {
-
- printf("\n************************************************\n");
- printf("\n|| 输入有误两次密码输入不一致 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==1)
- continue;
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
-
- }
-
- break;
- }
- if(a==2)
- break;
- while(1)
- {
- printf("请输入您的姓名(10个字符以内):\n");
- scanf("%s",name);
- scanf("%*[^\n]");
- scanf("%*c");
- if(strlen(name)>10)
- {
- printf("\n************************************************\n");
- printf("\n|| 输入有误姓名不能超过10个字符 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==1)
- continue;
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- else
- strcpy(newuser.name,name);
- break;
- }
- if(a==2)
- break;
- while(1)
- {
- printf("请输入您的身份(18个字符):\n");
- scanf("%s",id);
- scanf("%*[^\n]");
- scanf("%*c");
- if(strlen(id)!=18)
- {
- printf("\n************************************************\n");
- printf("\n|| 输入有误身份证号必须为18个字符 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==1)
- continue;
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- else
- strcpy(newuser.id,id);
- break;
- }
- if(a==2)
- break;
- while(1)
- {
- printf("请输入您的存款金额(不得小于100元)\n");
- scanf("%lu", &Money);
- scanf("%*[^\n]");
- scanf("%*c");
- if(Money<100)
- {
- printf("\n************************************************\n");
- printf("\n|| 输入有误存款金额小于100元 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &a);
- if(a==0)
- WriteFile();
- else if(a==1)
- continue;
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- else
- newuser.money=Money;
- break;
- }
- AppendLinkList(&(newuser));
- welcome4(&newuser);
- scanf("%d",&a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- break;
- }
- }
-
- else if(a==2)
- break;
- else if(a==0)
- WriteFile();
- else
- printf("输入有误系统自动返回!");
- }
- }
- //登陆函数
- void login()
- {
- char Account[10+1];
- char Passwd[16+1];
- long Money;
- Bank * User;
- printf("请输入您的账号:\n");
- scanf("%s",Account);
- printf("请输入您的密码:\n");
- scanf("%s",Passwd);
- if(SearchLinkList(Account)!=NULL)
- {
- User=SearchLinkList(Account);
- if(!strcmp(User->psw,Passwd))
- {
- for(;;)
- {
- int flg;
- welcome3();
- scanf("%d",&flg);
- scanf("%*[^\n]");
- scanf("%*c");
- if(flg==1)
- {
- for(;;)
- {
- printf("请输入您的取款金额!\n");
- scanf("%lu",&Money);
- scanf("%*[^\n]");
- scanf("%*c");
- if(Money<0)
- {
- printf("输入有误请重新输入!\n");
- continue;
- }
- if(User->money<Money)
- {
- printf("您的余额不足请重新输入!\n");
- continue;
- }
- else
- {
- User->money=User->money-Money;
- printf("取款成功!\n");
- }
- break;
- }
- continue;
- }
- else if(flg==2)
- {
- int a;
- welcome4(User);
- scanf("%d",&a);
- scanf("%*[^\n]");
- scanf("%*c");
- if(a==0)
- WriteFile();
- else if(a==2)
- continue;
- else
- printf("输入有误系统自动返回\n");
- continue;
- }
-
- else if(flg==3)
- {
- printf("请输入您的存款金额:\n");
- scanf("%lu",&Money);
- scanf("%*[^\n]");
- scanf("%*c");
- if(Money>0)
- {
- User->money+=Money;
- printf("存款成功!\n");
- }
- else
- printf("输入有误系统自动返回!\n");
- continue;
- }
- else if(flg==4)
- {
- if(!DeleteLinkList(Account))
- {
- printf("注销成功!\n");
- break;
- }
- else
- printf("注销失败系统自动返回!\n");
- continue;
- }
- else if(flg==5)
- {
- while(1)
- { int b;
- char psw1[16];
- char psw[16];
- printf("请输入您的新密码(15个字符以内):\n");
- scanf("%s",psw);
- scanf("%*[^\n]");
- scanf("%*c");
- if(strlen(psw)>16)
- {
- printf("\n************************************************\n");
- printf("\n|| 输入有误密码不能超过16个字符 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &b);
- scanf("%*[^\n]");
- scanf("%*c");
- if(b==0)
- WriteFile();
- else if(b==1)
- continue;
- else if(b==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- else
- {
- printf("请再次输入您的密码:\n");
- scanf("%s",psw1);
- scanf("%*[^\n]");
- scanf("%*c");
- if(!strcmp(psw,psw1))
- strcpy(User->psw,psw);
-
- else
- {
-
- printf("\n************************************************\n");
- printf("\n|| 输入有误两次密码输入不一致 ||\n");
- printf("\n|| 重新输入请按1 ||\n");
- printf("\n|| 返回请按2 退出请按0 ||\n");
- printf("\n************************************************\n");
- scanf("%d", &b);
- scanf("%*[^\n]");
- scanf("%*c");
- if(b==0)
- WriteFile();
- else if(b==1)
- continue;
- else if(b==2)
- break;
- else
- {
- printf("输入有误系统自动返回!\n");
- continue;
- }
- }
- printf("密码修改成功!\n");
- break;
- }
- }
- continue;
- }
- else if(flg==6)
- break;
- else if(flg==0)
- WriteFile();
- else
- printf("输入有误系统自动返回!\n");
-
- }
- }
- else
- printf("输入密码有误请重新登陆!\n");
- }
- else
- printf("输入账号有误请重新登陆!\n");
- }
- /*void init()
- {
- Bank wensheng;
- strcpy(wensheng.name,"wensheng");
- strcpy(wensheng.account,"030840910");
- strcpy(wensheng.psw,"030840910");
- strcpy(wensheng.id,"420983198805122414");
- wensheng.money=20000000;
- Bank xiaoping;
- strcpy(xiaoping.name,"xiaoping");
- strcpy(xiaoping.account,"030840911");
- strcpy(xiaoping.psw,"030840911");
- strcpy(xiaoping.id,"420983198805122415");
- xiaoping.money=30000000;
- AppendLinkList(&wensheng);
- AppendLinkList(&xiaoping);
- }
- */
- //主函数
- int main(void)
- {
-
- int num;
- Bank *User;
- ReadFile();
- // init();
- for(;;)
- {
- welcome1();
- scanf("%d",&num);
- scanf("%*[^\n]");
- scanf("%*c");
- if(num==1)
- reg();
- else if(num==2)
- login();
- else if(num==0)
- WriteFile();
- else
- printf("输入有误系统自动返回!(596)\n");
- }
- WriteFile();
- return 0;
- }
复制代码 |
|