}
void CStock::AddStockModify(int nNum)
{
volume_available+=nNum; }
//卖出股票,市场该股可交易总数增多
class Stocknode
{ private:
//股票结点类
CStock *pdata;
Stocknode *pnext;
//指向股票数据类的指针
//指向股票结点类的指针
public:
Stocknode(){pdata=0;pnext=0;};
CStock *&Getpdata();
Stocknode *&Getpnext();
//返回指向股票数据类的指针
//返回指向股票结点类的指针
//构造函数
};
CStock *&Stocknode::Getpdata()
{
return pdata;
}
Stocknode *&Stocknode::Getpnext()
{
return pnext;
}
//返回指向股票数据类的指针
//返回指向股票结点类的指针
//股票链表类
class Stocklist
{ private: Stocknode *phead;
int numofstock;
public:
//指向股票结点类的指针,是股票链表的头指针。
//记录市场中已存在的股票数量,最多 5 只。
//返回股票链表的头指针
//展示股票链表中的所有股票
//插入股票结点到股票链表中
//构造函数
//析构函数
Stocklist(){phead=0;numofstock=0;}
~Stocklist(){Deletelist();}
Stocknode *&Getphead(){return phead;}
void Showlist();
void Insert(Stocknode *pnode);
void Addnewstock();
Stocknode *Lookupdata(char *str);
void Deleteoldstock();
void Modifystock(int nChoice);
void Deletelist();
int Getnumofstock(){return numofstock;}
//添加新股票
//删除已存在的股票
//修改股票数据
//删除整个股票链表
//查找股票,返回指向股票结点类的指针
};
void Stocklist::Insert(Stocknode *pnode)
{
给头指针
if(head->Getphead()==0)
//插入股票结点到股票链表中
//当股票链表的头指针为空,则把现在插入的结点的指针赋
{
cout<<"该链表为空链表,现在插入第一个结点!"<Getpnext()=phead;phead=pnode;
}
else if(strcmp(phead->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0)
//链表
中已有结点,把现在要插入的结点插入到链表开头
{
else
{
pnode->Getpnext()=phead;
phead=pnode;
}
Stocknode *p1,*p2; p1=p2=phead;
while(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())<0&&p2->Getpnext()!
=0)
//和链表中的其他几点进行比较,直到找到合适的插入位置
{
if(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0)
p1=p2;p2=p2->Getpnext(); }
// 找 到
适合的插入点后,插入到链表中
{
else if(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())==0)
p1->Getpnext()=pnode;pnode->Getpnext()=p2;
}
//若
股票代码与之前已存在股票代码重复,则插入不成功
{
else
{
cout<<"该股票与之前的股票代码有重复!"<<"请重新操作!"<
Getpnext()=pnode;
pnode->Getpnext()=NULL;
//把结点插入到链表的尾部
}
}
numofstock++;
}
//动态开辟新的股票结点空间
void Stocklist::Addnewstock()
{
//添加新股票
CStock *p;Stocknode *pnode;
p=new CStock;long int stock_volume;
char stock_name[20]; char stock_code[6];
double price; pnode=new Stocknode;
cout<<"现在添加新股票,请输入该股票的数据:"<>stock_volume;
}
//输入股票名
//清空过多输入
cin>>stock_volume;
//用于解决当输入数据类型不符出现的错误
cout<<"请输入该股票价格:"<>price;
while(!cin)
{
//输入股票价格
//用于解决当输入数据类型不符出现的错误
cerr<<"输入数据类型不符,请输入数字!"<>stock_volume;
}
cin.ignore();
cout<<"创建该股票中..."<p->SetStock(stock_name,stock_code,stock_volume,price);
pnode->Getpdata()=p;
//把股票数据赋到结点中
Insert(pnode);
//把刚创建的结点插入到链表中
//数据赋值
}
//展示股票链表中的所有股票
void Stocklist::Showlist()
{
Stocknode *pnode;
if(phead==0) { cout<<"该链表为空链表!"<Getpdata()->Show();
pnode=pnode->Getpnext(); }
}
}
Stocknode *Stocklist::Lookupdata(char *str)
{
//查找股票
Stocknode *pnode; pnode=phead;
cout<Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code))
{
if(strcmp(pnode->Getpdata()->GetCode(),code)==0)
{
else
pnode=pnode->Getpnext();
return pnode; }
}
return 0;
}
void Stocklist::Deleteoldstock()
{
//删除已存在的股票
pnode=phead;
Stocknode *pnode,*p;
cout<<"请输入你想删除的股票代码:"<Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code))
cout<<"该链表为空链表!"<Getpnext();
}
if(strcmp(pnode->Getpdata()->GetCode(),code)==0)
{
cout<<"查找出的股票为:"<Getpdata()->Show();
char str[30];
while(1)
do
{
{
cout<<"是否确定删除该股票(y/n)?"<Getpnext();
else
p->Getpnext()=pnode->Getpnext();
//不为头结点的情况
delete pnode; numofstock--;
//删除该节点,删除动态开辟的空间
cout<<"删除股票成功!"<Lookupdata(str);
//首先查找出该股票
//如果要查找的股票存在
cout<<"该股票为:"<Getpdata()->Show();
switch(nChoice)
case 1:
{
//更改股票名
{
char name[20];
cout<<"你想把股票名称更改成:";
cin.getline(name,20);
Flush(cin);
strcpy(pnode->Getpdata()->GetName(),name);
break;
}
case 2:
{
//更改股票代码
char code[6];
cout<<"你想把股票代码更改成:";
cin.getline(code,6);Flush(cin);
strcpy(pnode->Getpdata()->GetCode(),code);
break;
}
}
cout<Getpdata()->Show();system("pause");
}
else
{
//要修改的股票在链表中不存在
cout<<"链表中没有该股票!"<Getpnext();
delete pnode; pnode=phead; }
} }
void Interface();
void Managementface();
void Register();
int Login();
//声明函数:初始界面
//声明函数:股票管理界面
//声明函数:注册
//声明函数:登录
void readdata()
{
//从二进制文件中读入数据
ifstream infile("Stock_File.dat",ios::binary|ios::nocreate);
if(!infile)
{
//若要读取的二进制文件不存在
cout<<"要读取的\"Stock_File.dat\"文件不存在!"<GetPrice()==0)
break;
p1->Getpdata()=p2;
head->Insert(p1);
}
infile.close();
}
void writedata()
{
//把临时股票链表中数据写入到二进制文件
Stocknode *pnode;pnode=head->Getphead();
ofstream outfile("Stock_File.dat",ios::binary|ios::out);
while(pnode)
{
//若未到股票链表结尾,则继续把链表中的数据写入到二进制文件中
outfile.write((char*)pnode->Getpdata(),sizeof(CStock));
//股票管理界面选项判断函数
pnode=pnode->Getpnext();
}
outfile.close();
}
void managementchoice(int nChoice)
{
switch(nChoice)
{
case 1:
{
//添加股票
//添加新股票
head->Addnewstock();
system("pause");char str[30];
while(1)
{ do
{
system("cls");
cout<<"是否继续添加?(y/n)"<Addnewstock();
}
system("pause");
else
return; } }
}
//删除市场中已存在的股票
head->Deleteoldstock();
system("pause"); break;
//进入股票修改菜单
int flag=1;int nChoice;
char str1[30];
while(1)
{
system("cls");
cout<<"欢迎进入修改菜单!"<