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


    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++)实验报告学生姓名 学 院 信息科学与工程学院 ...

    2年前   
    479    0

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

    课程设计(论文)任务书 软件 学  院   软件+会计 专  业 班   一、 课程设计(论文)题目 : 求解有理数分式方程 ...

    3年前   
    626    0

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

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

    5年前   
    3160    0

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

    c++超市管理系统课程设计报告第1章 任务描述本次C++实践课题为“超市管理系统”。要求功能有A、添加商品信息,有商品编号、商品名、供应商代号、进货价、售出价、存货数等。进货:若商品已存在...

    2年前   
    550    0

    c++程序实习报告

    c++程序实习报告  针对我们这学期学的c++,假期进行了五天的实习。第一天听老师讲实习内容和提示的时候觉得思路挺明确的一个程序,哪有传说中的那么难。下午和同学讨论的时候觉得很有目的,只要按部...

    12年前   
    452    0

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

    北 华 航 天 工 业 学 院课程设计报告(论文)课程名称: 数据库系统原理 报告(论文)题目: 酒店客房管理系统 ...

    3年前   
    478    0

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

    C++课程设计课程设计系部:计算机应用技术系专业:计算机应用技术班级学号: 姓名: 一、系统功能分析: 图书...

    3年前   
    585    0

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

    XX大学 课程名称:软件工程 试题题目:图书管理系统 姓 名: 学 号: 专 业: 计算机科学与技术 学 院:计算机与信息科学学院 ...

    5年前   
    1281    0

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

     可行性分析报告实例本实例以一个图书管理系统为例,介绍软件工程技术方法以及软件工程各阶段主要文档。本文介绍可行性分析报告。可行性分析报告包括:l 封面(略)l 目录(略)l 可行性分析报告内容...

    2年前   
    494    0

    人饮初设报告

    人饮初设报告 1 工程项目概述 1.1 工程概况 ***位于**县境内长江以南的方斗山脉和七曜山脉之间,距**县城46公里,东接**镇和**县**镇,南接**镇、**乡,西接**乡和**...

    12年前   
    11088    0

    matlab课设

    摘 要数字滤波器是一一个离散系统。该系统能对输入的离散信号进行处理,从而获得所需的有用信息。现代数字滤波器的设计大体可以分为IIR 和FIR两大类,可以用软件和硬件两种方法来实现,而选用MAT...

    4年前   
    709    0

    图书管理系统需求分析

    图书管理系统需求分析可行性分析报告 31 引言 32 可行性研究的前提 33.系统技术可行性分析 34 系统经济可行性分析 45 社会因素分析 46 结论意见 4项目开发计划 51.项目名称:...

    3年前   
    654    0

    关于增设警点得报告

    关于增设警点得报告 尊敬的精华房地产开发有限责任公司领导: 中建三局四公司于2011年5月份开始进驻**,主要施工华夏国际社区前期销售中心及样板间工程,由于工程项目所处环境四周开阔,不利于...

    12年前   
    12991    0

    图书管理员述职报告

      述  职  报  告                                      本学期,在校领导的关怀和领导下,本人认真学习,努力工作,遵章守纪,较好地完成了各项...

    10年前   
    10508    0

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

    图书馆管理毕业论文开题报告  指导教师:  有关治理的理论和实践目前在发达国家极其受到重视,尤其在医疗、公共安全、教育、基础设施等公共事务领域,发达国家普遍调整政府在提供这些公共物品中的传统定...

    12年前   
    544    0

    图书管理员述职报告

    图书管理员述职报告第一篇:图书管理员述职报告图书管理员述职报告本学期,在校领导的关怀和领导下,本人认真学习,努力工作,遵章守纪,较好地完成了各项任务,自身能力素质稳步提高。一、认真学习,提高理...

    9年前   
    438    0

    图书馆实习报告

    图书馆实习报告  新的假期马上又开始了,同学们也在忙着实习和找工作,我的专业是公司事物管理,公司的日常生活都是很琐碎的事情,所以我决定应该锻炼一下我对待事物的敏感程度和办事情的角度。所以我决定...

    11年前   
    672    0

    图书清理报告2篇

    图书清理报告2篇篇一:根据湖北省教育技术装备处文件(鄂教备字【20xx】xx号),20xx年x月x号现对本校图书进行整理,情况如下:本校原有图书xxxx多册,近年来湖北省共青团经心书屋捐赠本校...

    4年前   
    1910    0

    软件工程课设心得

    软件工程课设心得第一篇:软件工程课设心得软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解...

    10年前   
    439    0

    软件工程课设心得

    软件工程课设心得  软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。  在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解决问题的程序就o...

    9年前   
    490    0

    文档贡献者

    文***享

    贡献于2021-07-02

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档