⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exchange.cpp

📁 课程设计做的个人股票管理系统
💻 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 + -