




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附件1:封面Linux课程设计报 告设计题目: 手机交费系统 专 业: 软件工程 指导教师: 蔡照鹏 王斌斌 班 级: 0844121 学 号: 084412106 姓 名: 李美娜 同 组 人: 刘云攀 李思宇 计算机科学与工程学院2015年06月26日目录一、需求分析21功能介绍22目的及意义32.1目的32.2意义3二、总体设计31功能介绍32模块关联4三、详细设计61结构说明62功能的关键代码9四、测试及运行结果361调试362运行结果36五、 测试总结40一、需求分析1功能介绍这个设计实现了手机缴费功能,分别是通过管理员操作和用户自主网上操作,功能包括可以查看手机余额,以及银行卡交费和银行卡余额查询等功能2目的及意义2.1目的基于UNIX Socket和MySQL数据库,设计一个交易型中间件系统。这里的中间件是指交易型中间件。交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软件,在不同的行业、不同的系统间提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代理业务软件等都是这种类型的软件。本设计不是基于WEB的,不需要很多与WEB开发相关的知识,主要是利用linux系统提供的Socket库在网络底层,开发交易型中间件。模拟手机缴费系统,通过对移动通信话费查询与缴费业务进行了系统全面的分析研究。针对现有系统中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。采用开发工具Linux进行系统设计。基于linux Socket和mysql数据库,设计一个交易型中间件系统。提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代理业务软件等都是这种类型软件。这里的中间件是指交易型中间件。交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软件,在不同的行业、不同的系统间。这里主要是利用linux系统提供的Socket库在网络底层,开发交易型中间件。本次设计要求实现对移动话费信息输入、查询、编辑以及话费统计各明细项目的数据编辑;可自主设定条件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表2.2意义本次设计实现了管理员操作交费和用户通过网络银行交费等功能,实现了这个系统,对于Linux下的c编程了解了不少,学到了很多知识。Linux操作系统对于编程人员来说要比Windows操作系统功能要强大的多,Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。二、总体设计1功能介绍系统模型:这个程序是模拟手机交费系统,所以运行时服务器一直处于工作状态,等待来自中间件发过来的服务或数据。而中间件只有在客户端传来数据或者要求服务时才处于运行状态。C/S应用程序中复制寻找数据的步伐只需要访问一个中间件系统,由中间件完成网络中获得的数据源或服务,进行事先传输客户请求,重组回复信息,最后将结果送回应用程序的任务。2模块关联流程图:Socker()建立服务方套接字,描述符为sbingd()绑定套接字与本地地址和端口Linsten()通知TCP,准备接受Socker()建立服务方套接字,描述符为saccept()等待客户方连接Connect()建立与服务方链接recv()/read()读取客户方数据Send()/write()向服务器方发送请求成功后返回与s具相同特性的新套接字服务处理及数据加等待服务器方send()/write向客户方提供服务结果recv()/read读取服务方数据Close()关闭新套接字s,结束本次对话Close()关闭最初套接字s,结束服务器Close()关闭最初套接字s,结束本次对话系统流程图:三、详细设计1结构说明数据库:2功能的关键代码client:#include #include #include #include #include #include #include #include #include #include #include #include #include #define rec_length50#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)void strsplit(char *sourceStr,char *v,char d);/字符串拆分函数,拆分传递的信息int getpasswd(char* passwd, int size);int set_disp_mode(int fd,int option);/用于控制是否开启输入回显功能 void gettime(char datafull);main(int argc,char *argv)structhostent *hp;structsockaddr_in sin;structservent *sp;char connbuf80,buf80,oprname20,usrname20,bankno20,bankpwd20,num20,deposite30;char quebuf80,readbuf80,queoprpwd20,queusrpwd20;char oprpwd20,usrpwd20;char phoneno12,testStr10,tmp10;int s,pid;char money10,nowtime30,logbuf100,logbuf1100,logbuf220;int k=1,t=1,m=1,n=1,q=1,r=1,w=1,z=1;char *service,*dest;char option,chose,ch5;char d=-,*v=(char*)malloc(sizeof(char*) * 10);static int wf;if(argc=3) service=argv1;dest=argv2;else fprintf(stderr,NO service assigned!nUsage:);fprintf(stderr,%s service_name destination!n,argv0);fprintf(stderr,Note: service_name is defined in /etc/servicesn);fprintf(stderr, destination is defined in /etc/hostsn);exit(-1);if(wf=open(client.log,O_WRONLY|O_SYNC|O_CREAT|O_APPEND,0644)=-1)printf(Log file client open error!an);exit(-1);while(k)k=1,t=1,m=1,n=1,q=1,r=1,w=1,z=1;system(clear);printf(t*话费服务-充值交费*n);printf(tt1.现金交费ttt2.个人网上服务ntt3.退出n);printf(请选择您的操作(1或2或3):);setbuf(stdin,NULL);dooption=getchar();while(option=n| option=r);setbuf(stdin,NULL);switch(option)case 1:while(t)system(clear);printf(tt*话费服务-现金交费*n);printf(请您(操作员)登录!(输入exit返回上一级)nn);printf(请输入用户名(或exit):);scanf(%s,&oprname);setbuf(stdin,NULL);if(strcmp(oprname,exit)=0)m=0;break;setbuf(stdin,NULL);set_disp_mode(STDIN_FILENO,0);/调用getpasswd函数获得用户输入的密码getpasswd(oprpwd, sizeof(oprpwd);printf(%s password is %s,oprname,oprpwd);getchar();set_disp_mode(STDIN_FILENO,1);setbuf(stdin,NULL);if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);sprintf(buf,phoneSer-0-%s-%s,oprname,oprpwd);if(write(s,buf,rec_length)!=rec_length) /to serverfprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); exit(-1);if(read(s,buf,rec_length)=0) /get replay from serverfprintf(stderr,Read Socket s Error!n);fprintf(stderr,请按任意键返回!n);getchar();close(s);exit(-1);if(strcmp(buf,OK)!=0)printf(用户名不存在或密码错误!请按任意键重新输入。n);close(s);getchar();elset=0;close(s);while(m)system(clear); printf(tt*话费服务-现金交费*n);printf(登录成功!操作员:%s。t(输入exit返回主菜单)nn,oprname);printf(请输入手机号码:);scanf(%s,&phoneno);setbuf(stdin,NULL);if(strcmp(phoneno,exit)=0)break;if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);sprintf(buf,phoneSer-1-%s,phoneno);if(write(s,buf,rec_length)!=rec_length) /to serverfprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); exit(-1);if(read(s,buf,rec_length)=0) /get replay from serverfprintf(stderr,Read Socket s Error!n);fprintf(stderr,请按任意键返回!n);getchar();close(s);exit(-1);strsplit(buf,v,d);if(strcmp(v0,OK)!=0)printf(手机号码不存在或输入错误!请按任意键重新输入。n);close(s);getchar();getchar();elseclose(s);while(r)printf(机主:%st余额:%-10.2fn,v1,atof(v2);printf(要继续操作吗?(y|n):);setbuf(stdin,NULL);scanf(%s,ch);setbuf(stdin,NULL);if(strcmp(ch,y)=0|strcmp(ch,Y)=0)printf(请输入交费金额:);scanf(%s,&money);setbuf(stdin,NULL);if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);sprintf(connbuf,phoneSer-2-%s-%s-%s,phoneno,money,oprname);if(write(s,connbuf,rec_length)!=rec_length) fprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); break;if(read(s,connbuf,rec_length)=0) fprintf(stderr,Read Socket s Errorn);fprintf(stderr,请按任意键返回!n);getchar();close(s);break; close(s);if(strcmp(connbuf,OK)=0)gettime(nowtime);sprintf(logbuf,%s 给%s缴费成功,充值金额为:%s ,nowtime,phoneno,money); write(wf,logbuf,strlen(logbuf);write(wf,n,strlen(n);printf(交费成功!nn);gettime(nowtime);printf(手机交费回执单:n);printf(-n);printf(机主:%s 号码:%s 金额:%-10.2f 操作员:%sn日期:%sn,v1,phoneno,atof(money),oprname,nowtime);printf(-n);printf(n请按任意键继续!);m=0;getchar();break;elseprintf(交费失败!n);scanf(%s,tmp);break;else if(strcmp(ch,n)=0|strcmp(ch,N)=0)break;elseprintf(输入错误!请按任意键重新输入(y或n)。n);getchar();close(s);break;case 2:while(n)system(clear);printf(tt*话费服务-自助服务*n);printf(网上手机交费系统登录!t(输入exit返回主菜单)nn);printf(请输入手机号码:);scanf(%s,&usrname);q=1;setbuf(stdin,NULL);if(strcmp(usrname,exit)=0)break;set_disp_mode(STDIN_FILENO,0);getpasswd(usrpwd,sizeof(usrpwd);set_disp_mode(STDIN_FILENO,1);setbuf(stdin,NULL);if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);sprintf(connbuf,phoneSer-3-%s-%s,usrname,usrpwd);if(write(s,connbuf,rec_length)!=rec_length) fprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); exit(-1);if(read(s,connbuf,rec_length)=0) fprintf(stderr,Read Socket s Errorn);fprintf(stderr,请按任意键返回!n);getchar();close(s);exit(-1);close(s);if(strcmp(connbuf,failed)=0)printf(手机号不存在或密码错误!请按任意键重新输入。n);getchar();getchar();elsestrsplit(connbuf,v,d);while(q)w=1;system(clear);printf(%s,欢迎您!n,v1);printf(*话费服务-网上交费*n);printf(*t1.网银交费t2.手机余额查询tt3.银行余额查询 *ttn*t4.注销tt5.返回主菜单tt0.退出tt*n);printf(*n);printf(请选择您的操作:);setbuf(stdin,NULL);scanf(%c,&chose);setbuf(stdin,NULL);switch(chose)case 1:while(w)printf(请输入手机号码(或exit返回):);scanf(%s,&phoneno);if(strcmp(phoneno,exit)=0)z=0;break;if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);printf(phoneno-dest:%s,dest);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);sprintf(quebuf,phoneSer-1-%s,phoneno);if(write(s,quebuf,rec_length)!=rec_length)fprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); z=0;break;if(read(s,quebuf,rec_length)=0) fprintf(stderr,Read Socket s Errorn);fprintf(stderr,请按任意键返回!n);getchar();close(s);z=0;break;if(strcmp(quebuf,failed)=0)printf(手机号不存在!请重新输入。n);close(s);z=0;getchar();getchar();elsew=0;close(s);if(w=0)printf(请输入交费金额:);scanf(%s,&money);z=1;close(s);while(z)printf(请输入银行卡号(或exit返回):);scanf(%s,&bankno);if(strcmp(bankno,exit)=0)break;setbuf(stdin,NULL);set_disp_mode(STDIN_FILENO,0);getpasswd(bankpwd,sizeof(bankpwd);printf(%s number is %s,bankno,bankpwd);getchar();set_disp_mode(STDIN_FILENO,1);setbuf(stdin,NULL);if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);printf(socketn);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);printf(connectn);sprintf(quebuf,bankSer-0-%s-%s,bankno,bankpwd);if(write(s,quebuf,rec_length)!=rec_length) fprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); break;printf(%sn,quebuf);printf(writen);if(read(s,quebuf,rec_length)=0) fprintf(stderr,Read Socket s Error!n);fprintf(stderr,请按任意键返回!n);getchar();close(s);break;printf(%sn,quebuf);printf(readingn);close(s);if(strcmp(quebuf,failed)=0)printf(银行卡不存在或密码错误!请重新输入。n);getchar();elseif(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,与服务器会话时出错(getservbyname)!n);exit(-1);if(hp=gethostbyname(dest)=0)fprintf(stderr,与接服务器会话时出错(gethostbyname)!n);exit(-1);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,与服务器会话时出错(socket)!n);exit(-1);printf(quebuf-OK - socketn);if(connect(s,(struct sockaddr*)&sin,sizeof(sin)=-1)fprintf(stderr,与服务器会话时出错(connect)!n);close(s);exit(-1);printf(quebuf-OK - connectn);sprintf(quebuf,both-%s-%s-%s-%s,bankno,phoneno,money,usrname);printf(%sn,quebuf);if(write(s,quebuf,rec_length)!=rec_length) fprintf(stderr,Write Socket s ERROR!n);fprintf(stderr,请按任意键返回!n);getchar();close(s); break;printf(quebuf-OK writen);if(read(s,quebuf,rec_length)=0)printf(quebuf-OK read is error!n);fprintf(stderr,Read Socket s Errorn);fprintf(stderr,请按任意键返回!n);getchar();close(s);break;printf(%sn,quebuf);printf(quebuf-OK readingn);close(s);if(strcmp(quebuf,overdraft)=0)printf(银行卡余额不足!n);printf(按任意键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国英语等级考试(PETS)四级试卷:虚拟现实体验题
- 2025年大学移民管理专业题库- 移民儿童阅读与文学启蒙
- 2025年大学劳动教育专业题库- 劳动教育专业在劳动力市场的需求
- 2025年大学科学教育专业题库- 科学教育专业的实践经验分享
- 2025年大学劳动教育专业题库- 劳动教育与国家建设的关系
- 2025年小学英语毕业考试模拟试卷-英语歌曲演唱与音乐素养试题
- 2025年统计学期末考试题库-数据分析在决策中的运用模拟试题
- 2025年室内设计师职业资格考试真题模拟卷(设计审美教育实践探索创新改革成果展示未来展望机遇篇)
- 2025年小学英语毕业考试模拟试卷:英语写作思路拓展与词汇积累试题
- 2025年大学警卫学专业题库-校园内部安全漏洞及隐患排查
- 生产车间清洁方案
- 冬季作业安全技术交底
- 小学生洒扫应对班会
- 质子和重离子的区别
- 两相流数值模拟(第9讲)-VOF方法及其应用04课件
- 人教鄂教版六年级科学上册知识点总结
- 公司工程数量管理办法
- 宇宙中的地球 1.3地球的历史(第1课时)课件
- 支部委员会委员选票一
- 锅炉安装改造维修施工工艺标准
- 如何书写个案护理报告
评论
0/150
提交评论