| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

C++课设报告图书管理系统软件分析报告

文***享

贡献于2021-07-02

字数:43170

2015
图书理系统软件分析报告
XX学面象程序设计语言课程设计报告

目录
系统设计者开发者: 1
软件信息: 1
试验形式分工情况: 1
需求分析: 1
程序功: 2
模块功设计分析: 2
程序流程图: 5
类函数设计思想: 6
类关系图: 6
文件(表)说明: 6
类中函数说明: 7
分析讨模块: 10
系统测试: 17
说明: 23
源程序: 23


系统设计者开发者:
XX学号:XX班级:XX班
软件信息:
系统名称:图书理系统
包括文件:图书理系统压缩文件中文件
完成时间:2015年X月X日
试验形式分工情况:
完成类程序编写
需求分析:
书类进步阶梯着精神文化生活丰富书籍销售越越广泛书籍销售理智化信息化显尤重特信息技术发达天完善图书理系统必少提高效率减少工作量错误外利面象语言C++通封装完成
程序功:
根需图书理系统应该具功:
1 收银模块
2 书库理模块
3 报表模块
4 信息输出输入

模块功设计分析:
收银模块:
收银模块实现文件SalehSalecpp Cashierh Cashiercpp功:辅助图书销售工作户输入购买图书数量编号计算出销售额销售税外书库中动扣已销售图书连续
收银模块:
辅助图书销售工作




书库理模块:
书库文件默认情况文件名Defaultdata然户定义文件名文件包含该书店中图书书包含数项:
数项
含义
ISBN
书标准代码种书ISBN号唯
书名
书名称例毛泽东思想书名
作者
书作者
出版单位
出版社
进书日期
书店购进该书日期
库存量
该书前库存量书店次性购入某种书300已销售200前库存100
批发价
某种书批发价
零售价
某种书零售价例毛泽东思想批发价30元零售价40元
书库理模块允许户查书信息进书删某书修改某种书种信息
创建BookData类存储书信息该结构体成员:

成员项
含义
isbn
具14元素字符数组ISBN号13字符组成
bookTitle
具51元素字符数组书名50字符组成
author
具31元素字符数组作者名30字符组成
publisher
具31元素字符数组出版社名称30字符组成
dateAdded
具11元素字符数组存放进书日期存储日期格式YYYYMMDD
qtyInHand
Int 型整数存放该书库存量
wholesale
double型实数存放该书批发价
retail
double型实数存放该书零售价

报表模块:
报表模块分析书库中种信息产生结果报表:

报表
含义
书库列表
列出书库中图书信息
批发价列表
列出图书批发价批发价总
零售价列表
列出图书零售价零售价总
书数量列表
书库存量进行列表便理者进行分析
书价值额列表
书批发价总额进行列表便理者进行分析
进书日期列表
根进书日期进行列表

进入程序
确定数存放文件
总菜单:
1 收银模块
2 书库理模块
3 报表模块
4 退出系统
图书信息理
进行图书销售

类函数设计思想:
数函数写类中保证程序精简类设计思想充分运c++特点继承动态联编简化程序提高程序性c++类封装性功函数外透明程序定义TitleInfoBookDataSaleReportManagement五类中:
TitleInfo类保存图书基信息包含书名出版社ISBN作者等针数成员函数
BookData核心类继承TitleInfo类包含BookData数成员输入输出函数成员操作方法
SaleBookData子类完成销售功
Report类函数组成没定义数成员起限定函数范围作
Management类Report作类似

类关系图:
Sale类
BookData类
Management类
Report类
TitleInfo类










文件(表)说明:
程序包含文件(表)书库信息表(默认Defaultdata)……面表格形式列出信息
数量
ISBN号
书名
单价
金额

类中函数说明:
TitleInfo类:
设置书基信息函数:
void setTitleInformation()
设置书名函数:
void setTitle()
void setTitle(const titleType&)
设置ISBN号函数:
void setISBN()
void setISBN(const isbnType&)
设置作者名函数:
void setAuthor()
void setAuthor(const authorType&)
设置出版社函数:
void setPublisher()
void setPublisher(const publisherType&)
判断macthedTitle否title部分:
bool bookMatch(titleType&)
bool bookMatch(isbnType&)
bool bookMatch(authorType&)
bool bookMatch(publisherType&)
返回字符数组值:
titleType *getTitle()
isbnType *getISBN()
authorType *getAuthor()
publisherType *getPublisher()
BookData类:
输出书信息:
void printBookInformation()
修改书信息:
void setBookData()
调修改函数序:
void executeEditOrder(int order)
void edit()
处理日期四函数:
void setDateAdded(time_t)
void setCurrentDate()
void modifyDate()
time_t getDateAdded()
处理库存量四函数:
void increaseQuantityInHand()
void setQuantityInHand(int)
void setQuantityInHand()
int getQuantityInHand()
处理批发价三函数:
void setPriceWholeSale(double)
void setPriceWholeSale()
double getPriceWholeSale()
零售价关三函数:
void setPriceRetail(double)
void setPriceRetail()
double getPriceRetail()
根书名查找书查找函数:
static void find(titleType&)
根iSBN查找书查找函数:
static BookData *find(isbnType&)
根作者名查找书查找函数:
static void find(authorType&)
根出版社名查找书查找函数:
static void find(publisherType&)

Report类:
输出全部图书:
static void Allbook()
输出批发价列表表体:
static void WholeSale()
输出零售价列表表体:
static void Retail()
输出库存量列表表体:
static void Quantity()
书批发价总额排序然输出:
static void TotalWholeSale()
进库日期列表:
static void BookDate()

Management类:
查找理函数:
static void FindBook()
增加书:
static void AddBook()
修改书:
static void EditBook()
删书:
static void DelBook()
输出理模块表头:
ManagementOrderType printManagementHead()
根户选择调函数:
void processManagementOrder(ManagementOrderType)

Sale类:
构造函数设置默认税率:
static void Cashier(BookData& soldBook)
输出销售时屏幕显示信息:
void printSaleInformation()
购书重置书库中信息:
void renewSaleByBookData(BookData& bookProceeded)
设置税率:
static void setTaxRatio(double)
键盘读取税率:
static void readTaxRatio()
static double getTaxRatio()
计算税额:
void computeTax()
double getTax()
void increaseTotalTax()
static double getTotalTax()
static void setTotalTax(double)
读取某书库存量:
void readQuantitySold()
int getQuantitySold()
计算销售额:
void computeSubCost()
double getSubCost()
void increaseTotalCost()
static double getTotalCost()
static void setTotalCost(double)
分析讨模块:
特色算法
时处理信息表(数文件)
Finance类中calculate()函数类核心类中难度函数Calculate()实现功根交易表(tradegoodsdat)进退货表(stockdat)资金变化表(exmoneydat)计算出天前台销售利润天资金变化情况截天总财务变化信息写入财务理表(financedat)中作特色正常情况前台交易仓库交易资金处理时间样存放文件中
1 方函数重载样参数灵活选择扩充函数应范围面举例子
void TitleInfosetTitle(const titleType& newTitle)
{
memcpy完成拷贝功拷贝类型容
memcpy(title newTitle MAXtitleLength)
}
void TitleInfosetTitle()
{
cout << 请输入书名
while (true)
{
readConsoleString(title MAXtitleLength '\n')
if (strlen(title) 0)
cout << 输入空串请重新输入
else
break
}
}
参数时候调函数参数时候调函数
2 查找书算法简洁高效
void BookDatafind(publisherType& matchedPublisher)
{
sizeFinded 0
int indexPtrBook
BookData *book
for (indexPtrBook 1 indexPtrBook < sizeBook indexPtrBook++)
{
book (BookData*)ptrBook[indexPtrBook]
if (book>bookMatch(matchedPublisher) true)
{
++sizeFinded
swap(ptrBook[sizeFinded] ptrBook[indexPtrBook])
}
}
}
bool TitleInfobookMatch(publisherType& matchedPublisher)
{
if (substring(publisher matchedPublisher))
return true
else
return false
}
算法里find函数负责头尾检索外设置bookMatch函数进行字符匹配样保证代码简洁性
3 灵活指针
void writeFileData(const filenameType& filename)
{
fstream outputFile
remove(filename)
int index
outputFileopen(filename iosout | iosbinary|iosapp)
outputFilewrite((char*)&BookDatasizeBook sizeof(int))
for (index 1 index < BookDatasizeBook index++)
{
outputFilewrite((char*)BookDataptrBook[index] sizeof(BookData))
delete(BookData*)BookDataptrBook[index]
}
outputFileclose()
delete[] BookDataptrBook
delete[] SaleptrSold
}
4 时间处理算法
修改日期函数系统带tm结构体定义时间mktime库函数参数指结构体数转换成1970年1月1日0时0分0秒起秒数

void BookDatamodifyDate()
{
tm date
int year month day
cout << 请输入年份
readInteger(year)
cout << 请输入月份
readInteger(month)
cout << 请输入号:
readInteger(day)
datetm_year year 1900 获取年份
datetm_mon month 1 获取月份
datetm_mday day 获取天
datetm_hour 00
datetm_min 00
datetm_sec 00
dateAdded mktime(&date)
cout << 输入日期:
printDate(dateAdded)
cout << endl
}
显示天日期函数:
void printDateToday()
{
char tmpStr[80] 天日期
printStringInConsoleMiddle(getDateStringToday(tmpStr))
}
获取系统日期函数
char *getDateStringToday(char*tmpStr)
{
tm *date
time_t tempTime

tempTime time(NULL)
date localtime(&tempTime)
strftime(&tmpStr[14] 80 Y年m月d日 HMS date)
return tmpStr
}
5 整程序函数划分较细致样调函数更加灵活程序代码更加简洁
存足策
存足文件输入算法程序运行中数缓区程序结束时候统写入文件中针项足运行程序时保证次正常退出程序学程中会注意问题采取输入写算法避免问题



系统测试:
1 界面正常

2 收银模块测试正常




3 图书理模块基正常








4 报表模块测试正常


说明:
1 收银模块:户进入该模块系统动提示户否购买图书购买图书系统会提示户输入图书ISBN号系统书库中查找该书果书库中没相关信息提示户找该书找该书库存量零提示户该书已卖完找该书库存量会提示户输入购买图书数量售书完成会提示购书总额零售税
2 书库理模块:户提示输入相应数字选择相应功
查找某书信息:通书名模糊查找方式查找图书户需输入书名包含关键字找书籍
增加书:增加图书种类提示输入图书信息
修改书信息:系统会提示需修改项户提示输入
删书:书进行删操作户需输入书ISBN号系统列出书全部信息户确认否删
改变税率:户根实际情况改变税率默认税率006
3 报表模块
户根需选择列表方式屏幕限制屏输出两书信息继续查课意键查面图书
4 退出系统
4 课退出系统关闭文件

源代码
***************************************************
* 文件出类BookData定义继承TitleInfo类 *
***************************************************
#ifndef BookData_H
#define BookData_H
#includeTitleInfoh
#includeTypeDefineh
#includeCommonFunctionsh
class BookData public TitleInfo 定义BookData类该类继承TitleInfo
{
private
time_t dateAdded
int quantityInHand
double priceWholeSale
double priceRetail
public
static int sizeBook
static int *sizePtrBook
static int sizeFinded
static void **ptrBook
static void increaseBookKind()
BookData()
void printBookInformation() 输出书信息
void setBookData() 修改书信息
void executeEditOrder(int order) 调修改函数序
void edit()
void setDateAdded(time_t) 处理日期四函数
void setCurrentDate()
void modifyDate()
time_t getDateAdded()
void increaseQuantityInHand() 处理库存量四函数
void setQuantityInHand(int)
void setQuantityInHand()
int getQuantityInHand()
void setPriceWholeSale(double) 批发价关三函数
void setPriceWholeSale()
double getPriceWholeSale()
void setPriceRetail(double) 零售价关三函数
void setPriceRetail()
double getPriceRetail()
static void find(titleType&) 根书名查找书查找函数
static BookData *find(isbnType&)根iSBN查找书查找函数
static void find(authorType&) 根作者名查找书查找函数
static void find(publisherType&) 根出版社名查找书查找函数
}
#endif


#ifndef Cashier_H
#define Cashier_H
#include Saleh
void InitialCashier()
void printCashierHead()
void printCashierList()
#endif

*******************************************
* 文件出常函数原型 *
*******************************************
#ifndef CommonFunctions_H
#define CommonFunctions_H
#includeTypeDefineh
控制台读取字符串函数原型
void readConsoleString(char * streamsize char delim)
读写模式开文件
bool openFileInReadWriteMode(fstream& mediumFile const filenameType& filename)
bool FileExists(const filenameType& fname) 判断文件否存
streamsize GetFileSize(fstream &mediumFile) 获取文件
int substring(char a[] char b[]) 判断b否a子串
重新设置缓区
void resizePtrSequence(void **& ptrSequence int *& oldSize const int& newSize)
void memoryExceedException()
void readReal(double&) 读取浮点数
void readInteger(int &)
void printDate(time_t t)
void printCurrentDate()
bool getOrderYes() 键盘读取yes函数提供种出错处理方法
void readFilename(filenameType& filename)
void readEnterKeyForContinue()
void printPrice(double price int)
void printCost(double cost int)
void printStringInConsoleMiddle(char*) 控制屏幕中间输出容
void printDateToday() 显示天日期
#endif

#ifndef Management_H
#define Management_H
#includeCommonFunctionsh
#includeBookDatah
enum ManagementOrderType 定义书库理关类型
{
manaError
manaFindBook
manaAddBook
manaEditBook
manaDelBook
manaChangeTaxRatio
manaReturnMainMenu
}
class Management
{
public
static void FindBook()
static void AddBook()
static void EditBook()
static void DelBook()
}
ManagementOrderType printManagementHead()
void processManagementOrder(ManagementOrderType)
#endif
#ifndef Report_H
#define Report_H
#includeBookDatah
报表关定义
enum reportOrderType 定义枚举类型方便调报表函数
{
reportError
reportAllBook
reportWholeSale
reportRetail
reportQuantity
reportTotalWholeSale
reportBookDate
reportReturnMainMenu
}
class Report
{
public
static void Allbook()
static void WholeSale()
static void Retail()
static void Quantity()
static void TotalWholeSale()
static void BookDate()
}
reportOrderType getReportOrder()
void processReportMenuOrder(reportOrderType)
#endif

******************************************
* 文件出Sale类定义 *
******************************************
#ifndef Sale_H
#define Sale_H
#include BookDatah
#include TypeDefineh
#include CommonFunctionsh
class Sale public BookData 定义Sale类该类继承BookData
{
private
static double taxRatio
int quantitySold
double tax
double subCost
static double totalCost
static double totalTax
public
ptrSold包含N指针类型数列指针指址
某Sale类型象首址sizePtrSold表示现开辟sizeSoldvoid*
sizeSold表示现开辟sizeSoldSale现进行sizeSold次销售
次销售指卖某种书n注意sizeSoldsizePtrSold值定相等
static void **ptrSold
static int *sizePtrSold
static int sizeSold
static void Cashier(BookData& soldBook)
void printSaleInformation()
void renewSaleByBookData(BookData& bookProceeded)
static void setTaxRatio(double)
static void readTaxRatio()
static double getTaxRatio()
void computeTax() 计算销售额
double getTax()
void increaseTotalTax()
static double getTotalTax()
static void setTotalTax(double)
void readQuantitySold()
int getQuantitySold()
void computeSubCost()
double getSubCost()
void increaseTotalCost()
static double getTotalCost()
static void setTotalCost(double)
}
#endif

*******************************************
* 文件出类TitleInfo定义 *
*******************************************
#ifndef TitleInfo_H
#define TitleInfo_H
#includeTypeDefineh
#includeCommonFunctionsh
class TitleInfo 定义TitleInfo类该类类继承
{
private
titleType title
isbnType isbn
authorType author
publisherType publisher
public
void setTitleInformation()
void setTitle()
void setTitle(const titleType&)
void setISBN()
void setISBN(const isbnType&)
void setAuthor()
void setAuthor(const authorType&)
void setPublisher()
void setPublisher(const publisherType&)
bool bookMatch(titleType&)
bool bookMatch(isbnType&)
bool bookMatch(authorType&)
bool bookMatch(publisherType&)
titleType *getTitle()
isbnType *getISBN()
authorType *getAuthor()
publisherType *getPublisher()
}
#endif

*************************************************
* 文件定义程序中常量类型 *
*************************************************
#ifndef TypeDefine_H
#define TypeDefine_H
#define _CRT_SECURE_NO_DEPRECATE
#include
#include
#include
using namespace std
const int MAXisbnLength 14
const int MAXtitleLength 51
const int MAXauthorLength 32
const int MAXpublisherLength 31
const int MAX_SIZE 2147483647
typedef char filenameType[FILENAME_MAX]FILENAME_MAX系统定义整数260
const filenameType defaultFileName defaultdata
typedef char isbnType[MAXisbnLength]
typedef char titleType[MAXtitleLength]
typedef char authorType[MAXauthorLength]
typedef char publisherType[MAXpublisherLength]
#endif

************************************************
* 文件类BookData中函数出实现 *
************************************************
#include BookDatah 类中静态变量初始化
int BookDatasizeBook 0
int BookDatasizeFinded 0
int *BookDatasizePtrBook NULL
void **BookDataptrBook NULL
BookDataBookData()
{
quantityInHand 0
} 显示书信息
void BookDataprintBookInformation()
{
cout << ISBN号 << *getISBN() << endl
cout << 书名 << *getTitle() << endl
cout << 作者 << *getAuthor() << endl
cout << 出版社 << *getPublisher() << endl
cout << 进书日期
printDate(getDateAdded())
cout << endl
cout << 库存量 << getQuantityInHand() << endl
cout << 批发价
printPrice(getPriceWholeSale() 0)
cout << endl << 零售价
printPrice(getPriceRetail() 0)
cout << endl
}
设置书信息
void BookDatasetBookData()
{
setTitleInformation()
setCurrentDate()
setQuantityInHand()
setPriceWholeSale()
setPriceRetail()
}
修改日期
void BookDatamodifyDate()
{
tm date
int year month day
cout << 请输入年份
readInteger(year)
cout << 请输入月份
readInteger(month)
cout << 请输入号:
readInteger(day)
datetm_year year 1990 获取年份
datetm_mon month 1 获取月份
datetm_mday day 获取天
dateAdded mktime(&date) mktime库函数参数指结构体数转换成
1970年1月1日0时0分0秒起秒数
cout << 输入日期:
printDate(dateAdded)
cout << endl
}
调修改函数序
void BookDataexecuteEditOrder(int order)
{
switch (order) 根参数order决定调函数序
{
case 1
setTitle()
break
case 2
setAuthor()
break
case 3
setPublisher()
break
case 4
modifyDate()
break
case 5
setQuantityInHand()
break
case 6
setPriceWholeSale()
break
case 7
setPriceRetail()
break
default
cout << 认识命令 << endl
return
}
cout << 修改成功… << endl
}
显示修改项
void printBookDateEditMenu()
{
printStringInConsoleMiddle(想修改项)
printStringInConsoleMiddle(1书名 )
printStringInConsoleMiddle(2作者 )
printStringInConsoleMiddle(3出版社 )
printStringInConsoleMiddle(4进书日期 )
printStringInConsoleMiddle(5库存量 )
printStringInConsoleMiddle(6批发价 )
printStringInConsoleMiddle(7零售价 )
printStringInConsoleMiddle(8退出修改 )
cout << 请选择 18间整数:
}
输入效选择
int getBookDataEditOrder()
{
int order

cout << 请选择 17间整数:
readInteger(order)
while (order<1 || order>8)
{
cout << 选择错误请重新输入17间整数:
readInteger(order)
}
return order
}
修改书信息
void BookDataedit()
{
int order

while (true)
{
cout << 书前信息 << endl
printBookInformation()
printBookDateEditMenu()
order getBookDataEditOrder()
if (8 order)
break
else
{
executeEditOrder(order)
readEnterKeyForContinue()
}
}
}
增加书库存量
void BookDataincreaseBookKind()
{
BookData *newBook
BookData *findBook
newBook new BookData
newBook>setBookData()
findBook BookDatafind(*newBook>getISBN())
if (findBook NULL)
{
delete newBook
cout << 现添加书已存书库中该书信息: << endl
findBook>printBookInformation()
cout << endl << 想修改书(yesno)
if (getOrderYes())
findBook>edit()
}
else
{
cout << 添加概述成功 << endl
++sizeBook
if (sizeBook *sizePtrBook)
resizePtrSequence(ptrBook sizePtrBook sizeBook * 2)
ptrBook[sizeBook] (void *)newBook
}
}
void BookDatasetDateAdded(time_t newDate)
{
dateAdded newDate
}
void BookDatasetCurrentDate()
{
dateAdded time(NULL)
}
time_t BookDatagetDateAdded()
{
return dateAdded
}
void BookDataincreaseQuantityInHand()
{
int increasedAmount

cout << 请输入该书新入库数量:
cin >> increasedAmount
quantityInHand + increasedAmount
}
void BookDatasetQuantityInHand(int newQuantity)
{
quantityInHand newQuantity
}
根情况重新设置书数量
void BookDatasetQuantityInHand()
{
int order
cout << 想添加种书库存重设该书库存? << endl
cout << 1增加该书库存 << endl
cout << 2重设该书库存 << endl
cout << 3书新书前书库中没该书 << endl
cout << 请输入选择(13)
readInteger(order)
while (order<1 || (order>3))
{
cout << 输入命令错误请重新输入:
readInteger(order)
}
switch (order)
{
case 1
cout << 请输入该书新增数量:
break
case 2
cout << 请输入该书库存量:
break
case 3
cout << 请输入该书首次进货数量:
break
default
cout << 法识命令 << endl
return
}
int tempQuantity
while (true)
{
readInteger(tempQuantity)
if (tempQuantity<0)
cout << 输入错误请次输入:
else
break
}
if (1 order)
quantityInHand + tempQuantity
else
setQuantityInHand(tempQuantity)
}
int BookDatagetQuantityInHand()
{
return quantityInHand
}
void BookDatasetPriceWholeSale(double newPrice)
{
priceWholeSale newPrice
}
设置书批发价
void BookDatasetPriceWholeSale()
{
cout << 请输入该书批发价:
while (true)
{
readReal(priceWholeSale)
if (priceWholeSale<0)
cout << 输入错误请次输入:
else
break
}
}
double BookDatagetPriceWholeSale()
{
return priceWholeSale
}
void BookDatasetPriceRetail(double newPrice)
{
priceRetail newPrice
}
设置书零售价
void BookDatasetPriceRetail()
{
cout << 请输入书零售价:
while (true)
{
readReal(priceRetail)
if (priceRetail<0)
cout << 输入错误请次输入:
else
break
}
}
double BookDatagetPriceRetail()
{
return priceRetail
}
通书名查找书
void BookDatafind(titleType& matchedTitle)
{
sizeFinded 0
int indexPtrBook
BookData *book

for (indexPtrBook 1 indexPtrBook < sizeBook indexPtrBook++)
{
book (BookData*)ptrBook[indexPtrBook]
if ((*book)bookMatch(matchedTitle) true)
{
++sizeFinded
swap(ptrBook[sizeFinded] ptrBook[indexPtrBook])
}
}
}
通ISBN号查找书
BookData *BookDatafind(isbnType& matchedISBN)
{
sizeFinded 0
int indexPtrBook
BookData *book
for (indexPtrBook 1 indexPtrBook < sizeBook indexPtrBook++)
{
book (BookData*)ptrBook[indexPtrBook]
if (strcmp(*(book>getISBN()) matchedISBN) 0)
{
swap(ptrBook[1] ptrBook[indexPtrBook])
sizeFinded 1
return book
}
}
return NULL
}
通作者查找书
void BookDatafind(authorType& matchedAuthor)
{
sizeFinded 0
int indexPtrBook
BookData *book
for (indexPtrBook 1 indexPtrBook < sizeBook indexPtrBook++)
{
book (BookData*)ptrBook[indexPtrBook]
if (book>bookMatch(matchedAuthor) true)
{
++sizeFinded
swap(ptrBook[sizeFinded] ptrBook[indexPtrBook])
}
}
}
通出版社查找书
void BookDatafind(publisherType& matchedPublisher)
{
sizeFinded 0
int indexPtrBook
BookData *book
for (indexPtrBook 1 indexPtrBook < sizeBook indexPtrBook++)
{
book (BookData*)ptrBook[indexPtrBook]
if (book>bookMatch(matchedPublisher) true)
{
++sizeFinded
swap(ptrBook[sizeFinded] ptrBook[indexPtrBook])
}
}
}


#include Cashierh
初始化函数
void InitialCashier()
{
SaleptrSold new void *
SalesizePtrSold (int *)SaleptrSold
*SalesizePtrSold 1
SalesizeSold 0
SalesetTotalTax(0)
SalesetTotalCost(0)
}
void printCashierHead()
{
printStringInConsoleMiddle(前台销售模块)
cout << endl
printDateToday()
cout << endl
cout << 请输入购买书店ISBN号:
}
void printCashierListHead()
{
printStringInConsoleMiddle(前台销售模块)
printDateToday()
cout << 数量 ISBN号 书名 单价 金额
<< endl
}
屏幕输出销售信息
void printCashierList()
{
int iSizeSold
Sale *tempSale
if (SalesizeSold > 0)
{
printCashierListHead()
for (iSizeSold 1 iSizeSold < SalesizeSold iSizeSold++)
{
tempSale (Sale*)SaleptrSold[iSizeSold]
tempSale>printSaleInformation()
cout << endl
if (iSizeSold 20 0)
{
readEnterKeyForContinue()
printCashierListHead()
}
delete tempSale
}
cout << 销售合计
printCost(SalegetTotalCost() 20)
cout << endl
cout << 零售税
printCost(SalegetTotalTax() 20)
cout << endl
cout << 应付总额
printCost(SalegetTotalTax() + SalegetTotalCost() 20)
cout << endl
}
else
cout << endl << endl << 没卖出书 << endl
readEnterKeyForContinue()
SalesizeSold 0
delete[] SaleptrSold
}


#includeCommonFunctionsh
#include
using namespace std
#include
函数完成键盘读取字符串功
void readConsoleString(char *cinString streamsize cinStringMaximumSize char delim)
{
cinget(cinString cinStringMaximumSize delim)
cinclear()
cinignore(MAX_SIZE delim)
}
二进制读写模式开文件
bool openFileInReadWriteMode(fstream& mediumFile const filenameType& filename)
{
mediumFileclear()
if (FileExists(filename) false) 判断文件否存
mediumFileopen(filename iosin | iosout | iosbinary | iostrunc)
else
mediumFileopen(filename iosin | iosout | iosbinary|iosapp)
return mediumFilefail()
}
通否开文件判断否存存返回true反返回false
bool FileExists(const filenameType& fname)
{
ifstream tempFile
bool existFile

tempFileopen(fname)
existFile tempFilefail()
tempFileclose()
return existFile
}
获取文件1代表文件存否代表文件
streamsize GetFileSize(fstream &mediumFile)
{
streamsize mediumPosition
mediumFileseekg(0L iosend)
mediumPosition mediumFiletellg()
mediumFileseekg(0 iosbeg)
return mediumPosition
}
判断b否a子串返回true否返回false
int substring(char a[] char b[])
{
return (strstr(ab) NULL) false true
}
重新设置缓区
void resizePtrSequence(void **& ptrSequence int *& oldSizePtr const int& newSize)
{
if (newSize<0)
{
cout << Incorrect newSize value << endl
return
}
void **tempPtrSequence
tempPtrSequence new void *[newSize]
if (newSize < (*oldSizePtr))
{
memcpy(tempPtrSequence ptrSequence sizeof(void*)*newSize)
}
if (newSize > (*oldSizePtr))
{
memcpy(tempPtrSequence ptrSequence sizeof(void*)*(*oldSizePtr))
}

delete[]ptrSequence
ptrSequence tempPtrSequence
if (NULL ptrSequence)
{
oldSizePtr NULL
if (newSize)
memoryExceedException()
}
else
{
oldSizePtr (int*)tempPtrSequence
*oldSizePtr newSize
}
}
存出错显示函数
void memoryExceedException()
{
cout << 存溢出错误 << endl
}
读取浮点数
void readReal(double &real)
{
while (true)
{
cin >> real
if (cinfail())
{
cout << 输入错误请重新输入
cinclear()
cinignore(MAX_SIZE '\n')
}
else
break
}
cinignore(MAX_SIZE '\n') 忽略读取数面剩字符
}
键盘读取整数
void readInteger(int &integer)
{
while (true)
{
cin >> integer
if (cinfail())
{
cout << 输入错误请重新输入
cinclear()
cinignore(MAX_SIZE '\n')
}
else
break
}
cinignore(MAX_SIZE '\n')
}
显示日期
void printDate(time_t t)
{
tm *date
char tmpStr[80]

date localtime(&t)

strftime(tmpStr80Y年m月d日date)
cout << tmpStr
}
获取系统前日期显示
void printCurrentDate()
{
time_t t time(NULL)
printDate(t)
}
键盘读取yes函数提供种出错处理方法
bool getOrderYes()
{
char orderString[5]

while (true)
{
readConsoleString(orderString 5 '\n')
if (strcmp(orderString no) 0)
return false
else if (strcmp(orderString yes) 0)
return true
else
cout << 输入yesno请重新输入
}
}
键盘读取字符串
void readFilename(filenameType& filename)
{
cout << 请输入文件名
while (true)
{
readConsoleString(filename FILENAME_MAX '\n')
if (strlen(filename) 0)
cout << 输入文件名效请重新输入
else
break
}
}
读取回车字符
void readEnterKeyForContinue()
{
cout << 回车键继续 << endl
char tmpString[2]
readConsoleString(tmpString 2 '\n')
}
显示价格
void printPrice(double price int width)
{
cout << RMB
coutprecision(1)
coutwidth(width)
coutsetf(iosfixed)
coutsetf(iosleft)
cout << price
coutunsetf(iosfixed)
coutunsetf(iosleft)
}
void printCost(double cost int width)
{
printPrice((double)cost width)
}
面函数屏幕中间输出容
void printStringInConsoleMiddle(char*PrintedString) 控制屏幕中间输出容
{
streamsize length

length strlen(PrintedString)
if (length > 80)
cout << PrintedString << endl
else
{
static streamsize i
static streamsize SizeBlankSpaceString
SizeBlankSpaceString (80 length) 2
for (i 0 i cout <<
cout << PrintedString << endl
}
}
获取系统日期
char *getDateStringToday(char*tmpStr)
{
tm *date
time_t tempTime

tempTime time(NULL)
date localtime(&tempTime)
strftime(&tmpStr[14] 80 Y年m月d日 HMS date)
return tmpStr
}
显示天日期
void printDateToday()
{
char tmpStr[80] 天日期
printStringInConsoleMiddle(getDateStringToday(tmpStr))
}

#includeCommonFunctionsh
#includeCashierh
#includeReporth
#includeManagementh
#includeTypeDefineh
#include
using namespace std
#include
enum mainMenuOrderType
{
errorMainMenu cashier bookManagement report exitSystem
}
void processMainMenuOrder(mainMenuOrderType)
void loadFileData(filenameType&) 文件中读取数
void process() 菜单处理模块
void writeFileData(const filenameType&)文件中写数
void processCashier() 前台销售模块
void processManagement() 书库理模块
void processReport() 报表模块
int main()
{
filenameType filename

loadFileData(filename)
process()
writeFileData(filename)
cout << 已退出书库理系统 << endl
return 0
}
判断文件长度否正确
bool correct(streamsize fileSize)
{
fileSize sizeof(int)
if (fileSize < (streamsize)BookDatasizeBook)
return false
return fileSize BookDatasizeBook*sizeof(BookData)
}
书库读取信息
void loadFileData(filenameType & filename)
{
fstream mediumFile

cout << 否指定文件载入保存数(yesno) << endl
cout << 果输入no << defaultFileName << 默认保存数文件 << endl
if (getOrderYes())
readFilename(filename)
else
strcpy(filename defaultFileName)
while (openFileInReadWriteMode(mediumFile filename) false)
{
mediumFileclear()
cout << 输入文件名正确请重新输入
readFilename(filename)
}
streamsize fileSize
fileSize GetFileSize(mediumFile)
bool correctFile true
BookData *books NULL
开始读入文件
if (fileSize > sizeof(int))
{
mediumFileread((char*)&BookDatasizeBook sizeof(int))
if (correct(fileSize))
{
books new BookData[BookDatasizeBook]
if (NULL books)
memoryExceedException()
mediumFileread((char*)books sizeof(BookData)*BookDatasizeBook)
}
else
correctFile false
}
else
correctFile false

if (correctFile false)
{
BookDatasizeBook 0
mediumFileclose()
remove(filename)
openFileInReadWriteMode(mediumFile filename)
}
int indexBook
BookDataptrBook new void *[BookDatasizeBook + 1]
BookDatasizePtrBook (int *)BookDataptrBook
*BookDatasizePtrBook BookDatasizeBook + 1
for (indexBook 0 indexBook < BookDatasizeBook indexBook++)
{
BookDataptrBook[indexBook + 1] &books[indexBook]
}
cout << 书库中现 << BookDatasizeBook << 种书 << endl << endl
mediumFileclose()
}
书库写数
void writeFileData(const filenameType& filename)
{
fstream outputFile
remove(filename)
int index
outputFileopen(filename iosout | iosbinary|iosapp)
outputFilewrite((char*)&BookDatasizeBook sizeof(int))
for (index 1 index < BookDatasizeBook index++)
{
outputFilewrite((char*)BookDataptrBook[index] sizeof(BookData))
delete(BookData*)BookDataptrBook[index]
}
outputFileclose()
delete[] BookDataptrBook
delete[] SaleptrSold
}
显示书库理系统功
void printMainMenuHead()
{
printStringInConsoleMiddle(图书理系统)
printStringInConsoleMiddle(菜单)
printStringInConsoleMiddle(1 收银模块)
printStringInConsoleMiddle(2 书库理模块)
printStringInConsoleMiddle(3 报表模块)
printStringInConsoleMiddle(4 退出系统)
cout << endl
cout << 请选择14间数字
}
根选择决定调函数
mainMenuOrderType readMainMenuOrder()
{
printMainMenuHead()
int order
readInteger(order)
while (order<1 || order>4)
{
cout << 输入错误请输入14间数
readInteger(order)
}
switch (order)
{
case 1
return cashier
case 2
return bookManagement
case 3
return report
case 4
return exitSystem
default
return errorMainMenu
}
}
根户选择决定调功
void process()
{
mainMenuOrderType order

while (true)
{
order readMainMenuOrder()
if (order exitSystem)
processMainMenuOrder(order)
else
return
}
}

void processMainMenuOrder(mainMenuOrderType order)
{
switch (order)
{
case cashier
processCashier()
break
case bookManagement
processManagement()
break
case report
processReport()
break
default
cout << 函数processMainMenuOrder出现未知错误 << endl
}
}
销售处理函数
void processCashier()
{
static isbnType tempISBN
static BookData *tempBook

InitialCashier()
while (true)
{
printCashierHead()
readConsoleString(tempISBNMAXisbnLength'\n')
tempBook BookDatafind(tempISBN)
if (NULL tempBook)
{
cout << 书库中没书 << endl

}
else
{
SaleCashier(*tempBook)
}
cout << 想继续(yesno)
if (getOrderYes() false)
break
}
printCashierList()
}

void processManagement()
{
ManagementOrderType order
while (true)
{
order printManagementHead()
if (order manaReturnMainMenu)
processManagementOrder(order)
else
return
}
}

void processReport()
{
reportOrderType order
while (true)
{
order getReportOrder()
if (order reportReturnMainMenu)
processReportMenuOrder(order)
else
return
}
}

#includeManagementh
#includeSaleh
显示书库理模块功
ManagementOrderType printManagementHead()
{
printStringInConsoleMiddle(图书理系统)
printStringInConsoleMiddle(书库理模块)
printStringInConsoleMiddle(1 查找某书信息)
printStringInConsoleMiddle(2 增加新书种)
printStringInConsoleMiddle(3 修改书信息)
printStringInConsoleMiddle(4 删书)
printStringInConsoleMiddle(5 返回菜单)
cout << 请输入15间整数:
int order
readInteger(order)
while (order<1 || order>6)
{
cout << 输入错误请输入16间整数:
readInteger(order)
}
switch (order)
{
case 1
return manaFindBook
case 2
return manaAddBook
case 3
return manaEditBook
case 4
return manaDelBook
case 5
return manaReturnMainMenu
default
return manaError
}
}
根选择调相应函数
void processManagementOrder(ManagementOrderType order)
{
switch (order)
{
case manaFindBook
ManagementFindBook()
break
case manaAddBook
ManagementAddBook()
break
case manaEditBook
ManagementEditBook()
break
case manaDelBook
ManagementDelBook()
break
default
cout << 出现未知选择\n
}
}
ISBN查找
void FindBookByISBN()
{
isbnType isbn
BookData *findedBook

cout << 输入ISBN号\n
readConsoleString(isbn MAXisbnLength '\n')
findedBook BookDatafind(isbn)
if (findedBook NULL)
{
cout << 书信息 << endl
findedBook>printBookInformation()
readEnterKeyForContinue()
}
else
cout << 没找 << endl
}
书名查找
void FindBookByTitle()
{
titleType title

cout << 请输入书名
readConsoleString(title MAXtitleLength '\n')
BookDatafind(title)
if (BookDatasizeFinded)
{
cout << 书信息 << endl
for (int i 1 i < BookDatasizeFinded i++)
{
cout << endl << endl << endl
((BookData*)BookDataptrBook[i])>printBookInformation()
if (i 2 0)
readEnterKeyForContinue()
}
}
else
cout << 书库中书 << endl
}
出版社
void FindBookByPublisher()
{
publisherType publisher

cout << 请输入出版社
readConsoleString(publisher MAXpublisherLength '\n')
BookDatafind(publisher)
if (BookDatasizeFinded)
{
cout << 书信息 << endl
for (int i 1 i < BookDatasizeFinded i++)
{
cout << endl << endl << endl
((BookData*)BookDataptrBook[i])>printBookInformation()
if (i 2 0)
readEnterKeyForContinue()
}
}
else
cout << 书库中书 << endl
}
作者
void FindBookByAuthor()
{
authorType author

cout << 请输入作者名
readConsoleString(author MAXauthorLength '\n')
BookDatafind(author)
if (BookDatasizeFinded)
{
cout << 书信息 << endl
for (int i 1 i < BookDatasizeFinded i++)
{
cout << endl << endl << endl
((BookData*)BookDataptrBook[i])>printBookInformation()
if (i 2 0)
readEnterKeyForContinue()
}
}
else
cout << 没找 << endl
}
模糊查找
void FindBookInAnyway()
{
char matchedString[80]

cout << 请输入匹配字符串:
readConsoleString(matchedString 80 '\n')
int indexPtrBook
BookData *book
titleType title
strncpy(title matchedString MAXtitleLength)
title[MAXtitleLength 1] 0
publisherType publisher
strncpy(publisher matchedString MAXpublisherLength)
cout << publisher
publisher[MAXpublisherLength 1] 0
authorType author
strncpy(author matchedString MAXauthorLength)
author[MAXauthorLength 1] 0
BookDatasizeFinded 0
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
if (book>bookMatch(author) true || book>bookMatch(publisher) true || book>bookMatch(title) true)
{
++BookDatasizeFinded
swap(BookDataptrBook[BookDatasizeFinded] BookDataptrBook[indexPtrBook])
}
}
if (BookDatasizeFinded)
{
cout << 书信息 << endl
for (int i 1 i < BookDatasizeFinded i++)
{
cout << endl << endl << endl
((BookData*)BookDataptrBook[i])>printBookInformation()
if (i 2 0)
readEnterKeyForContinue()
}
}
else
cout << 没找<}
查找理函数
void ManagementFindBook()
{
printStringInConsoleMiddle(图书理系统查找模块)
printStringInConsoleMiddle(1 精确ISBN号查找)
printStringInConsoleMiddle(2 书名模糊查找)
printStringInConsoleMiddle(3 出版社模糊查找)
printStringInConsoleMiddle(4 作者模糊查找)
printStringInConsoleMiddle(5 模糊查找(包括ISBN号))
cout << 请选择查找方式(15)
int order
readInteger(order)
while (order<1 || order>5)
{
cout << 输入错误请重新输入
readInteger(order)
}
switch (order)
{
case 1
FindBookByISBN()
break
case 2
FindBookByTitle()
break
case 3
FindBookByPublisher()
break
case 4
FindBookByAuthor()
break
case 5
FindBookInAnyway()
break
default
cout << 嫩执行步写程序写累死 << endl
}
}
增加书
void ManagementAddBook()
{
BookDataincreaseBookKind()
}
修改书
void ManagementEditBook()
{
BookData *findedBook
isbnType isbn

cout << 请输入修改书号
readConsoleString(isbn MAXisbnLength '\n')
findedBook BookDatafind(isbn)
if (findedBook NULL)
findedBook>edit()
else
cout << 没找 << endl
}

void ManagementDelBook()
{
BookData *findedBook
isbnType isbn

cout << 请输入删书号
readConsoleString(isbn MAXisbnLength '\n')
findedBook BookDatafind(isbn)
if (findedBook NULL)
{
cout << 找书信息 << endl
findedBook>printBookInformation()
cout << 确认删(yesno)
if (getOrderYes())
{
delete findedBook
swap(BookDataptrBook[1] BookDataptrBook[BookDatasizeBook])
BookDatasizeBook
}
}
else
cout << 没找 << endl
}


#includeReporth
输出列表
void printReportMenuHead()
{
printStringInConsoleMiddle(FIVESTAR图书理系统)
printStringInConsoleMiddle(书库理模块)
printStringInConsoleMiddle(1 书库列表)
printStringInConsoleMiddle(2 批发价列表)
printStringInConsoleMiddle(3 零售价列表)
printStringInConsoleMiddle(4 书库存列表)
printStringInConsoleMiddle(5 桉书批发价总额列表)
printStringInConsoleMiddle(6 入库日期列表 )
printStringInConsoleMiddle(7 返回菜单 )
cout << 请输入17间整数
}
获取列表选择
reportOrderType getReportOrder()
{
printReportMenuHead()
int order
readInteger(order)
while (order<1 || order>7)
{
cout << 输入错误请重新输入17间整数:
readInteger(order)
}
switch (order)
{
case 1
return reportAllBook
case 2
return reportWholeSale
case 3
return reportRetail
case 4
return reportQuantity
case 5
return reportTotalWholeSale
case 6
return reportBookDate
case 7
return reportReturnMainMenu
default
return reportError
}
}
根输入选择决定调报表函数
void processReportMenuOrder(reportOrderType order)
{
switch (order)
{
case reportAllBook
ReportAllbook()
break
case reportWholeSale
ReportWholeSale()
break
case reportRetail
ReportRetail()
break
case reportQuantity
ReportQuantity()
break
case reportTotalWholeSale
ReportTotalWholeSale()
break
case reportBookDate
ReportBookDate()
break
default 执行步
cout << 出现未知错误processReportMenuOrder 函数 << endl
}
}
输出全部图书时表头
void printAllbookListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(1列出书库中书信息)
printDateToday()
cout << endl << endl
}

输出全部图书时表体
void ReportAllbook()
{
BookData *book
int indexPtrBook

printAllbookListHead()

for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData *)BookDataptrBook[indexPtrBook]
book>printBookInformation()
cout << endl
if (indexPtrBook 2 0)
{
readEnterKeyForContinue()
printAllbookListHead()
}
}
}
输出批发价列表表头
表头表体输出分成2函数处理屏输出
void printWholeSaleListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(2批发价列表)
printDateToday()
cout << ISBN号 书名 批发价
<< endl
}
输出批发价列表表体
void ReportWholeSale()
{
BookData *book
double TotalWholeSale 0
int indexPtrBook
printWholeSaleListHead()
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
coutsetf(iosleft)
coutwidth(15)
cout << *book>getISBN() <<
coutwidth(45)
cout << *book>getTitle() <<
coutunsetf(iosleft)
printPrice(book>getPriceWholeSale() 0)
cout << endl
TotalWholeSale + book>getPriceWholeSale()*book>getQuantityInHand()
if (indexPtrBook 19 0)
{
readEnterKeyForContinue()
printWholeSaleListHead()
}
}
cout << 批发价总:
printPrice(TotalWholeSale 40)
cout << endl
readEnterKeyForContinue()
}
输出零售价列表表头
void printRetailListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(3零售价列表)
printDateToday()
cout << ISBN号 书名 零售价
<< endl
}
输出零售价列表表体
void ReportRetail()
{
BookData *book
double TotalRetail 0
int indexPtrBook

printRetailListHead()
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
coutsetf(iosleft)
coutwidth(15)
cout << *book>getISBN() <<
coutwidth(45)
cout << *book>getTitle() <<
coutunsetf(iosleft)
printPrice(book>getPriceRetail() 0)
cout << endl
TotalRetail + book>getPriceRetail()*book>getQuantityInHand()
if (indexPtrBook 19 0)
{
readEnterKeyForContinue()
printRetailListHead()
}
}
cout << 零售价总:
printPrice(TotalRetail 30)
cout << endl
readEnterKeyForContinue()
}
较书数量
int cmpBookQuantity(BookData*a BookData*b)
{
int ta tb
ta a>getQuantityInHand()
tb b>getQuantityInHand()
if (ta < tb)
return 1
else if (ta tb)
return 0
else
return 1
}
输出库存量列表表头
void printQuantityListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(4 书库存列表)
printDateToday()
cout << 库存 ISBN号 书名 << endl
}
输出库存量列表表体
void printQuantityList()
{
BookData *book
int indexPtrBook

printQuantityListHead()
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
coutsetf(iosleft)
coutwidth(15)
cout << book>getQuantityInHand()
cout <<
coutwidth(14)
cout << *book>getISBN() <<
cout << *book>getTitle()
coutunsetf(iosleft)
cout << endl
if (indexPtrBook 20 0)
{
readEnterKeyForContinue()
printQuantityListHead()
}
}
readEnterKeyForContinue()
}
void ReportQuantity()
{
int i j

for (i 1 i < BookDatasizeBook i++)
for (j i + 1 j < BookDatasizeBook j++)
if (cmpBookQuantity((BookData*)BookDataptrBook[i] (BookData*)BookDataptrBook[j]) 1)
swap(BookDataptrBook[i] BookDataptrBook[j])
printQuantityList()
}
输出书批发价总额列表表头
void printTotalWholeSaleListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(5 书批发价总额列表)
printDateToday()
cout << 批发总额 ISBN号 书名
<< endl
}
输出书批发价总额列表表体
void printTotalWholeSaleList()
{
BookData *book
int indexPtrBook

printTotalWholeSaleListHead()
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
printPrice(book>getPriceWholeSale()*book>getQuantityInHand() 20)
cout <<
coutsetf(iosleft)
coutwidth(14)
cout << *book>getISBN() <<
cout << *book>getTitle()
coutunsetf(iosleft)
cout << endl
if (indexPtrBook 19 0)
{
readEnterKeyForContinue()
printTotalWholeSaleListHead()
}
}
readEnterKeyForContinue()
}
书批发价总额较
int cmpTotalWholeSale(BookData*ptr1_BookData BookData*ptr2_BookData)
{
double ta tb

ta ptr1_BookData>getPriceWholeSale()*ptr1_BookData>getQuantityInHand()
tb ptr2_BookData>getPriceWholeSale()*ptr2_BookData>getQuantityInHand()
if (ta return 1
else if (ta>tb)
return 1
else
return 0
}
先书批发价总额排序然输出
void ReportTotalWholeSale()
{
int i j
for (i 1 i for (j i + 1 j < BookDatasizeBook j++)
if (cmpTotalWholeSale((BookData*)BookDataptrBook[i] (BookData*)BookDataptrBook[j]) 1)
swap(BookDataptrBook[i] BookDataptrBook[j])
printTotalWholeSaleList()
}
输出书进库日期列表表头
void printBookDateListHead()
{
printStringInConsoleMiddle(报表模块)
printStringInConsoleMiddle(6 入库日期先列表)
printDateToday()
cout << 入库日期 ISBN 书名 << endl
}
书进库日期列表
void printBookDateList()
{
BookData *book
int indexPtrBook

printBookDateListHead()
for (indexPtrBook 1 indexPtrBook < BookDatasizeBook indexPtrBook++)
{
book (BookData*)BookDataptrBook[indexPtrBook]
printDate(book>getDateAdded())
cout <<
coutsetf(iosleft)
coutwidth(20)
cout << *book>getISBN() <<
cout << *book>getTitle()
coutunsetf(iosleft)
cout << endl
if (indexPtrBook 19 0)
{
readEnterKeyForContinue()
printBookDateListHead()
}
}
readEnterKeyForContinue()
}
较日期
int cmpBookDate(BookData*a BookData*b)
{
time_t ta tb

ta a>getDateAdded()
tb b>getDateAdded()
if (ta return 1
else if (ta>tb)
return 1
else
return 0
}
进库日期列表
void ReportBookDate()
{
int i j

for (i 1 i for (j i + 1 j < BookDatasizeBook j++)
if (cmpBookDate((BookData*)BookDataptrBook[i] (BookData*)BookDataptrBook[j]) 1)
swap(BookDataptrBook[i] BookDataptrBook[j])
printBookDateList()
}

#include Saleh
double SaletaxRatio 006 默认税率
double SaletotalCost 0
double SaletotalTax 0
void **SaleptrSold NULL
int *SalesizePtrSold NULL
int SalesizeSold 0
void SaleCashier(BookData& soldBook)
{
Sale *NewSale
NewSale new Sale
NewSale>renewSaleByBookData(soldBook)
while (true)
{
NewSale>readQuantitySold()
cout << 购买 << NewSale>quantitySold
<< << *NewSale>getTitle() << << endl
cout << 确定(yesno)
if (getOrderYes())
break
else
cout << 请输入购买书数
}
NewSale>computeSubCost()
NewSale>increaseTotalCost() 计算总额
NewSale>computeTax()
NewSale>increaseTotalTax() 计算税
soldBooksetQuantityInHand(NewSale>getQuantityInHand() NewSale>getQuantitySold())
NewSale>setQuantityInHand(NewSale>getQuantityInHand() NewSale>getQuantitySold())
cout << 卖出 << NewSale>quantitySold << << *NewSale>getTitle() << 书信息 << endl
NewSale>printBookInformation()
int &sizeSold SalesizeSold
int &sizePtrSold *SalesizePtrSold
++sizeSold
if (sizeSold sizePtrSold)
resizePtrSequence(SaleptrSold SalesizePtrSold sizePtrSold * 2)
SaleptrSold[sizeSold] (void*)NewSale
cout << 书已处理完毕请继续输入书信息 << endl
}
输出销售时屏幕显示书信息
void SaleprintSaleInformation()
{
coutwidth(5)
coutsetf(iosright)
cout << getQuantitySold() <<
coutunsetf(iosright)
coutsetf(iosleft)
coutwidth(16)
cout << *getISBN() <<
coutwidth(30)
cout << *getTitle() <<
coutunsetf(iosleft)
printPrice(getPriceRetail() 9)
cout <<
printCost(getSubCost() 9)
}
购书重新设置书库中该书信息
void SalerenewSaleByBookData(BookData& bookProceeded)
{
setTitle(*bookProceededgetTitle())
setPublisher(*bookProceededgetPublisher())
setAuthor(*bookProceededgetAuthor())
setISBN(*bookProceededgetISBN())
setPriceRetail(bookProceededgetPriceRetail())
setPriceWholeSale(bookProceededgetPriceWholeSale())
setQuantityInHand(bookProceededgetQuantityInHand())
setDateAdded(bookProceededgetDateAdded())
}
设置税率
void SalesetTaxRatio(double newTaxRatio)
{
taxRatio newTaxRatio
}
键盘读取税率
void SalereadTaxRatio()
{
cout << 请输入新税率非负实数:
while (true)
{
readReal(taxRatio)
if (taxRatio > 0)
break
else
cout << 请重新输入:
}
}
double SalegetTaxRatio()
{
return taxRatio
}
计算税率
void SalecomputeTax()
{
tax getSubCost()*taxRatio
}
double SalegetTax()
{
return tax
}
void SaleincreaseTotalTax()
{
totalTax + tax
}
double SalegetTotalTax()
{
return totalTax
}
void SalesetTotalTax(double newTotalTax)
{
newTotalTax newTotalTax
}
读取某书库存量
void SalereadQuantitySold()
{
cout << 书前库存: << getQuantityInHand() << endl
cout << 请输入购买书数量
while (true)
{
readInteger(quantitySold)
if (quantitySold >getQuantityInHand())
cout << 库存足请减少购买量
else if (quantitySold<0)
cout << 输入负数请重新输入:
else
break
}
}
int SalegetQuantitySold()
{
return quantitySold
}
void SalecomputeSubCost()
{
subCost getPriceRetail()*getQuantitySold()
}
double SalegetSubCost()
{
return subCost
}
void SaleincreaseTotalCost()
{
totalCost + subCost
}
double SalegetTotalCost()
{
return totalCost
}
void SalesetTotalCost(double newTotalCost)
{
totalCost newTotalCost
}


************************************
* 文件类中函数出实现 *
************************************
#includeTitleInfoh
void TitleInfosetTitleInformation()
{
setTitle()
setISBN()
setAuthor()
setPublisher()
}

void TitleInfosetTitle(const titleType& newTitle)
{
memcpy完成拷贝功拷贝类型容
memcpy(title newTitle MAXtitleLength)
}
void TitleInfosetISBN(const isbnType& newISBN)
{
memcpy(isbn newISBN MAXisbnLength)
}
void TitleInfosetAuthor(const authorType& newAuthor)
{
memcpy(author newAuthor MAXauthorLength)
}
void TitleInfosetPublisher(const publisherType& newPublisher)
{
memcpy(publisher newPublisher MAXpublisherLength)
}
void TitleInfosetTitle()
{
cout << 请输入书名
while (true)
{
readConsoleString(title MAXtitleLength '\n')
if (strlen(title) 0)
cout << 输入空串请重新输入
else
break
}
}
void TitleInfosetISBN()
{
cout << 请输入书ISBN号
while (true)
{
readConsoleString(isbn MAXisbnLength '\n')
if (strlen(isbn) 0)
cout << 输入空串请重新输入
else
break
}
}
void TitleInfosetAuthor()
{
cout << 请输入书作者
while (true)
{
readConsoleString(author MAXauthorLength '\n')
if (strlen(author) 0)
cout << 输入空串请重新输入
else
break
}
}
void TitleInfosetPublisher()
{
cout << 请输入书出版社
while (true)
{
readConsoleString(publisher MAXpublisherLength '\n')
if (strlen(publisher) 0)
cout << 输入空串请重新输入
else
break
}
}
判断macthedTitle否title部分
bool TitleInfobookMatch(titleType& matchedTitle)
{
if (substring(title matchedTitle))
return true
else
return false
}
bool TitleInfobookMatch(isbnType& matchedISBN)
{
if (strcmp(isbn matchedISBN) 0)
return true
else
return false
}
bool TitleInfobookMatch(authorType& matchedAuthor)
{
if (substring(author matchedAuthor))
return true
else
return false
}
bool TitleInfobookMatch(publisherType& matchedPublisher)
{
if (substring(publisher matchedPublisher))
return true
else
return false
}

titleType *TitleInfogetTitle()
{
return &title
}
isbnType *TitleInfogetISBN()
{
return &isbn
}
authorType *TitleInfogetAuthor()
{
return &author
}
publisherType *TitleInfogetPublisher()
{
return &publisher
}



南JING航空航天学
文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

中南大学-c++课设报告面向对象编程(C++)

中南大学面向对象编程(C++)实验报告学生姓名 学 院 信息科学与工程学院 专业班级 信息安全班 完成时间 2014年X月X日 目 录

文***品 2年前 上传488   0

求解有理数分式方程c++课设

课程设计(论文)任务书 软件 学  院   软件+会计 专  业 班   一、 课程设计(论文)题目 : 求解有理数分式方程   二、课程设计(论文)工作自 2014 年 6 月 20 日起至 2014 年 6 月 26 日止 三、课程设计(论文) 地点: 创新楼

文***品 3年前 上传630   0

图书管理系统可行性分析报告

图书管理系统可行性分析报告组长: 张三组员: 李四 王五目录1.引言 31.1编写目的 31.2项目背景 31.3定义 31.4参考资料 32.可行性研究的前提 32.1要求 42.1.1主要功能 42.1.2主要性能 42.1.3安全性

文***品 5年前 上传3167   0

c++超市管理系统课程设计报告

c++超市管理系统课程设计报告第1章 任务描述本次C++实践课题为“超市管理系统”。要求功能有A、添加商品信息,有商品编号、商品名、供应商代号、进货价、售出价、存货数等。进货:若商品已存在,只需修改存货数;若不存在,需增加新纪录。B、售出:输入商品编号,修改相应的存货数与销售额。C、查询:查询商品,销售额。

文***品 2年前 上传552   0

酒店客房管理系统数据库课设报告

北 华 航 天 工 业 学 院课程设计报告(论文)课程名称: 数据库系统原理 报告(论文)题目: 酒店客房管理系统 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术专业 作者所在班级:

郭***林 3年前 上传479   0

c++程序实习报告

c++程序实习报告  针对我们这学期学的c++,假期进行了五天的实习。第一天听老师讲实习内容和提示的时候觉得思路挺明确的一个程序,哪有传说中的那么难。下午和同学讨论的时候觉得很有目的,只要按部就班的完成各步操作就可以了,有难度的也只是第二步。这一步要进行判断,这就需要多个输出函数;还要冒泡法给工作排序,工资的计算不是在类中完成的――挺棘手的一个问题。  第二天上机的时候也很快完成了第一步

l***0 12年前 上传456   0

c++课程设计及图书管理系统(窗口界面)

C++课程设计课程设计系部:计算机应用技术系专业:计算机应用技术班级学号: 姓名: 一、系统功能分析: 图书管理系统设计说明报告: 图书馆作为学生学习知识的重要场所,作为信息资源的集散地,图书馆和用户借阅资料繁多,包含很多的信息数据的管理。介

文***享 3年前 上传589   0

图书管理系统软件工程课程设计

XX大学 课程名称:软件工程 试题题目:图书管理系统 姓 名: 学 号: 专 业: 计算机科学与技术 学 院:计算机与信息科学学院 时 间:20XX年X 月 X日 目录 一、 开发背景与目标 1.1开发背景…………………………………………………………………….- 6- 开发目标…………………………………………………………

文***品 5年前 上传1285   0

软件工程可行性分析报告实例(图书管理系统)

 可行性分析报告实例本实例以一个图书管理系统为例,介绍软件工程技术方法以及软件工程各阶段主要文档。本文介绍可行性分析报告。可行性分析报告包括:l 封面(略)l 目录(略)l 可行性分析报告内容可行性分析报告(实例)1.引言1.1编写目的可行性分析报告是为“图书管理系统”开发的可能性、可行性、必要性提供论据,为开发人员进行系统总体规划设计及具体实施开发工程提供必要的参考资料,在系

文***品 2年前 上传499   0

人饮初设报告

人饮初设报告 1 工程项目概述 1.1 工程概况 ***位于**县境内长江以南的方斗山脉和七曜山脉之间,距**县城46公里,东接**镇和**县**镇,南接**镇、**乡,西接**乡和**乡,北靠**镇和**镇。幅员面积139平方公里,辖23个村1个居民委员会,256个社,2个居民小组,14850户,52900人,其中:农业人口12651户48866人,农业劳动力37525个,耕地面积529

t***w 12年前 上传11092   0

matlab课设

摘 要数字滤波器是一一个离散系统。该系统能对输入的离散信号进行处理,从而获得所需的有用信息。现代数字滤波器的设计大体可以分为IIR 和FIR两大类,可以用软件和硬件两种方法来实现,而选用MATAB信号处理工具箱为设计通用滤波器带来了极大的方便。本文按设计指标要求设计了滤波器,其中IIR 采用巴特沃什,FIR采用布莱克曼窗进行设计,得出了与之对应的幅度响应曲线和相位响应曲线,最后对IIR 和

l***. 4年前 上传714   0

图书管理系统需求分析

图书管理系统需求分析可行性分析报告 31 引言 32 可行性研究的前提 33.系统技术可行性分析 34 系统经济可行性分析 45 社会因素分析 46 结论意见 4项目开发计划 51.项目名称: 52.项目概述 53.实施计划 5高校图书管理系统需求规格说明书 61. 引言 62. 综合描述 63. 外部接口需求 74.系统功能需求 85.其他非功能需求 86.

文***享 3年前 上传662   0

关于增设警点得报告

关于增设警点得报告 尊敬的精华房地产开发有限责任公司领导: 中建三局四公司于2011年5月份开始进驻**,主要施工华夏国际社区前期销售中心及样板间工程,由于工程项目所处环境四周开阔,不利于材料看管,加之我项目保卫人员较少,从开始以来共丢失扣件15000余只,槽钢(16#6米)28条,钢筋约4吨,给我项目造成很大的损失。 经我项目部保卫人员描述:2011年9月7日凌晨两点左右,我项目保卫人员

一***河 13年前 上传12993   0

图书馆管理毕业论文开题报告

图书馆管理毕业论文开题报告  指导教师:  有关治理的理论和实践目前在发达国家极其受到重视,尤其在医疗、公共安全、教育、基础设施等公共事务领域,发达国家普遍调整政府在提供这些公共物品中的传统定位,积极寻求政府和私人机构、非政府组织、社群、公民合作,以各种创新型制度安排,共同承担提供公共物品的新的“治理”模式。本项研究首次将治理理论引进到图书馆界,旨在系统探究包括政府在内的多种利益主体在建

d***d 12年前 上传547   0

图书管理员述职报告

  述  职  报  告                                      本学期,在校领导的关怀和领导下,本人认真学习,努力工作,遵章守纪,较好地完成了各项任务,自身能力素质稳步提高。 一、      认真学习,提高理论水平 本学期以来,本人能积极参加学校组织的各项活动和理论学习,提高政治素养,深入学习中国特色社会主义理论体系,学习毛泽东思想、邓小平理论、

刺***。 10年前 上传10510   0

图书管理员述职报告

图书管理员述职报告第一篇:图书管理员述职报告图书管理员述职报告本学期,在校领导的关怀和领导下,本人认真学习,努力工作,遵章守纪,较好地完成了各项任务,自身能力素质稳步提高。一、认真学习,提高理论水平本学期以来,本人能积极参加学校组织的各项活动和理论学习,提高政治素养,深入学习中国特色社会主义理论体系,学习毛泽东思想、邓小平理论、三个代表重要思想,掌握科学发展观基本思想、基本观

c***0 9年前 上传441   0

图书馆实习报告

图书馆实习报告  新的假期马上又开始了,同学们也在忙着实习和找工作,我的专业是公司事物管理,公司的日常生活都是很琐碎的事情,所以我决定应该锻炼一下我对待事物的敏感程度和办事情的角度。所以我决定到图书馆去帮忙。  图书馆是个各个方面都要注意到的地方,比如图书的摆放,环境的考虑和书籍的保存都是有讲究的。我主要是进行图书的排架上架的实习;第三天在采编部,进行了图书的加工,采购验收及编目的实习,

委***屈 11年前 上传676   0

图书清理报告2篇

图书清理报告2篇篇一:根据湖北省教育技术装备处文件(鄂教备字【20xx】xx号),20xx年x月x号现对本校图书进行整理,情况如下:本校原有图书xxxx多册,近年来湖北省共青团经心书屋捐赠本校xxx册,合计xxx册,其中新书xxx册,其余xxxx册图书全部是旧书,旧书破损严重,内容陈旧书籍较多。本校是村级学校,资金较少,学校没有自己购买图书,大部分都是主管部门配置和社会捐赠。其中86%是多

奋***行 4年前 上传1917   0

软件工程课设心得

软件工程课设心得第一篇:软件工程课设心得软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解决问题的程序就ok了,从没有想过,在写一个程序之前还要构思几份文档(可行性分析、需求分析、概要设计)。不过对于那些大型软件如植物僵尸大战(至少对于我来说是比较大型的了)怎么去实现它,想得我一头雾

l***2 10年前 上传440   0

软件工程课设心得

软件工程课设心得  软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。  在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解决问题的程序就ok了,从没有想过,在写一个程序之前还要构思几份文档(可行性分析、需求分析、概要设计)。不过对于那些大型软件如植物僵尸大战(至少对于我来说是比较大型的了)怎么去实现它,想得我一头雾水。绚丽的界面、40

a***3 9年前 上传491   0

个人党性分析报告(图书馆版、资料室版)

个人党性分析报告(图书馆版\资料室版)  开展保持共产党员先进性教育活动,是党的十六大作出的重要部署,是贯彻“三个代表“重要思想的重大举措,是新阶段党的建设的基础工程,是推动全面建设小康社会的重要保证。这次教育活动规模大、范围广、层次深,是一次自我加压、自我完善、自我提高的良好机遇。保持共产党员先进性教育活动,有利于广大党员干部更加自觉地用“三个代表“重要思想武装好自己的头脑。“三个代表“的

5***6 10年前 上传426   0

重要单证管理分析报告

重要单证管理分析报告   (2013年10月) 一、总体情况: 1、单证整体指标概况:截至10月31日,全辖单证管理系统盘点数据77962份,其中人身险保单61545份(其中自助保险卡56982份)、非车险保单5050份、车险保单5075份、上海市地方税务局通用机打6292份。经对业务管理部、车险业务部及本部的实物库存进行盘查,实物库存77962份。 以下为排除自助保险卡的数据: 数

w***6 10年前 上传9873   0

生产管理分析报告

1. 追求卓越管理,提高产品质量 ——加工厂生产管理分析报告 各位领导,同事们:     这个举国欢庆的日子里,我们生产部门将深刻地对本部门的工作及得失作出细致的总结,并对下一步工作打算为各位做个介绍,同时祈愿我们加工厂明天会更好。 生产管理是企业管理的基本部分,是企业最重要的基础管理,是实现经营目标的基础和保证,是提高经济效益的重要手段,是增强企业应变能力、提高竞争力的重要措施,是确保

脚***子 13年前 上传15141   0

学校资产管理情况分析报告

一、 单位基本情况 沂南县砖埠镇中心小学是由沂南县事业单位登记管理办公室登记管理的事业单位,法定代表人:苏彦祝,经费来源为全额拨款,开办资金110万元,举办单位为砖埠镇政府。宗旨:实施小学义务教育,促进基础教育发展。业务范围:小学学历教育。 二、 资产使用情况 截至2008年12月31日沂南县砖埠镇中心小学固定资产帐面价值为3813820.09元,经过本次资产清查,实际拥有固定资产3813

s***2 15年前 上传24700   0

职工诊断分析报告:职工管理的诊断分析报告

为何留不住人才?——关于B公司管理的诊断分析案例:B公司是一家日化产品生产企业。几年来,公司业务一直发展很好,销售量逐年上升。每到销售旺季,公司就会到人才市场大批招聘销售人员,一旦到了销售淡季,公司又会大量裁减销售人员。就这件事,B公司销售经理陈鸿飞曾给总经理蒋明浩提过几次意见,而蒋总却说:人才市场中有的是人,只要我们工资待遇高,还怕找不到人吗?一年四季把他们“养”起来,这样做费用太大了。

刀剑如梦的梦 2年前 上传477   0