




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南城建学院软件实习2任务书设计题目 模拟手机交费系统 学生班级 0614063 学生学号 061406301 学生姓名 方芳芳 同 组 人 崔彦松 邹东 黄遂 计算机科学与工程系2009年9月10日目 录一 前言.2二 系统环境.2三 设计目的.2四 总体设计.2五 详细设计.3六 调试与测试.4七 设计中遇到的问题及解决方法.7八 源程序清单.8九 心得体会31十 参考文献31模拟手机交费系统一: 前言近年来,随着中国的市场经济的高速发展的情况下,社会上出现了很多新消费模式,由此移动通信行业衍生出很多新的业务,具体情况可总结为以下几点: 人们生活水平的提高,消费项目,服务种类的增加,产生了各种各样好收费项目。 在这追求效率的时代,社会需要方便和快捷的缴费方式。 通信行业竞争的日益激烈,移动通信的服务意识越来越高,通过各种服务吸引用户,已成为通信公司重要的竞争手段。在当今网络社会,技术成熟,发挥网络技术优势,利用网络实现快捷缴费已经成为可能。 利用电子商务网络以及众多的营业网点实时收费,在几乎不增加系统负担的情况既可缓解目前收费单位营业厅的紧张状况,又方便用户缴费,提高了费用回收率。二: 系统环境在Linux环境下,使用GNU C或GNU C+,在UNIX/Linux make开发工具的的管理和控制下,利用UNIX/Linux Socket库在网络的底层进行开发设计。三: 设计目的对移动通信话费查询与缴费业务进行了系统全面的分析研究。针对现有系统中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。采用开发工具Linux+Mysql进行系统设计。设计系统能够提供对移动话费信息输入、查询、编辑、打印以及话费统计各明细项目的数据编辑,自动计算出话费的各项合计数据;可自主设定条件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表。四: 总体设计1.客户端页面退出系统查询信息在线缴费手机缴费登陆账户和密码 2.客户端,中间件和服务器联系客户端请求连接中间件 服务器S1(在线缴费)请求连接响应请求相应请求服务器S2五: 详细设计(1)基本功能1.1查询费用 客户到柜台缴纳费用,客户首先用账户及密码登陆系统,然后登陆手机号码和银行账号,中间件根据用户提供的手机号码把“查询费用”指令存入数据库。中间件检测到查询费用指令,把查询费用指令组成数据包发送到服务器中。服务器把查询费用的结果返回中间件,确认信息后,从接收表中检测返回结果中间件,并监控因错误操作并返回结果。 服务器从接收表中查询到“查询费用”指令,把查询费用指令填入数据库得到查询费用指令后从主数据库查询用户的费用信息。服务器如果因错误没有得到查询结果,把返回结果系统错误,并显示出来。 1.2缴纳费用 客户端发出“缴纳费用”指令存入中间件。中间件检测到“缴纳费用”指令,把“缴纳费用”指令组成数据包放入缓冲区,然后发送给服务器。 服务器把“缴纳费用”的指令填入接收,并返回确认信息。中间件在得到确认信息后,从接收表中检测返回结果给客户端,并监控错误无返回结果的情况。 服务器从接收表中查询到“缴纳费用”指令,把“缴纳费用”指令填入数据库。得到“缴纳费用” 后从主数据库进行处理,并把银行数据库中所缴的费用扣除,结果填入数据库。 “服务器处理系统”如果因为错误没有得到结果,把返回结果“系统错误”填入发送错误信息给中间件,然后中间件把信息返回给用户。 1.3 查询信息通过用户名和手机号进行查询,录入正确则返回用户信息,反之,退出系统。1.4 退出系统客户端发送退出系统请求,经中间件确认。然后客户端退出系统并关闭连接。(2) 服务器的开发2.1服务端的开发服务器主要包含守候进程(daemon),也叫精灵进程,或服务器进程,是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。它等待客户机与其联系,提出某种类型的服务要求。服务对客户机服务可将结果或信息返回给客户机(双向),也可不返回(单向)。2.2 客户端的开发打开一通信通道,并连接到服务器所在主机的特定端口。向服务器发服务请求,等待并接收应答;请求结束后关闭通信通道。客户是交易的发起者。实现功能与服务器方同。2.3套接字 1.流式套接字(SOCK-STREAM):提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。数据报式套接字(SOCK-DGRAM) :提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。原始式套接字(SOCK-RAW):该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。基本套接字系统调用 创建套接字socket() 地址绑定bind() 建立连接connect()与accept()监听连接listen() 数据传输send()/write()与recv()/read() 关闭套接字close() 2.错误处理利用函数的返回值来判断函数执行是否正确。使用mysql提供的错误号和错误信息: 错误号:unsigned int mysql_errno(MYSQL *mysql) 错误信息:char *mysql_error(MYSQL *mysql)六: 调试与测试 1程序编译与运行2多任务模式与启动相关服务3程序主界面4相关操作5返回结果信息七: 设计中遇到的问题及解决方法:(1) 对Mysql 数据库不够了解,对很多数据结构和算法也理解不够牢固,因此我们参考了Linux+php+Mysql基础与提高这本书,学到一些关于Mysql的基础知识,才使工作能顺利的进行下去。(2) 对套接字这样的概念不是很清楚,在老师的辅导和互联网的帮助下,了解了一些这方面的知识,才使我们的设计开展下来。(3) 以前对服务器,客户端只是了解理论知识,这次而要自己动手来开发服务器,这对我们来说,是一个巨大的挑战,服务器就是一个进程,确切的说是一个守候进程,要实现它的功能,是不容易的事情,你要学会套接字,地址转换,服务器相关的数据结构和算法才能进行开发和设计。(4) 还是很多基础的东西没有掌握好,基本的算法也没有完全掌握,参考了教科书的相关内容后,才开始了我们的课程设计。(5) 在数据库的编写时,很多要用到的数据类型而我们又没有学过的,只能借助互联网的强大功能了,由此,我们也学到了很多相关的知识。八: 源程序清单81数据库文件BANK.SHcreate database bank;use bank;create table information( number char(19) not null,passwd char(10),name char(20),money float(10,10);insert into information(number,passwd,name,money)values(654321,123456,FDW,1000);insert into information(number,passwd,name,money)values(765432,123456,HSS,1000);PHONE.SHcreate database phone;use phone;create table phone(number char(11),name char(30),money float(10,10);insert into phone(number,name,money)valuesFDW,50);insert into phone(number,name,money)valuesHSS,22);MIDDLE.SHcreate database middle;use middle;create table information(service int,port char(20),ip char(20);insert into information(service,port,ip)values(1,Second,myhttp);insert into information(service,port,ip)values(2,First,myhttp);USERS.SHcreate database users;use users;create table users(name char(20),passwd char(10);insert into users(name,passwd)values(hello,man);8.2客户端程序 C1.C#include #include #include #include #include #include #include #include #include #include #include #include #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)int set_disp_mode(int option);int getpasswd(char* passwd, int size);int main(int argc,char *argv)char name10,passwd10,choose;char send_buf1024=;char tmp1024,phone30,number30,pswd10,money30,myl_buf1024,fd_buf1024;char log=clt.log;int connect_fd;int ret;int i;int port;int len; int fd;MYSQL mysql;MYSQL_ROW row;MYSQL_RES *result;struct servent*sp;struct hostent*hp;static struct sockaddr_in srv_addr;if(mysql_init(&mysql)=NULL)fprintf(stderr,Error in mysql_init!n);exit(-1);if(!mysql_real_connect(&mysql,localhost,root,0,users,0,NULL,0)fprintf(stderr,Error in connection: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_close(&mysql); exit(-2);system(clear);if(fd=open(log,O_WRONLY|O_CREAT|O_APPEND,0644)=-1)fprintf(stderr,Log file %s open error!an,log);exit(-1);clear:printf(Enter the user name:);scanf(%s,name);getchar();set_disp_mode(0);getpasswd(passwd,sizeof(passwd);set_disp_mode(1);system(clear);sprintf(myl_buf,select * from users where name=%s,name);if(mysql_query(&mysql,myl_buf)!=0)fprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_close(&mysql); exit(-3);if(result=mysql_store_result(&mysql)=NULL)fprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_free_result(result);mysql_close(&mysql); exit(-4);if(mysql_num_rows(result)=0)printf(use dont exist!n);goto clear;row=mysql_fetch_row(result);if(strcmp(row1,passwd)!=0)printf(The passwd is not turen);goto clear;if(sp=getservbyname(argv1,tcp)=NULL)fprintf(stderr,Error:getservbyname);exit(-1);if(hp=gethostbyname(argv2)=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_fd0)printf(Message from middle: %sn,send_buf);close(connect_fd);switch(send_buf0)case 0:sprintf(fd_buf,%-10s%-20s%-20s0kn,name,phone,money);write(fd,fd_buf,strlen(fd_buf);printf(OPTION SUCCESSFULLYn);printf(Please Enter any key to return.n);getchar();strcpy(send_buf,);goto clen;break;case 1:printf(the information of the is %sn,send_buf);printf(Please Entry any key to continue.n);getchar();goto clen;break;case 3:sprintf(fd_buf,%s LOG OUT SUCESSFULLY,phone);write(fd,fd_buf,strlen(fd_buf);printf(SUCCESSFULLY LOGOUT!n);break;case 5:sprintf(fd_buf,%-10s%-20s%-20sFALSEBANK NUMBER WRONG!n,name,phone,money);write(fd,fd_buf,strlen(fd_buf);printf(THE BANK NUMBER IS NOT EXISTn);printf(Please Check itn);printf(please Enter any key to continue.n);getchar();strcpy(send_buf,);goto clen;case 8:sprintf(fd_buf,%-10s%-20s%-20sFALSEPHONE NUMBER WRONG!n,name,phone,money);write(fd,fd_buf,strlen(fd_buf);printf(THE PHONE USER ISNT EXISTn);printf(Please Check itn);printf(Please Enter any key to continue.n);getchar();strcpy(send_buf,);goto clen;break;case 9:sprintf(fd_buf,%-10s%-20s%-20sFALSEBANK PASSWD WRONG!n,name,phone,money);write(fd,fd_buf,strlen(fd_buf);printf(The passwd wrongn);printf(Please Enter any key to continue.n);getchar();strcpy(send_buf,);goto clen;case 7:sprintf(fd_buf,%-10s%-20s%-20sFALSENOT ENOUGH!n,name,phone,money);write(fd,fd_buf,strlen(fd_buf);printf(NOt Enough MOneyn);printf(Please Enter any key to continue.n);getchar();strcpy(send_buf,);goto clen;default:break;close(connect_fd);return 0;int set_disp_mode(int option) int err; struct termios term; if(tcgetattr(STDIN_FILENO,&term)=-1) perror(Cannot get the attribution of the terminal);return 1; if(option) term.c_lflag|=ECHOFLAGS; else term.c_lflag &=ECHOFLAGS; err=tcsetattr(STDIN_FILENO,TCSAFLUSH,&term); if(err=-1 & err=EINTR) perror(Cannot set the attribution of the terminal); return 1; return 0;int getpasswd(char* passwd, int size) int c; int n = 0; printf(Enter the passwd:); do c=getchar(); / if (c != n|c!=r) passwdn+ = c; / while(c != n & c !=r & n (size - 1); passwdn-1 = 0; return n;8.3中间件程序MIDDLE.C#include #include #include #include #include #include #include #include #include #include #include #include #include void strsplit(char *s,char *v,char d);int main(int argc,char *argv)int listen_fd,clt_fd,ser_fd;int com_fd;int ret;int i;int port;int stat;pid_t pid;char flag,fflag;static char recv_buf1024,snd_buf1024,buf1024,ret_buf1024=,fd_buf1024=;int len;char *v,*x,d=|;int fd;char log=mid.log;MYSQLmysql;MYSQL_RES*result;MYSQL_ROWrow;struct hostent*hp;struct servent*sp;struct sockaddr_in srv_addr;struct sockaddr_in clt_addr;struct sockaddr_in sc_addr;if(fd=open(log,O_WRONLY|O_CREAT|O_APPEND,0644)=-1)fprintf(stderr,Log file %s open error!an,log);exit(-1);if(mysql_init(&mysql)=NULL)fprintf(stderr,Error in mysql_init!n);exit(-1);if(!mysql_real_connect(&mysql,localhost,root,0,middle,0,NULL,0)fprintf(stderr,Error in connection: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_close(&mysql); exit(-2);listen_fd=socket(PF_INET,SOCK_STREAM,0);if(listen_fds_port;ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr);if(ret=-1)perror(cannot bind server socket);close(listen_fd);return 1;ret=listen(listen_fd,10);if(ret=-1)perror(cannot listen the client connect request);close(listen_fd);return 1;while(1)flag=F,fflag=T;len=sizeof(clt_addr);com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);if(com_fd0)sprintf(fd_buf,MESSAGE FROM CLIENT:%-40sn,recv_buf);write(fd,fd_buf,strlen(fd_buf)+1);printf(Message from client(%d): %sn,len,recv_buf);if(recv_buflen-3=3)strcpy(snd_buf,3|);goto zhongjr;clen:len=strlen(recv_buf);printf(recv%sn,recv_buf);printf(%d!n,recv_buflen-2-48);sprintf(buf,select * from information where service=%d,(recv_buflen-2-48);if(mysql_query(&mysql,buf)!=0)fprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_close(&mysql); exit(-3);if(result=mysql_store_result(&mysql)=NULL)fprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_free_result(result);mysql_close(&mysql); exit(-4);row=mysql_fetch_row(result);if(sp=getservbyname(row1,tcp)=NULL)fprintf(stderr,Error:getservbyname);exit(-3);if(hp=gethostbyname(row2)=0)fprintf(stderr,Error:gethostbyname);exit(-4);clt_fd=socket(PF_INET,SOCK_STREAM,0);if(clt_fdh_addr,&sc_addr.sin_addr,hp-h_length);sc_addr.sin_port=sp-s_port;if(connect(clt_fd,(struct sockaddr*)&sc_addr,sizeof(sc_addr)=-1)perror(cannot connect to the server);close(clt_fd);return 4;memset(snd_buf,0,1024);strncpy(snd_buf,recv_buf,len-2);write(clt_fd,snd_buf,len);if(read(clt_fd,snd_buf,1024)0)printf(Message From server:%s n,snd_buf);close(clt_fd);printf(wo%sn,snd_buf);printf(rev%sn,recv_buf);printf(%c?,recv_bufstrlen(recv_buf)-2);switch(recv_buflen-2)case 0:break;case 1:/zhongjianjiefanhuisprintf(fd_buf,MESSAGE FROM PHONE:%-40sn,snd_buf);write(fd,fd_buf,strlen(fd_buf)+1);if(snd_buf0=8)snd_buf0=2;strcpy(recv_buf,snd_buf);printf(recv_buf %s n,recv_buf);strcpy(snd_buf,8|);flag=T;break;case 2:/congyinghanghuilai haide zaicichuli/yinghangfanghuisprintf(fd_buf,MESSAGE FROM BANK:%-40sn,snd_buf);write(fd,fd_buf,strlen(fd_buf)+1);if(snd_buf0=0)/printf(snd_buf%sn,snd_buf);strcpy(recv_buf,snd_buf);recv_buf0=2;printf(recv_buf%sn,recv_buf);goto clen;/else/tianjia |0 geikehu biaoshichucuoleif(snd_buf0=6)goto withme;break;default :;zhongjr:if(fflag=T)write(com_fd,snd_buf,strlen(snd_buf)+1);/geikefu zhixiangkehuxieyicifflag=F;withme:if(flag=T) flag=F;goto clen; /diercigotolaizhixingdeshihouclose(com_fd);exit(0);if(pid0)close(com_fd);continue;void strsplit(char *s,char *v,char d)inti,j,l;j=0;vj=s;l=strlen(s);for(i=0;il;i+)if(*(s+i)!=|) continue;else *(s+i)=0;v+j=s+i+1;8.4服务器S1#include #include #include #include #include #include #include #include #include #include #include #include #include void strsplit(char *s,char *v,char d);int main(int argc,char *argv)int listen_fd;int com_fd;int ret;pid_t pid;static char recv_buf1024,buf1024,u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度生态旅游项目单包建筑工程施工合同
- 2025年标准砖新型城镇化建设专项采购合同
- 2025版公路桥梁施工安全保密协议书汇编
- 2025年度建筑工程居间合同协议书(新型城镇化)
- 2025版文化创意产业项目投标标前合作合同
- 2025年金融产品代理推广合同
- 2025版机器人设计制作合同范本模板
- 2025版电子商务平台提前终止合作协议书
- 2025版顺丰快递快递服务质量考核合同
- 2025版电信企业员工试用期劳动合同参考模板
- 中国哲学经典著作导读知到章节答案智慧树2023年西安交通大学
- 2023年泰州市高级教师职称考试试题
- 业余足球比赛技术统计表
- 社情民意写作基本知识要点课件
- 医疗器械生产企业GMP培训专家讲座
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 辐射及其安全防护(共38张PPT)
- 金风15兆瓦机组变流部分培训课件
- 膀胱镜检查记录
- 沈阳终止解除劳动合同证明书(三联)
- 化工装置静设备基本知识
评论
0/150
提交评论