金融证券tcp课程设计报告.docx
- 文档编号:2715641
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:50
- 大小:154.43KB
金融证券tcp课程设计报告.docx
《金融证券tcp课程设计报告.docx》由会员分享,可在线阅读,更多相关《金融证券tcp课程设计报告.docx(50页珍藏版)》请在冰点文库上搜索。
金融证券tcp课程设计报告
课题:
基于TCP的证券交易系统设计
一、基本要求
(1)包括服务器端和客户端,服务器端和客户端通过TCP协议进行交互
(2)服务器端通过多线程或者多进程的方式支持多个客户端同时连接;
(3)客户端可设定与服务器端相连的IP地址和端口号;
(4)客户端首先向服务器进行注册,当注册成功后,进行登录;
(5)服务器端提供股票信息,包括股票名称,股票当前价格,股票买1到买5,股票卖1到卖5的价格信息;
(6)服务器端提供当前股票成交信息,以及成交之后的股票上述信息
(7)多个客户端同时向服务器提供交易某只股票的信息,例如A用户以10元价格买入代码1的股票1000股,同时,B用户以9.99元价格卖出代码1的股票750股,根据适当的算法确定当前的成交价,并通知两个客户。
2、需求分析
Stock类:
存放股票数据,类中方法对股票进行各项操作。
VoidHangUpStock();//挂起股票
voidUnHangStock();//解挂股票
voidModifyStock(Stock[]);//修改股票
voidDeleteStock();//删除股票
voidInterface();//选择面板
voidStockExchangeMarket();//显示信息
voidSwitchchoice();//选择服务
voidInputForNewStock();//加入新股票
voidMarketAnalysis();//市场分析
voidSave(Stock[]);//保存修改
Customer类:
存放用户信息,类中方法对用户进行各项操作。
Customer();//对用户初始化
voidLogin(char*,char*,Customer)const;//登录
voidRegister(Customer*);//注册
voidStockPortfolio(Customer)const;//Portfolio--有价证券
3、概要设计
1.此程序中共定义了两个类,类内声明类外定义。
VoidHangUpStock();//挂起股票
voidUnHangStock();//解挂股票
voidModifyStock(Stock[]);//修改股票
voidDeleteStock();//删除股票
voidInterface();//选择面板
voidStockExchangeMarket();//显示信息
voidSwitchchoice();//选择服务
voidInputForNewStock();//加入新股票
voidMarketAnalysis();//市场分析
voidSave(Stock[]);//保存修改
Stock类
(存放股票数据,类中方
法对股票进行各项操作)
Customer();//对用户初始化
voidLogin(char*,char*,Customer)const;//登录
voidRegister(Customer*);//注册
voidStockPortfolio(Customer)const;//Portfolio--有价证券
Customer类
(存放用户信息,类中方
法对用户进行各项操作)
原程序缺陷:
程序反复声明了Stock和Customer类的同一对象,浪费了系统资源;在一些函数调用中也存在缺陷,比如存在Input_For_New_Stock()方法,但是只有在第一次使用是才会调用,Customer类中原有Switch_function()也没有调用。
在用户选择登录时,无法辨别用户名,只根据密码进行登录,当遇到密码相同的用户时,就分不清楚用户。
密码是显示输入的不能有效的受到保护。
2.新用户注册
voidCustomer:
:
Register(Customer*cust)
{charch;
system("cls");//执行系统命令:
清屏=cls
cin.get();
cout<<"欢迎进入*************股票交易系统***********"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"输入用户名: "; cin.getline(customer_name,30); cout<<"输入您的密码(少于8字): "< {charch;inti=0;cout.flush();ch=getch();开始 while(ch! =13) {password[i++]=ch;cout<<'*'; cout.flush();ch=getch();欢迎界面 } password[i]=0; }输入用户名 cout< "; cin>>zzch;shzh=0;money=zzch; cout<<"是否设为管理员? (y/n)"< cin>>ch; if(ch=='y'||ch=='Y') {gly=1;cout<<"已设置...";是否设为管理员 } N Y elseif(ch=='n'||ch=='N')gly=0; elsecout<<"默认为非管理员..."; getch(); system("cls"); cout< cout<<"注册成功..."< cout<<"按任意键返回..."< getch(); } 此部分主要使用if~else条件判断句对“是否设为管理员”进行选择。 3.用户登录 1、登录: 输入用户名和密码,使用if(strcmp(pass_word,password)==0)语句进行核对。 进入选择页面: 买入……………………[1] 卖出……………………[2] 添加新股票.……………….[3] 挂出股票,恢复交易.………[4] 删除已有股………………[5] 挂起股票,停止交易…………[6] 修改代码及名称……………[7] 查看.…………………………[8] 退出.…………………………[0] Switch 2、添加/删除股票(以删除为例) 否您无权删除股票! case'5是否为管理员 是voidStock: : Delete_Stock() 3、挂出/挂起股票(以挂起为例) 代码错误 代码正确不能挂起 Y N 取消挂起操作 完成挂起 4、买/卖股票(以买入为例) 进行整数判断、可购买股数判断、资金余额判断 代码正确,输入购买量 if(share[i].hang==1) 股票已挂起,停止交易! 4.查看股票情况 在最初的选择菜单中选择“1”进入股票交易市场,显示代码、流通数、发行价、是否挂起的信息。 case'1': {//进入股票交易市场 system("cls"); cout<<"\n\n\t\t********************股票交易市场********************"< cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"公司\t\t代码\t流通股\t可动股\t发行价上市价状态"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< for(intx=0;x<5;++x) { share[x].Stock_Exchange_Market(); } getch(); temp.Interface(); break; } 5.退出系统 case'0': {//退出 system("cls"); cout<<"感谢您使用********************股票交易市场******************"< cout<<"\t再见! "< exit(0); 4、详细设计 各个算法实现#include #include #pragmacomment(lib,"ws2_32.lib") #include #include #include #include #include #include #include #defineMAX5 inti=0,j=0,Hang,flag; intnum_of_stock; intgushu; charrecvBuf[100]; char*message; SOCKETsockClient; classCustomer; classStock { private: floatfaxing,shangshi;//股票发行价,上市价 charstock_name[20];//股票名称 charstock_code[6];//股票代码 charchoice;//Interface()下选择 inthang;//是否挂起(1为是,0为否) longintstock_volume;//股票总股数 longintvolume_available;//股票可流通量 public: Stock(); voidHang_Up_Stock();//挂起股票 voidUn_Hang_Stock();//解挂股票 voidModify_Stock(Stock[]);//修改股票 voidDelete_Stock();//删除股票 voidInterface();//选择面板 voidStock_Exchange_Market();//显示信息 voidSwitch_choice();//选择服务 voidInput_For_New_Stock();//加入新股票 voidMarket_Analysis();//市场分析 voidSave(Stock[]);//保存修改 friendclassCustomer; }; classCustomer { friendclassStock; private: intgly;//是否管理员 charcustomer_name[30];//用户名 charpassword[10];//密码 charshare_holding_name[5][30];//持有股票名称 charshare_holding_code[5][5];//持有股票代码 longintshare_holding_value[5];//持有股票数量 doublemoney,shzh,zzch;//现金余额,市值,总资产 public: Customer(); voidLog_in(char*)const;//登录 voidRegister(Customer*);//注册 voidStock_Portfolio()const;//Portfolio--有价证券 }; Stocktemp,share[MAX];//全局变量,声明股票对象 Customercust;//声明用户对象,全局变量 //Customer构造 Customer: : Customer() { strcpy(Customer: : customer_name,""); for(i=0;i { strcpy(Customer: : share_holding_name[i],""); strcpy(Customer: : share_holding_code[i],""); share_holding_value[i]=0; money=shzh=zzch=0; } } voidCustomer: : Log_in(char*pass_word)const { if(strcmp(pass_word,password)==0)//核对密码 { {interr;char*message;charrecvBuf[100];SOCKETsockClient;//客户端Scoket SOCKADDR_INaddrServer;//服务端地址 WSADATAwsaData; WORDwVersionRequested; wVersionRequested=MAKEWORD(2,2); err=WSAStartup(wVersionRequested,&wsaData); if(err! =0) { exit(0); } if(LOBYTE(wsaData.wVersion)! =2||HIBYTE(wsaData.wVersion)! =2) { //启动错误,程序结束 WSACleanup(); exit(0); }//新建客户端scoket sockClient=socket(AF_INET,SOCK_STREAM,0);//定义要连接的服务端地址 addrServer.sin_addr.S_un.S_addr=inet_addr("10.20.148.110");//目标IP(127.0.0.1是本机地址) addrServer.sin_family=AF_INET;//协议类型是INET addrServer.sin_port=htons(6000);//连接端口6000 //让sockClient连接到服务端 connect(sockClient,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));//从服务端获取数据 recv(sockClient,recvBuf,100,0);//打印数据 printf("%s\n",recvBuf);message="用户已登录~";//发送数据到服务端 send(sockClient,message,strlen(message)+1,0);//关闭socket Stocktemp; ifstreamdataFile("Stock_File.dat");//读取股票数据 dataFile.read((char*)(&share),sizeof(share)); temp.Interface(); closesocket(sockClient); WSACleanup(); getchar();//暂停 exit(0); } Stock_Portfolio();} else { cout< cout<<"密码错误..."< } } voidCustomer: : Register(Customer*cust) {char*message; charch; system("cls");//执行系统命令: 清屏=cls cin.get(); cout<<"欢迎进入*************股票交易系统***********"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"输入用户名: "; cin.getline(customer_name,30); printf("%s\n",recvBuf);message=customer_name;//发送数据到服务端 send(sockClient,message,strlen(message)+1,0); cout<<"输入您的密码(少于8字): "< { charch; inti=0; cout.flush(); ch=getch(); while(ch! =13) { password[i++]=ch; cout<<'*'; cout.flush(); ch=getch(); } password[i]=0; } cout< cout<<"输入您的资金: "; cin>>zzch; shzh=0; money=zzch; cout<<"是否设为管理员? (y/n)"< cin>>ch; if(ch=='y'||ch=='Y') { gly=1; cout<<"已设置..."; } elseif(ch=='n'||ch=='N') gly=0; else cout<<"默认为非管理员..."; getch(); system("cls"); cout< cout<<"注册成功..."< cout<<"按任意键返回..."< getch(); } voidCustomer: : Stock_Portfolio()const//用户交易操作系统 { inti,a; charch,share_code[6],str[20]; longintvolume; start: system("cls"); cout< cout<<"\t\t\t欢迎使用! ! ! ! ! "< cout<<"\t\t*************股票交易系统***********"< cout<<"\t\t-----------------------------------------"< cout<<"\t\t用户: "< cout<<"\t\t买入..........................[1]"< cout<<"\t\t卖出..........................[2]"< cout<<"\t\t添加新股票....................[3]"< cout<<"\t\t挂出股票,恢复交易.............[4]"< cout<<"\t\t删除已有股....................[5]"< cout<<"\t\t挂起股票,停止交易.............[6]"< cout<<"\t\t修改代码及名称................[7]"< cout<<"\t\t查看..........................[8]"< cout<<"\t\t退出..........................[0]"< cout< "; cin>>ch; if((ch! ='1')&&(ch! ='2')&&(ch! ='3')&&(ch! ='4')&&(ch! ='5')&&(ch! ='6')&&(ch! ='7') &&(ch! ='8')&&(ch! ='0')) gotostart; else { switch(ch) { case'3': {//加入新股票 if(cust.gly==1) { for(i=0;i { if(strcmp(share[i].stock_name,"")==0)//在股票数据空处添加新的内容 { share[i].Input_For_New_Stock(); temp.Save(share);//写数据 getch(); char*message; printf("%s\n",recvBuf);message=share[0].stock_name;//发送数据到服务端 send(sockClient,message,strlen(message)+1,0); } } } else { cout<<"您无权添加股票! "< getch(); break; } } case'5': {//删除股票 if(cust.gly==1) { system("cls"); cout<<"\n\n\t\t*************股票交易系统**********"< cout<<"\t\t-----------------------------------------"< cout<<"公司\t\t代码\t流通股\t可动股\t发行价\t上市价"< for(i=0;i { share[i].Stock_Exchange_Market(); } cin.get(); temp.Delete_Stock(); char*message; printf("%s\n",recvBuf);message="股票已删除";//发送数据到服务端 send(sockClient,message,strlen(message)+1,0); cin.ge
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 金融证券 tcp 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)