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

📄 kingbookdoc.cpp

📁 个人电子图书管理系统.提供电子书的书名和其他信息.检查电子书信息的合法性(E-1) .为这本电子书生成 id.使用分类id
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GUI/KingBookDoc.cpp : CKingBookDoc 类的实现
//

#include "stdafx.h"
#include "KingBook.h"

#include "KingBookDoc.h"
#include "KingBookDialog.h"
#include "AddbatDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CKingBookDoc

IMPLEMENT_DYNCREATE(CKingBookDoc, CDocument)

BEGIN_MESSAGE_MAP(CKingBookDoc, CDocument)
    ON_COMMAND(IDM_OPEN_BOOK, &CKingBookDoc::OnOpenBook)
    ON_COMMAND(IDM_EDIT_BOOK, &CKingBookDoc::OnEditBook)
    ON_COMMAND(IDM_ADD_BOOK, &CKingBookDoc::OnAddBook)
    ON_COMMAND(IDM_EDIT_BOOKCLASS, &CKingBookDoc::OnEditBookclass)
    ON_COMMAND(IDM_ADD_SUB_BOOKCLASS, &CKingBookDoc::OnAddSubBookclass)
    ON_COMMAND(IDM_DELETE_BOOK, &CKingBookDoc::OnDeleteBook)
    ON_COMMAND(IDM_DELETE_BOOKCLASS, &CKingBookDoc::OnDeleteBookclass)
    ON_COMMAND(IDM_ADDTO_FAVORITE, &CKingBookDoc::OnAddtoFavorite)
    ON_COMMAND(IDM_DELFROM_FAVORITE, &CKingBookDoc::OnDelfromFavorite)
    ON_COMMAND(IDM_ADD_BATCH_BOOK, &CKingBookDoc::OnAddBatchBook)
END_MESSAGE_MAP()


// CKingBookDoc 构造/析构


/// <summary>文档类的默认构造函数</summary>
/// <exception>NULL</exception>
/// <remarks>加载图书数据的XML文档.
/// </remarks>
CKingBookDoc::CKingBookDoc()
{
    try{
        // 加载数据文件
        this->bookLib.Load(((CKingBookApp*)AfxGetApp())->GetBookXml());
    }
    catch(Library::KXmlFileException& e)
    {        
        AfxMessageBox(e.what());
    }
    this->SetTitle(_T("Kingbook 电子图书管理"));

}

CKingBookDoc::~CKingBookDoc()
{
}

BOOL CKingBookDoc::OnNewDocument()
{
    return TRUE;
    //if (!CDocument::OnNewDocument())
    //    return FALSE;

    /// / TODO: 在此添加重新初始化代码
    /// / (SDI 文档将重用该文档)

    //return TRUE;
}

/// <stdname>
/// int CKingBookDoc::SetShownBookClass(const std::string&amp; classID)
/// </stdname>
/// <summary>在TreeView中选中这个分类(ID), 将在ListView中显示这个分类的图书.通知文档类.</summary>
/// <param name="classID">图书分类的ID</param>
/// <returns>成功返回0.</returns>
/// <exception>NULL</exception>
/// <remarks>一个Set函数</remarks>
int CKingBookDoc::SetShownBookClass(const std::string& classID)
{
    this->m_strShownBookClass = classID;
    return 0;
}

/// <stdname>
/// const std::string&amp; CKingBookDoc::GetShownBookClass() const
/// </stdname>
/// <summary>得到TreeView中选中的图书分类, ListView中显示这个分类的图书</summary>
/// <returns>返回分类的ID</returns>
/// <exception>NULL</exception>
/// <remarks>Get方法</remarks>
const std::string& CKingBookDoc::GetShownBookClass() const
{
    return this->m_strShownBookClass;
}


/// <summary>在ListView里选中bookID这本图书.通知文档类</summary>
/// <param name="bookID">图书的ID</param>
/// <returns>成功返回0</returns>
/// <exception>NULL</exception>
/// <remarks>Set方法</remarks>
int CKingBookDoc::SetShownBook(const std::string& bookID)
{
    this->m_strShownBook = bookID;
    return 0;
}


/// <summary>得到ListView中选中的图书的ID。</summary>
/// <returns>返回图书的ID</returns>
/// <exception>NULL</exception>
/// <remarks>Get方法</remarks>
const std::string& CKingBookDoc::GetShownBook() const
{
    return this->m_strShownBook;
}



/// <summary>打开图书ListView中选中的图书</summary>
/// <returns>成功返回0。</returns>
/// <exception>NULL</exception>
/// <remarks>两种打开方式:以"Http"开头的URL使用IE打开; 其他有OS决定使用相应的应用程序打开.
/// </remarks>
int CKingBookDoc::OpenBook()
{
    try{
        Library::Book tmpBook(this->m_strShownBook);
        this->bookLib.GetBookInfo(tmpBook, tmpBook);
        CString url = tmpBook.GetURL().c_str();
        url = url.TrimLeft(_T(" "));

        // TODO Http开头的URL
        if(url.MakeLower().Find(_T("http")) == 0)
        {
            // 使用IE打开
            ShellExecute(NULL, "open", "iexplore.exe", url, NULL, SW_SHOWNORMAL);
        }
        else
        {
            ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
        }

        // 
        this->bookLib.OnOpenBook(this->m_strShownBook);
    }
    catch(Library::KXmlFileException& e)
    {
        AfxMessageBox(e.what());
    }
    return 0;
}
/// <summary>使用这本书的一个URL打开</summary>

/// <summary>使用一本书的一个URL打开, 这本图书已经在ListView中选中.</summary>
/// <param name="url">图书的一个URL</param>
/// <returns>成功返回0</returns>
/// <exception>NULL</exception>
/// <remarks>一本图书可以有多个URL, 这些URL只会显示在InfoView(htmlView)中, 在InfoView中
/// 点击这些链接,将调用这个函数.<br/>
/// 两种打开方式:以"Http"开头的URL使用IE打开; 其他有OS决定使用相应的应用程序打开.
/// </remarks>
int CKingBookDoc::OpenBook(const CString& url)
{
    try{
        CString urlTmp = url;
        urlTmp = urlTmp.TrimLeft(_T(" "));

        // TODO Http开头的URL
        if(urlTmp.MakeLower().Find(_T("http")) == 0)
        {
            // 使用IE打开
            ShellExecute(NULL, "open", "iexplore.exe", urlTmp, NULL, SW_SHOWNORMAL);
        }
        else
        {
            ShellExecute(NULL, "open", urlTmp, NULL, NULL, SW_SHOWNORMAL);
        }

        // 
        this->bookLib.OnOpenBook(this->m_strShownBook);
    }
    catch(Library::KXmlFileException& e)
    {
        AfxMessageBox(e.what());
    }
    return 0;
}
// CKingBookDoc 序列化
void CKingBookDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: 在此添加存储代码
    }
    else
    {
        // TODO: 在此添加加载代码
    }
}


// CKingBookDoc 诊断

#ifdef _DEBUG
void CKingBookDoc::AssertValid() const
{
    CDocument::AssertValid();
}

void CKingBookDoc::Dump(CDumpContext& dc) const
{
    CDocument::Dump(dc);
}
#endif //_DEBUG


// CKingBookDoc 命令


/// <summary>响应打开图书事件</summary>
/// <returns>void</returns>
/// <remarks>使用图书的首要链接,打开图书;更新所有视图, 因为图书的打开次数发生变化.</remarks>
void CKingBookDoc::OnOpenBook()
{
    this->OpenBook();

    // 频率发生了变化, 更新视图
    this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
}

/// <remarks>调用CreateBookInfoFile()以使InfoView能够显示最新内容。</remarks>

/// <summary>响应编辑图书信息事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>显示图书信息对话框;修改图书的信息; 调用CreateBookInfoFile(),产生新的图书信息文件;
/// 更新所有视图, 图书的信息发生变化
/// </remarks>
/// <seealso cref="CBookInfoDlg">CBookInfoDlg图书信息对话框</seealso>
/// <seealso cref="CKingBookDoc::CreateBookInfoFile">CKingBookDoc::CreateBookInfoFile 产生图书信息文件</seealso>
void CKingBookDoc::OnEditBook()
{
    // 编辑前的图书信息存放在这个变量里
    Library::Book bookOldInfo;
    this->bookLib.GetBookInfo(Library::BookObject(this->m_strShownBook), bookOldInfo);
    CBookInfoDlg infoDlg(_T("编辑图书信息"), bookOldInfo);
    if( infoDlg.DoModal() == IDOK) // 确定 修改
    {
        // 编辑后的图书信息存放在这个变量里
        Library::Book bookNewInfo = infoDlg.GetBookInfo();
        try{
            this->bookLib.ModifyBookInfo(bookOldInfo, bookNewInfo);
            this->bookLib.Save();
            this->CreateBookInfoFile(bookNewInfo.GetID(), true);
            // 更新视图
            this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
        }
        catch(Library::KXmlFileException &e)
        {
            AfxMessageBox(e.what());
        }
    }
}

/// <remarks>调用CreateBookInfoFile()以使InfoView能够显示最新内容。</remarks>

⌨️ 快捷键说明

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