logo资料库

股票交易系统源代码及注释.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
#include #include #include #include #include #include //股票链表类的声明 class Stocklist; struct Custtable; //用户资料结构体声明 class Custlist; //股票数据类声明 Stocklist *head; //临时指向股票链表类的全局指针,作用是当程序运行时,把二进制中的 数据写到这个临时的链表中,然后在这个临时的链表中进行各种操作,直到退出程序后再把 临时的链表中的数据写入到二进制文件中,相当于保存并更新了文件中的数据。 Custtable *table; 表类的全局指针”。 //临时指向用户资料结构体的指针,作用类似于上面的“临时指向股票链 inline istream& Flush(istream& stream) //在书本中看到的用于清空输入缓冲区的函数。可以 解决过多输入(如用 cin.getline()接收数据时,过多的输入可以用该函数来清除掉,以免影 响后面的输入),输入数据不符等问题。 { stream.clear(); int chars_to_skip=stream.rdbuf()->in_avail(); return stream.ignore(chars_to_skip); } struct Custtable { char Name[20]; int Money; //定义股票资料结构体 //用户姓名 }; class CStock { private: //股票数据类 char stock_name[20]; //股票名称 //股票代码 //股票总股数 char stock_code[6]; int stock_volume; int volume_available,nHangup; double Price;//股票的价格 //可交易的股数 CStock *pNext; public: CStock(); //构造函数 //用股票代码初始化数据 CStock(char *code); CStock(char *name,char *code,int volume,double price); void SetStock(char *name,char *code,int volume,double price); void Show(); char *GetName(){return stock_name;}//返回股票名称 char *GetCode(){return stock_code;} //显示股票信息 //返回股票代码 //初始化数据 //数据赋值
够 double &GetPrice(){return Price;} //返回股票价格,买卖之前判断现金是否足 int &GetHangup(){return nHangup;} //为 1 挂起,买卖之前判断是否能进行交易 int &GetVolume_available(){return volume_available;} //返回可交易总数,购买 前判断输入的数据是否合理 void SubStockModify(int nNum); void AddStockModify(int nNum); //购买股票,市场该股可交易总数减少 //卖出股票,市场该股可交易总数增多 CStock *GetNext(){return pNext;} ~CStock(){cout<<"析构 CStock 类"<
} void CStock::AddStockModify(int nNum) { volume_available+=nNum; } //卖出股票,市场该股可交易总数增多 class Stocknode { private: //股票结点类 CStock *pdata; Stocknode *pnext; //指向股票数据类的指针 //指向股票结点类的指针 public: Stocknode(){pdata=0;pnext=0;}; CStock *&Getpdata(); Stocknode *&Getpnext(); //返回指向股票数据类的指针 //返回指向股票结点类的指针 //构造函数 }; CStock *&Stocknode::Getpdata() { return pdata; } Stocknode *&Stocknode::Getpnext() { return pnext; } //返回指向股票数据类的指针 //返回指向股票结点类的指针 //股票链表类 class Stocklist { private: Stocknode *phead; int numofstock; public: //指向股票结点类的指针,是股票链表的头指针。 //记录市场中已存在的股票数量,最多 5 只。 //返回股票链表的头指针 //展示股票链表中的所有股票 //插入股票结点到股票链表中 //构造函数 //析构函数 Stocklist(){phead=0;numofstock=0;} ~Stocklist(){Deletelist();} Stocknode *&Getphead(){return phead;} void Showlist(); void Insert(Stocknode *pnode); void Addnewstock(); Stocknode *Lookupdata(char *str); void Deleteoldstock(); void Modifystock(int nChoice); void Deletelist(); int Getnumofstock(){return numofstock;} //添加新股票 //删除已存在的股票 //修改股票数据 //删除整个股票链表 //查找股票,返回指向股票结点类的指针 }; void Stocklist::Insert(Stocknode *pnode) { 给头指针 if(head->Getphead()==0) //插入股票结点到股票链表中 //当股票链表的头指针为空,则把现在插入的结点的指针赋 { cout<<"该链表为空链表,现在插入第一个结点!"<Getpnext()=phead;phead=pnode; } else if(strcmp(phead->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0) //链表
中已有结点,把现在要插入的结点插入到链表开头 { else { pnode->Getpnext()=phead; phead=pnode; } Stocknode *p1,*p2; p1=p2=phead; while(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())<0&&p2->Getpnext()! =0) //和链表中的其他几点进行比较,直到找到合适的插入位置 { if(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())>0) p1=p2;p2=p2->Getpnext(); } // 找 到 适合的插入点后,插入到链表中 { else if(strcmp(p2->Getpdata()->GetCode(),pnode->Getpdata()->GetCode())==0) p1->Getpnext()=pnode;pnode->Getpnext()=p2; } //若 股票代码与之前已存在股票代码重复,则插入不成功 { else { cout<<"该股票与之前的股票代码有重复!"<<"请重新操作!"<Getpnext()=pnode; pnode->Getpnext()=NULL; //把结点插入到链表的尾部 } } numofstock++; } //动态开辟新的股票结点空间 void Stocklist::Addnewstock() { //添加新股票 CStock *p;Stocknode *pnode; p=new CStock;long int stock_volume; char stock_name[20]; char stock_code[6]; double price; pnode=new Stocknode; cout<<"现在添加新股票,请输入该股票的数据:"<>stock_volume; } //输入股票名 //清空过多输入 cin>>stock_volume; //用于解决当输入数据类型不符出现的错误 cout<<"请输入该股票价格:"<>price; while(!cin) { //输入股票价格 //用于解决当输入数据类型不符出现的错误 cerr<<"输入数据类型不符,请输入数字!"<>stock_volume; } cin.ignore(); cout<<"创建该股票中..."<
p->SetStock(stock_name,stock_code,stock_volume,price); pnode->Getpdata()=p; //把股票数据赋到结点中 Insert(pnode); //把刚创建的结点插入到链表中 //数据赋值 } //展示股票链表中的所有股票 void Stocklist::Showlist() { Stocknode *pnode; if(phead==0) { cout<<"该链表为空链表!"<Getpdata()->Show(); pnode=pnode->Getpnext(); } } } Stocknode *Stocklist::Lookupdata(char *str) { //查找股票 Stocknode *pnode; pnode=phead; cout<Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code)) { if(strcmp(pnode->Getpdata()->GetCode(),code)==0) { else pnode=pnode->Getpnext(); return pnode; } } return 0; } void Stocklist::Deleteoldstock() { //删除已存在的股票 pnode=phead; Stocknode *pnode,*p; cout<<"请输入你想删除的股票代码:"<Getpnext()&&strcmp(pnode->Getpdata()->GetCode(),code)) cout<<"该链表为空链表!"<Getpnext(); } if(strcmp(pnode->Getpdata()->GetCode(),code)==0) { cout<<"查找出的股票为:"<Getpdata()->Show(); char str[30];
while(1) do { { cout<<"是否确定删除该股票(y/n)?"<Getpnext(); else p->Getpnext()=pnode->Getpnext(); //不为头结点的情况 delete pnode; numofstock--; //删除该节点,删除动态开辟的空间 cout<<"删除股票成功!"<Lookupdata(str); //首先查找出该股票 //如果要查找的股票存在 cout<<"该股票为:"<Getpdata()->Show(); switch(nChoice) case 1: { //更改股票名 { char name[20]; cout<<"你想把股票名称更改成:"; cin.getline(name,20); Flush(cin); strcpy(pnode->Getpdata()->GetName(),name); break; } case 2: { //更改股票代码 char code[6];
cout<<"你想把股票代码更改成:"; cin.getline(code,6);Flush(cin); strcpy(pnode->Getpdata()->GetCode(),code); break; } } cout<Getpdata()->Show();system("pause"); } else { //要修改的股票在链表中不存在 cout<<"链表中没有该股票!"<Getpnext(); delete pnode; pnode=phead; } } } void Interface(); void Managementface(); void Register(); int Login(); //声明函数:初始界面 //声明函数:股票管理界面 //声明函数:注册 //声明函数:登录 void readdata() { //从二进制文件中读入数据 ifstream infile("Stock_File.dat",ios::binary|ios::nocreate); if(!infile) { //若要读取的二进制文件不存在 cout<<"要读取的\"Stock_File.dat\"文件不存在!"<GetPrice()==0) break; p1->Getpdata()=p2; head->Insert(p1); } infile.close(); } void writedata() { //把临时股票链表中数据写入到二进制文件 Stocknode *pnode;pnode=head->Getphead(); ofstream outfile("Stock_File.dat",ios::binary|ios::out);
while(pnode) { //若未到股票链表结尾,则继续把链表中的数据写入到二进制文件中 outfile.write((char*)pnode->Getpdata(),sizeof(CStock)); //股票管理界面选项判断函数 pnode=pnode->Getpnext(); } outfile.close(); } void managementchoice(int nChoice) { switch(nChoice) { case 1: { //添加股票 //添加新股票 head->Addnewstock(); system("pause");char str[30]; while(1) { do { system("cls"); cout<<"是否继续添加?(y/n)"<Addnewstock(); } system("pause"); else return; } } } //删除市场中已存在的股票 head->Deleteoldstock(); system("pause"); break; //进入股票修改菜单 int flag=1;int nChoice; char str1[30]; while(1) { system("cls"); cout<<"欢迎进入修改菜单!"<
分享到:
收藏