📄 exchange.cpp
字号:
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include "Stock.h"
#include "GuestStock.h"
#include "Guest.h"
#include "Link.h"
#include "#Define.h"
#include "Other.h"
#include "Show.h"
//for Buy
int SearchByStockCode(long stockCode, Stock stockObj[])
{
int i;
for (i=0; i<10; i++)
{
if (stockObj[i].GetStkCode() == stockCode)
{
return i;
}
}
return -1;
}
//for Sell
int SearchByStockCode(long stockCode, Guest &guestObj)
{
int i;
for (i=0; i<10; i++)
{
if (guestObj.GetGsObj()[i].GetStkCode() == stockCode)
{
return i;
}
}
return -1;
}
void Buy(Stock stockObj[], Guest guestObj[], Stock stockObjOri[], int n, Link *head[]) //n:当前用户
{
int flag = 1;
int m; //买很多支股票
char choice;
long stockNum, stockCode;
do{
//m++;
cout<<"请输入您要买的股票的名字和数量(以空格分开):"<<endl;
//cout<<"
cin>>stockCode>>stockNum;
if (stockNum > 0 && stockNum % 100 == 0)
{
int i=SearchByStockCode(stockCode, stockObj);
if (i == -1)
{
/*
cout<<"无此股票,继续吗?y/n"<<endl;
choice = getche();
if (choice == 'n')
{
flag = 0;
}
*/
cout<<"无此股票";
}
else
{
for (int l=0; l<10; l++)
{
if (guestObj[n].GetGsObj()[l].GetStkCode() == stockObj[i].GetStkCode()
|| guestObj[n].GetGsObj()[l].GetStkCode() == 0)
{
m = l;
break;
}
}
if (stockObj[i].GetStkIss() < stockNum)
{
cout<<"没有足够的股票供你购买。";
}
else if (guestObj[n].GetGuestBalance() - stockObj[i].GetStkPrice() * stockNum < 0)
{
cout<<"您的余额不足以买入这些股票。";
}
else
{
guestObj[n].GetGuestBalance() -= stockObj[i].GetStkPrice() * stockNum;
guestObj[n].GetGsObj()[m].GetBuyNum() += stockNum;
guestObj[n].GetGsObj()[m].GetBuyPrice() = stockObj[i].GetStkPrice();
guestObj[n].GetGsObj()[m].GetStkCode() = stockObj[i].GetStkCode();
strcpy(guestObj[n].GetGsObj()[m].GetStkName(), stockObj[i].GetStkName());
stockObj[i].GetStkPrice() *= (1 + RATE_UP * stockNum / stockObjOri[i].GetStkIss());
guestObj[n].GetGsObj()[m].GetStkRange() = stockObj[i].GetStkPrice() / guestObj[n].GetGsObj()[m].GetBuyPrice() * 100 - 100;
guestObj[n].GetGsObj()[m].GetStkPrice() = stockObj[i].GetStkPrice();
stockObj[i].GetStkIss() = stockObj[i].GetStkIss() - stockNum;
guestObj[n].GetGsObj()[m].GetStkIss() = stockObj[i].GetStkIss();
stockObj[i].GetStkRange() = stockObj[i].GetStkPrice() / stockObjOri[i].GetStkPrice() * 100 - 100;
//guestObj[n].GetGsObj()[m].GetStkRange() = stockObj[i].GetStkPrice() / guestObj[n].GetGsObj()[m].GetBuyPrice() -1; //应放在前面
for (int k=0; k<5; k++)
{
for (int j=0; j<10; j++)
{
if (!guestObj[k].GetGsObj()[j].GetStkCode())
{
break;
}
if (guestObj[k].GetGsObj()[j].GetStkCode() == stockObj[i].GetStkCode())
{
guestObj[k].GetGsObj()[j].GetStkPrice() = stockObj[i].GetStkPrice();
guestObj[k].GetGuestTotal() -= guestObj[k].GetGsObj()[j].GetBuyNum() * guestObj[k].GetGsObj()[j].GetBuyPrice();
guestObj[k].GetGuestTotal() += guestObj[k].GetGsObj()[j].GetBuyNum() * stockObj[i].GetStkPrice();
guestObj[k].GetGsObj()[j].GetStkRange() = stockObj[i].GetStkPrice() / guestObj[k].GetGsObj()[j].GetBuyPrice() * 100 - 100;
guestObj[k].GetGsObj()[j].GetStkIss() = stockObj[i].GetStkIss();
break;
}
}
}
Update(guestObj[n]);
Update(stockObj[i]);
AddHistory(head[i], stockObj[i]);
system("cls");
ShowAllStock(stockObj);
cout<<endl;
guestObj[n].ShowGuest();
cout<<"买入成功!";
/*
cout<<"继续购买股票吗?y/n"<<endl;
choice = getche();
if (choice == 'n')
{
flag = 0;
}
system("cls");
guestObj[n].ShowGuest();
*/
}
}
}
else if (stockNum % 100 != 0)
{
cout<<"您买入的股票数必须是100的整数倍";
}
else if (stockNum == 0)
{
cout<<"您买了0股.";
}
else if (stockNum < 0)
{
cout<<"股票数量不能为负";
}
cout<<"继续购买股票吗?y/n"<<endl;
choice = getche();
if (choice == 'n')
{
flag = 0;
}
}while(flag);
}
void Sell(Stock stockObj[], Guest guestObj[], Stock stockObjOri[], int n, Link *head[]) //n:当前用户
{
int flag = 1;
//int m; //买很多支股票
char choice;
long sellNum, stockCode;
do{
cout<<"请输入您要卖出的股票的代码和数量(以空格分开):"<<endl;
cin>>stockCode>>sellNum;
int i = SearchByStockCode(stockCode, guestObj[n]);
int m = SearchByStockCode(stockCode, stockObj);
if (i == -1)
{
/*
cout<<"您未购买过此股票,继续吗?y/n"<<endl;
choice = getche();
if (choice == 'n')
{
flag = 0;
}
*/
cout<<"您未购买过此股票";
}
else if (sellNum > guestObj[n].GetGsObj()[i].GetBuyNum())
{
cout<<"卖的股数不能大于买的股数.";
}
else
{
if (sellNum == guestObj[n].GetGsObj()[i].GetBuyNum()) //将数组向前移,以后应考虑链表
{
GuestStock nullObj;
guestObj[n].GetGsObj()[i] = nullObj;
for (int y=i+1; ; y++)
{
guestObj[n].GetGsObj()[y-1] = guestObj[n].GetGsObj()[y];
if (guestObj[n].GetGsObj()[y].GetStkCode() == 0)
{
break;
}
}
}
else
{
guestObj[n].GetGsObj()[i].GetBuyNum() -= sellNum;
guestObj[n].GetGsObj()[i].GetStkRange() = stockObj[m].GetStkPrice() / guestObj[n].GetGsObj()[i].GetBuyPrice() * 100- 100;
guestObj[n].GetGsObj()[i].GetStkPrice() = stockObj[m].GetStkPrice();
guestObj[n].GetGsObj()[i].GetStkIss() = stockObj[i].GetStkIss();
}
guestObj[n].GetGuestBalance() += stockObj[m].GetStkPrice() * sellNum;
//guestObj[n].GetGsObj()[m].GetBuyPrice() = stockObj[i].GetStkPrice();
//guestObj[n].GetGsObj()[m].GetStkCode() = stockObj[i].GetStkCode();
//strcpy(guestObj[n].GetGsObj()[m].GetStkName(), stockObj[i].GetStkName());
stockObj[m].GetStkPrice() /= (1 + RATE_DOWN * sellNum/stockObjOri[m].GetStkIss());
stockObj[m].GetStkIss() = stockObj[m].GetStkIss() + sellNum;
stockObj[m].GetStkRange() = stockObj[m].GetStkPrice() / stockObjOri[m].GetStkPrice() * 100 - 100;
//guestObj[n].GetGsObj()[m].GetStkRange() = stockObj[i].GetStkPrice() / guestObj[n].GetGsObj()[m].GetBuyPrice() -1;
for (int k=0; k<5; k++)
{
for (int j=0; j<10; j++)
{
if (!guestObj[k].GetGsObj()[j].GetStkCode())
{
break;
}
if (guestObj[k].GetGsObj()[j].GetStkCode() == stockObj[m].GetStkCode())
{
guestObj[k].GetGsObj()[j].GetStkPrice() = stockObj[m].GetStkPrice();
guestObj[k].GetGuestTotal() -= sellNum * guestObj[k].GetGsObj()[j].GetBuyPrice();
guestObj[k].GetGuestTotal() += sellNum * stockObj[m].GetStkPrice();
guestObj[k].GetGsObj()[j].GetStkRange() = stockObj[m].GetStkPrice() / guestObj[k].GetGsObj()[j].GetBuyPrice() * 100 - 100;
guestObj[k].GetGsObj()[j].GetStkIss() = stockObj[m].GetStkIss();
break;
}
}
}
Update(guestObj[n]);
Update(stockObj[m]);
AddHistory(head[i], stockObj[m]);
system("cls");
guestObj[n].ShowGuest();
cout<<"卖出成功!"<<endl;
}
cout<<"继续卖出股票吗?y/n"<<endl;
choice = getche();
if (choice == 'n')
{
flag = 0;
}
}while(flag);
}
void DepositMoney(Guest &guestObj)
{
int flag = 1;
long money_long;
double money_double;
do{
system("cls");
guestObj.ShowGuestTable();
guestObj.ShowGuestInfo();
cout<<"请输入您要存入的资金数量(100的整数倍)"<<endl;
cin>>money_double;
money_long = (long)money_double;
if (money_long >= 0 && money_long % 100 == 0 && (money_double - money_long) <= 1e-3)
{
guestObj.GetGuestTotal() += money_long;
guestObj.GetGuestBalance() += money_long;
cout<<"成功存入"<<money_long<<"元钱."<<endl;
}
else
{
cout<<"您的输入有误。"<<endl;
}
cout<<"继续存钱吗?y/n"<<endl;
if (getch() == 'n')
{
flag = 0;
}
}while (flag);
Update(guestObj);
}
void DrawMoney(Guest &guestObj)
{
int flag = 1;
long money_long;
double money_double;
do{
system("cls");
guestObj.ShowGuestTable();
guestObj.ShowGuestInfo();
cout<<"请输入您要支取的资金数量(100的整数倍)"<<endl;
cin>>money_double;
money_long = (long)money_double;
if (money_long >= 0 && money_long % 100 == 0 && (money_double - money_long) <= 1e-3)
{
guestObj.GetGuestTotal() -= money_long;
guestObj.GetGuestBalance() -= money_long;
cout<<"成功支取"<<money_long<<"元钱."<<endl;
}
else
{
cout<<"您的输入有误。"<<endl;
}
cout<<"继续取钱吗?y/n"<<endl;
if (getch() == 'n')
{
flag = 0;
}
Update(guestObj);
}while (flag);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -