www.gusucode.com > 一个VC++订单系统源码程序 > 一个VC++订单系统/OFManage/OFManage/Src/OFManageView.cpp
// OFManageView.cpp : implementation of the COFManageView class // #include "stdafx.h" #include "OFManage.h" #include "MainFrm.h" #include "OFManageDoc.h" #include "OFManageView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COFManageView IMPLEMENT_DYNCREATE(COFManageView, CEditListView) BEGIN_MESSAGE_MAP(COFManageView, CEditListView) //{{AFX_MSG_MAP(COFManageView) ON_WM_CREATE() ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk) ON_COMMAND(IDM_ADDRECORD, OnAddrecord) ON_COMMAND(IDM_REFRESHRECORD, OnRefreshrecord) ON_COMMAND(IDM_DELRECORD, OnDelrecord) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CEditListView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CEditListView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CEditListView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COFManageView construction/destruction COFManageView::COFManageView() { // TODO: add construction code here m_pList = (CListCtrl*)&this->GetListCtrl(); } COFManageView::~COFManageView() { if (m_pEditStrict != 0) { delete[] m_pEditStrict; } } BOOL COFManageView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CEditListView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // COFManageView drawing void COFManageView::OnDraw(CDC* pDC) { COFManageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } void COFManageView::OnInitialUpdate() { CEditListView::OnInitialUpdate(); // TODO: You may populate your ListView with items by directly accessing // its list control through a call to GetListCtrl(). m_pMainFrame = (CMainFrame *)AfxGetMainWnd(); AfxGetMainWnd()->SetWindowText("订单管理系统"); m_pOFSet = &GetDocument()->m_OFSet; m_pGoodsSet = &GetDocument()->m_GoodsSet; if (m_pOFSet->Open() == FALSE) { MessageBox("连接数据库失败!退出系统", "出错", MB_ICONWARNING); AfxGetMainWnd()->SendMessage(WM_CLOSE); } DisplayOFInfo(); m_pDataBase = m_pGoodsSet->m_pDatabase = m_pOFSet->m_pDatabase; m_pGoodsSet->m_strFilter = "OFID = ?"; m_pGoodsSet->m_nOrderIDParam = m_pOFSet->m_OFID; m_toolTip.Create(this); m_toolTip.Activate(TRUE); m_toolTip.AddTool(m_pList, "在订单列表中按Alt键同时双击订单条目时,可以查看该订单上的货物信息"); if (!m_restrictDateTimeCtrl.Create(WS_CHILD | WS_TABSTOP | DTS_RIGHTALIGN, CRect(0, 0, 0, 0), this, IDC_DATETIME)) { TRACE("Create DateTimeCtrl failed"); return; } m_restrictDateTimeCtrl.SetParentView(this); m_pEditStrict = new EDITSTRICT[7]; m_pEditStrict[0].type = Integer; m_pEditStrict[0].nLen = 4; m_pEditStrict[1].type = Integer; m_pEditStrict[1].nLen = 4; m_pEditStrict[2].type = Character; m_pEditStrict[2].nLen = 50; m_pEditStrict[3].type = Character; m_pEditStrict[3].nLen = 50; m_pEditStrict[4].type = Character; m_pEditStrict[4].nLen = 50; m_pEditStrict[5].type = Character; m_pEditStrict[5].nLen = 50; m_pEditStrict[6].type = Character; m_pEditStrict[6].nLen = 50; } ///////////////////////////////////////////////////////////////////////////// // COFManageView printing BOOL COFManageView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void COFManageView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void COFManageView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // COFManageView diagnostics #ifdef _DEBUG void COFManageView::AssertValid() const { CEditListView::AssertValid(); } void COFManageView::Dump(CDumpContext& dc) const { CEditListView::Dump(dc); } COFManageDoc* COFManageView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COFManageDoc))); return (COFManageDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // COFManageView message handlers int COFManageView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CEditListView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here m_pList->ModifyStyle(NULL, LVS_REPORT | LVS_SHOWSELALWAYS); m_pList->InsertColumn(0, "订单号", LVCFMT_LEFT, 85, -1); m_pList->InsertColumn(1, "客户号", LVCFMT_LEFT, 85, -1); m_pList->InsertColumn(2, "客户名", LVCFMT_LEFT, 150, -1); m_pList->InsertColumn(3, "客户电话", LVCFMT_LEFT, 170, -1); m_pList->InsertColumn(4, "生产厂家", LVCFMT_LEFT, 170, -1); m_pList->InsertColumn(5, "商标名", LVCFMT_LEFT, 170, -1); m_pList->InsertColumn(6, "订货日期", LVCFMT_LEFT, 170, -1); //设置列表控件的风格 m_pList->SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP | LVS_EX_UNDERLINEHOT | LVS_EX_MULTIWORKAREAS); m_pList->SetTextColor(RGB(100, 0, 100)); m_pList->SetTextBkColor(RGB(240, 247, 233)); return 0; } void COFManageView::DisplayOFInfo() { m_pList->DeleteAllItems(); int nIndex = 0; CString strTemp; if (m_pOFSet->IsEOF()) { m_pList->InsertItem(nIndex, ""); return; } CString strOrderDate; m_pOFSet->MoveFirst(); while (!m_pOFSet->IsEOF()) { strTemp.Format("%d", m_pOFSet->m_OFID); m_pList->InsertItem(nIndex, strTemp); //订单号 strTemp.Format("%d", m_pOFSet->m_CustomerID); m_pList->SetItemText(nIndex, 1, strTemp); //客户号 m_pList->SetItemText(nIndex, 2, m_pOFSet->m_CustomerName); //客户名 m_pList->SetItemText(nIndex, 3, m_pOFSet->m_CustomerTel); //客户电话 m_pList->SetItemText(nIndex, 4, m_pOFSet->m_Corporation); //生产厂家 m_pList->SetItemText(nIndex, 5, m_pOFSet->m_BrandName); //商标名 strOrderDate = m_pOFSet->m_OrderDate.Format("%Y-%m-%d"); m_pList->SetItemText(nIndex, 6, strOrderDate); //订货日期 m_pOFSet->MoveNext(); nIndex++; } m_pList->InsertItem(nIndex, ""); m_pOFSet->MoveFirst(); } void COFManageView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here if (IsOnItem() == FALSE) { return; } POINT point; int nWidth = 0; int nSubItem = 0; int nItem = m_pList->GetSelectionMark(); CRect rect; CString strOrderDate; if (GetKeyState(VK_MENU) & 0x8000) { int nSelection = m_pList->GetSelectionMark(); ViewGoods(nSelection); } else { GetCursorPos(&point); while (nWidth < point.x) { nWidth += m_pList->GetColumnWidth(nSubItem); nSubItem++; } nSubItem--; if (nSubItem == 6) { m_pList->GetSubItemRect(nItem, nSubItem, LVIR_LABEL, rect); rect.top -= 2; rect.bottom += 2; m_restrictDateTimeCtrl.MoveWindow(&rect); m_restrictDateTimeCtrl.ShowWindow(SW_SHOW); m_restrictDateTimeCtrl.SetFocus(); m_restrictDateTimeCtrl.SetPos(nItem, nSubItem); strOrderDate = m_pList->GetItemText(nItem, 6); m_restrictDateTimeCtrl.SetTime(String2Time(strOrderDate)); return; } CEditListView::OnDblclk(pNMHDR, pResult); } *pResult = 0; } void COFManageView::UpdateDatabase(CString str, int nItem, int nSubItem, BOOL bCancel, BOOL bModify) { CString strSQL; CString strPrev = m_pList->GetItemText(nItem, nSubItem); BOOL bSuccess = TRUE; int nAllCnt = m_pList->GetItemCount(); BOOL bTail = (nItem == nAllCnt - 1); int nOFID; int nCustomerID; CString strOFID; CTime dateOrder; //不是最后一条记录,说明是修改记录或者删除记录,这种情况最容易处理 if (!bTail) { if (bCancel == TRUE || str == strPrev || bModify == FALSE) { return; } //修改订单号 if (nSubItem == 0) { //订单号为空 if (str == "") { MessageBox("订单号不能为空", "出错", MB_ICONWARNING); DblClkProc(nItem, 0); return; } //订单号不为空 nOFID = atoi((LPCSTR)strPrev); strSQL.Format("delete from OrderForm where OFID = %d", nOFID); bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } if (bSuccess == FALSE) { return; } if (m_pOFSet->CanAppend() == FALSE) { MessageBox("目前不能添加记录,请稍候再试", "出错", MB_ICONWARNING); return; } m_pOFSet->AddNew(); m_restrictDateTimeCtrl.SetFormat(m_pList->GetItemText(nItem, 6)); m_restrictDateTimeCtrl.GetTime(dateOrder); m_pOFSet->m_OFID = atoi(LPCSTR(str)); m_pOFSet->m_CustomerID = atoi(LPCSTR(m_pList->GetItemText(nItem, 1))); m_pOFSet->m_CustomerName = m_pList->GetItemText(nItem, 2); m_pOFSet->m_CustomerTel = m_pList->GetItemText(nItem, 3); m_pOFSet->m_Corporation = m_pList->GetItemText(nItem, 4); m_pOFSet->m_BrandName = m_pList->GetItemText(nItem, 5); m_pOFSet->m_OrderDate = dateOrder; if (m_pOFSet->CanUpdate() == FALSE) { MessageBox("目前不能更新记录,请稍候再试", "出错", MB_ICONWARNING); return; } bSuccess = TRUE; try { m_pOFSet->Update(); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } if (bSuccess == FALSE) { OnRefreshrecord(); return; } strSQL.Format("update Goods set OFID = %d where OFID = %d", CString2Int(str), CString2Int(strPrev)); bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } if (bSuccess == FALSE) { return; } m_pList->SetItemText(nItem, nSubItem, str); ViewGoods(nItem); if (m_pGoodsView->GetItemCount() == 1) { m_pGoodsView->DblClkProc(0, 0); } return; } //nSubItem != 0 nOFID = atoi((LPCSTR)m_pList->GetItemText(nItem, 0)); switch(nSubItem) { case 1: nCustomerID = CString2Int(str); strSQL.Format("update OrderForm set CustomerID = %d where OFID = %d", nCustomerID, nOFID); break; case 2: strSQL.Format("update OrderForm set CustomerName = '%s' where OFID = %d", str, nOFID); break; case 3: strSQL.Format("update OrderForm set CustomerTel = '%s' where OFID = %d", str, nOFID); break; case 4: strSQL.Format("update OrderForm set FactoryName = '%s' where OFID = %d", str, nOFID); break; case 5: strSQL.Format("update OrderForm set BrandName = '%s' where OFID = %d", str, nOFID); break; case 6: strSQL.Format("update OrderForm set OrderDate = '%s' where OFID = %d", str, nOFID); break; default: break; } bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } m_pList->SetItemText(nItem, nSubItem, str); return; } //最后一条记录,说明为添加记录 if (bCancel == TRUE || bModify == FALSE) { m_pList->SetItemText(nItem, 0, ""); m_pList->SetItemText(nItem, 1, ""); m_pList->SetItemText(nItem, 2, ""); m_pList->SetItemText(nItem, 3, ""); m_pList->SetItemText(nItem, 4, ""); m_pList->SetItemText(nItem, 5, ""); m_pList->SetItemText(nItem, 6, ""); return; } CString strCustomerID; CString strCustomerName; CString strCustomerTel; CString strFactoryName; CString strBrandName; CString strOrderDate; m_pList->SetItemText(nItem, nSubItem, str); if (nSubItem == 0) { strOFID = str; } else { strOFID = m_pList->GetItemText(nItem, 0); } if (strOFID == "") { DblClkProc(nItem, 0); return; } if (nSubItem == 1) { strCustomerID = str; } else { strCustomerID = m_pList->GetItemText(nItem, 1); } if (strCustomerID == "") { DblClkProc(nItem, 1); return; } if (nSubItem == 2) { strCustomerName = str; } else { strCustomerName = m_pList->GetItemText(nItem, 2); } if (strCustomerName == "") { DblClkProc(nItem, 2); return; } if (nSubItem == 3) { strCustomerTel = str; } else { strCustomerTel = m_pList->GetItemText(nItem, 3); } if (nSubItem == 4) { strFactoryName = str; } else { strFactoryName = m_pList->GetItemText(nItem, 4); } if (nSubItem == 5) { strBrandName = str; } else { strBrandName = m_pList->GetItemText(nItem, 5); } if (nSubItem == 6) { strOrderDate = str; } else { strOrderDate = m_pList->GetItemText(nItem, 6); } nOFID = CString2Int(strOFID); if (m_pOFSet->CanAppend() == FALSE) { MessageBox("目前不能添加记录,请稍候再试", "出错", MB_ICONWARNING); return; } m_pOFSet->AddNew(); m_restrictDateTimeCtrl.SetFormat(strOrderDate); m_restrictDateTimeCtrl.GetTime(dateOrder); m_pOFSet->m_OFID = CString2Int(strOFID); m_pOFSet->m_CustomerID = CString2Int(strCustomerID); m_pOFSet->m_CustomerName= strCustomerName; m_pOFSet->m_CustomerTel = strCustomerTel; m_pOFSet->m_Corporation = strFactoryName; m_pOFSet->m_BrandName = strBrandName; m_pOFSet->m_OrderDate = dateOrder; if (m_pOFSet->CanUpdate() == FALSE) { MessageBox("目前不能更新记录,请稍候再试", "出错", MB_ICONWARNING); return; } bSuccess = TRUE; try { m_pOFSet->Update(); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } catch (CMemoryException *pEx) { bSuccess = FALSE; pEx->ReportError(); } if (bSuccess == FALSE) { m_pList->SetItemText(nItem, 0, ""); m_pList->SetItemText(nItem, 1, ""); m_pList->SetItemText(nItem, 2, ""); m_pList->SetItemText(nItem, 3, ""); m_pList->SetItemText(nItem, 4, ""); m_pList->SetItemText(nItem, 5, ""); m_pList->SetItemText(nItem, 6, ""); return; } m_pList->InsertItem(nItem + 1, ""); ViewGoods(nItem); if (m_pGoodsView->GetItemCount() == 1) { m_pGoodsView->DblClkProc(0, 0); } } void COFManageView::DeleteOF(int nOFID) { int i; CString strOFID; int nCnt = m_pList->GetItemCount(); strOFID.Format("%d", nOFID); for (i = 0; i < nCnt; i++) { if (m_pList->GetItemText(i, 0) == strOFID) { m_pList->DeleteItem(i); break; } } //下面还有条目 if (i <= nCnt - 3) { ViewGoods(i + 1); return; } //上面还有条目 if (i >= 1) { ViewGoods(i - 1); return; } //没有任何条目 m_pGoodsView->DeleteAllItems(); } void COFManageView::ViewGoods(int nItem) { CString strOFID; strOFID = m_pList->GetItemText(nItem, 0); if (strOFID == "") { m_pMainFrame->SetStatusBarText("没有货物信息"); return; } m_pGoodsView->SetOFID(strOFID); m_pGoodsSet->m_strFilter = "OFID = ?"; m_pGoodsSet->m_nOrderIDParam = atoi((LPCSTR)strOFID); m_pGoodsSet->Requery(); m_pGoodsView->DisplayGoodsInfo(); } void COFManageView::OnAddrecord() { // TODO: Add your command handler code here DblClkProc(m_pList->GetItemCount() - 1, 0); m_pMainFrame->SetStatusBarText("请输入货物号"); } void COFManageView::OnRefreshrecord() { // TODO: Add your command handler code here m_pOFSet->Requery(); DisplayOFInfo(); } void COFManageView::OnDelrecord() { // TODO: Add your command handler code here int nItem; int nCnt = m_pList->GetItemCount(); int nDelCnt = 0; BOOL bSuccess = TRUE; POSITION pos = m_pList->GetFirstSelectedItemPosition(); if (pos == NULL) { return; } while (pos) { nItem = m_pList->GetNextSelectedItem(pos); if (nItem != nCnt - 1) { if (DelRecord(nItem) == FALSE) { bSuccess = FALSE; break; } nDelCnt++; } } if (bSuccess == TRUE) { if (nItem == nCnt - 1) { DelItems(nItem - 1, nDelCnt); } else { DelItems(nItem, nDelCnt); } } else { DelItems(nItem - 1, nDelCnt); } if (m_pList->GetItemCount() > 1) { ViewGoods(0); } } int COFManageView::GetItemCount() { return m_pList->GetItemCount(); } BOOL COFManageView::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class m_toolTip.RelayEvent(pMsg); return CEditListView::PreTranslateMessage(pMsg); } BOOL COFManageView::DelRecord(int nItem) { int nOFID = CString2Int(m_pList->GetItemText(nItem, 0)); CString strSQL; BOOL bSuccess; strSQL.Format("delete from OrderForm where OFID = %d", nOFID); bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } if (bSuccess == FALSE) { return FALSE; } //删除此表单对应的货物信息 strSQL.Format("delete from Goods where OFID = %d", nOFID); bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } return bSuccess; } void COFManageView::UpdateDatabase(CTime dateOrder, int nItem, int nSubItem) { int nAllCnt = m_pList->GetItemCount(); BOOL bSuccess = TRUE; CString strSQL; int nOFID; CString strOrderDate; CString strPrev = m_pList->GetItemText(nItem, nSubItem); BOOL bTail = (nItem == nAllCnt - 1); strOrderDate = dateOrder.Format("%Y-%m-%d"); //不是最后一条记录,说明是修改记录或者删除记录,这种情况最容易处理 if (!bTail) { nOFID = atoi((LPCSTR)m_pList->GetItemText(nItem, 0)); if (strOrderDate == strPrev) { return; } strSQL.Format("update OrderForm set OrderDate = '%s' where OFID = %d", strOrderDate, nOFID); bSuccess = TRUE; try { m_pDataBase->ExecuteSQL(strSQL); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } m_pList->SetItemText(nItem, nSubItem, strOrderDate); return; } //添加记录 CString strOFID; CString strCustomerID; CString strCustomerName; CString strCustomerTel; CString strFactoryName; CString strBrandName; m_pList->SetItemText(nItem, nSubItem, strOrderDate); strOFID = m_pList->GetItemText(nItem, 0); if (strOFID == "") { DblClkProc(nItem, 0); return; } strCustomerID = m_pList->GetItemText(nItem, 1); if (strCustomerID == "") { DblClkProc(nItem, 1); return; } strCustomerName = m_pList->GetItemText(nItem, 2); if (strCustomerName == "") { DblClkProc(nItem, 2); return; } strCustomerTel = m_pList->GetItemText(nItem, 3); strFactoryName = m_pList->GetItemText(nItem, 4); strBrandName = m_pList->GetItemText(nItem, 5); nOFID = CString2Int(strOFID); if (m_pOFSet->CanAppend() == FALSE) { MessageBox("目前不能添加记录,请稍候再试", "出错", MB_ICONWARNING); return; } m_pOFSet->AddNew(); m_restrictDateTimeCtrl.SetFormat(strOrderDate); m_restrictDateTimeCtrl.GetTime(dateOrder); m_pOFSet->m_OFID = CString2Int(strOFID); m_pOFSet->m_CustomerID = CString2Int(strCustomerID); m_pOFSet->m_CustomerName= strCustomerName; m_pOFSet->m_CustomerTel = strCustomerTel; m_pOFSet->m_Corporation = strFactoryName; m_pOFSet->m_BrandName = strBrandName; m_pOFSet->m_OrderDate = dateOrder; if (m_pOFSet->CanUpdate() == FALSE) { MessageBox("目前不能更新记录,请稍候再试", "出错", MB_ICONWARNING); return; } bSuccess = TRUE; try { m_pOFSet->Update(); } catch (CDBException *pEx) { bSuccess = FALSE; pEx->ReportError(); } m_pList->InsertItem(nItem + 1, ""); ViewGoods(nItem); if (m_pGoodsView->GetItemCount() == 1) { m_pGoodsView->DblClkProc(0, 0); } } COleDateTime COFManageView::String2Time(CString strDate) { COleDateTime loeDateTime; loeDateTime.SetTime(0, 0, 0); if (strDate == "") { loeDateTime = COleDateTime::GetCurrentTime(); return loeDateTime; } int i = 0; char *szDate = strDate.GetBuffer(100); int nLen = strDate.GetLength(); CString strYear; CString strMonth; CString strDay; int nYear; int nMonth; int nDay; strYear = strDate.Mid(0, strDate.Find('-', 0)); nYear = atoi((LPCSTR)strYear); strMonth = strDate.Mid(strYear.GetLength() + 1); strMonth = strMonth.Mid(0, strMonth.Find('-' , 0)); nMonth = atoi((LPCSTR)strMonth); strDay = strDate.Mid(strYear.GetLength() + strMonth.GetLength() + 2); nDay = atoi((LPCSTR)strDay); loeDateTime.SetDate(nYear, nMonth, nDay); return loeDateTime; }