⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookdata_head.h

📁 C++课程设计的作业
💻 H
字号:
//*****************************
//任  务:C++课程设计
//题  目:图书管理系统
//作  者:040630520彭立勋
//题  号:课程设计Final
//用  途:声明类的头文件
//文件名:BookData_Head.h
//最后更新日期:2007.6.10
//*****************************

#ifndef BOOKDATAHEADDEF_H
#define BOOKDATAHEADDEF_H

#include "BookDef.h"

class TitleInfo	//书的标题信息及其处理函数
{
	private :
		char  ISBN[14];			//书的ISBN号最多有13个字符组成
		char  BookTitle[51];	//书名最多有50个字符(25个汉字)组成
		char  Author[31];		//书的作者名最多有30个字符组成
		char  Publisher[31];	//出版社的名称最多有30个字符组成
	public :
		/*设置类变量成员值的函数*/
		void SetISBN	( char* Val )	{ strcpy( ISBN , Val ); }		//设置书的ISBN号
		void SetTitle	( char* Val )	{ strcpy( BookTitle , Val ); }	//设置书名
		void SetAuthor	( char* Val )	{ strcpy( Author , Val ); }		//设置书的作者
		void SetPub		( char* Val )	{ strcpy( Publisher , Val ); }	//设置书的出版社
		/*获取类变量成员值的函数*/
		char* GetISBN	( )		{ return ISBN; }		//获取ISBN数组中的内容
		char* GetTitle	( )		{ return BookTitle; }	//获取BookTitle数组中的内容
		char* GetAuthor( )		{ return Author; }		//获取Aauthor数组中的内容
		char* GetPub	( )		{ return Publisher; }	//获取Publisher数组中的内容
};

class BookData : public TitleInfo //书的库存信息及其处理函数
{
	private :
		char  DateAdded[11];	//存储日期的格式为YYYY-MM-DD
		int   QtyOnHand;		//存放该书的库存量
		float Wholesale;		//存放该书的批发格
		float Retail;			//存放该书的零售格
	public :
		/*设置类变量成员值的函数*/
		void SetDateAdded	( char*	Val )	{ strcpy( DateAdded , Val ); }	//设置进书日期
		void SetQty			( int	Val )	{ QtyOnHand = Val; }			//设置书的库存量
		void SetWholesale	( float	Val )	{ Wholesale = Val; }			//设置该书批发价
		void SetRetail		( float	Val )	{ Retail = Val; }				//设置该书零售价
		void RemoveBook		( )				{ SetTitle("\0"); }				//设置该书为不存在
		/*获取类变量成员值的函数*/
		char* GetDateAdded	( )	{ return DateAdded; }	//获取DateAdded数组中的内容
		int   GetQty		( )	{ return QtyOnHand; }	//获取QtyOnHand变量的值	
		float GetWholesale	( )	{ return Wholesale; }	//获取Wholesale变量的值	
		float GetRetail		( )	{ return Retail; }		//获取Retail变量的值
		/*功能函数*/
		bool IsEmpty( );	//如果BookTitle为空返回true,否则返回false
		void BookInfo( );	//显示书的信息
		int  BookMatch( bool , char * );	//查找图书返回图书位置
};

class BookSale : public BookData //售出单种书的信息
{
	public :
		int QtySold;//销售数量
		int Local;	//本书的数据库位置
};

class FileWork	//文件操作类
{
	private :
		static fstream File;
	public :
		/*打开文件失败的异常类*/
		class OpenFileFailed{ };

		/*文件流操作函数*/
		static void OpenFile( );	//打开数据文件
		
		static void WriteToFile( const BookData& Val )			//将信息按顺序写入文件
		{ FWRITE; }
		
		static void WriteToFile( int n , const BookData& Val )	//将信息按指定位置写入文件
		{ 
			SEEKP(n);
			FWRITE;
		}
		
		static void ReadFromFile( BookData& Val )			//从文件按顺序读入信息	
		{ FREAD; }
		
		static void ReadFromFile( int n , BookData& Val )	//从文件指定位置读入信息	
		{ 
			SEEKG(n);
			FREAD;
		}
		
		static void WriteNUM( )	//写入NUM
		{ 
			File.seekp(0,ios::beg);
			File.write((char *)&NUM,sizeof(NUM));
			FBUF; 
		}
		
		static void CloseFile( )
		{ File.close( ); }
};

class Sale	//所有售出书的信息
{
	private :
		int Kind;				//卖出书的种数
		static float TaxRate;	//用于存储销售税率
		static float Total;		//用于计算整个当前所有销售的额
		static float Tax;		//销售税=TaxRate*销售额
    	static float SubTotal;	//总付款=Total+Tax
    	BookSale* SoldBook;		//储存卖出的书的信息
	public :
		class MemoryLack{ };//内存不足的异常类
		void  Cashier( );	//函数询问一笔交易要购买几种书,然后动态分配内存空间
		friend void Pay( Sale& T );
};

void FileWork::OpenFile( )
{
	try
	{
		File.open( PATH , ios::binary | ios::in | ios::out );
		if( File.fail( ) )
			throw FileWork::OpenFileFailed( );
		else File.read( (char *)&NUM , sizeof( NUM ) );
	}
	catch( FileWork::OpenFileFailed )
		{ cout<<TAB<<" 数据文件打开失败,请检查数据文件是否存在! "<<endl; }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -