首页 手机充值缴费系统

手机充值缴费系统

举报
开通vip

手机充值缴费系统笔者前言移动通信业务中,【www.fix114.net】有一部分都是和手机缴费的业务相关,而手机缴费业务目前处于发展的阶段,手机缴费业务作为目前唯一的数据业务正在飞速发展中近年来,随着中国市场经济的高速发展的情况下,社会上出现了很多新消费模式,由此移动通信行业衍生出很多新的业务,具体情况可以总结为以下几点:这追求效率的时代,随着们生活水平的提高,消费项目,服务种类的增加,社会需要方便和快捷的缴费方式。在当今网络社会,技术成熟,发挥网络技术优势,利用网络实现快捷缴费已经成为可能。利用电子商务网络以及众多的营业网点实时...

手机充值缴费系统
笔者前言移动通信业务中,【www.fix114.net】有一部分都是和手机缴费的业务相关,而手机缴费业务目前处于发展的阶段,手机缴费业务作为目前唯一的数据业务正在飞速发展中近年来,随着中国市场经济的高速发展的情况下,社会上出现了很多新消费模式,由此移动通信行业衍生出很多新的业务,具体情况可以总结为以下几点:这追求效率的时代,随着们生活水平的提高,消费项目,服务种类的增加,社会需要方便和快捷的缴费方式。在当今网络社会,技术成熟,发挥网络技术优势,利用网络实现快捷缴费已经成为可能。利用电子商务网络以及众多的营业网点实时收费,在几乎不增加系统负担的情况既可缓解目前收费单位营业厅的紧张状况,又方便用户缴费,提高了费用回收率。手机缴费系统是基于UNIXSocket和MySQL数据库 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一个交易型中间件系统。在Linux环境下使用GNUC或者GNUC++,在Linuxmake开发工具的管理和控制下,利用Linux系统提供的Socket库和MySQL数据库在网络底层开发交易型中间件,同时简要介绍了客户端和服务器的工作模式。此模拟手机交费系统采用“客户端一中间件一服务器”模式,其中主要包括三大部分:客户端(Client),中间件(Middleware)和服务器端(Server)。客户端(Client)主要实现用户管理、查询、交易(交费,购物等),撤销和统计等功能;中间件(Middleware)要完成与客户要求相符的功能一一是本地的本地处理,否则发往服务器端——接受客户端数据,组织服务器端所需数据,重组服务端返回数据,并返回给客户方;服务器端(Server)主要实现客户端或中间件提出的业务请求并做好留迹工作。本设计主要是利用UNIX系统提供的Socket库在网络底层,C语言,MySQL数据库,以及软件 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 的思想方法和TCP/IP设计出的一个模拟手机交费中间件系统。本设计包括了模拟手机交费系统的开发环境,设计目的,总体设计,详细设计,具体实现代码,以及设计中遇到的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 及解决方法。将服务器端(Server),中间件(Middleware)和客户端(Client)进行连接后可模拟出现实中手机交费的的功能。它可以实现手机费用查询,话费充值,打印花费清单详目等基本功能。目录TOC\o"1-5"\h\z一、系统环境(硬件环境、软件环境)3二、计目的3HYPERLINK\l"bookmark6"\o"CurrentDocument"三、体设计(程序设计组成框图、流程图、类图)3HYPERLINK\l"bookmark8"\o"CurrentDocument"3.1程序设计组成框图:3HYPERLINK\l"bookmark10"\o"CurrentDocument"3.2:中间件模型43.3流程图5HYPERLINK\l"bookmark12"\o"CurrentDocument"四、详细设计7HYPERLINK\l"bookmark14"\o"CurrentDocument"4.1设计方法7HYPERLINK\l"bookmark16"\o"CurrentDocument"4.2功能模块 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 7五、调试与测试9HYPERLINK\l"bookmark18"\o"CurrentDocument"5.1调试方法9HYPERLINK\l"bookmark20"\o"CurrentDocument"5.2结果及简单分析10HYPERLINK\l"bookmark22"\o"CurrentDocument"六、设计中遇到的问题及解决方法11HYPERLINK\l"bookmark24"\o"CurrentDocument"七、源程序清单12HYPERLINK\l"bookmark32"\o"CurrentDocument"八、总结,收获与体会37九、参考文献37一、系统环境(硬件环境、软件环境)硬件环境:intelp43.06GHz80G硬盘软件环境:基于windowsxp虚拟机下的RedLinux操作系统二、计目的本次设计的主要课题是:模拟手机缴费系统,通过对移动通信话费查询与缴费业务进行了系统全面的分析研究。针对现有系统中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。采用开发工具Linux+My进行系统设计。基于UinxSocket和MySQL数据库,设计一个交易型中间件系统。提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代理业务软件等都是这种类型软件。这里的中间件是指交易型中间件。交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软件,在不同的行业、不同的系统间。这里主要是利用UNIX系统提供的Socket库在网络底层,开发交易型中间件。本设计的目的是使参与设计者掌握利用软件工程的思想方法和TCP/IP设计出用于不同行业和部门间的通讯转发或协议转换软件一中间件,尤其掌握这种设计的思想和方法。本设计系统能够通过两种方式提供对移动话费信息输入、查询、编辑以及话费统计各明细项目的数据编辑,自动计算出花费的各项合计数据;可自主设定条件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表。三、体设计(程序设计组成框图、流程图、类图)3・1程序设计组成框图:基本功能实现工具及、方法Linux+Mysql+VMwareWorkstation客1.手机余客户端发送:头部(A)+目标(移动公司P)+手机号码额查询(15)+机主姓名(30)户中间件发送:头部(B)+目标(移动公司P)+标志(0)端<——>中间件+手机号码(15)+机主(30)+余额(20)或:头部(B)目标(移动公司P)+标志(E)+出错原因2.银行账户余额查询:客户端发送:头部(A)+目标(银行B)+银行账户(19)+密码(10)中间件发送:头部(B)+目标(银行B)+标志(0)+户主(30)+账号(19)+余额(20)或:头部(B)+目标(银行B)+标志(E)+错误信息3.手机充值客户端发送:头部(C)+手机号码(15)+银行账户(19)+银行密码(10)+充值金额(20)中间件发送:头部(D)+标志(0)或:头部(D)+标志(E)+错误原因中间件<——>服务器中间件<——>银行服务器査询余额中间件发送:头部(E)+银行账户(19)+密码(10)服务器发送:头部(F)+标志(0)+银行账号(19)+用户名(30)+余额(20)或:头部(F)+标志(E)+出错原因扣款中间件发送:头部(G)+银行账户(19)+密码(10)+扣款金额(20)服务器发送:头部(H)+标志(0)或:头部(H)+标志(E)+出错原因中间件<——>移动服务器1.査询余额中间件发送:头部(E)+手机号码(15)服务器发送:头部(F)+标志(O)+手机号码(15)+机主姓名(30)+余额(20)或:头部(F)+标志(E)+出错原因2•缴费中间件发送:头部(G)+手机号码(15)+缴费金额(20)服务器发送:头部(H)+标志(0)或:头部(H)+标志(0)+出错原因退出系统当完成一次交易时,就可以退出系统。3・2:中间件模型3.3流程图、详细设计4・1设计方法在Linux环境下,使用GNUC或GNUC++,在UNIX/Linuxmake开发工具的的管理和控制下,利用UNIX/LinuxSocket库在网络的底层进行开发设计。4・2功能模块说明本系统主要是由一个客户机,一个中间件以及两个服务器组成,两个服务器分别负责手机直接缴费和网上银行缴费。以下即是每个模块间的联系图:客户机:只负责发送和接收请求信息,此模块的目的就是将信息呈现给用户看,并提供相应的操作选择。此模块处理信息的过程较简单,原理如基本功能的现金支付所述,在此不再多做介绍。中间件:与客户机和服务器相连接,通过判断倒数第二个字符来判断选择哪个服务器,具体的是把客户端发来的信息转发给哪个服务器。通过服务器反馈回来信息的特殊字符来判断此信息是由哪个服务器发送而来。简单来说,中间件在整个分布式系统中起数据总线的作用,将各种异构系统通过中间件有机地结合成一个整体。(3)服务器:本系统有两个服务器,手机服务器(S2)和银行服务器(S1)1)手机服务器在这一部分,需要实现的功能是直接缴费。它的过程是接收从中间件过来的信息,在手机服务器的客户账户上相应加上对应的话费,即更新手机服务器数据库。更新成功直接之后,将缴费成功的信息传回中间件。具体流程如下:现金缴纳话费工作流程图服务器数据库,即缴费成功。2)银行服务器在银行服务器这一块,需要实现的功能是手机网上缴费。它的过程是接收从中间件过来的信息,在客户所输入的银行账户上扣除相应的手机费用;如果在手机的服务器那一块出现问题,缴费不成功,银行服务器还负责把之前所扣除的话费给加上,具体实现流程如下:查询用户信息选择银行服务器后整个系统的工作流程图:五、调试与测试5.1调试方法把数据库文件导入数据库#mysql-uroot,加上后就正确了。还有一个最可恶的问题,老是莫名奇妙的出现”段错误”,开始时摸不着头脑,就和同学一块商量,凭着各自了了的一点经验讨论,还好最后都解决了,主要时字符串末尾一定要加‘\0‘,表示结束,否则可能是越界。主要问题:(1)对Mysql数据库不够了解,对很多数据结构和算法也理解不够牢固,因此我们参考了《Linux+php+Mysql基础与提高》这本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf ,学到一些关于Mysql的基础知识,才使工作能顺利的进行下去。(2)对套接字这样的概念不是很清楚,在老师的辅导和互联网的帮助下,了解了一些这方面的知识,才使我们的设计开展下来。(3)以前对服务器,客户端只是了解理论知识,这次而要自己动手来开发服务器,这对我们来说,是一个巨大的挑战,服务器就是一个进程,确切的说是一个守候进程,要实现它的功能,是不容易的事情,你要学会套接字,地址转换,服务器相关的数据结构和算法才能进行开发和设计。(4)还是很多基础的东西没有掌握好,基本的算法也没有完全掌握,参考了教科书的相关内容后,才开始了我们的课程设计。(5)在数据库的编写时,很多要用到的数据类型而我们又没有学过的,只能借助互联网的强大功能了,由此,我们也学到了很多相关的知识。七、源程序清单屮间件代码:#includevsys/socket.h>#includevsys/un.h>#include#include#includevunistd.h>#include#includevsys/wait.h>#includevnetdb.h>#include#includevfcntl.h>#includevtime.h>intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_file[10]="mid.log";charlog_buf[1024];〃网络通信信息intlisten_fd;〃监听套接字描述符intcom_fd;〃通信套接字描述符intlen;//请求方地址长度intret;pid_tpid;//处理请求进程idstructservent*sp;//存放服务器端口信息,从services文件读取structsockaddr_insrv_addr;//服务器地址structsockaddr_inclt_addr;//客户端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/创建监听套接字〃数据库连接信息MYSQLmysql;//MySQL连接MYSQL_ROWrow;//结果的行MYSQL_RES*result;〃查询结果charmyl_buf[1024];〃存放sql语句〃初始化网络连接参数intDataSend(char*service,char*dest,charsed_buf[1024],charrcv_buf[1024]);if(listen_fd<0){perror(”创建监听套接字失败”);strcpy(log_buf,"创建监听套接字失败”);log(log_file,log_buf);return1;}〃从services文件中获取服务器端口号if((sp=getservbyname(argv[l],"tcp"))==NULL){fprintf(stderr,"参数错误”);strcpy(log_buf,"参数错误”);log(log_file,log_buf);exit(-5);}memset(&srv_addr,O,sizeof(srv_addr));//将srv_addr初始化为全0〃设定地址参数srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃绑定服务套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("绑定服务套接字失败”);strcpy(log_buf,"绑定服务套接字失败”);log(log_file,log_buf);close(listen_fd);return1;}〃监听客户连接ret=listen(listen_fd,1024);if(ret==-1){perror("监听客户请求失败”);strcpy(log_buf,"监听客户请求失败”);log(log_file,log_buf);close(listen_fd);return1;}〃连接users数据库if(mysql_init(&mysql)==NULL){fprintf(stderr,"数据连接初始失败”);strcpy(log_buf,"数据连接初始失败”);log(log_file,log_buf);exit(-l);}if(!mysql_real_connect(&mysql,"localhost","root",0,"users",0,NULL,0)){%sfprintf(stderr,"数据库连接错误[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-2);}〃开始接受客户请求printf(”等待客户连接5”);while(1){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fdvO){perror("接受客户端连接请求失败”);strcpy(log_buf,"接受客户端连接请求失败”);log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf("开创进程失败”);strcpy(log_buf,"开创进程失败”);log(log_file,log_buf);return1;}if(pid==0)〃创建子进程成功{close(listen_fd);〃关闭监听套接字〃处理接受到的数据charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[O]=='C'){printf("收到充值请求,信息如下\n");printf("%s\n",send_buf);printf("手机号码:%s\n",send_buf+2);printf(”银行账号:%s\n",send_buf+17);printf(”银行密码:%s\n",send_buf+36);printf("充值金额:%s\n",send_buf+46);charp_send[1024];charp_rcv[1024];charb_send[1024];charb_rcv[1024];〃缴费封包memcpy(p_send,"G",2);memcpy(p_send+2,send_buf+2,15);memcpy(p_send+17,send_buf+46,20);//扣款封包memcpy(b_send,"G",2);memcpy(b_send+2,send_buf+17,19);memcpy(b_send+21,send_buf+36,10);memcpy(b_send+31,send_buf+46,20);DataSend(argv[2],argv[3],b_send,b_rcv);printf("银行数据已发送\n");chart[1024];memcpy(t,"D",2);if(b_rcv[2]=='O'){DataSend(argv[4],argv[5],p_send,p_rcv);printf("移动公司数据已发送5");if(p_rcv[2]=='O'){printf("充值成功\n");memcpy(t+2,"O",2);write(com_fd,t,1024);}elseif(p_rcv[2]=='E'){memcpy(t+2,"E",2);memcpy(t+4,p_rcv+4,50);write(com_fd,t,1024);}elseif(b_rcv[2]=='E'){memcpy(t+2,"E",2);memcpy(t+4,b_rcv+4,50);}}if(send_buf[O]=='A'){printf("收到查询请求:\n");if(send_buf[2]=='B'){printf("收到银行查询,信息如下\n");printf("%s\n",send_buf);printf(”%s\n",send_buf+2);printf(”银行账号:%s\n",send_buf+4);printf(”银行密码:%s\n",send_buf+23);chartmp[1024];chartmp_r[1024];memcpy(tmp,"E",2);memcpy(tmp+2,send_buf+4,19);memcpy(tmp+21,send_buf+23,10);printf(”银行账号:%s\n",tmp+2);printf(”银行密码:%s\n",tmp+21);DataSend(argv[2],argv[3],tmp,tmp_r);printf(”%s\n”,tmp_r);printf(”%s\n”,tmp_r+2);printf(”%s\n",tmp_r+4);printf(”%s\n",tmp_r+6);printf(”%s\n”,tmp_r+36);printf("%s\n",tmp_r+55);write(com_fd,tmp_r,1024);}elseif(send_buf[2]=='P'){printf("收到手机查询,信息如下\n");printf("%s\n",send_buf);printf(”%s\n",send_buf+2);printf("手机号码:%s\n",send_buf+4);chartmp[1024];chartmp_r[1024];memcpy(tmp,"E",2);memcpy(tmp+2,send_buf+4,15);printf("手机账号:%s\n",tmp+2);DataSend(argv[4],argv[5],tmp,tmp_r);printf(”%s\n”,tmp_r);printf(”%s\n”,tmp_r+2);printf("%s\n",tmp_r+4);printf("%s\n",tmp_r+6);printf(”%s\n”,tmp_r+21);printf(”%s\n",tmp_r+57);write(com_fd,tmp_r,1024);}exit(0);}〃回到父进程if(pid>0){wait(0);close(com_fd);〃关闭通信套接字continue;}}intDataSend(char*service,char*dest,charsed_buf[1024],charrcv_buf[1024])〃参数为服务端口端口号和主机名及需要发送的数据{structhostent*hp;//服务地址structsockaddr_insin;//指明连接地址信息structservent*sp;//服务端口ints;//连接描述符〃获取服务端口号if((sp=getservbyname(service,"tcp"))==NULL){fprintf(stderr,"Error:getservbyname");exit(-5);}〃获取目的主机if((hp=gethostbyname(dest))==0){fprintf(stderr,"Error:gethostbyname");exit(-6);}〃初始化服务套接字bzero(&sin,sizeof(sin));bcopy(hp->h_addr,&sin.sin_addr,hp->h」ength);sin.sin_family=hp->h_addrtype;sin.sin_port=sp->s_port;if((s=socket(AF_INET,SOCK_STREAM,0))==-1)fprintf(stderr,"Error:socket");exit(-6);if(connect(s,&sin,sizeof(sin))==-l){fprintf(stderr,"Error:connect");close(s);exit(-6);}〃发送数据〃fprintf(stderr,"%sissendingrequestmessage:%s\n",argv[O],sed_buf);if(write(s,sed_buf,1024)!=1024)//toserver{fprintf(stderr,"WriteSocketsERROR\n!");close(s);exit(-1);}if(read(s,rcv_buf,1025)==0)//getreplayfromserver{fprintf(stderr,"ReadSocketsError\n");close(s);exit(-2);}printf("%s\n",rcv_buf);//printf("%sgetreply:%s\n",argv[0],sed_buf);close(s);}}intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-1){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}银行端:intlog(char*filepath,char*buff){intfd;time_tt=time(O);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-l){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_file[10]="bank.log";charlog_buf[1024];intfd;//日志文件描述符〃网络通信信息intlisten_fd;〃监听套接字描述符intcom_fd;〃通信套接字描述符intlen;//请求方地址长度intret;pid_tpid;//处理请求进程idstructservent*sp;//存放服务器端口信息,从services文件读取structsockaddr_insrv_addr;//服务器地址structsockaddr_inclt_addr;//客户端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/创建监听套接字〃数据库连接信息MYSQLmysql;//MySQL连接MYSQL_ROWrow;//结果的行MYSQL_RES*result;〃查询结果charmyl_buf[1024];〃存放sql语句〃初始化网络连接参数if(listen_fd<0)perror(”创建监听套接字失败”);strcat(log_buf,"创建监听套接字失败”);log(log_file,log_buf);return1;}〃从services文件中获取服务器端口号if((sp=getservbyname(argv[l],"tcp"))==NULL){fprintf(stderr,"参数错误”);exit(-5);}memset(&srv_addr,O,sizeof(srv_addr));//将srv_addr初始化为全0〃设定地址参数srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃绑定服务套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("绑定服务套接字失败”);strcat(log_buf,"绑定服务套接字失败”);log(log_file,log_buf);close(listen_fd);return1;}〃监听客户连接ret=listen(listen_fd,1024);if(ret==-1){perror("监听客户请求失败”);strcat(log_buf,"监听客户请求失败”);log(log_file,log_buf);close(listen_fd);return1;}〃连接users数据库if(mysql_init(&mysql)==NULL){fprintf(stderr,"数据连接初始失败”);strcat(log_buf,"数据连接初始失败”);log(log_file,log_buf);exit(-1);}if(!mysql_real_connect(&mysql,"localhost","root",0,"bank",0,NULL,0)){%sfprintf(stderr,"数据库连接错误[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-2);}〃开始接受客户请求printf(”等待客户连接5”);while(l){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fdvO){perror("接受客户端连接请求失败”);strcat(log_buf,"接受客户端连接请求失败”);log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf("开创进程失败”);return1;}〃创建子进程成功if(pid==0){close(listen_fd);〃关闭监听套接字〃处理接受到的数据charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[O]==G){printf("收到充值请求,信息如下\n");printf("%s\n",send_buf);printf("银行账号%s\n",send_buf+2);printf("银行密码%s\n",send_buf+21);printf("充值金额%s\n",send_buf+31);〃更新数据库frombanksprintf(myl_buf,"selectnumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=O){fprintf(stderr,"数据查询错误:where%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}if((result=mysql_store_result(&mysql))==NULL)%s{fprintf(stderr,"存放数据失败[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);};if((mysql_num_rows(result))==0){printf("用户不存在!\n");strcat(log_buf,"用户不存在!");log(log_file,log_buf);}row=mysql_fetch_row(result);if(strcmp(row[l],send_buf+21)!=0){printf("密码错误\n");}else{floatmoney;money=atof(row[3])-atof(send_buf+31);printf("余额变更为:%f\n",money);if(money>=0){wherecharbuff[1024];sprintf(myl_buf,"updatebanksetmoney=%fnumber=\"%s\"",money,row[0]);if(mysql_query(&mysql,myl_buf)!=O)%s{fprintf(stderr,"数据查询错误:[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}else{printf(”更新成功!!”);}memcpy(buff,"H",2);memcpy(buff+2,"O",2);write(com_fd,buff,1024);}}}if(send_buf[O]=='E'){printf(”收到银行查询,信息如下\n");printf(”%s\n",send_buf);printf(”银行账号:%s\n",send_buf+2);printf("银行密码:%s\n",send_buf+21);charnumber[19];〃银行账号charpassword[10];〃密码wherecharname[30];〃户主姓名sprintf(myl_buf,"select*frombanknumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=O){%sfprintf(stderr,"数据查询错误:[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){%sfprintf(stderr,"存放数据失败[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);};if((mysql_num_rows(result))==0){printf("用户不存在!\n");strcat(log_buf,"用户不存在!");log(log_file,log_buf);}row=mysql_fetch_row(result);if(strcmp(row[l],send_buf+21)!=0){printf(”密码错误\n");strcat(log_buf,"密码错误!");log(log_file,log_buf);}else{printf("%s\n",row[2]);printf("%s\n",row[0]);printf("%s\n",row[3]);chartmp[1024];memcpy(tmp,"B",2);memcpy(tmp+2,"B",2);memcpy(tmp+4,"O",2);memcpy(tmp+6,row[2],30);memcpy(tmp+36,row[0],19);memcpy(tmp+55,row[3],20);write(com_fd,tmp,1024);printf("%i",sizeof(tmp));close(com_fd);}}}exit(0);}〃回到父进程if(pid>0){wait(0);close(com_fd);〃关闭通信套接字continue;}}}手机端:intlog(char*filepath,char*buff){intfd;time_tt=time(O);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-l){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_file[10]="phone.log";charlog_buf[1024];〃网络通信信息intfd;//日志文件描述符intlisten_fd;〃监听套接字描述符intcom_fd;〃通信套接字描述符intlen;//请求方地址长度intret;pid_tpid;//处理请求进程idstructservent*sp;//存放服务器端口信息,从services文件读取structsockaddr_insrv_addr;//服务器地址structsockaddr_inclt_addr;//客户端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/创建监听套接字charbuff[1024];〃数据库连接信息MYSQLmysql;//MySQL连接MYSQL_ROWrow;//结果的行MYSQL_RES*result;〃查询结果charmyl_buf[1024];〃存放sql语句〃初始化网络连接参数if(listen_fd<0){perror("创建监听套接字失败”);strcat(log_buf,"创建监听套接字失败”);log(log_file,log_buf);return1;}〃从services文件中获取服务器端口号if((sp=getservbyname(argv[l],"tcp"))==NULL){fprintf(stderr,"参数错误”);exit(-5);}memset(&srv_addr,0,sizeof(srv_addr));//将srv_addr初始化为全0〃设定地址参数srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃绑定服务套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("绑定服务套接字失败”);strcat(log_buf,"绑定服务套接字失败”);log(log_file,log_buf);close(listen_fd);return1;}ret=listen(listen_fd,1024);〃监听客户连接if(ret==-1){perror("监听客户请求失败”);strcat(log_buf,"监听客户请求失败”);log(log_file,log_buf);close(listen_fd);return1;}if(mysql_init(&mysql)==NULL)//连接users数据库{fprintf(stderr,"数据连接初始失败”);strcat(log_buf,"数据连接初始失败”);log(log_file,log_buf);exit(-1);}if(!mysql_real_connect(&mysql,"localhost","root",0,"phone",0,NULL,0)){%sfprintf(stderr,"数据库连接错误[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));strcat(log_buf,"数据库连接错误”);log(log_file,log_buf);mysql_close(&mysql);exit(-2);}〃开始接受客户请求printf(”等待客户连接\n”);while(l){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fdvO){perror("接受客户端连接请求失败”);strcat(log_buf,"接受客户端连接请求失败”);log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf("开创进程失败”);strcat(log_buf,"开创进程失败”);log(log_file,log_buf);return1;}〃创建子进程成功if(pid==0){close(listen_fd);〃关闭监听套接字charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[O]==G){printf("收到缴费请求,信息如下\n");printf(”%s\n",send_buf);whereprintf("手机号码%s\n",send_buf+2);printf("缴费金额%s\n",send_buf+17);sprintf(myl_buf,"select*fromphonenumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=O){%sfprintf(stderr,"数据查询错误:[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);memcpy(buff,"H",2);%swhere%smemcpy(buff+2,"E",2);memcpy(buff+4,"银行服务器错误",14);exit(-3);if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放数据失败[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);memcpy(buff,"H",2);memcpy(buff+2,"E",2);memcpy(buff+4,"银行服务器错误",20);strcat(log_buf,"银行服务器错误”);log(log_file,log_buf);};row=mysql_fetch_row(result);if((mysql_num_rows(result))==0){printf("手机号码不存在!\n");memcpy(buff,"H",2);memcpy(buff+2,"E",2);memcpy(buff+4,"手机号码不存在!",20);strcat(log_buf,"手机号码不存在!");log(log_file,log_buf);}else{floatmoney;money=atof(row[2])+atof(send_buf+17);if(money>=0){printf("余额变更为:%f\n",money);sprintf(myl_buf,"updatephonesetmoney=%fnumber=\"%s\"",money,row[0]);if(mysql_query(&mysql,myl_buf)!=O){fprintf(stderr,"数据查询错误:[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}else{printf("更新成功\n");memcpy(buff,"H",2);memcpy(buff+2,"O",2);}}}〃printf("错误信息:%s\n",buff+4);write(com_fd,buff,1024);}}if(send_buf[O]=='E'){printf("收到手机余额查询,信息如下\n");printf(”%s\n",send_buf);printf("手机号码:%s\n",send_buf+2);charnumber[19];〃银行账号charname[30];〃户主姓名sprintf(myl_buf,"select*fromphonewherenumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=O){fprintf(stderr,"数据查询错误:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);memcpy(buff,"F",2);memcpy(buff+2,"E",2);memcpy(buff+4,"服务器错误",14);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放数据失败:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);memcpy(buff,"F",2);memcpy(buff+2,"E",2);memcpy(buff+4,"服务器错误",20);};row=mysql_fetch_row(result);if((mysql_num_rows(result))==0){strcat(log_buf,"用户不存在!");log(log_file,log_buf);printf("用户不存在!\n");memcpy(buff,"F",2);memcpy(buff+2,"E",2);memcpy(buff+4,"用户不存在!",20);}else{printf("%s\n",row[0]);printf("%s\n",row[l]);printf("%s\n",row[2]);memcpy(buff,"B",2);memcpy(buff+2,"'P",2);memcpy(buff+4,"O",2);memcpy(buff+6,row[0],15);memcpy(buff+21,row[1],30);memcpy(buff+57,row[2],20);〃sprintf(tmp+55,"%s",row[3]);}write(com_fd,buff,1024);}exit(0);}if(pid>0){wait(0);close(com_fd);〃关闭通信套接字continue;}}}客户端:intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof
本文档为【手机充值缴费系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥15.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
zhuyue
暂无简介~
格式:doc
大小:250KB
软件:Word
页数:38
分类:建筑/施工
上传时间:2022-07-15
浏览量:333