程序设计-网络银行的简化设计-socket.doc_第1页
程序设计-网络银行的简化设计-socket.doc_第2页
程序设计-网络银行的简化设计-socket.doc_第3页
程序设计-网络银行的简化设计-socket.doc_第4页
程序设计-网络银行的简化设计-socket.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计报告( 201 / 201 学年 第 学期)题 目:网络银行的简化设计 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 日 期 评 分 细 则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简 短 评 语教师签名: 年 月 日评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格网络银行的简化设计一、 课题内容和要求客户帐单管理是电信计费系统必备的重要功能模块,主要负责对电信各类客户每月帐单的增加、修改、删除、查询、备份等管理工作。本课题以中国电信企业客户帐单管理模块原型参照,要求基于单链表结构对文件存储的客户帐单数据进行排序、查找、计算、显示等造作。通过此可以,熟练掌握单链表结构、文件读写、函数调用等知识,以及查找、排序典型算法的设计与应用。二、 需求分析一丶功能框架图 功能框架图二、系统功能1.可以任意选择服务端口;2.服务器处于监听状态;3.通过客户端建立新账户;4.登陆已有账户,查询账户余额;5.备份客户登陆信息;三、概要设计 一、主要函数:1.socket()结构:servsock=socket(PF_INET,SOCK_STREAM,0);/*建立服务端socket*/*构造本地地址结构体*/memset(&servaddr,0,sizeof(servaddr);servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(servport);2. 绑定本地地址的bind()函数:bind(servsock,(struct sockaddr*)&servaddr,sizeof(servaddr);3监听的listen()函数:listen(servsock,maxpending);4. 连接到服务器的connect()函数:connect(sock,(struct sockaddr*)&servaddr,sizeof(servaddr);5.发送信息的send()函数:send(clntSocket,echobuffer,rcvbufsize,0);6.接收信息的recv()函数:recv(clntSocket,recvbuffer,rcvbufsize,0);二、主要函数流程图:整个简易网银系统分为两个部分:服务器、客户端。服务器启动后监听等待客户端的连接,客户端成功连接到服务器之后,客户就能进行业务办理了。1. 服务器流程图: 2. 客户端流程图:四、源程序代码1.服务器代码:#include#include#include#define maxpending 5 /*最大等待请求*/#define rcvbufsize 32/*最大接收字节数*/void HandleTCPClient(int clntSocket);struct account/建立客户信息结构体char acc15;char psw17;char money8;void main()int servsock;/*服务端*/int clntsock;/*客户端*/struct sockaddr_in servaddr;/*本地地址*/struct sockaddr_in clntaddr;/*客户端地址*/unsigned short servport;/*服务端口*/unsigned int clntlen;/*客户端地址长度*/WSADATA wsadata; /*WinSock建立连接的结构体*/WSAStartup(MAKEWORD(2,0),&wsadata);/*初始化*/printf(请输入服务器端口号(102565535:n);scanf(%d,&servport);servsock=socket(PF_INET,SOCK_STREAM,0);/*建立服务端socket*/*构造本地地址结构体*/memset(&servaddr,0,sizeof(servaddr);servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(servport);/*绑定本地地址*/bind(servsock,(struct sockaddr*)&servaddr,sizeof(servaddr);/*监听连接请求*/listen(servsock,maxpending);for(;)clntlen=sizeof(clntaddr);clntsock=accept(servsock,(struct sockaddr*)&clntaddr,&clntlen);printf(与客户端%s连接,请等待n,inet_ntoa(clntaddr.sin_addr);HandleTCPClient(clntsock);/处理客户端消息void HandleTCPClient(int clntSocket)char echobufferrcvbufsize;/*发送字符串*/char recvbufferrcvbufsize;/*接收字符串*/struct account account;/*接收结构体*/char *p;int i,truth=0;memset(echobuffer,0,sizeof(echobuffer);memset(recvbuffer,0,sizeof(recvbuffer);recv(clntSocket,recvbuffer,rcvbufsize,0);/接收0或1信息if(strcmp(recvbuffer,0n)=0)FILE* fp;fp=fopen(D:account.dat,ab+);if(!fp)printf(open error.n); exit(1);recv(clntSocket,recvbuffer,rcvbufsize,0);puts(recvbuffer);if(strcmp(recvbuffer,Kaihun)=0)p=命令输入正确。n;strcpy(echobuffer,p);/copysend(clntSocket,echobuffer,rcvbufsize,0);/将这句话返还给客户端memset(echobuffer,0,sizeof(echobuffer);/清零printf(命令判断成功,开始创建n);recv(clntSocket,recvbuffer,rcvbufsize,0);/接收客户端发来的账户信息puts(recvbuffer);strcpy(account.acc,recvbuffer);printf(账户创建成功n);recv(clntSocket,recvbuffer,rcvbufsize,0);/接收客户端发来的密码信息puts(recvbuffer);strcpy(account.psw,recvbuffer);printf(密码记录成功n);recv(clntSocket,recvbuffer,rcvbufsize,0);/接收客户端发来的默认初始余额puts(recvbuffer);strcpy(account.money,recvbuffer);printf(余额设置成功n);p=account.money;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);/将余额信息返还给客户端memset(echobuffer,0,sizeof(echobuffer);fprintf(fp,%s%s%sn,&account.acc,&account.psw,&account.money);/备份puts(本次用户信息:n);fprintf(stdout,%s%s%s,&account.acc,&account.psw,&account.money);elsep=命令错误!n;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);/将“命令错误”返还给客户端memset(echobuffer,0,sizeof(echobuffer);fclose(fp);elseFILE* fp;fp=fopen(D:account.dat,ab+);if(!fp)printf(open error.n); exit(1);recv(clntSocket,recvbuffer,rcvbufsize,0);/接收账户信息puts(待查账户:);puts(recvbuffer);doputs(searching.n);fscanf(fp,%s%s%s,&account.acc,&account.psw,&account.money);puts(account.acc);p=n;strcat(account.acc,p);if(strcmp(account.acc,recvbuffer)=0)truth=1;while(!feof(fp)&truth!=1);/从数据文件中搜索客户信息if(truth=1)p=account right!n;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);memset(echobuffer,0,sizeof(echobuffer);recv(clntSocket,recvbuffer,rcvbufsize,0);p=n;strcat(account.psw,p);if(strcmp(recvbuffer,account.psw)=0)p=load successfully!n;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);memset(echobuffer,0,sizeof(echobuffer);p=account.money;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);memset(echobuffer,0,sizeof(echobuffer);elsep=the key is wrong.n;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);memset(echobuffer,0,sizeof(echobuffer);elsep=no such account.n;strcpy(echobuffer,p);send(clntSocket,echobuffer,rcvbufsize,0);memset(echobuffer,0,sizeof(echobuffer);fclose(fp);2.客户端代码:#include#include#include#define rcvbufsize 32 /*可接收最大字符串长*/int main()int sock;/*声明socket*/int bytesRcvd;struct sockaddr_in servaddr;/*服务器端地址*/unsigned short servport;/*服务器端端口*/char servIP32;/*服务器端IP*/char echostring32;/*被发送字符串*/char bufferrcvbufsize;/*接收字符串长*/char *p;WSADATA wsadata;WSAStartup(MAKEWORD(2,0),&wsadata);/*输入服务器IP和端口*/printf(请输入服务器IP地址:n);scanf(%s,servIP);printf(请输入连接的端口(102565535):n);scanf(%d,&servport);/*建立socket*/sock=socket(PF_INET,SOCK_STREAM,0);/*构造客户端地址结构体*/memset(&servaddr,0,sizeof(servaddr);servaddr.sin_family =AF_INET;servaddr.sin_addr.s_addr =inet_addr(servIP);servaddr.sin_port =htons(servport);connect(sock,(struct sockaddr*)&servaddr,sizeof(servaddr);/*连接到服务器*/*收发信息*/printf(创建新账户请输入0,登录已有账户请输入1:n);fflush(stdin);fgets(echostring,3,stdin);send(sock,echostring,3,0);/将用户的选择发送给服务器if(strcmp(echostring,0n)=0)/用户选择开户memset(echostring,0,sizeof(echostring);puts(请输入命令Kaihu以创建新账户,以回车结束n);fflush(stdin);fgets(echostring,12,stdin);send(sock,echostring,12,0);memset(echostring,0,sizeof(echostring);recv(sock,buffer,rcvbufsize,0);/接收服务器返还的信息puts(buffer);if(strcmp(buffer,命令错误!n)=0)getchar();exit(0);puts(请输入您的账户(15B):n);fflush(stdin);fgets(echostring,15,stdin);send(sock,echostring,15,0);/将账户信息发送给服务器memset(echostring,0,sizeof(echostring);puts(请输入您的密码(17B):n);fflush(stdin);fgets(echostring,17,stdin);send(sock,echostring,17,0);/将密码信息发送给服务器memset(echostring,0,sizeof(echostring);p=0n;strcpy(echostring,p);send(sock,echostring,8,0);/将默认余额发送给服务器memset(echostring,0,sizeof(echostring);else/如果登录已有账户memset(echostring,0,sizeof(echostring);puts(请输入您的账户(15B):n);fflush(stdin);fgets(echostring,15,stdin);send(sock,echostring,15,0);/将账户信息发送给服务器memset(echostring,0,sizeof(echostring);recv(sock,buffer,rcvbufsize,0);/接收服务器反馈puts(buffer);if(strcmp(buffer,no such account.n)=0)getchar();exit(0);puts(请输入您的密码(17B):n);fflush(stdin);fgets(echostring,17,stdin);send(sock,echostring,17,0);/将密码信息发送给服务器memset(echostring,0,sizeof(echostring);recv(sock,buffer,rcvbufsize,0);/接收服务器反馈puts(buffer);if(strcmp(buffer,the key is wrong.n)=0)getchar();exit(0);puts(您的账户余额为:n);recv(sock,buffer,rcvbufsize,0);puts(buffer);getchar();memset(buffer,0,sizeof(buffer);/*结束收发信息*/closesocket(sock);WSACleanup();exit(0);五、测试数据及其结果分析一、创建新账户:1.服务器显示:请输入服务器端口号(102565535:111与客户端127.0.0.1连接,请等待Kaihu命令判断成功,开始创建junjun账户创建成功123密码记录成功0余额设置成功本次用户信息:junjun123102.客户端显示:127.0.0.1请输入连接的端口(102565535):111创建新账户请输入0,登录已有账户请输入1:0请输入命令Kaihu以创建新账户,以回车结束Kaihu命令输入正确。请输入您的账户(15B):junjun请输入您的密码(17B):123您的账户余额为:0二、登录已有账户服务器端显示:请输入服务器端口号(102565535:111与客户端127.0.0.1连接,请等待待查账户:123searching.junjunsearching.123345searching.123客户端显示:请输入服务器IP地址:127.0.0.1请输入连接的端口(102565535):111创建新账户请输入0,登录已有账户请输入1:1请输入您的账户(15B):123account right!请输入您的密码(17B):123load successfully!您的账户余额为:0结果分析:1.新用户可以通过客户端在服务器创建一个新账户,新账户信息会存储备份在D盘account.dat文件中;2老客户可以从客户端登录账户,调出余额信息;3如果客户登录时没有在服务器端找到客户信息,会报错;4.如果登录时密码验证失败也会报错;六、调试过程中的问题1.客户端和服务器端无法正常建立联系;解决过程:检查了socket的建立,服务器的bind绑定过程,listen的监听过程;客户端的connect过程,终于使服务器和客户端可以进行简单通信。新建立的账户密码余额等信息没有正确存储在文件中;解决过程:通过翻阅课本找到了文件的导入和导出。3. 检索过程太繁琐,如果存储的信息过多可能检索速度会很慢;解决过程:以现在的水平没有想到更好的办法。4. 太简陋,可以完成的客户业务太少;解决过程:可以更多利用send

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论