股票交易系统.docx
《股票交易系统.docx》由会员分享,可在线阅读,更多相关《股票交易系统.docx(33页珍藏版)》请在冰豆网上搜索。
![股票交易系统.docx](https://file1.bdocx.com/fileroot1/2022-12/10/a4433970-0822-4cf7-80cb-e8af2e0ea76e/a4433970-0822-4cf7-80cb-e8af2e0ea76e1.gif)
股票交易系统
VC++课程设计-股票交易系统
设计程序名称:
股票交易系统
难易级别:
A级
选择这个程序,我主要考虑到以下方面的原因:
1.本程序难度较大,在编写程序的过程当中可以更加深刻地理解VC++当中的相关知识点,可以更好地通过实践了解编程的内涵。
2.该课题所涉及到的内容和实际生活联系比较紧密,所以编写此程序意义较大。
3.该课题是管理系统方面的小型程序,这类程序可以不断地扩充新的内容新的功能,可塑性高,实用性好,有很好的实际意义。
程序设计要求:
本程序要求改变数据结构,每个用户的数据库中要增加现金数成员。
要求增加股票交易系统的接口设计:
a.AddNewStock()增加新的股票;b.DeleteOldStock()删除旧的股票;c.HangUpStock()挂起股票,停止交易;d.ModifyStock(Stock[])修改股票的名称代码。
要求的以上的修改都要输入密码,在输入正确的密码之后才能够进入数据库进行修改。
将股票数据的处理由数组变成链表,可以处理多只股票的交易,链表一交易代码的序号进行排序。
程序功能介绍:
股票交易系统是一个小型的管理程序,在这个系统里,可以管理至多5只股票的交易。
首先用户要注册,注册完后方可登陆。
在登陆的界面中,管理员登陆后可以删减股票,挂起股票,解挂股票等等,通过这些功能来管理股票。
同时,用户还可以查看股票情况,帮助自己进行股票的有效交易。
股票的市场情况可根据用户的使用情况而随之变化。
程序完成过程:
1、粗读程序
第一遍看程序时,发现程序太长了,只是对整个程序有一个大致的了解。
程序的主要功能是实现用户对股票操作系统的自主可视操作,本完成用户和股票数据的存储,实现反复操作。
程序主要通过类来完成功能,涉及到数组及输入输出流的使用。
在主函数中调用类中方法,实现页面中的转换,对数据进行处理。
一开始有一点畏难情绪。
2、细读程序
以下对程序中类及其函数进行分析
Stock类:
存放股票数据,类中方法对股票进行各项操作。
VoidHangUpStock();//挂起股票
voidUnHangStock();//解挂股票
voidModifyStock(Stock[]);//修改股票
voidDeleteStock();//删除股票
voidInterface();//选择面板
voidStockExchangeMarket();//显示信息
voidSwitchchoice();//选择服务
voidInputForNewStock();//加入新股票
voidMarketAnalysis();//市场分析
voidSave(Stock[]);//保存修改
Customer类:
存放用户信息,类中方法对用户进行各项操作。
Customer();//对用户初始化
voidLogin(char*,char*,Customer)const;//登录
voidRegister(Customer*);//注册
voidStockPortfolio(Customer)const;//Portfolio--有价证券
程序功能为对用户的指令进行处理,模拟股市的操作,完成对股票和对用户的修改及存档。
在认清设计方向的基础上,反复细读程序,我分析了Stock和Customer类下数据与成员函数的功能。
程序反复声明了Stock和Customer类的同一对象,浪费了系统资源;在一些函数调用中也存在缺陷,比如存在Input_For_New_Stock()方法,但是只有在第一次使用是才会调用,Customer类中原有Switch_function()也没有调用。
在用户选择登录时,无法辨别用户名,只根据密码进行登录,当遇到密码相同的用户时,就分不清楚用户。
密码是显示输入的不能有效的受到保护。
由于这是个小程序,数据通过数组存储,而不是通过指针,这使程序方便易懂,但限制了数据的空间,无法达到指针链表所能实现的不定长度存储。
但是从现阶段的使用来看指针链表的形式过于麻烦反而会造成程序过度的复杂。
现对系统进行操作分析:
首先进入界面,进行用户识别,在这里用户可以查看市场信息、注册新用户、登录用户和分析股票。
然后若登录,显示下一股票操作界面,选其他有相应操作。
在股票操作界面中,有买入、卖出、添加新股票、挂出股票,恢复交易、删除已有股、挂起股票,停止交易、修改代码及名称、查看等操作选择,用户可根据提示,完成相应操作。
其中添加新股票、挂出股票,恢复交易、删除已有股、挂起股票,停止交易、修改代码及名称操作只对管理员开放。
3、修改程序
首先,将重复声明的Stock和Customer类对象删除,使用Stock类的全局对象temp和share[MAX]及Customer类的全局对象cust来实现数据的反复读取和存储,并修改因此引起的变动(如将Customer类中的charshareholdingname[30]改为charshareholdingname[5][30];charshareholdingcode[5]改为charshareholdingcode[5][5]等)。
在类中方法中涉及到查询处添加打印股票清单细明项目:
(for(i=0;i{
share[i].StockExchange_Market();
}
)。
修改已存在的InputForNewStock(),使其可在空位置存储新股票信息。
对于新的函数的增加完成情况:
新增加的函数
完成的情况
Input_For_New_Stock()——添加新股票
先对股票数据进行读取,显示股票信息,提示输入股票代码,考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我对程序加入了一些代码,从而解决这些异常。
然后调用Input_For_New_Stock(),提示输入股票的名称、代码、流通股数量、发行价,同时随机生成股票上市价。
最后,在Stock_File.dat的空位置插入存储新股票信息。
Delete_Stock()——删除旧股票
先对股票数据进行读取,显示股票信息。
然后调用Delete_Stock(),提示输入要删除的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
Hang_Up_Stock()——挂起股票,停止交易
先对股票数据进行读取,显示股票信息。
然后调用Hang_Up_Stock(),提示输入要挂起的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
Modify_Stock()——修改股票的名称、代码
先对股票数据进行读取,显示股票信息。
然后调用Modify_Stock(),提示输入要修改的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
修改后的结果存入Stock_File.dat。
通过stock成员函数Save()来实现此要求。
程序创新:
1.在程序设计要求外我添加了Un_Hang_Stock()——解挂股票,恢复交易。
先对股票数据进行读取,显示股票信息。
然后调用Un_Hang_Stock(),提示输入要解挂的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
2.加入股票发行价、上市价和帐户总资产、余额、市值等数据,并进行计算、输出等操作,加强系统功能,使系统更实用、逼真。
程序调试分析:
用户类为股票类的友元类实现对股票类的调用
用户类
登陆函数
1.是否有记录
2.核对用户,密码
注册函数
1输入用户名
2输入密码
3是否设置为管理员
用户交易主界面函数
实现与股票类中的管理函数相连接
股票类
主界面函数(进入交易系统)
显示信息
股票操作函数
1买入2买出
3添加新股票4挂出股票恢复交易5删除股票6挂起股票
7修改代码名称8查看
9退出
保存股票信息函数
实现对股票文件的保存
程序先进行用户注册才能够进入用户交易的主界面,在主菜单下只能看到股票信息不能操作买卖。
登陆后方能实现对股票的操作,进一步如果是管理员可以修改股票信息改变股票交易状态。
总结(编程心得):
通过本课题,我复习了类和数组,更好的掌握了类间函数调用的关系以及如何实现类间复杂的相关调用。
同时,我学习了输入输出流的使用,懂得了如何从特定的地址读取数据,如何正确将信息存储到特定的位置。
此外,在调试的过程中我还碰到了一些问题,运行时经常出现一些意料之外的输出或无法输出预想的结果,症结在于没有合理的使用break、getch()、cin.get()等一些编程课本上未学过的函数。
最后,通过翻阅资料与上机实践终于解决了这些问题。
通过阅读本课题的程序,我掌握了一些阅读程序的技巧,培养了认真阅读程序的好习惯,并能够从较长的程序中找到程序的核心实现部分。
此次课程设计让我借此契机加深领悟了C++的内涵,让我对编程有了实质性的了解和大致掌握,在不断思考与上机调试的过程中,培养自己的耐心,也培养了自己的意志。
最终,终于完成了课程设计的任务。
关键源代码及注解(修改后的代码用下划线标示)
/*股票交易系统--源代码及关键源代码注解如下:
*/
#include
#include
#include
#include
#include
#include
#include
#defineMAX5
inti=0,j=0,Hang,flag;
intnum_of_stock;
intgushu;
classCustomer;
classStock
{
private:
floatfaxing,shangshi;//股票发行价,上市价
charstock_name[20];//股票名称
charstock_code[6];//股票代码
charchoice;//Interface()下选择
inthang;//是否挂起(1为是,0为否)
longintstock_volume;//股票总股数
longintvolume_available;//股票可流通量
public:
Stock();
voidHang_Up_Stock();//挂起股票
voidUn_Hang_Stock();//解挂股票
voidModify_Stock(Stock[]);//修改股票
voidDelete_Stock();//删除股票
voidInterface();//选择面板
voidStock_Exchange_Market();//显示信息
voidSwitch_choice();//选择服务
voidInput_For_New_Stock();//加入新股票
voidMarket_Analysis();//市场分析
voidSave(Stock[]);//保存修改
friendclassCustomer;
};
classCustomer
{
friendclassStock;
private:
intgly;//是否管理员
charcustomer_name[30];//用户名
charpassword[10];//密码
charshare_holding_name[5][30];//持有股票名称
charshare_holding_code[5][5];//持有股票代码
longintshare_holding_value[5];//持有股票数量
doublemoney,shzh,zzch;//现金余额,市值,总资产
public:
Customer();
voidLog_in(char*)const;//登录
voidRegister(Customer*);//注册
voidStock_Portfolio()const;//Portfolio--有价证券
};
Stocktemp,share[MAX];//全局变量,声明股票对象
Customercust;//声明用户对象,全局变量
//Customer构造
Customer:
:
Customer()
{
strcpy(Customer:
:
customer_name,"");
for(i=0;i{
strcpy(Customer:
:
share_holding_name[i],"");
strcpy(Customer:
:
share_holding_code[i],"");
share_holding_value[i]=0;
money=shzh=zzch=0;
}
}
voidCustomer:
:
Log_in(char*pass_word)const
{
if(strcmp(pass_word,password)==0)//核对密码
Stock_Portfolio();
else
{
cout<cout<<"密码错误..."<}
}
voidCustomer:
:
Register(Customer*cust)
{
charch;
system("cls");//执行系统命令:
清屏=cls
cin.get();
cout<<"欢迎进入*************股票交易系统***********"<cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<cout<<"输入用户名:
";
cin.getline(customer_name,30);
cout<<"输入您的密码(少于8字):
"<{
charch;
inti=0;
cout.flush();
ch=getch();
while(ch!
=13)
{
password[i++]=ch;
cout<<'*';
cout.flush();
ch=getch();
}
password[i]=0;
}
cout<cout<<"输入您的资金:
";
cin>>zzch;
shzh=0;
money=zzch;
cout<<"是否设为管理员?
(y/n)"<cin>>ch;
if(ch=='y'||ch=='Y')
{
gly=1;
cout<<"已设置...";
}
elseif(ch=='n'||ch=='N')
gly=0;
else
cout<<"默认为非管理员...";
getch();
system("cls");
cout<cout<<"注册成功..."<cout<<"按任意键返回..."<getch();
}
voidCustomer:
:
Stock_Portfolio()const//用户交易操作系统
{
inti,a;
charch,share_code[6],str[20];
longintvolume;
start:
system("cls");
cout<cout<<"\t\t\t欢迎使用!
!
!
!
!
"<cout<<"\t\t*************股票交易系统***********"<cout<<"\t\t-----------------------------------------"<cout<<"\t\t用户:
"<cout<<"\t\t买入..........................[1]"<cout<<"\t\t卖出..........................[2]"<cout<<"\t\t添加新股票....................[3]"<cout<<"\t\t挂出股票,恢复交易.............[4]"<cout<<"\t\t删除已有股....................[5]"<cout<<"\t\t挂起股票,停止交易.............[6]"<cout<<"\t\t修改代码及名称................[7]"<cout<<"\t\t查看..........................[8]"<cout<<"\t\t退出..........................[0]"<cout<";
cin>>ch;
if((ch!
='1')&&(ch!
='2')&&(ch!
='3')&&(ch!
='4')&&(ch!
='5')&&(ch!
='6')&&(ch!
='7')
&&(ch!
='8')&&(ch!
='0'))
gotostart;
else
{
switch(ch)
{
case'3':
{//加入新股票
if(cust.gly==1)
{
for(i=0;i{
if(strcmp(share[i].stock_name,"")==0)//在股票数据空处添加新的内容
{
share[i].Input_For_New_Stock();
temp.Save(share);//写数据
getch();
gotostart;
}
}
}
else
{
cout<<"您无权添加股票!
"<getch();
break;
}
}
case'5':
{//删除股票
if(cust.gly==1)
{
system("cls");
cout<<"\n\n\t\t*************股票交易系统**********"<cout<<"\t\t-----------------------------------------"<cout<<"公司\t\t代码\t流通股\t可动股\t发行价\t上市价"<for(i=0;i{
share[i].Stock_Exchange_Market();
}
cin.get();
temp.Delete_Stock();
cin.get();
break;
}
else
{
cout<<"您无权删除股票!
"<getch();
break;
}
}
case'4':
{//解挂股票
if(cust.gly==1)
{
system("cls");
cout<<"\n\n\t\t***********股票交易系统***********"<cout<<"\t\t-----------------------------------------"<cout<<"公司\t\t代码\t流通股\t可动股\t发行价\t上市价"<for(i=0;i{
share[i].Stock_Exchange_Market();
}
cin.get();
temp.Un_Hang_Stock();
break;
}
else
{
cout<<"您无权恢复股票!
"<getch();
break;
}
}
case'6':
{//挂起股票
if(cust.gly==1)
{
system("cls");
cout<<"\n\n\t\t***********股票交易系统***********"<cout<<"\t\t-------------------------------------------"<cout<<"公司\t\t代码\t流通股\t可动股\t发行价\t上市价"<for(i=0;i{
share[i].Stock_Exchange_Market();
}
cin.get();
temp.Hang_Up_Stock();//进行
break;
}
else
{
cout<<"您无权挂起股票!
"<getch();
break;
}
}
case'7':
{//修改股票
if(cust.gly==1)
{
system("cls");
cout<<"\n\n\t\t************股票交易系统**********"<cout<<"\t\t------------------------------------------"<cout<<"公司\t\t代码\t流通股\t可动股\t发行价\t上市价"<for(i=0;i{
share[i].Stock_Exchange_Market();
}
cin.get();
temp.Modify_Stock(share);
break;
}
else
{
cout<<"您无权挂起股票!
"<getch();
break;
}