ex101Doc.cpp
上传用户:qdhmjx
上传日期:2022-07-11
资源大小:2226k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // ex101Doc.cpp : implementation of the CEx101Doc class
  2. //
  3. #include "stdafx.h"
  4. #include "ex101.h"
  5. #include "ex101Doc.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CEx101Doc
  13. IMPLEMENT_DYNCREATE(CEx101Doc, CDocument)
  14. BEGIN_MESSAGE_MAP(CEx101Doc, CDocument)
  15. //{{AFX_MSG_MAP(CEx101Doc)
  16. ON_COMMAND(ID_CREATE_TEXT, OnCreateText)
  17. //}}AFX_MSG_MAP
  18. END_MESSAGE_MAP()
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CEx101Doc construction/destruction
  21. CEx101Doc::CEx101Doc()
  22. {
  23. m_nYear=2005;
  24. m_nTotalProduct=0;
  25. for(int i=0;i<12;i++)
  26. {
  27. m_Month[i].nProduct=0;
  28. m_Month[i].sNote[0]=NULL;
  29. }
  30. }
  31. CEx101Doc::~CEx101Doc()
  32. {
  33. }
  34. BOOL CEx101Doc::OnNewDocument()
  35. {
  36. if (!CDocument::OnNewDocument())
  37. return FALSE;
  38. // TODO: add reinitialization code here
  39. // (SDI documents will reuse this document)
  40. return TRUE;
  41. }
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CEx101Doc serialization
  44. void CEx101Doc::Serialize(CArchive& ar)
  45. {
  46. if (ar.IsStoring()) //判断是否存储
  47. {
  48. //实现存储写的代码
  49. ar<<m_nYear; //写入年份
  50. ar<<m_nTotalProduct; //写入年总产值
  51. for(int i=0;i<12;i++) //循环写入各月信息
  52. {
  53. ar<<m_Month[i].nProduct;//这个月的产值
  54. ar.Write(m_Month[i].sNote,50);//这个月备注
  55. }
  56. }
  57. else
  58. {
  59. //实现读出的代码
  60. ar>>m_nYear; //读出年份
  61. ar>>m_nTotalProduct;//读出总产值
  62. int nTemp=0;
  63. for(int i=0;i<12;i++) //读出各月信息
  64. {
  65. ar>>m_Month[i].nProduct;//这个月的产值
  66. if(m_Month[i].nProduct<0)//纠正负值
  67. m_Month[i].nProduct=-m_Month[i].nProduct;
  68. nTemp+=m_Month[i].nProduct;//临时统计各月总产值
  69. ar.Read(m_Month[i].sNote,50);//读出该月的备注信息
  70. m_Month[i].sNote[49]=NULL;//确保字符串结束符存在
  71. }
  72. //进行检查工作
  73. if(nTemp!=m_nTotalProduct)//各月累计和总产值不符
  74. {
  75. AfxMessageBox("该报表文件中总产值与各月总和不符,
  76. n将总产值置为各月总和");
  77. m_nTotalProduct=nTemp;
  78. }
  79. }
  80. }
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CEx101Doc diagnostics
  83. #ifdef _DEBUG
  84. void CEx101Doc::AssertValid() const
  85. {
  86. CDocument::AssertValid();
  87. }
  88. void CEx101Doc::Dump(CDumpContext& dc) const
  89. {
  90. CDocument::Dump(dc);
  91. }
  92. #endif //_DEBUG
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CEx101Doc commands
  95. void CEx101Doc::OnCreateText() 
  96. {
  97. CString str;
  98. CString filename=GetPathName();//获取该文档当前的hjm名
  99. if(filename.IsEmpty()) //如果空
  100. filename=GetTitle()+".txt";//从标题获得
  101. else
  102. filename=filename.Left(filename.GetLength()-3)+"txt";
  103. CStdioFile file;
  104. //用CStdioFile创建一个txt文件,注意使用的文件操作标志
  105. if(file.Open(filename,CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)
  106. {
  107. str="创建文件"+filename+"失败!";
  108. AfxMessageBox(str);//创建失败
  109. return;
  110. }
  111. //写文本文件内容
  112. str.Format("%d年产值报告nn",m_nYear);
  113. file.WriteString(str);
  114. str.Format("总产值:%d元nn",m_nTotalProduct);
  115. file.WriteString(str);
  116. str.Format("月份: 产值: 单位(元) 备注:n");
  117. file.WriteString(str);
  118. for(int i=0;i<12;i++)
  119. {
  120. str.Format("%4d %13d   %sn",i+1,m_Month[i].nProduct,m_Month[i].sNote);
  121. file.WriteString(str);
  122. }
  123. //文件写完了,再做一些辅助工作
  124. file.SetLength(file.GetPosition());
  125. file.Close();
  126. str="notepad "+filename;
  127. WinExec(str,SW_SHOW);//用记事本打开
  128. }