网络版ATM项目的实现——客户端

网络版的ATM实现思路网络版ATM项目的实现——客户端

客户端

  1 #include "customer.h"
  2 
  3 static int sockfd;
  4 
  5 /*int create_msg_queue_c(int key)
  6 {
  7     //创建消息队列
  8     int msgid = msgget(key,IPC_CREAT|0644);
  9     if(0 > msgid)
 10     {
 11         perror("msgget");
 12         return -1;
 13     }
 14     return msgid;
 15 }*/
 16 
 17 void show_menu(void)
 18 {
 19     printf("Welcome to Online Bank !
");
 20     printf("---------------------
");
 21     printf("    [1]开户        
");
 22     printf("    [2]登录        
");
 23     printf("    [3]解锁        
");
 24     printf("    [4]销户        
");
 25     printf("    [5]退出        
");
 26     printf("---------------------
");
 27 }
 28 //开户界面
 29 void open_menu(void)
 30 {
 31     
 32     Msg msg = {99};
 33     //得到基本信息
 34     printf("请输入姓名:");
 35     gets(msg.acc.name);
 36     printf("请输入身份证号:");
 37     gets(msg.acc.idcard);
 38     printf("请输入预存金额:");
 39     scanf("%f",&msg.acc.money);
 40     //清空缓冲区
 41     stdin->_IO_read_ptr = stdin->_IO_read_end;
 42     strcpy(msg.acc.password,"123456");
 43     printf("%d
",msg.acc.account);
 44     //将获得的基本信息发送到服务端
 45     send(sockfd,&msg,sizeof(Msg),0);
 46     //接收服务端传回的信息(账号id)
 47     recv(sockfd,&msg,sizeof(Msg),0);
 48     //perror("msgrcv");
 49     printf("*****您的id是%d,初始密码为123456,账号内的余额为%f*****
",msg.acc.account,msg.acc.money);
 50     sleep(2);
 51 }
 52 //显示登陆后的功能界面
 53 void func_menu(void)
 54 {
 55     printf("Welcome to Online Bank !
");
 56     printf("---------------------
");
 57     printf("    [1]存款        
");
 58     printf("    [2]取款        
");
 59     printf("    [3]转账        
");
 60     printf("    [4]查询        
");
 61     printf("    [5]修密        
");
 62     printf("    [6]退出        
");
 63     printf("---------------------
");
 64 }
 65 //退出登录
 66 void logout(int id)
 67 {
 68     
 69     Msg msg = {50};
 70     msg.acc.account = id;
 71     send(sockfd,&msg,sizeof(Msg),0);
 72     //接收服务端传回的信息(账号id)
 73     recv(sockfd,&msg,sizeof(Msg),0);
 74     printf("退出成功!
");
 75     sleep(2);
 76 }
 77 //存钱界面
 78 void save(int id)
 79 {
 80     Msg msg = {5};
 81     msg.acc.account = id;
 82     printf("请输入要存的金额:");
 83     scanf("%f",&msg.acc.money);
 84     //清空缓冲区
 85     stdin->_IO_read_ptr = stdin->_IO_read_end;
 86     //将获得的基本信息发送到服务端
 87     send(sockfd,&msg,sizeof(Msg),0);
 88     //接收服务端传回的信息(账号id)
 89     recv(sockfd,&msg,sizeof(Msg),0);
 90     printf("存款成功!
");
 91     printf("*****您的id是%d,账号内的余额为%f*****
",msg.acc.account,msg.acc.money);
 92     sleep(2);
 93 }
 94 //取款界面
 95 void take(int id)
 96 {
 97     Msg msg = {6};
 98     msg.acc.account = id;
 99     printf("请输入要取的金额:");
100     scanf("%f",&msg.acc.money);
101     //清空缓冲区
102     stdin->_IO_read_ptr = stdin->_IO_read_end;
103     //将获得的基本信息发送到服务端
104     send(sockfd,&msg,sizeof(Msg),0);
105     //接收服务端传回的信息(账号id)
106     recv(sockfd,&msg,sizeof(Msg),0);
107     if(-1 == msg.acc.flag)
108     {
109         printf("取款失败!
");
110         sleep(2);
111     }
112     else
113     {
114         printf("取款成功!
");
115         printf("*****您的id是%d,账号内的余额为%f*****
",msg.acc.account,msg.acc.money);
116         sleep(2);
117     }
118 }
119 //转账界面
120 void trans(int id)
121 {
122     Msg msg1 = {7};
123     //Msg msg2 = {17};
124     msg1.acc.account = id;
125     printf("请输入转账对象的id:");
126     scanf("%d",&msg1.acc.target);
127     //清空缓冲区
128     stdin->_IO_read_ptr = stdin->_IO_read_end;
129     printf("请输入要转账的金额:");
130     scanf("%f",&msg1.acc.money);
131     //清空缓冲区
132     stdin->_IO_read_ptr = stdin->_IO_read_end;
133     //将获得的基本信息发送到服务端
134     send(sockfd,&msg1,sizeof(Msg),0);
135     //接收服务端传回的信息(账号id)
136     recv(sockfd,&msg1,sizeof(Msg),0);
137     switch(msg1.acc.flag)
138     {
139         case -1:printf("您的余额不足!
");sleep(2);break;
140         case -2:printf("转账对象不存在!
");sleep(2);break;
141         case 0:    printf("转账成功!
");
142                 printf("*****您的id是%d,账号内的余额为%f*****
",msg1.acc.account,msg1.acc.money);
143                 sleep(2);break;
144     }
145 }
146 
147 //查询界面
148 void show(int id)
149 {
150     system("clear");
151     Msg msg = {8};
152     msg.acc.account = id;
153     //将获得的基本信息发送到服务端
154     send(sockfd,&msg,sizeof(Msg),0);
155     //接收服务端传回的信息(账号id)
156     recv(sockfd,&msg,sizeof(Msg),0);
157     printf("%s用户您好!
",msg.acc.name);
158     printf("账号ID:%d
",msg.acc.account);
159     printf("身份证号:%s
",msg.acc.idcard);
160     printf("账号余额:%f
",msg.acc.money);
161     printf("*****按任意键返回*****
");
162     getchar();    
163 }
164 
165 //修改密码界面
166 void change(int id)
167 {
168     Msg msg = {9};
169     msg.acc.account = id;
170     printf("请输入您的身份账号以用于验证用户信息:");
171     gets(msg.acc.idcard);
172     printf("请输入新密码(6位):");
173     put_pw(msg.acc.password);
174     if(6 != strlen(msg.acc.password))
175     {
176         printf("密码格式不符!
");
177         sleep(2);
178         return;
179     }
180     else
181     {
182         //将获得的基本信息发送到服务端
183         send(sockfd,&msg,sizeof(Msg),0);
184         //接收服务端传回的信息(账号id)
185         recv(sockfd,&msg,sizeof(Msg),0);
186         if(-1 == msg.acc.flag)
187         {
188             printf("修改失败!
");
189             sleep(2);
190         }
191         else
192         {
193             printf("修改成功!
");
194             sleep(2);
195         }
196     }
197 }
198 
199 //副主界面
200 void ano_main(int id)
201 {
202     while(1)
203     {
204         system("clear");
205         func_menu();
206         switch(getch())
207         {
208             case 49:save(id);break;
209             case 50:take(id);break;
210             case 51:trans(id);break;
211             case 52:show(id);break;
212             case 53:change(id);break;
213             case 54:logout(id);return;
214         }
215     }
216 }
217 //加载界面
218 void loading(void)
219 {
220     //system("clear");
221     char buf[103] = {};
222     memset(buf, ' ', sizeof(buf));
223     buf[0] = '[';
224     buf[101] = ']';
225     buf[102] = '