书店管理系统----涵盖C++大部分主题
来源:互联网 发布:ipad看电子书软件 编辑:程序博客网 时间:2024/04/28 02:49
文件1:sales_item.h
内容:定义一个销售记录的虚基类
#ifndef SALESITEMS_H#define SALESITEMS_H#include <iostream>#include <string>using namespace std ;// 定义一个销售记录的抽象类class Sales_item{public:// 默认构造函数Sales_item() : sold_number(0), unit_price(0) , flag(0) //成员初始化列表{} // 拷贝构造函数Sales_item( const Sales_item& item ) ;// 重载赋值运算符Sales_item& operator = ( const Sales_item& ) ;virtual double Gettotal_price() = 0 ; //纯虚函数定义 ,功能是返回这本书总共卖的钱double aver_price() ;public: string isbn ;//这本书的ISBNunsigned sold_number;//销售册数double unit_price;//每册数的单价double total_price ;//这本书总共卖的钱int flag ;} ;#endif
文件2:sales_item.cpp
内容:头文件sales_items.h的实现文件
#include "sales_item.h"double Sales_item::Gettotal_price() {return total_price ;}double Sales_item::aver_price(){return total_price / sold_number ;}Sales_item::Sales_item( const Sales_item& item ){isbn = item.isbn ;sold_number = item.sold_number ;total_price = item.total_price ;unit_price = item.unit_price ;}Sales_item& Sales_item::operator = ( const Sales_item& item ){isbn = item.isbn ;sold_number = item.sold_number ;total_price = item.total_price ;unit_price = item.unit_price ;return *this ;}文件3:mySales_item.h
内容:继承自文件sales_item.h中的类
#ifndef MYSALESITEM_H#define MYSALESITEM_H#include "Sales_item.h"#include <iostream>#include <string>#include <vector>using namespace std ;class MySales_item ;bool operator== ( const MySales_item & item1 , const MySales_item& item2 ) ;bool operator == ( const MySales_item& item , const string& isbn ) ;class MySales_item : public Sales_item{public:MySales_item( int sold_number = 0 , int unit_price = 0 , int flag = 0 ) :Sales_item() { } // 默认构造函数MySales_item( const MySales_item & item ) ; // 拷贝构造函数virtual double Gettotal_price() ; // 返回共卖的钱friend bool operator== ( const MySales_item & item1 , const MySales_item& item2 ) ;friend bool operator == ( const MySales_item& item , const string& isbn ) ;MySales_item& operator= ( const MySales_item & item ) ; MySales_item& operator+= ( MySales_item & item ) ; friend ostream & operator<< ( ostream & os , const MySales_item & theItem ) ; friend istream & operator>> ( istream & is , MySales_item & theItem ) ;} ;#endif
文件4:mysales_item.cpp
内容:实现头文件mysales_item.h中的内容
#include "MySales_item.h"/////////////////////////////////////////////////////////////////////////////// 关于继承的复制控制:////// 如果派生类显示定义了自己的赋值构造函数或赋值操作符,则该定义/// 将完全覆盖默认的定义.被继承类的复制构造函数和赋值操作符负责对/// 基类成分以及类的自己的成员进行复制和赋值。/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////double MySales_item::Gettotal_price(){total_price = sold_number * unit_price ;return total_price ;}// 首先将派生类对象转化为基类对象的引用,调用基类的拷贝构造函数Sales_item( theItems )// 然后调用派生类的拷贝构造函数MySales_item::MySales_item( const MySales_item& theItems ) : Sales_item( theItems ) // 拷贝构造函数{}bool operator== ( const MySales_item & item1 , const MySales_item& item2 ){return item1.isbn == item2.isbn ;}bool operator == ( const MySales_item& item , const string& isbn ){return item.isbn == isbn ;}MySales_item& MySales_item::operator+= ( MySales_item& theItems ) { sold_number += theItems.sold_number ; total_price += theItems.total_price ; return *this ;}MySales_item& MySales_item::operator= ( const MySales_item& theItems ){if( &theItems != this ) // 必须防止自身赋值{Sales_item::operator =( theItems ) ;}return *this ;}ostream& operator<< ( ostream & os , const MySales_item& theItem ) {os << theItem.isbn << "\t" << theItem.sold_number << "\t" << theItem.unit_price << "\t" << theItem.total_price << endl ; return os ;}istream& operator>> ( istream & is , MySales_item& theItem ) {is >> theItem.isbn >> theItem.sold_number >> theItem.unit_price ;// 检查输入是否成功if( is ) { theItem.total_price = theItem.sold_number * theItem.unit_price ;}else{ theItem = MySales_item() ; // 输入失败,设定对象为默认的状态}return is ;}
文件5:salesItemHanding.h
内容:管理类
#ifndef SALESITEMHANDING_H#define SALESITEMHANDING_H#include <iostream>#include "MySales_item.h"using namespace std ;class SalesItemHanding{public:void inputSalesInformation() ; // 输入书的销售信息void browseSalesInformation() ; // 浏览交易信息void inquirySalesInformation() ; // 查询销售信息void statisticsSalesInformation() ; // 统计销售信息void sortInformation( SalesItemHanding& item ) ; // 对书目进行排序void MySort( string ) ; // 下面重载了三个排序函数void MySort( double ) ;void MySort( unsigned ) ; bool MyLess( const MySales_item& item1 , const MySales_item& item2 ) ; // 自定义排序规则public:vector<MySales_item> AllSalesInformation ; // 记录所有的销售信息} ;#endif
文件6:SalesItemhanding.cpp
内容:管理类的实现
#include "SalesItemHanding.h"#include <iostream>#include <algorithm>#include <iomanip>#include <string>#include <fstream>using namespace std ;// 输入书的销售信息void SalesItemHanding::inputSalesInformation() // 输入书的销售信息{cout << "请输入书的销售信息(输入格式为ISBN 售出数量 单价 , 最后以0 0 0 结尾 )" << endl ;cout << "ISBN" << "\t" << "售出数量" << "\t" << "单价" << endl ;MySales_item item ;string str( "0" ) ;while( 1 ){cin >> item ;if( item.isbn == str && item.unit_price == 0 ){break ;}AllSalesInformation.push_back( item ) ;}return ;}void SalesItemHanding::browseSalesInformation() // 浏览交易信息{cout << "ISBN" << "\t" << "售出数量" << "\t" << "单价" << "\t" << "卖出书总共的钱" << endl ;vector<MySales_item> vec ;vec = AllSalesInformation ;vector<MySales_item>::iterator it , it1 ;for( it = vec.begin() ; it != vec.end() ; it++ ){if( it->flag == 1 ){continue ;}for( it1 = it + 1 ; it1 != vec.end() ; it1++ ){if( *it == *it1 ){*it += *it1 ;it1->flag = 1 ;}}} for( it = vec.begin() ; it != vec.end() ; it++ ){if( it->flag != 1 ){ cout << *it ; }}return ;}struct cmp //: public binary_function<string,MySales_item, bool>{bool operator() ( const string& isbn , const MySales_item& sale ){return sale.isbn == isbn ;}} ;void SalesItemHanding::inquirySalesInformation() // 查询销售信息{string isbn ;cout << "请输入要查询的书目的ISBN:" ;cin >> isbn ;vector<MySales_item>::iterator it ; it = find( AllSalesInformation.begin() , AllSalesInformation.end() , isbn ) ;if( it == AllSalesInformation.end() ){cout << "No Found!" << endl ;}else{cout << *it ;}}void SalesItemHanding::statisticsSalesInformation() // 统计销售信息{ofstream writeFile( "salesInformation.txt" , ios::out | ios::app ) ;vector<MySales_item>::iterator it , it1 ;for( it = AllSalesInformation.begin() ; it != AllSalesInformation.end() ; it++ ){if( it->flag == 1 ){continue ;}for( it1 = it + 1 ; it1 != AllSalesInformation.end() ; it1++ ){if( *it == *it1 ){*it += *it1 ;it1->flag = 1 ;}}} writeFile << "ISBN" << "\t" << "销量" << "\t" << "总进账" << "\t" << "平均售价" << endl ;for( it = AllSalesInformation.begin() ; it != AllSalesInformation.end() ; it++ ){if( it->flag != 1 ){ writeFile << it->isbn << "\t" << it->sold_number << "\t" << it->total_price << "\t" << it->aver_price() << endl ; }}}// 按照书目的isbn进行排序bool MyLess_isbn( const MySales_item & item1 , const MySales_item & item2 ) // 自定义比较规则{return item1.isbn < item2.isbn ;}// 按照书目的售出数量进行排序bool MyLess_number( const MySales_item & item1 , const MySales_item & item2 ) // 自定义比较规则{return item1.sold_number < item2.sold_number ;}// 按照书目的出售单价进行排序bool MyLess_price( const MySales_item & item1 , const MySales_item & item2 ) // 自定义比较规则{return item1.unit_price < item2.unit_price ;}// 重载了三个排序函数void SalesItemHanding::MySort( string ) // 按照isbn进行排序{sort( AllSalesInformation.begin() , AllSalesInformation.end() , MyLess_isbn ) ;cout << "排序成功!" << endl ;}void SalesItemHanding::MySort( double ) // 按照单价进行排序{sort( AllSalesInformation.begin() , AllSalesInformation.end() , MyLess_price) ;cout << "排序成功!" << endl ;}void SalesItemHanding::MySort( unsigned ) // 按照售出数量进行排序{sort( AllSalesInformation.begin() , AllSalesInformation.end() , MyLess_number) ; cout << "排序成功!" << endl ;}void SalesItemHanding::sortInformation( SalesItemHanding& item ){int nChoose ;while( 1 ){cout << "=====================排序===========================" << endl ;cout << "= =" << endl ;cout << "= 1.根据ISBN排序 2.根据单价排序 =" << endl ;cout << "= 3.根据售出数量排序 4.返回主菜单 =" << endl ;cout << "= 5.退出系统 =" << endl ;cout << "= =" << endl ;cout << "====================================================" << endl ;cout << "输入选择:" ;cin >> nChoose ;fflush(stdin) ;system( "cls" ) ;switch( nChoose ){case 1 :item.MySort( "" ) ; break ;case 2 :item.MySort( 0.0 ) ; break ;case 3 :item.MySort( ( unsigned int )1 ) ; break ;case 4 :return ;case 5 :exit( 0 ) ;default :cout << "输入错误!" << endl ;break ;}}}文件7:main.cpp
内容:测试主函数
#include "SalesitemHanding.h"void Menu( SalesItemHanding& ) ;int main(){ SalesItemHanding item ; Menu( item ) ;return 0 ;}void Menu( SalesItemHanding& item ){int nChoose ;while( 1 ){cout << "======================书店管理系统========================" << endl ;cout << "= =" << endl ;cout << "= 1.输入销售信息 2. 查询销售信息 =" << endl ;cout << "= 3.浏览销售信息 4. 统计销售信息 =" << endl ;cout << "= 5.排序 6.退出 =" << endl ;cout << "= =" << endl ;cout << "= =" << endl ;cout << "==========================================================" << endl ;cout << "请选择:" ;cin >> nChoose ;fflush(stdin) ;system( "cls" ) ;switch( nChoose ){case 1 :item.inputSalesInformation() ; break ;case 2 :item.inquirySalesInformation() ; break ;case 3 : item.browseSalesInformation() ; break ;case 4 :item.statisticsSalesInformation() ; break ;case 5 :item.sortInformation( item ) ; break ;case 6 :exit( 0 ) ;default :cout << "输入错误,请重新输入!" << endl ;break ;}}}
- 书店管理系统----涵盖C++大部分主题
- 书店管理系统---不完善
- 书店管理系统---心得
- 在线网上书店管理系统
- 星月书店管理系统 v3.0 bt
- 网上书店管理系统数据库 sql sever
- JavaSE总结程序-------书店管理系统
- 用链表编写学生管理系统(涵盖文件的输入输出)
- 客户端脚本验证码总结涵盖大部分表单验证
- 网上书店系统目录
- 网上书店系统
- 简单的书店系统
- C++primer书店程序
- Java-单机版的书店管理系统(练习设计模块和思想_系列 一 )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 二 )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 三 )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 四(1) )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 四(2) )
- 设计技巧24:观察 Observer 一对多通知状态的变换
- 关于单片机和PC通信显示中文的乱码问题。
- Mina和Netty
- VMware 克隆 Linux 系统后找不到 eth0 网卡问题
- EditText如何插入文本和图片
- 书店管理系统----涵盖C++大部分主题
- SpringMVC @PathVariable 中含有中文和点号
- 设计技巧25:原型 prototype 对一个对象拷贝
- 著名的UI设计九准则
- 队列的顺序实现(循环数组)与链式实现
- Cocos2d-x 之CCAction
- 关于单精度和双精度的取值范围问题
- node-webkit框架学习
- 编程调用Revit自己提供的命令