职场文秘网

首页 > 领导讲话 > 企业讲话 / 正文

C++语言程序设计稿件管理数据系统

2020-05-29 20:21:13

 XX大学

 本科生课程设计(实践)任务书、设计报告 (C++语言程序设计)

 题

 目 稿件管理数据系统

 学生姓名

 指导教师

 学

 院

 专业班级

 学生学号

  计算机基础教学实验中心 20XX年

  X 月

 X 日 目

  录

 设计任务书……………………………………………3

 课程实践报告…………………………………………4 一、实践内容…………………………………………………………4

 二、实践成果…………………………………………………………4

  三、程序功能…………………………………………………………4

 四、设计思路…………………………………………………………5

 五、源程序……………………………………………………………7

 六、运行情况…………………………………………………………13

 七、实践心得…………………………………………………………16

 八、实践收获与不足…………………………………………………18 C++语言程序设计任务书

  指导老师:

 课程编号:

  一、学时与学分 学时:40

  学分:2

 二、实践目的 计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。

  三、实践任务与要求 用C++语言编程。编程题目如下:

 (一)统计一个班(最多有35人)的学生成绩,要求能实现如下功能:

 (1)输入每个学生的学号和6门课程的成绩。

 (2)计算每个学生的平均分和总分。

 (3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。

 (4)根据用户要求输出某门课程(从键盘输入课程号)成绩在90分以上(含90分)且总分在前5名的学生情况,包括学号、各科成绩、平均分和总分。(5)根据统计,绘制总成绩五分制百分比饼图。(自学利用C++提供的库函数绘制曲线图)。

  要求:

 利用类来实现,学生学号和成绩采用文件输入,排序。 数据的组织可采用对象数组 。查阅相关资料并写出系统设计说明书。写出实践报告。

 (二)统计商品销售数据,要求能用菜单实现如下功能:

 (1)输入每件商品的名称,编号,入库日期,标价,成本。

 (2)输入每件商品的售价,出售日期。

 (3)按总销售量从高到低排出每种商品的名称,售出件数,销售额。

 (4)根据用户要求输出某商品某月(从键盘输入商品名称和月份)的平均售价、售出件数、总利润。(5)根据统计,绘制商品销售利润百分比饼图。(自学利用C++提供的库函数绘制曲线图)。

  要求:

 利用类实现,数据采用文件输入,排序。 数据的组织可采用对象数组 。查阅相关资料并写出系统设计说明书。写出实践报告。

 (三)统计足球比赛数据,要求能用菜单实现如下功能:

 (1)输入每场比赛的主队名称,客队名称,比赛日期,主队得分,客队得分。

  (2)按总得分从高到低排出每个队的名称,总得分,胜,和,负的次数。

 (3)根据用户要求输出某队某月(从键盘输入队名和月份)的所有比赛数据。(4)根据用户要求输出某队主场总得分,客场总得分(5) 根据用户输入,绘制某队成绩历史趋势图。(自学利用C++提供的库函数绘制曲线图)。

  要求:

 利用类实现,数据采用文件输入,排序。 数据的组织可采用对象数组 。查阅相关资料并写出系统设计说明书。写出实践报告。

 (四)统计稿件管理数据,要求能用菜单实现如下功能:

 (1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。

  (2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。

 (4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。

 (5) 根据用户输入,绘制稿件按省份的百分比饼图。(自学利用C++提供的库函数绘制曲线图)。

  要求:

 利用类实现,数据采用文件输入,排序。 数据的组织可采用对象数组 。查阅相关资料并写出系统设计说明书。写出实践报告。

 (五)统计用电管理数据,要求能用菜单实现如下功能:

 (1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。

  (3)按作者的用电量,从高到低排出每个用户的总用电量。

 (3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。(4)统计某楼栋从某月到某月(从键盘输入)的总用电量 (5) 绘制按的楼栋的用电百分比饼图。(自学利用C++提供的库函数绘制曲线图)。

  要求:

 利用类实现,数据采用文件输入,排序。 数据的组织对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

 以上五题任选一题。

 四、实践纪律 学生除了要遵守实践期间学院的基本规定外,还要求做到:

 1.必须在规定的时间、地点,独立完成以上任务; 2.不得迟到、早退。尤其不得擅自缺席。

 五、设计报告要求 1. 任务书必须作为报告第一页 2. 报告不得少于3000字:主要总结实践心得、实践成果 、程序功能、设计思路(程序流程图)、源程序(加上必要的注释)、运行情况、课程设计的收获与不足等

 六、时间安排 两周时间

 七、成绩评定规则

 成绩分为优、良、中、及格、不及格五等。

 优:程序功能完备,报告有深度, 遵守实践纪律。

 良:程序功能满足要求,报告有内容, 遵守实践纪律。

 中:程序和报告基本满足要求, 遵守实践纪律。

 及格:程序有错误但大体能运行,有报告书, 基本遵守实践纪律。

 不及格:程序完全错误或严重违反实践纪律。

 C++语言程序设计报告 一、 实践内容 统计稿件管理数据,要求能用菜单实现如下功能:

 (1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。

  (2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。

 (4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。

 (5) 根据用户输入,绘制稿件按省份的百分比饼图。(自学利用C++提供的库函数绘制曲线图)。

  二、实践成果

 灵活运用《C++程序设计》课程所学的基础知识,独立设计大型程序的能力;该程序必须用户界面友好、操作简洁方便,大大提高工作效率。

 此程序先由用户输入数据,并存储。再作各种功能处理。整个程序基本可以实现稿件管理数据系统的统计。

  三、 程序功能

 a) 录入功能:可以写入关于稿件的基本信息,并进行以下几项功能。

 b) 排序功能:用户可按作者的省份,将每个省的总发表篇数进行排序,并输出。

 c) 查询功能:用户可根据作者与月份查出某作者某月的稿件数据,没找到的给予提示。

 d) 绘制饼状图功能:系统根据输入的数据绘制高价男生份的百分比饼图。

 e) 各项退出功能:在每个环节里都设有退出功能。

 四、设计思路

 统计稿件管理数据系统程序框图

 开始

  输出菜单及提示信息

 1 输入每一稿件第一作者名字,稿件名称,投稿日期,作者的省份 2 输入每件稿件的发表日期,审稿意见。

  3 按省份排序 输入功能数字

  4 按作者名与月份查找

 5 绘制百分比饼状图 1

 N

 2

 Y N

 3

  AddNew() Y N

 4

 N

 N

 Y

 AddNew() Y

  5

  退出

  Sort_by_province()

 Y

 N

 DoFind()

 Do print()

  结束

  五、源程序 // LeftView.cpp : implementation of the CLeftView class // #include "stdafx.h" #include "Odbc.h" #include "OdbcDoc.h" #include "LeftView.h" #include "MainFrm.h" #include "OdbcView.h" #include "CpbmSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLeftView IMPLEMENT_DYNCREATE(CLeftView, CTreeView) BEGIN_MESSAGE_MAP(CLeftView, CTreeView)//{{AFX_MSG_MAP(CLeftView) ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)//}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeftView construction/destruction CLeftView::CLeftView() {// TODO: add construction code here} CLeftView::~CLeftView() { } BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying //

 the CREATESTRUCT cs cs.style |= TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS;

 return CTreeView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CLeftView drawing void CLeftView::OnDraw(CDC* pDC) { COdbcDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);// TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CLeftView printing BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); // TODO: You may populate your TreeView with items by directly accessing //

 its tree control through a call to GetTreeCtrl().

  // 创建图像列表 m_ImageList.Create( 20, 20, ILC_COLOR16, 4, 1 );

  //向图象列表添加4个图标

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR1));

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR2) );

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR3) );

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR4) );

  //取得Tree控件,并指出树结点的图标从m_ImageList中取得 CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); HTREEITEM hItem0, hItem1, hItem2; TV_INSERTSTRUCT tvstruct; tvstruct.hParent=NULL; tvstruct.item.lParam=0; tvstruct.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM; tvstruct.item.iImage=0; tvstruct.item.iSelectedImage=0; tvstruct.item.pszText = "0000 所有作者"; hItem0 = m_TreeCtrl.InsertItem(&tvstruct); CDatabase db; CCpbmSet* pCpbmSet = new CCpbmSet(&db); pCpbmSet->m_strSort = "fCpbm ASC"; if(!pCpbmSet->IsOpen()) pCpbmSet->Open(); if(!pCpbmSet->IsBOF()) pCpbmSet->MoveFirst(); while(!pCpbmSet->IsEOF()) { CString strTemp1 = pCpbmSet->m_fcpbm; CString strTemp2 = pCpbmSet->m_fcpmc; strTemp1.TrimLeft(); strTemp1.TrimRight(); strTemp2.TrimLeft(); strTemp2.TrimRight(); CString strTemp = strTemp1 + " " + strTemp2; if(strTemp1.Right(3) == "000") { tvstruct.hParent = hItem0; tvstruct.item.lParam = 1; tvstruct.item.iImage=1; tvstruct.item.iSelectedImage=1; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem1 = m_TreeCtrl.InsertItem(&tvstruct);} else if(strTemp1.Right(2) == "00") { tvstruct.hParent = hItem1; tvstruct.item.lParam = 2; tvstruct.item.iImage=2; tvstruct.item.iSelectedImage=2; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem2 = m_TreeCtrl.InsertItem(&tvstruct); } else { tvstruct.hParent = hItem2; tvstruct.item.lParam = 3; tvstruct.item.iImage=3; tvstruct.item.iSelectedImage=3; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; m_TreeCtrl.InsertItem(&tvstruct); }pCpbmSet->MoveNext(); } pCpbmSet->Close(); delete pCpbmSet; } ///////////////////////////////////////////////////////////////////////////// // CLeftView diagnostics #ifdef _DEBUG void CLeftView::AssertValid() const { CTreeView::AssertValid(); } void CLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } COdbcDoc* CLeftView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COdbcDoc))); return (COdbcDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLeftView message handlers void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)

 { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); HTREEITEM CurItem = m_TreeCtrl.GetSelectedItem(); TVITEM TreeCtrlItem; TreeCtrlItem.hItem = CurItem; m_TreeCtrl.GetItem(&TreeCtrlItem); //CString tempString = TreeCtrlItem.pszText; CString tempString = m_TreeCtrl.GetItemText(m_TreeCtrl.GetSelectedItem());

 m_strCpbm = tempString.Left(4); m_nCurlParam = TreeCtrlItem.lParam; CMainFrame *MainFrame=(CMainFrame *) AfxGetMainWnd(); COdbcView * pOdbcView = MainFrame->GetRightPane(); pOdbcView->ListBuild(); *pResult = 0; }

 // CpqkSet.cpp : implementation file // #include "stdafx.h" #include "Odbc.h" #include "CpqkSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CCpqkSet IMPLEMENT_DYNAMIC(CCpqkSet, CRecordset) CCpqkSet::CCpqkSet(CDatabase* pdb): CRecordset(pdb) { //{{AFX_FIELD_INIT(CCpqkSet) m_fgsbm = _T(""); m_fcpbm = _T(""); m_nFields = 2; //}}AFX_FIELD_INIT m_nDefaultType = snapshot; } CString CCpqkSet::GetDefaultConnect() { return _T("ODBC;DSN=Caie"); } CString CCpqkSet::GetDefaultSQL() { return _T("[cpqk]"); } void CCpqkSet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CCpqkSet) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[fgsbm]"), m_fgsbm); RFX_Text(pFX, _T("[fcpbm]"), m_fcpbm); //}}AFX_FIELD_MAP } ///////////////////////////////////////////////////////////////////////////// // CCpqkSet diagnostics #ifdef _DEBUG void CCpqkSet::AssertValid() const { CRecordset::AssertValid(); } void CCpqkSet::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG

 // CpqkSet.cpp : implementation file //

 #include "stdafx.h" #include "Odbc.h" #include "CpqkSet.h"

 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

 ///////////////////////////////////////////////////////////////////////////// // CCpqkSet IMPLEMENT_DYNAMIC(CCpqkSet, CRecordset) CCpqkSet::CCpqkSet(CDatabase* pdb): CRecordset(pdb) { //{{AFX_FIELD_INIT(CCpqkSet) m_fgsbm = _T(""); m_fcpbm = _T(""); m_nFields = 2; //}}AFX_FIELD_INIT m_nDefaultType = snapshot; } CString CCpqkSet::GetDefaultConnect() { return _T("ODBC;DSN=Caie"); } CString CCpqkSet::GetDefaultSQL() { return _T("[cpqk]"); } void CCpqkSet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CCpqkSet) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[fgsbm]"), m_fgsbm); RFX_Text(pFX, _T("[fcpbm]"), m_fcpbm); //}}AFX_FIELD_MAP } ///////////////////////////////////////////////////////////////////////////// // CCpqkSet diagnostics #ifdef _DEBUG void CCpqkSet::AssertValid() const { CRecordset::AssertValid(); } void CCpqkSet::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG

 // DqbmSet.cpp : implementation file // #include "stdafx.h" #include "Odbc.h" #include "DqbmSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDqbmSet IMPLEMENT_DYNAMIC(CDqbmSet, CRecordset) CDqbmSet::CDqbmSet(CDatabase* pdb) : CRecordset(pdb) { //{{AFX_FIELD_INIT(CDqbmSet) m_fdqbm = _T(""); m_fdqmc = _T(""); m_nFields = 2; //}}AFX_FIELD_INIT m_nDefaultType = dynaset; } CString CDqbmSet::GetDefaultConnect() { return _T("ODBC;DSN=Caie"); } CString CDqbmSet::GetDefaultSQL() { return _T("[dqbm]"); } void CDqbmSet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CDqbmSet) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[fdqbm]"), m_fdqbm); RFX_Text(pFX, _T("[fdqmc]"), m_fdqmc); //}}AFX_FIELD_MAP } ///////////////////////////////////////////////////////////////////////////// // CDqbmSet diagnostics #ifdef _DEBUG void CDqbmSet::AssertValid() const { CRecordset::AssertValid(); } void CDqbmSet::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG

 // DqbmSet.cpp : implementation file //

 #include "stdafx.h" #include "Odbc.h" #include "DqbmSet.h"

 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

 ///////////////////////////////////////////////////////////////////////////// // CDqbmSet IMPLEMENT_DYNAMIC(CDqbmSet, CRecordset) CDqbmSet::CDqbmSet(CDatabase* pdb): CRecordset(pdb) { //{{AFX_FIELD_INIT(CDqbmSet) m_fdqbm = _T(""); m_fdqmc = _T(""); m_nFields = 2; //}}AFX_FIELD_INIT m_nDefaultType = dynaset; } CString CDqbmSet::GetDefaultConnect() { return _T("ODBC;DSN=Caie"); } CString CDqbmSet::GetDefaultSQL() { return _T("[dqbm]"); } void CDqbmSet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CDqbmSet) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[fdqbm]"), m_fdqbm); RFX_Text(pFX, _T("[fdqmc]"), m_fdqmc); //}}AFX_FIELD_MAP } ///////////////////////////////////////////////////////////////////////////// // CDqbmSet diagnostics #ifdef _DEBUG void CDqbmSet::AssertValid() const { CRecordset::AssertValid(); } void CDqbmSet::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG

 // LeftView.cpp : implementation of the CLeftView class // #include "stdafx.h" #include "Odbc.h" #include "OdbcDoc.h" #include "LeftView.h" #include "MainFrm.h" #include "OdbcView.h" #include "CpbmSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLeftView IMPLEMENT_DYNCREATE(CLeftView, CTreeView) BEGIN_MESSAGE_MAP(CLeftView, CTreeView) //{{AFX_MSG_MAP(CLeftView) ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeftView construction/destruction CLeftView::CLeftView() { // TODO: add construction code here } CLeftView::~CLeftView() { } BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying //

 the CREATESTRUCT cs cs.style |= TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS; return CTreeView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CLeftView drawing void CLeftView::OnDraw(CDC* pDC) { COdbcDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CLeftView printing BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate();

 // TODO: You may populate your TreeView with items by directly accessing

 //

 its tree control through a call to GetTreeCtrl().

  // 创建图像列表 m_ImageList.Create( 20, 20, ILC_COLOR16, 4, 1 );

  //向图象列表添加4个图标

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR1));

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR2) );

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR3) );

  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR4) );

  //取得Tree控件,并指出树结点的图标从m_ImageList中取得 CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); HTREEITEM hItem0, hItem1, hItem2; TV_INSERTSTRUCT tvstruct; tvstruct.hParent=NULL; tvstruct.item.lParam=0; tvstruct.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM; tvstruct.item.iImage=0; tvstruct.item.iSelectedImage=0; tvstruct.item.pszText = "0000 所有作者"; hItem0 = m_TreeCtrl.InsertItem(&tvstruct);

 CDatabase db; CCpbmSet* pCpbmSet = new CCpbmSet(&db); pCpbmSet->m_strSort = "fCpbm ASC"; if(!pCpbmSet->IsOpen()) pCpbmSet->Open(); if(!pCpbmSet->IsBOF()) pCpbmSet->MoveFirst(); while(!pCpbmSet->IsEOF()) { CString strTemp1 = pCpbmSet->m_fcpbm; CString strTemp2 = pCpbmSet->m_fcpmc; strTemp1.TrimLeft(); strTemp1.TrimRight(); strTemp2.TrimLeft(); strTemp2.TrimRight(); CString strTemp = strTemp1 + " " + strTemp2;

  if(strTemp1.Right(3) == "000") { tvstruct.hParent = hItem0; tvstruct.item.lParam = 1; tvstruct.item.iImage=1; tvstruct.item.iSelectedImage=1; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem1 = m_TreeCtrl.InsertItem(&tvstruct); } else if(strTemp1.Right(2) == "00") { tvstruct.hParent = hItem1; tvstruct.item.lParam = 2; tvstruct.item.iImage=2; tvstruct.item.iSelectedImage=2; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem2 = m_TreeCtrl.InsertItem(&tvstruct); } else { tvstruct.hParent = hItem2; tvstruct.item.lParam = 3; tvstruct.item.iImage=3; tvstruct.item.iSelectedImage=3; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; m_TreeCtrl.InsertItem(&tvstruct); } pCpbmSet->MoveNext(); } pCpbmSet->Close(); delete pCpbmSet; } ///////////////////////////////////////////////////////////////////////////// // CLeftView diagnostics #ifdef _DEBUG void CLeftView::AssertValid() const { CTreeView::AssertValid(); } void CLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } COdbcDoc* CLeftView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COdbcDoc))); return (COdbcDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLeftView message handlers void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)

 { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); HTREEITEM CurItem = m_TreeCtrl.GetSelectedItem(); TVITEM TreeCtrlItem; TreeCtrlItem.hItem = CurItem; m_TreeCtrl.GetItem(&TreeCtrlItem); // CString tempString = TreeCtrlItem.pszText; CString tempString = m_TreeCtrl.GetItemText(m_TreeCtrl.GetSelectedItem()); m_strCpbm = tempString.Left(4); m_nCurlParam = TreeCtrlItem.lParam; CMainFrame *MainFrame=(CMainFrame *) AfxGetMainWnd(); COdbcView * pOdbcView = MainFrame->GetRightPane(); pOdbcView->ListBuild(); *pResult = 0; }

 // LeftView.cpp : implementation of the CLeftView class // #include "stdafx.h" #include "Odbc.h" #include "OdbcDoc.h" #include "LeftView.h" #include "MainFrm.h" #include "OdbcView.h" #include "CpbmSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLeftView IMPLEMENT_DYNCREATE(CLeftView, CTreeView) BEGIN_MESSAGE_MAP(CLeftView, CTreeView) //{{AFX_MSG_MAP(CLeftView) ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeftView construction/destruction CLeftView::CLeftView() { // TODO: add construction code here } CLeftView::~CLeftView() { } BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying //

 the CREATESTRUCT cs cs.style |= TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS; return CTreeView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CLeftView drawing void CLeftView::OnDraw(CDC* pDC) { COdbcDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CLeftView printing BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); // TODO: You may populate your TreeView with items by directly accessing //

 its tree control through a call to GetTreeCtrl(). // 创建图像列表 m_ImageList.Create( 20, 20, ILC_COLOR16, 4, 1 );

  //向图象列表添加4个图标 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR1)); m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR2) ); m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR3) ); m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CAR4) );

  //取得Tree控件,并指出树结点的图标从m_ImageList中取得 CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); HTREEITEM hItem0, hItem1, hItem2; TV_INSERTSTRUCT tvstruct; tvstruct.hParent=NULL; tvstruct.item.lParam=0; tvstruct.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM; tvstruct.item.iImage=0; tvstruct.item.iSelectedImage=0; tvstruct.item.pszText = "0000 所有作者"; =hItem0 = m_TreeCtrl.InsertItem(&tvstruct); CDatabase db; CCpbmSet* pCpbmSet = new CCpbmSet(&db); pCpbmSet->m_strSort = "fCpbm ASC"; if(!pCpbmSet->IsOpen()) pCpbmSet->Open(); if(!pCpbmSet->IsBOF()) pCpbmSet->MoveFirst(); while(!pCpbmSet->IsEOF()) { CString strTemp1 = pCpbmSet->m_fcpbm; CString strTemp2 = pCpbmSet->m_fcpmc; strTemp1.TrimLeft(); strTemp1.TrimRight(); strTemp2.TrimLeft(); strTemp2.TrimRight(); CString strTemp = strTemp1 + " " + strTemp2; if(strTemp1.Right(3) == "000") { tvstruct.hParent = hItem0; tvstruct.item.lParam = 1; tvstruct.item.iImage=1; tvstruct.item.iSelectedImage=1; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem1 = m_TreeCtrl.InsertItem(&tvstruct); } else if(strTemp1.Right(2) == "00") { tvstruct.hParent = hItem1; tvstruct.item.lParam = 2; tvstruct.item.iImage=2; tvstruct.item.iSelectedImage=2; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; hItem2 = m_TreeCtrl.InsertItem(&tvstruct); } else { tvstruct.hParent = hItem2; tvstruct.item.lParam = 3; tvstruct.item.iImage=3; tvstruct.item.iSelectedImage=3; tvstruct.item.pszText = (LPTSTR)(LPCTSTR)strTemp; m_TreeCtrl.InsertItem(&tvstruct); } pCpbmSet->MoveNext(); } pCpbmSet->Close(); delete pCpbmSet; } ///////////////////////////////////////////////////////////////////////////// // CLeftView diagnostics #ifdef _DEBUG void CLeftView::AssertValid() const { CTreeView::AssertValid(); } void CLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } COdbcDoc* CLeftView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COdbcDoc))); return (COdbcDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLeftView message handlers void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)

 { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CTreeCtrl &m_TreeCtrl = GetTreeCtrl(); HTREEITEM CurItem = m_TreeCtrl.GetSelectedItem(); TVITEM TreeCtrlItem; TreeCtrlItem.hItem = CurItem; m_TreeCtrl.GetItem(&TreeCtrlItem); //CString tempString = TreeCtrlItem.pszText; CString tempString = m_TreeCtrl.GetItemText(m_TreeCtrl.GetSelectedItem());

  m_strCpbm = tempString.Left(4); m_nCurlParam = TreeCtrlItem.lParam; CMainFrame *MainFrame=(CMainFrame *) AfxGetMainWnd(); COdbcView * pOdbcView = MainFrame->GetRightPane(); pOdbcView->ListBuild(); *pResult = 0; }

 /*++ Copyright (c) 1997-1998

 Microsoft Corporation Module Name:

 basetsd.h Abstract: Type definitions for the basic sized types. Author: Jeff Havens (jhavens)

  23-Oct-1997 Revision History: --*/ #ifndef _BASETSD_H_ #define _BASETSD_H_ #ifdef __cplusplus extern "C" { #endif // // The following types are guaranteed to be signed and 32 bits wide. // typedef int LONG32, *PLONG32; typedef int INT32, *PINT32; // // The following types are guaranteed to be unsigned and 32 bits wide. // typedef unsigned int ULONG32, *PULONG32; typedef unsigned int DWORD32, *PDWORD32; typedef unsigned int UINT32, *PUINT32; // // The INT_PTR is guaranteed to be the same size as a pointer.

 Its // size with change with pointer size (32/64).

 It should be used // anywhere that a pointer is cast to an integer type. UINT_PTR is // the unsigned variation. // // HALF_PTR is half the size of a pointer it intended for use with // within strcuture which contain a pointer and two small fields. // UHALF_PTR is the unsigned variation. // #ifdef _WIN64 typedef __int64 INT_PTR, *PINT_PTR; typedef unsigned __int64 UINT_PTR, *PUINT_PTR; #define MAXINT_PTR (0x7fffffffffffffffI64) #define MININT_PTR (0x8000000000000000I64) #define MAXUINT_PTR (0xffffffffffffffffUI64) typedef unsigned int UHALF_PTR, *PUHALF_PTR; typedef int HALF_PTR, *PHALF_PTR; #define MAXUHALF_PTR (0xffffffffUL) #define MAXHALF_PTR (0x7fffffffL) #define MINHALF_PTR (0x80000000L) #pragma warning(disable:4311)

  // type cast truncation #if !defined(__midl) __inline unsigned long HandleToUlong(

  void *h

  ) {

  return((unsigned long) h ); } __inline unsigned long PtrToUlong(

  void

 *p

  ) {

  return((unsigned long) p ); } __inline unsigned short PtrToUshort(

  void

 *p

  ) {

 return((unsigned short) p ); } __inline long PtrToLong( void

 *p

  ) { return((long) p ); } __inline short PtrToShort(

 void

 *p

  ) {

 return((short) p ); } #endif #pragma warning(3:4311)

  // type cast truncation #else typedef long INT_PTR, *PINT_PTR; typedef unsigned long UINT_PTR, *PUINT_PTR; #define MAXINT_PTR (0x7fffffffL) #define MININT_PTR (0x80000000L) #define MAXUINT_PTR (0xffffffffUL) typedef unsigned short UHALF_PTR, *PUHALF_PTR; typedef short HALF_PTR, *PHALF_PTR; #define MAXUHALF_PTR 0xffff #define MAXHALF_PTR 0x7fff #define MINHALF_PTR 0x8000 #define HandleToUlong( h ) ((ULONG) (h) ) #define PtrToUlong( p ) ((ULONG) (p) ) #define PtrToLong( p ) ((LONG) (p) ) #define PtrToUshort( p ) ((unsigned short) (p) ) #define PtrToShort( p ) ((short) (p) ) #endif // // SIZE_T used for counts or ranges which need to span the range of // of a pointer.

 SSIZE_T is the signed variation. // typedef UINT_PTR SIZE_T, *PSIZE_T; typedef INT_PTR SSIZE_T, *PSSIZE_T; // // The following types are guaranteed to be signed and 64 bits wide. // typedef __int64 LONG64, *PLONG64; typedef __int64 INT64, *PINT64; // // The following types are guaranteed to be unsigned and 64 bits wide. // typedef unsigned __int64 ULONG64, *PULONG64; typedef unsigned __int64 DWORD64, *PDWORD64; typedef unsigned __int64 UINT64, *PUINT64; #ifdef __cplusplus } #endif #endif // _BASETSD_H_

  六、运行情况 1、程序的Dialog对话框

 2、程序的主界面

 七、实践心得 在本课程学习过程中我遇到了下面这些问题:

  1、刚开始C++实践理论课的学习时,我的学习兴趣很高,总想着自己能够完全掌握PPT的知识,做成一个完美的程序。随着学习的进展,调试程序总是出现问题,最夸张的一次出现了204个ERRORS,也经常不知道怎么去在正确的期房插入程序块。而比较严格的语法规则,也让我一时难以接受,产生畏难情绪,总是怕,最后因为怕学不好而导致没有学好。

  2、注重理论学习,忽视上机编程实践,造成“只能用笔在纸上编程”的奇怪现象。特别是在刚开始时,我一开始编译连接就手忙脚乱,总是会出现许多错误。有时程序则一再出现错误,使我就更不理解该如何查找错误,如何排除错误了。

  3、在前期的学习中我没有抓得很紧,总觉得不是很难,希望通过突击搞定课程学习。而事实上,本课程实践要靠平时的积累,几乎不能靠临时突击,因为前面基础不够扎实,到了后面险些无法弥补。

  4、我发现自己在后期的学习中有些急于求成,总想编写综合性的程序,把老师的要求一次性尽快完成。这直接导致了我编的程序一时很乱,几乎无法阅读。

  后来才发现为了学好本课程,没有什么窍门,只能采用一些“笨”技巧:

  认真听讲,积极思考,提高上课效率。老师上课讲述的都是课程实践的重点和难点,听好课程能够达到“事半功倍”的目的。

  主动上机,多多实践,提高动手才能,实习时不能着急。通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机才能来促进理论学习,开阔编程思路,提高反映效率,提高分析问题解决问题的才能,锻炼心理素质,提高心理承受才能。

 这是第二次上计算机实践课程了,第一次是网页设计。虽然两次要完成的任务不同,但给人的感觉都是较迷茫的。由于我上课时没有认真听C++课程老师的讲解,学得相当糟糕,但要设计的又是一个较大的程序,便去请教老师。老师建议我们找一个模板,认真仔细地看,去理解它,看懂它,然后根据自己的实践内容适当修改,应该就没多大问题了。

 老师的话给了我莫大的鼓励,但不自觉地滋生了傲慢的态度。只要有个模板不就行了嘛,小事一桩啊!但结果并非如此,在后来的实践过程中,我还是碰到了许多麻烦。

 其中,对于按省份给每个省的总发表篇数进行排序这一问题,刚开始真的不会弄,我一开始以为要用一维数组来排序,可还是不太明白。于是,我询问了周边同学,才知道他们用的是Access导入C++,再利用Access的排序功能,并且调试成功了,听他们讲解后我便用了他们的方法。与同学讨论、向同学请教有时候也不失为一个好方法,一个人的智慧毕竟是不全面的,集体的力量才是强大的! 同时,在运行时老是会出现一些错误,但我发现其实里面的参数并不复杂,只要跟着那个error的提示,一个一个的改下去,其实很简单的。结果事实也是如此,用了一个小时多一点,102个错误全部搞定了。错误几乎为以下三类:

 1. 冒号,分号等符号打错了; 2. 大小写等造成的对应问题; 3. 变量的不完全修改。

 改完以后,在执行时我发现界面不好看,于是我又将主界面略加修改了些。看上去美观了不少。再运行功能,几乎都能顺利运行,但还是存在一些瑕疵,但是我还是不太会弄清怎么回事。于是,又去问同学,在他们的帮助下,成功解决这个问题,在此真要好好谢谢他们! 终于大功告成!欣慰在这次实践中,我不仅弥补了自己在C++课上所落下的内容,尤其是指针那块部分,虽然现在概念搞的还不是很懂,但看见程序是能够理解的。这次C++实践是给我们这一学期来所学知识的一个总复习,总的实践。它让我们把所知道的知识点运用的更好,把不知道的知识点搞得明白了。实践出真知,通过这次实践,我也系统的把课本好好的第四次回顾了下。猛然觉得,C++二级考试更有把握了。

  在本门课程实践过程中,我更好的领悟了自学的重要性,并且和同学加强了交流,以便我们互相及时答疑解惑。同时我也学会了采用多种形式进行交流,不仅只是传统的面对面进行相互答疑,同时也利用网络通过百度知道、百度文库、邮件、BBS进行网上交流,也学会了绝对不要将问题积累到最后。

  同时在本次实践中,我还开阔了眼界,打开了思路,阅读了几本关于C++编程的教程,从而通过理解不同作者对于C++的不同看法,来提高我对C++的理解,以方便自己在未来对C++的进一步学习。

 八、课程设计的收获与不足 对于选定的设计题目,我学会了如何进行分析,理清思路,并给出相应的数学模型;掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法;熟练掌握C++语言的基本语法,灵活运用各种数据类型;进一步掌握在集成环境下如何调试程序和修改程序;树立正确的程序设计思想,培养我们的程序设计能力和创新能力;学会面向对象的程序设计的方法,掌握面向对象程序设计的一般规律;进行程序设计的基本技能训练,如算法分析与设计、类的设计与使用。

  通过这次实践让我认识到C++程序设计是一门实践性很强的课程,学习程序设计不能仅限于纸上谈兵,许多程序方法和技巧不是光靠听课和看书就能学得到的,而是必须通过大量的上机实践慢慢积累起来,程序设计能力的培养必须以实践为重,几天的学习给了我锻炼的机会.另外通过这次实践,培养了自己做事认真,严谨的态度。

 还有程序设计,程序编译及运行过程中不可避免会出现不会、不懂的地方,出现程序错误以及不能编译运行等种种困难,让我必须非常严谨对待每一个语句,锻炼了严谨的思维。

 不足:看教材和例题时感觉都很明白,说明原理都掌握了。但自己上机是总是错误百出。看来只掌握理论知识是远远不够的。

  附---参考文献:

 1.《C++程序设计实践教程》 中国铁道出版社(2008)

  2.《C++程序设计》

  中国铁道出版社(2008)

  3. 网上下载资料 《个人事务管理系统》

 学院:物理与科学技术学院

  专业班级:物理与电子科学类1007班 学号:1404100725姓名:阮静雅 指导老师:李力

 

Tags: 稿件   语言程序设计   数据  

搜索
网站分类
标签列表