股票交易系统代码大全.docx
- 文档编号:27481448
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:19
- 大小:20.28KB
股票交易系统代码大全.docx
《股票交易系统代码大全.docx》由会员分享,可在线阅读,更多相关《股票交易系统代码大全.docx(19页珍藏版)》请在冰豆网上搜索。
股票交易系统代码大全
#include
#include
#include
#include
#include
#include
classStocklist;//股票链表类的声明
structCusttable;//用户资料结构体声明
classCustlist;//股票数据类声明
Stocklist*head;//临时指向股票链表类的全局指针,作用是当程序运行时,把二进制中的数据写到这个临时的链表中,然后在这个临时的链表中进行各种操作,直到退出程序后再把临时的链表中的数据写入到二进制文件中,相当于保存并更新了文件中的数据。
Custtable*table;//临时指向用户资料结构体的指针,作用类似于上面的“临时指向股票链表类的全局指针”。
inlineistream&Flush(istream&stream)//在书本中看到的用于清空输入缓冲区的函数。
可以解决过多输入(如用cin.getline()接收数据时,过多的输入可以用该函数来清除掉,以免影响后面的输入),输入数据不符等问题。
{stream.clear();
intchars_to_skip=stream.rdbuf()->in_avail();
returnstream.ignore(chars_to_skip);
}
structCusttable//定义股票资料结构体
{charName[20];//用户姓名
intMoney;
};
classCStock//股票数据类
{private:
charstock_name[20];//股票名称
charstock_code[6];//股票代码
intstock_volume;//股票总股数
intvolume_available,nHangup;//可交易的股数
doublePrice;//股票的价格
CStock*pNext;
public:
CStock();//构造函数
CStock(char*code);//用股票代码初始化数据
CStock(char*name,char*code,intvolume,doubleprice);//初始化数据
voidSetStock(char*name,char*code,intvolume,doubleprice);//数据赋值
voidShow();//显示股票信息
char*GetName(){returnstock_name;}//返回股票名称
char*GetCode(){returnstock_code;}//返回股票代码
double&GetPrice(){returnPrice;}//返回股票价格,买卖之前判断现金是否足够
int&GetHangup(){returnnHangup;}//为1挂起,买卖之前判断是否能进行交易
int&GetVolume_available(){returnvolume_available;}//返回可交易总数,购买前判断输入的数据是否合理
voidSubStockModify(intnNum);//购买股票,市场该股可交易总数减少
voidAddStockModify(intnNum);//卖出股票,市场该股可交易总数增多
CStock*GetNext(){returnpNext;}//返回下一个结点的指针
~CStock(){cout<<"析构CStock类"< }; CStock: : CStock()//构造函数 {strcpy(stock_name,"");strcpy(stock_code,""); stock_volume=0;volume_available=0; nHangup=0;Price=0;pNext=0;} CStock: : CStock(char*code)//用股票代码初始化数据 {strcpy(stock_name,"");strcpy(stock_code,""); stock_volume=0;volume_available=0; nHangup=0;Price=0;pNext=0;} CStock: : CStock(char*name,char*code,intvolume,doubleprice)//初始化数据 {strcpy(stock_name,name);strcpy(stock_code,code); stock_volume=volume;volume_available=volume; nHangup=0;Price=price;pNext=0;} voidCStock: : SetStock(char*name,char*code,intvolume,doubleprice)//数据赋值 {strcpy(stock_name,name);strcpy(stock_code,code); stock_volume=volume;volume_available=volume; nHangup=0;Price=price;pNext=0;} voidCStock: : Show()//显示股票信息 {cout< : left); cout< cout< if(nHangup==1)cout<<"是"; elsecout<<"否"; cout< voidCStock: : SubStockModify(intnNum)//购买股票,市场该股可交易总数减少 {volume_available-=nNum; } voidCStock: : AddStockModify(intnNum)//卖出股票,市场该股可交易总数增多 {volume_available+=nNum;} classStocknode//股票结点类 {private: CStock*pdata;//指向股票数据类的指针 Stocknode*pnext;//指向股票结点类的指针 public: Stocknode(){pdata=0;pnext=0;};//构造函数 CStock*&Getpdata();//返回指向股票数据类的指针 Stocknode*&Getpnext();//返回指向股票结点类的指针 }; CStock*&Stocknode: : Getpdata()//返回指向股票数据类的指针 {returnpdata; } Stocknode*&Stocknode: : Getpnext()//返回指向股票结点类的指针 {returnpnext; } classStocklist//股票链表类 {private: Stocknode*phead;//指向股票结点类的指针,是股票链表的头指针。 intnumofstock;//记录市场中已存在的股票数量,最多5只。 public: Stocklist(){phead=0;numofstock=0;}//构造函数 ~Stocklist(){Deletelist();}//析构函数 Stocknode*&Getphead(){returnphead;}//返回股票链表的头指针 voidShowlist();//展示股票链表中的所有股票 voidInsert(Stocknode*pnode);//插入股票结点到股票链表中 voidAddnewstock();//添加新股票 Stocknode*Lookupdata(char*str);//查找股票,返回指向股票结点类的指针 voidDeleteoldstock();//删除已存在的股票 voidModifystock(intnChoice);//修改股票数据 voidDeletelist();//删除整个股票链表 intGetnumofstock(){returnnumofstock;} }; voidStocklist: : Insert(Stocknode*pnode)//插入股票结点到股票链表中 {if(head->Getphead()==0)//当股票链表的头指针为空,则把现在插入的结点的指针赋给头指针 {cout<<"该链表为空链表,现在插入第一个结点! "< pnode->Getpnext()=phead;phead=pnode;} elseif(strcmp(phead->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0)//链表中已有结点,把现在要插入的结点插入到链表开头 {pnode->Getpnext()=phead;phead=pnode;} else {Stocknode*p1,*p2;p1=p2=phead; while(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())<0&&p2->Getpnext()! =0)//和链表中的其他几点进行比较,直到找到合适的插入位置 {p1=p2;p2=p2->Getpnext();} if(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0)//找到适合的插入点后,插入到链表中 {p1->Getpnext()=pnode;pnode->Getpnext()=p2;} elseif(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())==0)//若股票代码与之前已存在股票代码重复,则插入不成功 {cout<<"该股票与之前的股票代码有重复! "<<"请重新操作! "< return;} else {p2->Getpnext()=pnode;//把结点插入到链表的尾部 pnode->Getpnext()=NULL;}} numofstock++; } voidStocklist: : Addnewstock()//添加新股票 {CStock*p;Stocknode*pnode; p=newCStock;longintstock_volume; charstock_name[20];charstock_code[6]; doubleprice;pnode=newStocknode;//动态开辟新的股票结点空间 cout<<"现在添加新股票,请输入该股票的数据: "< cout<<"请输入股票名称: "< cin.getline(stock_name,20);//输入股票名 Flush(cin);//清空过多输入 cout<<"请输入股票代码: "< cin.getline(stock_code,6);Flush(cin); cout<<"请输入股票总数: "< while(! cin)//用于解决当输入数据类型不符出现的错误 {cerr<<"输入数据类型不符,请输入数字! "< Flush(cin);cin>>stock_volume;} cout<<"请输入该股票价格: "< cin>>price;//输入股票价格 while(! cin)//用于解决当输入数据类型不符出现的错误 {cerr<<"输入数据类型不符,请输入数字! "< Flush(cin);cin>>stock_volume;} cin.ignore();//清丢弃输入缓冲区中的字符,以免影响后面的输入 cout<<"创建该股票中..."< p->SetStock(stock_name,stock_code,stock_volume,price);//数据赋值 pnode->Getpdata()=p;//把股票数据赋到结点中 Insert(pnode);//把刚创建的结点插入到链表中 } voidStocklist: : Showlist()//展示股票链表中的所有股票 {Stocknode*pnode; if(phead==0){cout<<"该链表为空链表! "< else {pnode=phead; while(pnode) {pnode->Getpdata()->Show(); pnode=pnode->Getpnext();} } } Stocknode*Stocklist: : Lookupdata(char*str)//查找股票 {Stocknode*pnode;pnode=phead; cout< cin.getline(code,6); Flush(cin); while(pnode->Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code)) {pnode=pnode->Getpnext();} if(strcmp(pnode->Getpdata()->GetCode(),code)==0) {returnpnode;} else return0; } voidStocklist: : Deleteoldstock()//删除已存在的股票 { Stocknode*pnode,*p;pnode=phead; cout<<"请输入你想删除的股票代码: "< charcode[6];cin.getline(code,6); Flush(cin); if(phead==0)//若链表为空,则结束该函数 {cout<<"该链表为空链表! "< return;} while(pnode->Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code))//若链表不为空,则在链表中查找该股票 {p=pnode; pnode=pnode->Getpnext();} if(strcmp(pnode->Getpdata()->GetCode(),code)==0) {cout<<"查找出的股票为: "< pnode->Getpdata()->Show(); charstr[30]; while (1) {do {cout<<"是否确定删除该股票(y/n)? "< cin.getline(str,30);} while((strcmp(str,"y")! =0)&&(strcmp(str,"Y")! =0)&&(strcmp(str,"n")! =0)&&(strcmp(str,"N")! =0)); if((strcmp(str,"y")==0)||(strcmp(str,"Y")==0)) {if(pnode==phead)//查找出的要删除的股票结点为链表的头结点 phead=phead->Getpnext(); else p->Getpnext()=pnode->Getpnext();//不为头结点的情况 deletepnode;numofstock--;//删除该节点,删除动态开辟的空间 cout<<"删除股票成功! "< return;} else return;}} else cout<<"数据中没有该股票! "< } voidStocklist: : Modifystock(intnChoice)//修改股票 {char*str="请输入你想修改的该股票的代码: "; Stocknode*pnode;system("cls"); if(phead==0)//若链表为空链表 {cout<<"该链表为空链表! "< system("pause");} else//若链表不为空 {pnode=head->Lookupdata(str);//首先查找出该股票 if(pnode)//如果要查找的股票存在 {cout<<"该股票为: "< pnode->Getpdata()->Show();//把查找出来要修改的股票展示出来 switch(nChoice) {case1: //更改股票名 {charname[20]; cout<<"你想把股票名称更改成: "; cin.getline(name,20); Flush(cin); strcpy(pnode->Getpdata()->GetName(),name); break;} case2: //更改股票代码 {charcode[6]; cout<<"你想把股票代码更改成: "; cin.getline(code,6);Flush(cin); strcpy(pnode->Getpdata()->GetCode(),code); break;} } cout< "< pnode->Getpdata()->Show();system("pause");} else//要修改的股票在链表中不存在 {cout<<"链表中没有该股票! "< system("pause");} } } voidStocklist: : Deletelist()//删除链表 {if(phead==0)cout<<"该列表为空列表! "< else//若不为空则把节点从链表头结点开始逐个删除 {Stocknode*pnode;pnode=phead; while(pnode) {phead=phead->Getpnext(); deletepnode;pnode=phead;} }} voidInterface();//声明函数: 初始界面 voidManagementface();//声明函数: 股票管理界面 voidRegister();//声明函数: 注册 intLogin();//声明函数: 登录 voidreaddata()//从二进制文件中读入数据 {ifstreaminfile("Stock_File.dat",ios: : binary|ios: : nocreate); if(! infile)//若要读取的二进制文件不存在 {cout<<"要读取的\"Stock_File.dat\"文件不存在! "< cout<<"请确认该文件! "< cout<<"现在退出程序..."< exit(0);} Stocknode*p1;CStock*p2; while(! infile.eof())//若未到二进制文件结尾则继续把数据读进临时股票链表中 {p1=newStocknode;p2=newCStock; infile.read((char*)p2,sizeof(CStock)); if(p2->GetPrice()==0) break; p1->Getpdata()=p2;head->Insert(p1);} infile.close(); } voidwritedata()//把临时股票链表中数据写入到二进制文件 {Stocknode*pnode;pnode=head->Getphead(); ofstreamoutfile("Stock_File.dat",ios: : binary|ios: : out); while(pnode)//若未到股票链表结尾,则继续把链表中的数据写入到二进制文件中 {outfile.write((char*)pnode->Getpdata(),sizeof(CStock)); pnode=pnode->Getpnext();} outfile.close(); } voidmanagementchoice(intnChoice)//股票管理界面选项判断函数 {switch(nChoice) {case1: //添加新股票 {head->Addnewstock();//添加股票 system("pause");charstr[30]; while (1) {do {system("cls"); cout<<"是否继续添加? (y/n)"< cin.getline(str,30);} while((strcmp(str,"y")! =0)&&(strcmp(str,"Y")! =0)&&(strcmp(str,"n")! =0)&&(strcmp(str,"N")! =0)); if((strcmp(str,"y")==0)||(strcmp(str,"Y")==0)) {head->Addnewstock();//添加股票 system("pause");} else return;}} case2: //删
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 股票交易 系统 代码 大全