C++课程设计报告
设计程序名称:股票交易系统
难易级别:A 级
选择这个程序,我主要考虑到以下方面的原因:
1、本程序难度较大,在编写程序的过程当中可以更加深刻地理解 C++当中的相
关知识点,可以更好地通过实践了解编程的内涵。
2、该课题所涉及到的内容和实际生活联系比较紧密,所以编写此程序意义较大。
3、该课题是管理系统方面的小型程序,这类程序可以不断地扩充新的内容新的
功能,可塑性高,实用性好,有很好的实际意义。
程序设计要求:
1、修改数据结构,增加现金成员,每只股票增加牌价。每个用户的数据库中同
样也增加现金数目的成员。
2、增加股票教育系统的接口程序。包括四个方面,对于以上的修改均须输入密
码,如输入密码正确后才能进入数据库进行修改。结果均存入 Stock_File.dat
中。
3、将股票数据的处理由数组改为链表,可以处理多只股票的交易,链表以交易
代码的序号进行排序。
4、增加用户数据系统的接口程序,包括修改用户名密码等,包括不能透支等。
程序完成过程:
在程序设计的过程中,我具体是这么做的:
1、粗读程序
2、细读程序
以下对程序中类及其函数进行分析
CStock 类:存放股票数据、节点、链表,类中方法对股票进行各项操作。
/***********************股票数据类***************************/
class CStock //股票数据类
{
private:
char stock_name[20];
//股票名称
char stock_code[6];
//股票代码
long int stock_volume;
//股票总数
long int volume_available; //可购买股票数
int nHangup;
//是否挂起, n 为 1 时挂起
double dlPrice;
//股票的价格(新增)
public:
CStock();
//构造函数
CStock(char *code);
//用股票代码初始化数据
CStock(char *name,char *code,int volume,double price);
//初始化数
据
void SetStock(char *name,char *code,int volume,double price);
//数
据赋值
int Compare(CStock &);
//根据代码比较大小
int ComparePrice(CStock &);
//根据价钱比较大小
void Show();
//显示股票信息
char *GetName(){return stock_name;}
//返回股票的名称
double GetPrice(){return dlPrice;} //返回股票的价格,买卖之前判断是否
能进行交易
int GetHangup(){return nHangup;}
//返回是否挂起
int GetVolume(){return volume_available;}
void SubStockModify(int nNum);//购买股票时,市场该股可交易数减少
void AddStockModify(int nNum);//卖出股票时,市场该股可交易数增加
void Modify(int);
/*******************股票结点***************************/
class StockNode //定义股票结点类
{
private:
CStock *pData;
//用于指向数据类的指针
StockNode *pNext;
//指向链表的下一个结点的指针
public:
StockNode (){pData=0;pNext=0;}
//结点构造函数
StockNode(StockNode &node)
//用于拷贝的构造函数
{ pData=node.pData;
pNext=node.pNext;
}
void InputData(CStock *pdata){pData=pdata;}
//输入数据
void ShowNode(){pData->Show();}
CStock *GetData(){return pData;}
/*返回股票数据类指针,可以调用数
据类的公有成员函数*/
friend class StockList; //定义链表类为友元类
};
/****************股票链表******************************/
class StockList
{
protected:
StockNode *pHead;
public:
StockList(){pHead=0;}
~StockList(){DeleteList();}
void AddNode(StockNode *pnode);
//在首部添加结点
StockNode *DeleteNode(StockNode *);
//删除一发指定的结点,返回
该结点的指针
StockNode *LookUp(CStock &);
/*查找一个指定的数据,返回该数据所
在结点在链表中的指针,若未找到返回()*/
void ShowList();
//打印
void DeleteList();
//删除
StockNode *GetListHead(){return pHead;}
// 返回链表首结点
StockNode *GetListNextNode(StockNode *);
//返回链表指定结点的
下一个结点
void Insert(StockNode *pnode);//插入节点,按照价钱排序
};
CCust 类:存放用户信息,类中方法对用户进行各项操作。
/*****************用户数据***************************/
class CCust
{
private:
char stock_name[20];
char stock_code[10];
int volume;
public:
CCust();
CCust(char *code);
CCust(char *name,char *code,int nNum);
void SetCust(char *name,char *code,int nNum);
int Compare(CCust &);//比较股票代码,排序用
void Show();//显示用户购买股票的资料
void AddCustModify(int nNum);
//购买股票,用户持有股数增加
void SubCustModify(int nNum);
//卖出股票, 用户持有股票减少
int GetVolume(){return volume;}
//当前拥有的股票数,卖出时首先判断
输入的数目是否合理
};
/******************用户结点**************************/
class CustNode
{
private:
CCust *pData;//用于指向数据类的指针
CustNode *pNext;//指向链表的后向指针
public:
CustNode(){pData=0;pNext=0;}//结点构造函数
CustNode(CustNode &node)
{ pData=node.pData;
pNext=node.pNext;
}//用于拷贝的构造函数
void InputData(CCust *pdata){pData=pdata;}//输入数据
void ShowNode(){pData->Show();}
CCust *GetData(){return pData;}
friend class CustList;//定义链表类为友元类
};
/**************************CustList*********************/
class CustList//定义用户链表类
{
protected:
CustNode *pHead;//链表头结点指针
public:
CustList(){pHead=0;}
~CustList(){DeleteList();}
void AddNode(CustNode *);//在首部添加结点
CustNode *DeleteNode(CustNode *);//删除一个指定的结点,返回该结
点的指针
CustNode *LookUp(CCust &);//查找一个指定的数据,返回该数据所在结
点在链表中的指针,若未找到返回 0
void ShowList();//打印整个链表
void DeleteList();//删除整个链表
CustNode *GetListHead(){return pHead;}//链表首结点
CustNode *GetListNextNode(CustNode *);//返回链表指定结点的下一
个结点
void Insert(CustNode *pnode);//以代码的顺序排列链表
Customer::LoadFile()//读取用户股票信息
{
if(this->custlist.GetListHead())this->custlist.DeleteList();// 清 空 原 来 存
有的顾客信息
CCust *p1;
CustNode *p2;
ifstream dataFile(this->custtable.Name); //打开用户资料文件
while(!dataFile.eof()){
p1=new CCust;
dataFile.read((char*)(p1),sizeof(*p1));
if(dataFile.gcount()!=sizeof(*p1)){delete p1;break;}//若读取的数据
长度和文件长度不同,则退出该程序
void Customer::SaveFile()//保存用户股票信息
登陆函数
1 是否有记录
2 核对用户、密
码
用户类
注册函数
用户交易函数
1 输入用户名
2 输入密码
3 输入注册现金
1 购买股票
2 卖出股票
3 显示用户股票记录
4 显示股票市场情况
5 更改用户名及密码
编 写 各
功 能 函
数
两 类 中 的 函
数相互调用