还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
股票信息系统数学与计算机科学学院计算机科学与技术专业(师范班)105022005144***指导教师:**【摘 要】 股票信息系统主要是以股民作为使用对象而开发的其系统开发的任务主要包括数据库的设计与维护、客户端应用程序的开发等两个方面对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据安全性如用户需要密码才能使用等,而对于后者则要求程序界面友好、功能完备等特点经过分析,本系统选用Microsoft公司的VisualC++
6.0作为前端开发工具,利用其提供的集成开发环境及各种控件来达到对股票信息进行管理(主要包括增加、删除、查询、分析)的目的【关键词】股票信息系统、VisualC++
6.
0、管理、实现、程序设计StockInformationSystemZhangSheng-ying105022005144Advisor SongKaoMajorinComputerScienceandTechnologyCollegeofMathematicsandComputerScience【Abstract】StockInformationSystemismainlyusedbyinvestorsasthedevelopmentoftargeted.Itsmaintaskofsystemdevelopmentincludestwoaspectsofthedevelopmentsuchasdatabasedesignandmaintenancethedevelopmentofclientapplication.Fortheformerrequirementtoestablishadatabasewiththeintegrityandconsistencyandhasacertainamountofdatasecuritysuchastheuserneedsapasswordtouse.Requirementsforthelatterfriendlyprograminterface completefunctionetc.AfteranalysisthesystemchosenMicrosoftsVisualC++
6.0asthefront-enddevelopmenttoolstheuseofitsintegrateddevelopmentenvironmentandavarietyofcontrolstoachieveinformationonthestockmanagementincludingadddeletequeryanalysisofpurpose.【Keywords】StockInformationSystem、VisualC++
6.
0、Management、Achieve、Programming1.引言随着市场经济的不断发展,国家经济实力的不断提升和全民经商热潮的不断出现,股票作为股份有限公司在筹集资本时向出资人发行的股份凭证,也越来越多地飞入了寻常百姓家在我们周围的人中,就有很多人在炒股股票成为了投资的一个好途径,但正如许多股评栏目所说的那样,股市有风险,入市需谨慎很多人靠股票发了家,也有很多人因为它而失去了很多东西股市的跌宕起伏在近两年表现的尤为明显股市的波动,给人世间带来了多少的悲喜苦辣,一个个故事和传奇在股市上被创造和演绎着这时,股民们就需要有个工具,能够帮助股民更好得掌握市场动态,更好地理财股票信息系统正是这样的一个工具股票信息系统能够实现对股票数据的收集、查询、增删、分析,得到有价值的信息,可以个性化地设定自己需要的信息,从而帮助股民更好得掌握市场动态,更好地理财应用在个人股票交易中,作为一种辅助软件,提高对市场的把握,使股民获取最大收益2.系统简介
2.1系统概述“股票信息系统”是专门为股民掌握市场动态,更好地理财而开发的股票信息系统该软件集成了股票搜集、查询、分析等多种实用的功能本软件的前台采用目前流行的面向对象的编程语言VisualC++
6.0开发,后台采用SQL数据库软件的界面美观大纲,软件运行稳定
2.2总体设计本系统主要包括登录模块、管理员设置模块、个人股票交易模块、股票信息模块、股名及代码查询模块、股市新闻模块、股票收益计算器模块、走势分析模块等内容图股票信息系统主模块
2.3运行环境简介◇VisualC++VisualC++包含了两套完整的Windows应用程序开发系统,即使用Win32API来开发用C编写的Windows应用程序和开发基于MFC的Windows应用程序,此外VisualC++也包括ActiveX模块库(ActiveXTemplateLibraryATL),可以用它来开发在Internet上使用的ActiveX控件,还可以制作基于MFC的ActiveX控件,还可以设计基于C或C++的动态链接库(DLL).◇SQLServer2000SQLServer2000的全名是MicrosoftSQLServer2000,是大名鼎鼎的微软公司生产的一款软件产品,2000是其版本号在2000之前还有SQLServer
6.
5、SQLServer
7.0在2000之后还有SQLServer2005等MicrosoftSQLServer2000扩展了MicrosoftSQLServer
7.0版的性能、可靠性、质量和易用性MicrosoftSQLServer2000增加了集中新的功能如下●全面支持XML(XMLeXtendedMarkLanguage译为可扩展标记语言)●支持构建SQLServer2000联合服务器●用户自定义函数●对视图建立索引●扩展新的数据类型●支持多个SQLServer2000实例●支持大规模集群●64GB的AWE内存支持(AVEAdvancedWindowsEdxtensionWindows高级扩展)由此MicrosoftSQLServer2000成为大规模联机事务处理OLTP、数据仓库和电子商务应用程序的优秀数据库平台逻辑角度的SQLServer2000数据库呈现为各种数据对象这些数据对象是用于编写数据库应用系统和管理数据库的单位主要包括数据表、视图、索引、数据类型、存储过程和触发器本系统主要用到数据库的数据表◇MsChart控件MsChart(
6.0或
5.0版)是Windows系统中Visualstudio自带的一个ACTIVEX控件,它功能强大,应用广泛,具有以下特点·支持随机数据和随机数组,动态显示·支持所有主要的图表类型·支持三维显示MsChart具有45个属性,9个方法,49事件,可灵活编程,可实现各类表的显示★注意使用前要先注册(即在运行里输入“regsvr32Mscomct
2.ocx”)3.数据库设计
1、Admin表Admin表用于存储管理员信息Admin表的结构如下表所示Admin表的结构字段名称数据类型字段大小可否为空说明userNamechar10NOTNULL用户名passwordchar10NOTNULL密码数据库连接类CAdminSet头文件AdminSet.h数据来源管理员设置模块进行录入
2、UserStock表UserStock表用于存储个人股票的买入卖出情况UserStock表的结构如下表所示UserStock表的结构字段名称数据类型字段大小可否为空说明stockNamechar8NOTNULL股名stockIDchar6NOTNULL股票代码stockStylechar7NOTNULL股票类型todaykpchar10NOTNULL今日开盘zdchar10NOTNULL涨跌dtimechar10NOTNULL日期jyslchar10NOTNULL交易数量jyjgchar10NOTNULL交易价格statechar10NULL交易状态数据库连接类CUserStockSet头文件UserStockSet.h数据来源:个人股票交易模块进行录入
3、Stock表Stock表用于存储股票各个时段的价格信息Stock表的结构如下表所示Stock表字段名称数据类型字段名称可否为空说明stockNamechar8NOTNULL股名stockIDchar6NOTNULL股票代码dtimechar10NOTNULL日期price1char10NOTNULL930am价格price2char10NOTNULL1030价格price3char10NOTNULL1130am价格price4char10NOTNULL200价格price5char10NOTNULL300价格数据库连接类CRecordset头文件StockSet.h数据来源股票信息模块进行录入
4、ShangHaiStock表ShangHaiStock表用于存储上海股票的股名及代码ShangHaiStock表的结构如下表所示ShangHaiStock表字段名称数据类型字段名称可否为空说明stockNamechar8NOTNULL股名stockIDchar6NOTNULL股票代码数据库连接类ShangHaiStockSet头文件ShangHaiStockSet.h
5、ShenZhenStock表ShenZhenStock表用于存储深圳股票的股名及代码ShenZhenStock表的结构如下表所示ShenZhenStock表字段名称数据类型字段名称可否为空说明stockNamechar8NOTNULL股名stockIDchar6NOTNULL股票代码数据库连接类ShenZhenStockSet头文件ShenZhenStockSet.h
6、Stock2表相当于一个临时表用于存储符合查询条件的某一股的价格相关信息Stock2表的结构如下表所示Stock2表字段名称数据类型字段名称可否为空说明stockNamechar8NULL股名stockIDchar6NULL股票代码dtimechar10NULL时间pricefloat8NULL价格数据库连接类CStockSet2头文件StockSet
2.h数据来源走势分析模块查询符合条件的信息☆注意每个数据库连接类的父类都是CRecordset
4.详细设计
4.
1、登录模块1.实现目标登录模块功能是完成用户登录本系统的操作,用户登录对话框的设计如下图所示+2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_LOGIN_DIALOG,文本框内容为“登录系统”,为该资源添加名为CLoginDlg的类
(2)从Controls面板上向Dialog资源中添加2个Static、2个Edit,2个Button1个Picture控件更改资源的属性,并为资源设置相对应的变量,如下表所示(Static、Picture控件略)表资源设置IDPropertiesMemberVariablesTypeMemberIDC_NAME_EDIT默认CStringm_NameIDC_PWD_EDIT选中PassWordCStringm_PwdIDC_LOGIN_BUTTONCaption登录IDCANCELCaption退出3.代码分析
(1)在类中添加变量外部变量,用来判定是否登录成功boolsuccess;
(2)在头文件添加头文件#includeStockSystemSet.h
(3)为“登录”按钮添加voidOnLoginButton函数,添加代码如下://创建用户表记录集CStockSystemSetRst;;CStringsql;UpdateData;success=FALSE;sql=select*fromAdminwhereuserName=;sql=sql+m_Name;sql=sql+andpassword=;sql=sql+m_Pwd;sql=sql+;//检查用户名是否输入ifm_Name.IsEmpty{AfxMessageBox用户名不能为空!;return;}//检查密码是否输入ifm_Pwd.IsEmpty{AfxMessageBox密码不能为空!;return;}//判定是否打开数据表if!Rst.OpenAFX_DB_USE_DEFAULT_TYPEsql{MessageBox打开失败!;return;}//密码正确进入主控台,并分配用户权限if!Rst.IsEOF{AfxMessageBox登录成功!;success=TRUE;CDialog::OnOK;}//密码错误处理else{AfxMessageBox登录失败!;return;}下面在CStockSystemApp中添加代码,使对话框在启动时首先打开登录对话框在主窗口选择OnInitDialog函数,该函数将打开登录对话框,如果用户不是通过单击“登录”按钮关闭对话框,则返回false,具体代码如下SetDialogBkColorRGB230230250RGB000;//前面RGB为背景颜色,后面为字体颜色CLoginDlgdlg;ifdlg.DoModal==IDCANCEL//判定是否打开对话框{returnfalse;}......returnTRUE;
4.
2、管理员设置模块
1.实现目标管理员设置模块用于添加、删除、查看管理员信息,管理员设置对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_ADMINISTRATOR,文本框内容为“管理员设置”,为该资源添加名为CAdminDlg的类
(2)从Controls面板上向Dialog资源中添加3个Static、3个Edit,3个Button1个GroupBox1个ListControl控件更改资源的属性,并为资源设置相对应的变量,如下表所示(Static、GroupBox、控件略)表资源设置IDPropertiesMemberVariablesTypeMemberIDC_EDIT1CStringm_AdminNameIDC_EDIT2选中PassWordCStringm_AdminPwd1IDC_EDIT2选中PassWordCStringm_AdminPwd2ID_ADD_ADMINCaption增加ID_DEL_ADMINCaption删除IDCANCELCaption退出IDC_LIST1View选ReportCListCtrlm_ctrList3.代码分析
(1)在头文件添加头文件#includeStockSystemSet.h2添加BOOLOnInitDialog函数,此函数用于初始化Tab控件、为ListControl控件赋值,其代码如下CDialog::OnInitDialog;//列表框第一列为“用户名”m_ctrList.InsertColumn0用户名LVCFMT_CENTER2170;//列表框第二列为“密码”m_ctrList.InsertColumn1密码LVCFMT_CENTER2171;//选中时是一整行m_ctrList.SetExtendedStyleLVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;CAdminSetSU;CStringmSqlStrc;mSqlStr=SELECTuserNamepasswordFROMAdmin;//数据库查询if!SU.OpenAFX_DB_USE_DEFAULT_TYPEmSqlStr//判定是否打开数据表{AfxMessageBox用户表打开失败!;returnTRUE;}//GetODBCFieldCount获取记录集中的字段总数shortnFields=SU.GetODBCFieldCount;while!SU.IsEOF{//GetItemCount返回列表视图控件中项的数目intnIndex=m_ctrList.GetItemCount;shortindex=0;//通过指定列位置来获取数据SU.GetFieldValueindexc;chars
[50];forinti=0;ic.GetLength;i++{s[i]=c.GetAti;}s[i]=\0;LV_ITEMlvitemAdd={0};lvitemAdd.mask=LVIF_TEXT;//lvitemAdd.iItem=nIndex;lvitemAdd.iSubItem=0;lvitemAdd.pszText=s;m_ctrList.InsertItemlvitemAdd;//插入项forindex=1;indexnFields;index++{LV_ITEMlvitemAdd={0};//通过指定列位置来获取数据SU.GetFieldValueindexc;fori=0;ic.GetLength;i++{s[i]=c.GetAti;}s[i]=\0;lvitemAdd.mask=LVIF_TEXT;lvitemAdd.iItem=nIndex;lvitemAdd.iSubItem=index;lvitemAdd.pszText=s;m_ctrList.SetItemlvitemAdd;}SU.MoveNext;}this-UpdateData;returnTRUE;
(3)为“添加”按钮添加OnAddAdmin函数,用于添加一条记录在数据表里,并更新在ListControl控件上添加代码如下UpdateDatatrue;CAdminSetp;CStringsmSqlStr;//检查数据的合法性ifm_AdminName.IsEmpty{MessageBox用户名不能为空!;m_AdminName=;m_AdminPwd1=;m_AdminPwd2=;}elseifm_AdminPwd
2.IsEmpty||m_AdminPwd
1.IsEmpty{MessageBox密码不能为空!;m_AdminPwd1=;m_AdminPwd2=;}//验证密码与确认密码是否一致elseifm_AdminPwd1!=m_AdminPwd2{MessageBox两次密码不一致!;m_AdminPwd1=;m_AdminPwd2=;}else{mSqlStr=SELECTuserNamepasswordFROMAdmin;//数据库查询if!p.OpenAFX_DB_USE_DEFAULT_TYPEmSqlStr{AfxMessageBox管理表打开失败!;return;}//添加新用户p.AddNew;p.m_userName=m_AdminName;p.m_password=m_AdminPwd1;staticinti=0;s=LPCTSTRCStringp.m_userName;m_ctrList.InsertItemis;s=LPCTSTRCStringp.m_password;m_ctrList.SetItemTexti1s;i=i+1;//把新的记录存在数据源里p.Update;p.MoveNext;//指定当前记录为最后一条记录AfxMessageBox添加成功!;m_AdminName=;m_AdminPwd1=;m_AdminPwd2=;}UpdateDatafalse;
(4)为“删除”按钮添加OnDelAdmin函数,用于删除数据表的一条记录,同时更新在ListControl控件上添加代码如下//得到第一个备选者Item的位置inti=m_ctrList.GetSelectionMark;if0i{MessageBox请选择一条记录进行删除!;return;}UpdateDataTRUE;CAdminSetp;CStringmSqlStr;mSqlStr.FormatSELECT*FROMAdminwhereuserName=%sm_ctrList.GetItemTexti0;//数据库查询if!p.OpenAFX_DB_USE_DEFAULT_TYPEmSqlStr{AfxMessageBox用户表打开失败!;return;}//删除该用户p.Delete;//删除类表中的该用户m_ctrList.DeleteItemi;p.Close;UpdateDatafalse;
4.
3、个人股票交易模块1.实现目标个人股票交易模块用于添加、删除、显示股票销售信息,个人股票交易对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_STOCKJOBBING,文本框内容为“个人股票交易”,为该资源添加名为StockJobDlg的类
(2)从Controls面板上向Dialog资源中添加11个Static、7个Edit,3个Button2个GroupBox1个DateTimePicker1个ComboBox1个ListControl控件,3个Picture更改资源的属性,并为资源设置相对应的变量,如下表所示(Static、GroupBox、Picture控件略)表资源设置IDPropertiesMemberVariablesTypeMemberIDC_GMCStringm_gumingIDC_GPDMCStringm_stockIDIDC_GPLXEnterlistboxitems上海A股上海B股深圳A股深圳B股CStringm_stockstyleIDC_JRKPCStringm_todaykpIDC_ZDCStringm_zdIDC_DATETIMEPICKER1Format选ShortDateCDateTimeCtrlm_dateIDC_JYSLCStringm_jyslIDC_JYJGCStringm_jyjgIDC_STATECStringm_stateIDC_LIST1View选ReportCListCtrlm_ctrListIDC_ADD_STOCKCaption买入IDC_DEL_STOCKCaption卖出IDC_CANCELCaption退出3.代码分析略,与“管理员设置模块”类似
4.
4、股票信息模块1.实现目标股票信息模块用于添加、删除、显示股票各个时段的价格信息,股票信息对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_STOCKJOBBING,文本框内容为“个人股票交易”,为该资源添加名为StockDlg的类
(2)从Controls面板上向Dialog资源中添加13个Static、7个Edit,3个Button1个GroupBox1个DateTimePicker1个ListControl控件更改资源的属性,并为资源设置相对应的变量,如下表所示(Static、GroupBox控件略)表资源设置IDPropertiesMemberVariablesTypeMemberIDC_STONAME1CStringm_stockNameIDC_STOCKID1CStringm_stockIDIDC_DATETIMEPICKER1Format选ShortDateCDateTimeCtrlm_dtimeIDC_PRICE1CStringm_price1IDC_PRICE2CStringm_price2IDC_PRICE3CStringm_price3IDC_PRICE4CStringm_price4IDC_PRICE5CStringm_price5IDC_LIST1View选ReportCListCtrlm_ListIDC_ADD_STOCKCaption添加IDC_DEL_STOCKCaption删除IDCANCELCaption退出3.代码分析略,与“管理员设置模块”类似
4.
5、股名及代码查询模块本模块分为上海股票名称及代码查询模块和深圳股票名称及代码查询模块下面着重介绍上海股票名称及代码查询模块,深圳股票名称及代码查询模块与上海股票名称及代码查询模块类似,就不具体介绍了1.实现目标股名及代码查询模块用于根据股名和股票代码中的一方来查询另一方,上海股票名称及代码查询对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_STOCKJOBBING,文本框内容为“个人股票交易”,为该资源添加名为StockDlg的类
(2)从Controls面板上向Dialog资源中添加3个Static、2个Edit,3个Button1个GroupBox1个Picture2个RadioButton更改资源的属性,并为资源设置相对应的变量,如下表所示(Static、GroupBox控件略表资源设置IDPropertiesMemberVariablesTypeMemberIDC_STOCKNAMECStringm_stockNameIDC_STOCKIDCStringm_stockIDIDC_STATICCaption上海股票IDC_SKIPCaption转至深圳股票查询页面ID_QUERYCaption查询IDCANCELCaption退出IDC_STATICType IconImage:IDI_ICON6IDC_QUERYIDCaption查股票代码选中GroupIDC_QUERYNAMECaption查股票名称3.代码分析
(1)在头文件添加头文件#includeQUERY
2.h#includeShangHaiStockSet.h2为“查询”按钮添加OnQuery函数,用于查询股票名称火信息添加代码如下UpdateDatatrue;//判断用户是否选择记录inti=GetCheckedRadioButtonIDC_QUERYIDIDC_QUERYNAME;UpdateDataTRUE;ShangHaiStockSetp;CStringmSqlStr;mSqlStr=SELECT*FROMShangHaiStock;//数据库查询if!p.OpenAFX_DB_USE_DEFAULT_TYPEmSqlStr{AfxMessageBox用户表打开失败!;return;}//选择查询方式为查股票代码ifi==IDC_QUERYID{p.m_stockName.TrimLeft;//去左边空格p.m_stockName.TrimRight;//去右边空格m_stockName.TrimLeft;m_stockName.TrimRight;//查询数据表中是否有符合条件的股票名称while!p.IsEOFp.m_stockName!=m_stockName{p.MoveNext;p.m_stockName.TrimLeft;//去左边空格p.m_stockName.TrimRight;//去右边空格m_stockName.TrimLeft;m_stockName.TrimRight;}//数据表中存在符合查询条件的股票信息ifp.m_stockName==m_stockName{m_stockID=p.m_stockID;UpdateDatafalse;}//数据表中不存在符合查询条件的股票信息ifp.IsEOF{//弹出提示对话框MessageBox该股票不是上海股票!跳转至深圳股票查询页面;//退出该对话框OnCancel;QUERY2dlg;//打开深圳股票查询对话框dlg.DoModal;}}//选择查询方式为查股票名称ifi==IDC_QUERYNAME{while!p.IsEOFp.m_stockID!=m_stockID{p.MoveNext;}//数据表中存在符合查询条件的股票信息ifp.m_stockID==m_stockID{m_stockName=p.m_stockName;UpdateDatafalse;}//数据表中不存在符合查询条件的股票信息ifp.IsEOF{MessageBox该股票不是上海股票!跳转至深圳股票查询页面;OnCancel;QUERY2dlg;dlg.DoModal;}}
(3)为“转至深圳股票查询页面”按钮添加OnSkip函数,用于跳转至深股查询,代码如下OnCancel;//退出上海股票查询页面QUERY2dlg;dlg.DoModal;
4.
6、股市新闻模块1.实现目标股市模块用于查询网络上的股市新闻,上股市新闻对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_STOCKNEWS,文本框内容为“股市新闻”,为该资源添加名为CExlorerDlg的类
(2)从Controls面板上向Dialog资源中添加1个Static,4个Button1个ComboBox.最重要的是要向工程导入MicrosoftWebBrowser控件,为对话框添加该控件更改资源的属性,并为资源设置相对应的变量,如下表所示表资源设置IDPropertiesMemberVariablesTypeMemberIDC_STATICCaption地址栏IDC_LIULAN_BUTTONCaption浏览IDCANCELCaption退出IDC_FORWARD_BUTTONCaption前进IDC_BACKUP_BUTTONCaption后退IDC_COMBO1Enterlistboxitems:http://yahoo.compass.cn/stock/newsort.phpIDC_EXPLORER1默认3.代码分析1为“浏览”按钮添加OnLiulanButton函数,用于浏览网页上的股票新闻添加代码如下CStringszURL;m_Address.GetWindowTextszURL;ifszURL!={//将浏览器连接到一个不固定的URLm_Explorer.NavigateszURL0000;m_Address.AddStringszURL;}
(2)为“前进”按钮添加OnForwardButton函数,用于网页浏览的前进添加代码如下m_Explorer.GoForward;
(3)为“后退”按钮添加OnBackupButton函数,用于网页浏览的后退添加代码如下m_Explorer.GoBack;
4.
7、股票收益计算器模块1.实现目标股票收益计算器模块用于计算股票的投资效益以及保本价格股票收益对话框的设计如下图所示2.设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_CALCULATOR,文本框内容为“股票收益计算器”,为该资源添加名为CCalculator的类
(2)从Controls面板上向Dialog资源中添加21个Static,2个Button10个EditBox,6个RadioButton,4个GroupBox更改资源的属性,并为资源设置相对应的变量,如下表所示Static控件和GroupBox控件略表资源设置IDPropertiesMemberVariablesTypeMemberIDOKCaption计算IDCANCELCaption退出IDC_MRJGdoublem_mrjgIDC_MRSLintm_mrslIDC_YJBLdoublem_yjblIDC_XJGLdoublem_xjglIDC_GPGLdoublem_gpglIDC_MCJGdoublem_mcjgIDC_MRCBdoublem_mrcbIDC_MCCBdoublem_mccbIDC_CBHJdoublem_cbhjIDC_SYdoublem_syIDC_AMODE1Caption计算投资效益选中GroupIDC_AMODE2Caption计算保本卖出价格IDC_CMODE1Caption上海A股选中GroupIDC_CMODE2Caption上海B股IDC_CMODE3Caption深圳A股IDC_CMODE4Caption深圳B股3.代码分析1为“计算”按钮添加OnCalCulator函数,用于计算股票的收益情况添加代码如下UpdateData;intij;doublemcjemcjg1jsfbl=0;//判断用户是否选择记录i=GetCheckedRadioButtonIDC_AMODE1IDC_AMODE2;j=GetCheckedRadioButtonIDC_CMODE1IDC_CMODE4;doublemrje=m_mrjg*m_mrsl;//买入金额//选择计算项目为计算投资效益ifi==IDC_AMODE1{mcje=m_mcjg*m_mrsl+m_gpgl;//卖出金额}//选择计算项目为计算保本卖出价格,卖出价格为0else{m_mcjg=
0.0;mcje=
0.0;}doubleyj1=
0.0;doubleyj2=
0.0;doubleyhs1=
0.0;doubleyhs2=
0.0;doubleghf1=
0.0;doubleghf2=
0.0;doublejsf1=
0.0;doublejsf2=
0.0;doublebuyyhsbl=0;doublesellyhsbl=
0.1;//选择交易对象为上海A股ifj==IDC_CMODE1{yj1=opdatamrje*m_yjbl/100;yj1=yj110yj1:10;yhs1=opdatamrje*buyyhsbl/100;ghf1=
10.0;//选择计算项目为计算保本卖出价格ifi==IDC_AMODE2{m_mrcb=opdatayj1+yhs1+ghf1+jsf1;m_mcjg=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb-ghf1/m_mrsl+m_gpgl*m_yjbl/100+buyyhsbl/100-m_mrsl+m_gpgl;mcjg1=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb-ghf1-
10.0/m_mrsl+m_gpgl*buyyhsbl/100-m_mrsl+m_gpgl;ifm_mcjg*m_mrsl+m_gpgl*m_yjbl/
10010.0m_mcjg=mcjg1;mcje=m_mcjg*m_mrsl+m_gpgl;//卖出金额}yj2=opdatamcje*m_yjbl/100;yj2=yj210yj2:10;yhs2=opdatamcje*sellyhsbl/100;ghf2=
10.0;}//选择交易对象为上海B股elseifj==IDC_CMODE2{yj1=opdatamrje*m_yjbl/100;yhs1=opdatamrje*buyyhsbl/100;jsf1=opdatamrje*jsfbl/100;//选择计算项目为计算保本卖出价格ifi==IDC_AMODE2{m_mrcb=opdatayj1+yhs1+ghf1+jsf1;m_mcjg=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb/m_mrsl+m_gpgl*m_yjbl/100+buyyhsbl/100+jsfbl/100-m_mrsl+m_gpgl;mcje=opdatam_mcjg*m_mrsl+m_gpgl;//卖出金额}yj2=opdatamcje*m_yjbl/100;yhs2=opdatamcje*sellyhsbl/100;jsf2=opdatamcje*jsfbl/100;}//选择交易对象为深圳A股elseifj==IDC_CMODE3{yj1=opdatamrje*m_yjbl/100;yhs1=opdatamrje*buyyhsbl/100;//选择计算项目为计算保本卖出价格ifi==IDC_AMODE2{m_mrcb=opdatayj1+yhs1+ghf1+jsf1;m_mcjg=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb-ghf1/m_mrsl+m_gpgl*m_yjbl/100+buyyhsbl/100-m_mrsl+m_gpgl;mcje=opdatam_mcjg*m_mrsl+m_gpgl;//卖出金额}yj2=opdatamcje*m_yjbl/100;yhs2=opdatamcje*sellyhsbl/100;}//选择交易对象为深圳B股else{yj1=opdatamrje*m_yjbl/100;yhs1=opdatamrje*buyyhsbl/100;jsf1=opdatamrje*jsfbl/100;jsf1=jsf
1500.
0500.0:jsf1;//选择计算项目为计算保本卖出价格ifi==IDC_AMODE2{m_mrcb=opdatayj1+yhs1+ghf1+jsf1;m_mcjg=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb/m_mrsl+m_gpgl*m_yjbl/100+buyyhsbl/100+jsfbl/100-m_mrsl+m_gpgl;mcjg1=opdatam_xjgl-m_mrjg*m_mrsl-m_mrcb-500/m_mrsl+m_gpgl*m_yjbl/100+buyyhsbl/100-m_mrsl+m_gpgl;ifm_mcjg*m_mrsl+m_gpgl*jsfbl/
100500.0m_mcjg=mcjg1;mcje=opdatam_mcjg*m_mrsl+m_gpgl;//卖出金额}yj2=opdatamcje*m_yjbl/100;yhs2=opdatamcje*sellyhsbl/100;jsf2=opdatamcje*jsfbl/100;jsf2=jsf
2500.
0500.0:jsf2;}m_mrcb=opdatayj1+yhs1+ghf1+jsf1;//买入成本m_mccb=opdatayj2+yhs2+ghf2+jsf2;//卖出成本m_cbhj=m_mrcb*1+m_mccb*1;//成本合计//选择计算项目为计算保本卖出价格损益为0ifi==IDC_AMODE2m_sy=0;//选择计算项目为计算投资效益,计算损益elsem_sy=opdatamcje*1+m_xjgl*1-mrje-m_mrcb-m_mccb;UpdateDataFALSE;其中,添加doubleopdatadoublez函数(作用保存到小数点后2位),函数代码如下doublex=intz*
100.0+
0.5/
100.0;returnx;
4.
8、走势分析模块1.实现目标走势分析模块用于从Stock表读取相符的数据,显示在对话框上同时,也将该组数据以不一样的排列方式存在Stock2表中这里,Stock2充当一个临时表,它只保留一组最新的数据而后,通过ADO控件读取Stock2表的数据,并通过MsChart控件将该组数据以图标的形式呈现出来本模块有两个对话框走势分析和走势图2.走势分析对话框
2.1设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_TREND_ANALYSIS,文本框内容为“走势分析”,为该资源添加名为AnalysisDlg的类
(2)从Controls面板上向Dialog资源中添加10个Static,3个Button10个EditBox,2个RadioButton,2个GroupBox更改资源的属性,并为资源设置相对应的变量,如下表所示Static控件和GroupBox控件略表资源设置IDPropertiesMemberVariablesTypeMemberID_SEARCHCaption查询ID_ANALYSISCaption分析IDCANCELCaption退出IDC_SEARCHNAMECStringm_stockNameIDC_SEARCHIDCStringm_stockIDIDC_IIDCStringm_stockID1IDC_NNameCStringm_stockName1IDC_DTIMECStringm_dtimeIDC_1PRICEdoublem_price1IDC_2PRICEdoublem_price2IDC_3PRICEdoublem_price3IDC_4PRICEdoublem_price4IDC_5PRICEdoublem_price5IDC_NAMECaption按股票名称选中GroupIDC_IDCaption按股票代码
2.2.代码分析
(1)在头文件添加头文件#includeGraphDlg.h#includeStockSet.h#includeStockSet
2.h1为“查询”按钮添加:OnSearch函数,用于查询某只股票的价格情况添加代码如下UpdateDatatrue;//判断用户是否选择记录inti=GetCheckedRadioButtonIDC_NAMEIDC_ID;CStockSetp;CStringmSqlStr;mSqlStr=SELECT*FROMStock;//数据库查询if!p.OpenAFX_DB_USE_DEFAULT_TYPEmSqlStr{AfxMessageBox用户表打开失败!;return;}//选择查询方式为按股票名称ifi==IDC_NAME{p.m_stockName.TrimLeft;//去左边空格p.m_stockName.TrimRight;//去右边空格m_stockName.TrimLeft;m_stockName.TrimRight;while!p.IsEOFp.m_stockName!=m_stockName{p.MoveNext;p.m_stockName.TrimLeft;//去左边空格p.m_stockName.TrimRight;//去右边空格m_stockName.TrimLeft;m_stockName.TrimRight;}//查到符合条件的股票信息ifp.m_stockName==m_stockName{m_stockName1=p.m_stockName;m_stockID1=p.m_stockID;m_dtime=p.m_dtime;//显示股票信息m_price1=atofp.m_price1;m_price2=atofp.m_price2;m_price3=atofp.m_price3;m_price4=atofp.m_price4;m_price5=atofp.m_price5;UpdateDatafalse;}//不存在符合条件的股票信息ifp.IsEOF{MessageBox不存在该股票的记录警告;}}//选择查询方式为按股票代码ifi==IDC_ID{while!p.IsEOFp.m_stockID!=m_stockID{p.MoveNext;}ifp.m_stockID==m_stockID{m_stockName1=p.m_stockName;m_stockID1=p.m_stockID;m_dtime=p.m_dtime;m_price1=atofp.m_price1;m_price2=atofp.m_price2;m_price3=atofp.m_price3;m_price4=atofp.m_price4;m_price5=atofp.m_price5;UpdateDatafalse;}ifp.IsEOF{MessageBox不存在该股票的记录警告;}}
(3)为“分析”按钮添加voidOnAnalysis函数,代码如下UpdateDatatrue;CStrings1s2s3s4s5strSQL;s1=9:30;s2=10:30;s3=13:00;s4=14:00;s5=15:00;CStockSet2SU;intn=0;strSQL=select*FROMStock2;//数据库查询if!SU.OpenAFX_DB_USE_DEFAULT_TYPEstrSQL{AfxMessageBox用户表打开失败!;}while!SU.IsEOFSU.MoveNext;n=SU.GetRecordCount;if!n{//添加一条数据到Stock2表中SU.AddNew;SU.m_stockName=m_stockName1;SU.m_stockID=m_stockID1;SU.m_dtime=s1;SU.m_price=m_price1;SU.Update;//把新的记录存在数据源里SU.MoveNext;//添加第二条数据Stock2表中SU.AddNew;SU.m_stockName=m_stockName1;SU.m_stockID=m_stockID1;SU.m_dtime=s2;SU.m_price=m_price2;SU.Update;//把新的记录存在数据源里SU.MoveNext;//添加第三条数据Stock2表中SU.AddNew;SU.m_stockName=m_stockName1;SU.m_stockID=m_stockID1;SU.m_dtime=s3;SU.m_price=m_price3;SU.Update;//把新的记录存在数据源里SU.MoveNext;//添加第四条数据Stock2表中SU.AddNew;SU.m_stockName=m_stockName1;SU.m_stockID=m_stockID1;SU.m_dtime=s4;SU.m_price=m_price4;SU.Update;//把新的记录存在数据源里SU.MoveNext;//添加第五条数据Stock2表中SU.AddNew;SU.m_stockName=m_stockName1;SU.m_stockID=m_stockID1;SU.m_dtime=s5;SU.m_price=m_price5;SU.Update;//把新的记录存在数据源里SU.MoveNext;}else{SU.MoveFirst;inti=0;fori=0;in;i++{//删除数据表原有的数据SU.Delete;SU.MoveNext;}SU.MoveFirst;//添加数据到Stock2表中}UpdateDatafalse;//打开分析图对话框GraphDlgdlg;dlg.DoModal;}3.走势图对话框
3.1设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_GRAPH,文本框内容为“分析图”,为该资源添加名为GraphDlg的类
(2)从Controls面板上向Dialog资源中添加2个Button,2个RadioButton,1个GroupBox重要的是,要向工程导入MicrosoftADOData控件和MicrosoftChartControl控件,为对话框添加该控件更改资源的属性,并为资源设置相对应的变量,如下表所示表资源设置IDPropertiesID_OKCaption确定IDCANCELCaption退出IDC_STATICCaption显示方式IDC_RADIO1Caption折线图选中GroupIDC_RADIO2Caption柱形图IDC_ADODC1Caption记录导航Control选中UseODBCDataSourseName再选中stockDBRecordSource中CommandTextSQLSELECTdtimepriceFROMStock2IDC_MSCHARTChart面板选中ShowLegendText面板TitleText:股票分析图XAxisTitleText:时间YAxisTitleText:价格All面板DataSourse选IDC_ADODC12为“确定”按钮添加voidOnOk函数,添加代码如下//判断用户是否选择记录inti=GetCheckedRadioButtonIDC_RADIO1IDC_RADIO3;ifi==IDC_RADIO1{m_Chart.SetChartType3;//折线图}ifi==IDC_RADIO2{m_Chart.SetChartType1;//柱形图}
5.系统实施过程本系统在开发中遇到了一些问题,如MsChart的使用、计算器的算法描述、用股名来查股票代码等
(1)MsChart控件是一个ActiveX控件它可以导入工程中,但是不能导入到对话框中这其中必定存在问题果然,在打开对话框时弹出TheActiveXcontrolGridControlcouldnotbeinstantiatedbecauseitrequiresadesign-timelicense原来,是这个控件还没被注册只要把这个MsChart注册了,就可以将其添加到对话框中
(2)计算器的算法描述是一件庞大的工程通过书本和网页上的相关信息,终于理清了各个条件的计算方法损益=卖出金额+现金股利–买入金额–买入成本–卖出成本买入成本=买入佣金+买入印花费+买入过户费+买入委托费卖出成本=卖出佣金+卖出印花费+卖出过户费+卖出委托费成本合计=买入成本+卖出成本◇交易项目选计算投资效益交易对象选上海A股买入佣金=买入金额*佣金比率与10中的最大数买入印花税=买入金额*买入印花税比率买入过户费=10买入委托费=0卖出佣金=卖出金额*佣金比率与10中的最大数卖出印花税=卖出金额*卖出印花税比率卖出过户费=10卖出委托费=0◇交易项目选计算投资效益交易对象选上海B股买入佣金=买入金额*佣金比率买入印花税=买入金额*买入印花税比率买入过户费=0买入委托费=买入金额*买入委托费比率卖出佣金=卖出金额*佣金比率卖出印花税=卖出金额*卖出印花税比率卖出过户费=0卖出委托费=卖出金额*卖出委托费比率◇交易项目选计算投资效益交易对象选深圳A股买入佣金=买入金额*佣金比率买入印花税=买入金额*买入印花税比率买入过户费=0买入委托费=0卖出佣金=卖出金额*佣金比率卖出印花税=卖出金额*卖出印花税比率卖出过户费=0卖出委托费=0◇交易项目选计算投资效益交易对象选深圳B股买入佣金=买入金额*佣金比率买入印花税=买入金额*买入印花税比率买入过户费=0买入委托费=买入金额*买入委托费比率与500的最大值卖出佣金=卖出金额*佣金比率卖出印花税=卖出金额*卖出印花税比率卖出过户费=0卖出委托费=卖出金额*卖出委托费比率与500的最大值同理,交易项目为计算保本卖出价格时,同样的方法来计算只是已知损益为0元,来求卖出价格
(3)用股名来查询股票代码时,明明股名框填入的是数据库里的股名,但是却提示“不存在”,但是如果通过股票代码来查询股名的话,则没错误原来,股名用的是汉字,他们的长短不一,我把它设置为8个字符,结果两边多出了空格只要把要查询的股名两边去掉空格后在查询即可得到想要的股票代码
6.结语至此,完成了整个股票信息系统的程序设计介绍本系统主要是以股民作为使用对象设计的是客户端的程序在系统开发过程中,主要用到VisualC++
6.0和SQL2000在VC++中,主要用到常用控件和Active控件其中,ADO控件主要是用于连接数据库而MsChart控件则是用图表的形式显示ADO控件的内容通过本系统的开发,我了解到该类控件的使用毕业设计的时间,说长也不长,说短也不短一晃,几个月的时间就过去了在本系统的开发过程中,我遇到了许多问题这些问题,不管是难的还是易的,同学们都乐于帮助我,帮我克服了一道道难关正是由于他们的帮助,我对股票信息系统的开发产生了浓厚的兴趣同时,通过本次设计,我领会到了面向对象软件工程的精髓所在,而且学会了VC++、SQLServer、InstallShield等软件工具的使用方法最重要的是,我掌握了一定的编程知识和技巧从刚开始面对需求分析的无从下手,到现在可以较好地完成这个项目这期间都离不开老师的悉心指导在此,谨表示最深厚的感谢和最诚挚的敬意!!!参考文献
[1]《VisualC++
6.0循序渐进教程》北京希望电子出版社,龙腾科技主编,005年出版
[2]《VisualC++管理信息系统完整项目实例剖析》人民邮电出版社,明日科技编著,2005年7月出版
[3]《VisualC++开法试用编程200例》中国铁道出版社,武莹彭文明编著,2006年出版
[4]《VisualC++信息系统设计与开发实例》机械工业出版社,黄明梁旭周绍斌编著,2005年3月出版
[5]《实用C++调试指南(PracticalDebuggingInC++)》华中科技出版社,AnnR.FordTobyJ.Teorey著於春景译
[6]《VisualC++程序设计与实践》清华大学出版社北京交通大学出版社,梁普选主编
[7]《VisualC++
6.0数据库开发技术》机械工业出版社,郑章程刚张勇等编著
[8]《VisualC++
6.0程序设计技能百练》中国铁道出版社,第一时间工作室编著
[9]《数据库与数据库管理系统》电子工业出版社,王珊主编
[10]《股市利器创建独立技术分析系统》,经济管理出版社,伊宏胡红霞编著
[11]http://jpkc.wxit.edu.cn/vb/Wlkc/vb8/08-06-
01.html
[12]http://www.vckbase.com/document/viewdoc/id=959
[13]http://www.gpzs
8.com/html/gupiaorumen/200809/10-
223.html
[14]http://book.csdn.net/bookfiles/565/
10056518711.shtmlVisualC++开发经验宝典股票信息系统登录管理员设置个人股票交易走势分析股票收益计算器股名及代码查询股市新闻股票信息。