中国移动手机缴费管理系统.docx
- 文档编号:17910514
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:42
- 大小:244.46KB
中国移动手机缴费管理系统.docx
《中国移动手机缴费管理系统.docx》由会员分享,可在线阅读,更多相关《中国移动手机缴费管理系统.docx(42页珍藏版)》请在冰点文库上搜索。
中国移动手机缴费管理系统
河南大学
《信息分析与设计》设计说明书
设计题目:
中国移动手机缴费管理系统
专业:
信息管理与信息系统
指导教师:
班级:
学号:
姓名:
同组人:
计算机与信息工程学院
2010年12月21日
前言
近年来,随着中国的市场经济的高速发展的情况下,社会上出现了很多新消费模式,由此移动通信行业衍生出很多新的业务,具体情况可总结为以下几点:
人们生活水平的提高,消费项目,服务种类的增加,产生了各种各样好收费项目。
在这追求效率的时代,社会需要方便和快捷的缴费方式。
通信行业竞争的日益激烈,移动通信的服务意识越来越高,通过各种服务吸引用户,已成为通信公司重要的竞争手段。
在当今网络社会,技术成熟,发挥网络技术优势,利用网络实现快捷缴费已经成为可能。
利用电子商务网络以及众多的营业网点实时收费,在几乎不增加系统负担的情况既可缓解目前收费单位营业厅的紧张状况,又方便用户缴费,提高了费用回收率。
目录
一前言.................................................................................................1
二系统环境…………………………………………………….........3
三总体设计………………………………………………………….3
四详细设计………………………………………………………….4
五调试与测试……………………………………………………….8
六设计中遇到的问题及解决方法………………………………10
七源程序清单……………………………………………………….11
八总结,收获与体会……………………………………………….28
九参考文献…………………………………………………………28
手机缴费系统
一、系统环境
在Linux环境下,使用GNUC或GNUC++,在UNIX/Linuxmake开发工具的的管理和控制下,利用UNIX/LinuxSocket库在网络的底层进行开发设计。
二、设计目的
对移动通信话费查询与缴费业务进行了系统全面的分析研究。
针对现有系统中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。
采用开发工具Linux+Mysql进行系统设计。
基于UNIXSocket和MySQL数据库,设计一个交易型中间件系统。
提供通讯转发和协议转换的桥梁作用。
例如电子商务、银行代理业务软件等都是这种类型软件这里的中间件是指交易型中间件。
交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软的件,在不同的行业、不同的系统间。
这里主要是利用UNIX系统提供的Socket库在网络底层,开发交易型中间件。
本设计系统能够通过两种方式提供对移动话费信息输入、查询、编辑以及话费统计各明细项目的数据编辑,自动计算出话费的各项合计数据;可自主设定条件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表。
三、总体设计
程序设计组成框图
实现工具及方法
基本功能
Linux+Mysql+VMwareWorkstation
现金支付
客户端向中间件发送请求,中间件收到请求后,接收客户方数据;组织服务器S1方所需数据;重组服务方返回数据,并返回给客户方;留迹;本地业务统计。
网上缴费
客户端向中间件发送请求,中间件收到请求后,接收客户方数据;组织服务器S2方所需数据;重组服务方返回数据,并返回给客户方;留迹;本地业务统计。
话费查询
客户端向中间件发送请求,中间件收到请求后,到数据库里去寻找用户相关交费的表,再返回给客户端,体现在用户面前。
退出系统
当完成一次交易时,就可以退出系统。
(1)中间件模型
(2)流程图
四、详细设计
1、基本功能
1.1现金支付
客户到操作台缴纳费用,选择现金支付方式后,输入用户的手机号码和欲交的话费,客户端根据用户提供的手机号码向中间件发送请求,中间件收到请求后,接收客户方数据;组织服务器S1方所需数据;重组服务方返回数据,并返回给客户方。
1.2网上缴费
客户到操作台缴纳费用,选择网上缴费方式后,输入用户的银行卡号、手机号码和欲交的花费,客户端根据用户提供的手机号码向中间件发送请求,中间件收到请求后,接收客户方数据;组织服务器S2方所需数据;重组服务方返回数据,并返回给客户方。
1.3查询
通过输入手机号码就可以得到手机用户的基本信息,包含用户名,手机号,手机余额。
1.4退出
2、函数说明
mysql_init(&mysql);//初始化数据结构
mysql_real_connect(&mysql,"localhost","root",0,"mydb",0,NULL,0);//连接数据库
mysql_query(&mysql,"SELECT*FROMperson");//执行查询语句mysql_query
result=mysql_store_result(&mysql);//保存结果
intsocket(intdomain,inttype,intprotocol);//创建套接字
intbind(intsockfd,conststructsockaddr*my_addr,intaddrlen);//绑定本地地址
intlisten(ints,intbacklog);//监听连接
intconnect(intsockfd,conststructctsockaddr*server_addr,socklen_taddrlen);
//建立本地系统和外部系统之间的连接
intaccept(ints,structsockaddr*addr,socklen_taddrlen);
//服务器调用,从等待从编号为s的套接字上接受客户连接请求。
send()/write与recv()/read();//数据传输
structservent*getservbyport(intport,constchar*protocal);
//得到服务器端口号相关的数据结构
structsockaddr_in{
shortintsin_family;//AF_INET
unsignedshortintsin_port;//portNo.
structin_addrsin_addr;//IPaddr.
}//IPsocket地址
3、模块介绍
本系统主要是由一个客户机,一个中间件以及两个服务器组成,两个服务器分别负责手机直接缴费和网上银行缴费。
以下即是每个模块间的联系图:
总体联系图
(1)客户机:
只负责发送和接收请求信息,此模块的目的就是将信息呈现给用户看,并提供相应的操作选择。
此模块处理信息的过程较简单,原理如基本功能的现金支付所述,在此不再多做介绍。
(2)中间件:
与客户机和服务器相连接,通过判断倒数第二个字符来判断选择哪个服务器,具体的是把客户端发来的信息转发给哪个服务器。
通过服务器反馈回来信息的特殊字符来判断此信息是由哪个服务器发送而来。
简单来说,中间件在整个分布式系统中起数据总线的作用,将各种异构系统通过中间件有机地结合成一个整体。
(3)服务器:
本系统有两个服务器,手机服务器(S2)和银行服务器(S1)
1)手机服务器
在这一部分,需要实现的功能是直接缴费。
它的过程是接收从中间件过来的信息,在手机服务器的客户账户上相应加上对应的话费,即更新手机服务器数据库。
更新成功直接之后,将缴费成功的信息传回中间件。
具体流程如下:
现金缴纳话费工作流程图
注:
直接现金缴纳,不需要通过银行服务器。
从客户端开始流程,最后更新手机服务器数据库,即缴费成功。
2)银行服务器
在银行服务器这一块,需要实现的功能是手机网上缴费。
它的过程是接收从中间件过来的信息,在客户所输入的银行账户上扣除相应的手机费用;如果在手机的服务器那一块出现问题,缴费不成功,银行服务器还负责把之前所扣除的话费给加上,具体实现流程如下:
选择银行服务器后整个系统的工作流程图
5
4
7
16
23
6:
虚线表示在手机服务器出错,缴费失败,向银行服务器返回所交的话费。
六、调试与测试
6.1调试方法:
(1)把数据库文件导入数据库
#mysql–uroot #mysql–uroot #mysql–uroot #mysql–uroot (2)启动Mysql数据(以bank为例) #showdatabase; #usebank; #showtables; #select*frominformation; (3)对程序进行编译连接 #gcc–oc1c1.c–L/usr/lib/mysql-lmysqlclient #gcc–om1m1.c–L/usr/lib/mysql-lmysqlclient #gcc–os1s1.c–L/usr/lib/mysql-lmysqlclient #gcc–os2s2.c–L/usr/lib/mysql-lmysqlclient (4)创建服务端口 #ivi/etc/services 进入新创建三个名字 zhongjr500/tcp worl501/tcp x502/tcp 保存并退出vi 创建一个域名 #ivi/etc/hosts 进入新创建一个域名 192.168.117.5myhttp 保存并退出vi (5)运行程序 #./m1x 切换到终端2 #./s1world 切换到终端3 #./s2zhongjr 切换到终端4 #./m1xmyhttp 6.2测试结果及简单分析 1、现金支付 缴费后手机服务器接受信息,对用户手机费用进行操作,操作后用户手机费用增加123元。 2、网上缴费 网上银行缴费,银行服务器与手机服务器都对信息有相应的操作,缴费得到确认成功后,银行卡上减去100元,手机话费加上100元。 3、查询 输入手机用户,查询用户的基本信息。 信息“1|15993590115|zhongjr|1363.0000000000|0”相对应的意思是“操作类型|手机号|用户名|手机余额|终止传递信息” 4、客户日志文件 5、中间件日志文件 6、服务器日志文件 S1 S2 七、设计中遇到的问题及解决方法。 (1)对Mysql数据库不够了解,对很多数据结构和算法也理解不够牢固,因此我们参考了《Linux+php+Mysql基础与提高》这本书,学到一些关于Mysql的基础知识,才使工作能顺利的进行下去。 (2)对套接字这样的概念不是很清楚,在老师的辅导和互联网的帮助下,了解了一些这方面的知识,才使我们的设计开展下来。 (3)以前对服务器,客户端只是了解理论知识,这次而要自己动手来开发服务器,这对我们来说,是一个巨大的挑战,服务器就是一个进程,确切的说是一个守候进程,要实现它的功能,是不容易的事情,你要学会套接字,地址转换,服务器相关的数据结构和算法才能进行开发和设计。 (4)还是很多基础的东西没有掌握好,基本的算法也没有完全掌握,参考了教科书的相关内容后,才开始了我们的课程设计。 (5)在数据库的编写时,很多要用到的数据类型而我们又没有学过的,只能借助互联网的强大功能了,由此,我们也学到了很多相关的知识。 八、源程序清单 客户机以及两个服务器都会用到strsplit()函数,作用是分解字符串。 voidstrsplit(char*s,char**v,chard) { inti,j,l; j=0;v[j]=s; l=strlen(s); for(i=0;i if(*(s+i)! ='|')continue; else{ *(s+i)='\0'; v[++j]=s+i+1; } } } 以下是每个模块中将实现其功能的部分重要代码。 1、客户机 #include #include #include #include #include #include #include #include #include #include #include #include #defineECHOFLAGS(ECHO|ECHOE|ECHOK|ECHONL) intset_disp_mode(intoption); intgetpasswd(char*passwd,intsize); intmain(intargc,char*argv[]) { intchoose; charname[10],passwd[10]; charsend_buf[1024]=""; chartmp[1024],phone[30],number[30],pswd[10],money[30],myl_buf[1024],fd_buf[1024]; charlog[]="clt.log"; intconnect_fd; intret; inti; intport; intlen; intfd; MYSQLmysql; MYSQL_ROWrow; MYSQL_RES*result; structservent*sp; structhostent*hp; staticstructsockaddr_insrv_addr; if(mysql_init(&mysql)==NULL){ fprintf(stderr,"Errorinmysql_init! \n"); exit(-1); } if(! mysql_real_connect(&mysql,"localhost","root",0,"users",0,NULL,0)){ fprintf(stderr,"Errorinconnection: %s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql)); mysql_close(&mysql);exit(-2); } system("clear"); clear: printf("Entertheusername: "); scanf("%s",name); getchar(); set_disp_mode(0); getpasswd(passwd,sizeof(passwd)); set_disp_mode (1); system("clear"); sprintf(myl_buf,"select*fromuserswherename=\"%s\"",name); if(mysql_query(&mysql,myl_buf)! =0){ fprintf(stderr,"Errorinquery: %s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql)); mysql_close(&mysql);exit(-3); } if((result=mysql_store_result(&mysql))==NULL){ fprintf(stderr,"Errorinstore_result: %s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql)); mysql_free_result(result);mysql_close(&mysql);exit(-4); }; if((mysql_num_rows(result))==0){ printf("usedontexist! \n"); gotoclear; } row=mysql_fetch_row(result); if(strcmp(row[1],passwd)! =0){ printf("Thepasswdisnotture\n"); gotoclear; } if((sp=getservbyname(argv[1],"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-1); } if((hp=gethostbyname(argv[2]))==0){ fprintf(stderr,"Error: gethostbyname"); exit(-2); } memset(&srv_addr,0,sizeof(srv_addr)); srv_addr.sin_family=AF_INET; bcopy(hp->h_addr,&srv_addr.sin_addr,hp->h_length); srv_addr.sin_port=sp->s_port; clen: connect_fd=socket(PF_INET,SOCK_STREAM,0); if(connect_fd<0){ perror("cannotcreatecommunicationsocket"); return1; } ret=connect(connect_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr)); if(ret==-1){ perror("cannotconnecttotheserver"); close(connect_fd); return1; } system("clear"); printf("%sloginsucessfully\n",name); printf("1.cash2.online\n"); printf("3.search4.exit\n"); printf("Pleasechooseyouroption: "); scanf("%d",&choose); switch(choose){ case1: printf("Pleaseinputyourtelephonenumber: "); scanf("%s",phone); printf("Pleaseinputthemoneyyouwanttosubmit: "); scanf("%s",money); getchar(); strcat(send_buf,"3|");strcat(send_buf,phone);strcat(send_buf,"|"); strcat(send_buf,money);strcat(send_buf,"|1|"); break; case2: printf("Pleaseinputyourphonenumber: "); scanf("%s",phone); printf("Pleaseinputyourbanknumber: "); scanf("%s",number); getchar(); set_disp_mode(0); getpasswd(pswd,sizeof(pswd)); set_disp_mode (1); printf("\n"); printf("Pleaseinputthemoneyyouwanttosubmit: "); scanf("%s",money); getchar(); strcat(send_buf,"1|");strcat(send_buf,number);strcat(send_buf,"|"); strcat(send_buf,pswd);strcat(send_buf,"|"); strcat(send_buf,money);strcat(send_buf,"|"); strcat(send_buf,phone);strcat(send_buf,"|"); strcat(send_buf,"2|"); break; case3: printf("PleaseEnteryourphonenumber: "); scanf("%s",phone); getchar(); strcat(send_buf,"4|");strcat(send_buf,phone); strcat(send_buf,"|1|"); break; case4: strcpy(send_buf,"3|"); break; default: printf("PleaseEnter1,2,3,4! ! ! ! ! \n"); printf("EnterAnykeytocontinue..."); getchar(); gotoclen; } write(connect_fd,send_buf,strlen(send_buf)+1); len=read(connect_fd,send_buf,1024); close(connect_fd); switch(send_buf[0]){ case'0': if((fd=open(log,O_WRONLY|O_CREAT|O_APPEND,0644))==-1){ fprintf(stderr,"Logfile%sopenerror! \a\n",log); exit(-1); } sprintf(fd_buf,"%-10s%-20s%-20s[0k]\n",name,phone,money); write(fd,fd_buf,strlen(fd_buf)); close(fd); printf("OPTIONSUCCESSFULLY\n"); printf("PleaseEnteranykeytoret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国移动 手机 缴费 管理 系统