//客户端界面 void mainPage(){ while(1){ printf(" 欢迎使用迷你ATM机\n"); printf("---------------------\n"); printf("[1] 开户"); printf(" [2] 销户\n"); printf("[3] 存钱"); printf(" [4] 取钱\n"); printf("[5] 查询"); printf(" [6] 转账\n"); printf("[0] 退出\n"); printf("---------------------\n"); printf("请选择:\n"); int num = 0; scanf("%d",&num); switch(num){ case 1:createUser();break; case 2:destroyUser();break; case 3:saveMoney();break; case 4:getMoney();break; case 5:checkMoney();break; case 6:moveMoney();break; case 0:printf("谢谢使用,再见!\n");return ; default:printf("输入错误\n"); } } }
void *handle(void *arg) { char recvbuff[256]; char sendbuff[256]; int n; memset(recvbuff, '\0', 256); memset(sendbuff, '\0', 256); int connfd = *(int *)arg; struct Account acc; struct Account p; while(1) { n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; printf("%s\n",recvbuff); if(strcmp(recvbuff,"1")==0) { memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.name,recvbuff); printf("%s\n",acc.name); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.password,recvbuff); printf("%s\n",acc.password); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.money,recvbuff); printf("%s\n",acc.money); createUser(acc); strcpy(sendbuff,"creat a new user success"); write(connfd,sendbuff,sizeof(sendbuff)); } if(strcmp(recvbuff,"2")==0) { memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.name,recvbuff); printf("%s\n",acc.name); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.password,recvbuff); printf("%s\n",acc.password); destoryUser(acc); memset(sendbuff, '\0', 256); strcpy(sendbuff,"destroyUser success"); write(connfd,sendbuff,sizeof(sendbuff)); } if(strcmp(recvbuff,"3")==0) { memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.name,recvbuff); printf("%s\n",acc.name); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.password,recvbuff); printf("%s\n",acc.password); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.money,recvbuff); printf("%s\n",acc.money); p=saveMoney(acc); if(strcmp(p.password,acc.password)==0) { memset(sendbuff, '\0', 256); strcpy(sendbuff,p.money); write(connfd,sendbuff,sizeof(sendbuff)); } else { memset(sendbuff, '\0', 256); strcpy(sendbuff,"password wrong"); write(connfd,sendbuff,sizeof(sendbuff)); } } if(strcmp(recvbuff,"4")==0) { memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.name,recvbuff); printf("%s\n",acc.name); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.password,recvbuff); printf("%s\n",acc.password); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.money,recvbuff); printf("%s\n",acc.money); p=getMoney(acc); if(strcmp(p.password,acc.password)==0) { memset(sendbuff, '\0', 256); strcpy(sendbuff,p.money); write(connfd,sendbuff,sizeof(sendbuff)); } else { memset(sendbuff, '\0', 256); strcpy(sendbuff,"password wrong"); write(connfd,sendbuff,sizeof(sendbuff)); } } if(strcmp(recvbuff,"5")==0) { memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.name,recvbuff); printf("%s\n",acc.name); memset(recvbuff, '\0', 256); n=read(connfd,recvbuff,sizeof(recvbuff)); recvbuff[n]=0; strcpy(acc.password,recvbuff); printf("%s\n",acc.password); p=checkMoney(acc); if(strcmp(p.password,acc.password)==0) { memset(sendbuff, '\0', 256); strcpy(sendbuff,p.money); write(connfd,sendbuff,sizeof(sendbuff)); } else { memset(sendbuff, '\0', 256); strcpy(sendbuff,"password wrong"); write(connfd,sendbuff,sizeof(sendbuff)); } } } }
int main() { int msgid1 = msgget(key1,0); if(msgid1 == -1) { perror("获取消息队列一失败"); printf("服务启动失败\n"); exit(-1); } int msgid2 = msgget(key2,0); if(msgid2 == -1) { perror("获取消息队列二失败"); printf("服务启动失败\n"); exit(-1); } //开始接受消息 while(1) { struct Msg msg; struct Account accMove,accResult; if(msgrcv(msgid1,&msg,sizeof(msg.acc),0,0) <= 0) { continue; } if(msg.mtype == M_OPEN) { int id = generator_id(); accMove = msg.acc; accMove.id = id; if(createUser(accMove) == -1) { printf("开户失败\n"); msg.mtype = M_FAILED; } else { printf("开户成功\n"); msg.mtype = M_SUCESS; } msgsnd(msgid2,&msg,sizeof(msg.acc),0); } else if(msg.mtype == M_DESTROY) { if(destoryUser(msg.acc) == -1) { printf("销户失败\n"); msg.mtype = M_FAILED; } else { printf("销户成功\n"); msg.mtype = M_SUCESS; } msgsnd(msgid2,&msg,sizeof(msg.acc),0); } else if(msg.mtype == M_SAVE) { if(saveMoney(msg.acc, &accResult) == -1) { printf("存钱失败\n"); msg.mtype = M_FAILED; } else { printf("存钱成功\n"); msg.mtype = M_SUCESS; } //发送是否存钱成功的标志 msg.acc.balance = accResult.balance; msgsnd(msgid2,&msg,sizeof(msg.acc),0); } else if(msg.mtype == M_TAKE) { if(getMoney(msg.acc,&accResult) == -1) { printf("取钱失败\n"); msg.mtype = M_FAILED; } else { printf("取钱成功\n"); msg.mtype = M_SUCESS; } //将服务器处理的结果发送给客户端 msg.acc.balance = accResult.balance; msgsnd(msgid2,&msg,sizeof(msg.acc),0); } else if(msg.mtype == M_QUERY) { if(checkMoney(msg.acc,&accResult) == -1) { printf("查询失败\n"); msg.mtype = M_FAILED; } else { printf("查询成功\n"); msg.mtype = M_SUCESS; } //发送查询出的余额 msg.acc.balance = accResult.balance; msgsnd(msgid2,&msg,sizeof(msg.acc),0); } else if(msg.mtype == M_TRANSF) { //定义一个消息结构体,来接受转入的帐号 struct Msg msgTemp; msgrcv(msgid1,&msgTemp,sizeof(msgTemp.acc),0,0); if(moveMoney(msg.acc,msgTemp.acc,&accResult) == -1) { printf("转入失败\n"); msg.mtype = M_FAILED; } else { printf("转入成功\n"); msg.mtype = M_SUCESS; } msg.acc.balance = accResult.balance; printf("转帐之后的结果是:%lf\n",msg.acc.balance); //发送处理结果到客户端 msgsnd(msgid2,&msg,sizeof(msg.acc),0); } } return 0; }