股票交易系统代码大全.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<<"请输入股票总数:
"<>stock_volume;
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:
//删