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

📄 kingbookdoc.cpp

📁 个人电子图书管理系统.提供电子书的书名和其他信息.检查电子书信息的合法性(E-1) .为这本电子书生成 id.使用分类id
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/// <summary>响应添加图书事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>显示图书信息对话框; 添加图书; 产生新的图书信息文件;更新所有视图, 显示新图书的详细.<br/>
/// 新图书所属的分类,已经在TreeView中选中.
/// </remarks>
void CKingBookDoc::OnAddBook()
{
    // 新的图书(包括ID)
    Library::Book bookNewInfo;
    CBookInfoDlg infoDlg(_T("添加图书"), bookNewInfo);
    if( infoDlg.DoModal() == IDOK) // 确定 添加
    {
        // 图书信息
        bookNewInfo = infoDlg.GetBookInfo();
        try{
            this->bookLib.AddNewBook(Library::BookObject(this->m_strShownBookClass), bookNewInfo);
            this->bookLib.Save();

            this->m_strShownBook = bookNewInfo.GetID();
            this->CreateBookInfoFile(bookNewInfo.GetID());
            // 更新视图
            this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
        }
        catch(Library::KXmlFileException &e)
        {
            AfxMessageBox(e.what());
        }
    }
}


/// <summary>响应删除图书事件.删除在ListView中选中的图书.</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>删除图书;更新所有视图.<br/>
/// <b>不确定性</b>ListView中不一定选中哪本图书, InfoView中不一定显示哪种内容.
/// </remarks>
void CKingBookDoc::OnDeleteBook()
{
    // 确认对话框
    try{
        this->bookLib.DeleteBook(this->m_strShownBook);
        this->bookLib.Save();
        // 更新视图
        this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
    }
    catch(Library::KXmlFileException &e)
    {
        AfxMessageBox(e.what());
    }

}


/// <summary>响应编辑分类的信息事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>显示分类信息对话框<c>CBookClassInfoDLg</c>, 修改现有的分类信息</description></item>
/// <item><description>修改分类的信息, 更新图书数据文件</description></item>
/// <item><description>更新所有视图, 但是只有TreeView需要响应这个消息而更新视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnEditBookclass()
{
    // TODO: BookClass 的默认构造函数
    // DONE:
    Library::BookClass bookClassOldInfo;
    this->bookLib.GetBookClassInfo(Library::BookObject(this->m_strShownBookClass), bookClassOldInfo);
    CBookClassInfoDLg infoDlg(_T("编辑分类信息"), bookClassOldInfo);

    if(infoDlg.DoModal() == IDOK)  // 确认修改
    {
        Library::BookClass bookClassNewInfo = infoDlg.GetBookClassInfo();
        try{
            this->bookLib.ModifyBookClassInfo(bookClassOldInfo, bookClassNewInfo);
            this->bookLib.Save();
            // 更新视图, 告诉TreeView在树中修改节点标题
            this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_EDIT);
        }
        catch(Library::KXmlFileException &e)
        {
            AfxMessageBox(e.what());
        }
    }
}


/// <summary>响应添加子分类事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>新添加的分类的父分类, 在TreeView中已经选中<br/>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>显示分类信息对话框<c>CBookClassInfoDLg</c>, 添加新分类的信息</description></item>
/// <item><description>添加分类的信息, 更新图书数据文件</description></item>
/// <item><description>更新所有视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnAddSubBookclass()
{
    Library::BookClass subBookClass;
    //this->bookLib.GetBookClassInfo(Library::BookObject(this->m_strShownBookClass), bookClassOldInfo);
    CBookClassInfoDLg infoDlg(_T("添加子分类"), subBookClass);

    if(infoDlg.DoModal() == IDOK)  // 确认添加
    {
        subBookClass = infoDlg.GetBookClassInfo();
        try{
            this->bookLib.AddNewBookClass(subBookClass, Library::BookObject(this->m_strShownBookClass));
            this->bookLib.Save();
            this->m_strShownBookClass = subBookClass.GetID();
            // 更新视图, 告诉TreeView在树中添加新节点
            this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_ADD);
        }
        catch(Library::KXmlFileException &e)
        {
            AfxMessageBox(e.what());
        }
    }
}

/// <summary>相应删除分类</summary>

/// <summary>响应删除分类事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>没有警告信息.<br/>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>删除图书, 更新数据文件</description></item>
/// <item><description>更新所有视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnDeleteBookclass()
{
    try{
        this->bookLib.DeleteBookClass(this->m_strShownBookClass);
        this->bookLib.Save();
        // 更新视图
        this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_DEL);
    }
    catch(Library::KXmlFileException &e)
    {
        AfxMessageBox(e.what());
    }
    
}

void CKingBookDoc::SetTitle(LPCTSTR lpszTitle)
{

    CDocument::SetTitle(_T("Kingbook 电子图书管理"));
}

// 相应添加到收藏夹

/// <summary>响应添加到收藏夹事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>在ListView中选中的图书, 将被添加到收藏夹.
/// </remarks>
void CKingBookDoc::OnAddtoFavorite()
{
//    AfxMessageBox(_T("OnAddtoFavorite"));
    try{
        this->bookLib.AddToFavorite(this->m_strShownBook);
        this->bookLib.Save();
    }
    catch(Library::KXmlFileException &e)
    {
        AfxMessageBox(e.what());
    }
}


/// <summary>响应从收藏夹删除事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// </remarks>
void CKingBookDoc::OnDelfromFavorite()
{
//    AfxMessageBox(_T("OnAddtoFavorite"));
    try{
        this->bookLib.DeleteFromFavorite(this->m_strShownBook);
        this->bookLib.Save();
        // 更新视图
        this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
    }
    catch(Library::KXmlFileException &e)
    {
        AfxMessageBox(e.what());
    }
}

BOOL CKingBookDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
    return TRUE;
    //if (!CDocument::OnOpenDocument(lpszPathName))
    //    return FALSE;

    /// / TODO:  在此添加您专用的创建代码

    //return TRUE;
}


/// <summary>响应批量添加图书事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// </remarks>
void CKingBookDoc::OnAddBatchBook()
{
    CAddbatDlg batDlg("批量添加图书");
//    batDlg.SetWizardMode();
    if(batDlg.DoModal() == IDOK)
    {
        int nCount = batDlg.booksInfo.size();
        for(int i = 0; i < nCount; i ++)
        {
            this->bookLib.AddNewBook(Library::BookObject(this->m_strShownBookClass),
                batDlg.booksInfo[i]);
        }
        this->bookLib.Save();
    }
}

/// <summary>Infoview(HtmlView)中显示图书的详细信息, 需要一个文件, 以便用IE显示. 这个函数产生文件</summary>
/// <param name="bookID">[IN]ListView中选中图书的ID</param>
/// <param name="force">[IN]ListView中选中图书的ID</param>
/// <returns>返回产生的文件的文件名</returns>
/// <exception>这个函数不抛出异常</exception>
/// <remarks></remarks>
CString CKingBookDoc::CreateBookInfoFile(const std::string& bookID, bool force)
{
    Library::Book bookInfo;
    this->bookLib.GetBookInfo(Library::BookObject(bookID), bookInfo);
    std::string fileName = ((CKingBookApp*)AfxGetApp())->GetTemp();
    fileName = fileName + "\\" + this->m_strShownBook + ".xml";

    if(force ) // 强制重新创建
    {
        std::string xslt = ((CKingBookApp*)AfxGetApp())->GetXslt();
        bookInfo.SaveToFile(fileName, xslt);
        return fileName.c_str();
    }
    // 测试文件是否已经存在, 如果不存在, 重新创建
    HANDLE hFile; 
    hFile = CreateFile(fileName.c_str(),    // file to open
        GENERIC_READ,          // open for reading
        FILE_SHARE_READ,       // share for reading
        NULL,                  // default security
        OPEN_EXISTING,         // existing file only
        FILE_ATTRIBUTE_NORMAL, // normal file
        NULL);                 // no attr. template
    if (hFile == INVALID_HANDLE_VALUE) // 不存在
    {            
        std::string xslt = ((CKingBookApp*)AfxGetApp())->GetXslt();
        bookInfo.SaveToFile(fileName, xslt);
    }        
    return fileName.c_str();
}

⌨️ 快捷键说明

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