📄 routesetingview.cpp
字号:
// RouteSetingView.cpp : implementation file
//
#include "stdafx.h"
#include "StationManage.h"
#include "RouteSetingView.h"
#include "StationSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRouteSetingView
IMPLEMENT_DYNCREATE(CRouteSetingView, CRecordView)
CRouteSetingView::CRouteSetingView()
: CRecordView(CRouteSetingView::IDD)
{
//{{AFX_DATA_INIT(CRouteSetingView)
m_pSet = NULL;
m_start = _T("");
m_route = _T("");
m_end = _T("");
m_distance = 0.0;
m_drivetime = 0.0;
m_routeid = 0;
operation=0; //确定动作控制
curiItem=0; //目前在第几行
m_price = 0.0;
//}}AFX_DATA_INIT
}
CRouteSetingView::~CRouteSetingView()
{
if (!((CStationManageApp*)AfxGetApp())->m_routesettingcontrol)
{
((CStationManageApp*)AfxGetApp())->m_routesetting=0;
}
if (m_pSet)
delete m_pSet;
}
void CRouteSetingView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRouteSetingView)
DDX_Control(pDX, IDC_CHANGE_BUTTON, m_change);
DDX_Control(pDX, IDC_BUTTON_CANCEL, m_cancel);
DDX_Control(pDX, IDC_ADD_BUTTON, m_add);
DDX_Control(pDX, IDC_RESULT_LIST, m_resultlist);
DDX_Control(pDX, IDC_DELETE_BUTTON, m_delete);
DDX_Control(pDX, IDC_OK_BUTTON, m_okcontrol);
DDX_Control(pDX, IDC_DISTANCE_EDIT, m_distancecontrol);
DDX_Control(pDX, IDC_START_EDIT, m_startcontrol);
DDX_Control(pDX, IDC_ROUTE_EDIT, m_routecontrol);
DDX_Control(pDX, IDC_PRICE_EDIT, m_pricecontrol);
DDX_Control(pDX, IDC_END_EDIT, m_endcontrol);
DDX_Control(pDX, IDC_DRIVETIME_EDIT, m_drivetimecontrol);
DDX_Control(pDX, IDC_ROUTEID_EDIT, m_routeidcontrol);
DDX_Control(pDX, IDC_ALLLIST, m_alllist);
DDX_Text(pDX, IDC_START_EDIT, m_start);
DDX_Text(pDX, IDC_ROUTE_EDIT, m_route);
DDX_Text(pDX, IDC_END_EDIT, m_end);
DDX_Text(pDX, IDC_DISTANCE_EDIT, m_distance);
DDX_Text(pDX, IDC_DRIVETIME_EDIT, m_drivetime);
DDX_Text(pDX, IDC_ROUTEID_EDIT, m_routeid);
DDX_Text(pDX, IDC_PRICE_EDIT, m_price);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRouteSetingView, CRecordView)
//{{AFX_MSG_MAP(CRouteSetingView)
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_CHANGE_BUTTON, OnChangeButton)
ON_NOTIFY(NM_CLICK, IDC_ALLLIST, OnClickAlllist)
ON_BN_CLICKED(IDC_OK_BUTTON, OnOkButton)
ON_BN_CLICKED(IDC_DELETE_BUTTON, OnDeleteButton)
ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
ON_BN_CLICKED(IDC_REFURBISH, OnRefurbish)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRouteSetingView diagnostics
#ifdef _DEBUG
void CRouteSetingView::AssertValid() const
{
CRecordView::AssertValid();
}
void CRouteSetingView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRouteSetingView message handlers
CRecordset* CRouteSetingView::OnGetRecordset()
{
if (m_pSet != NULL)
return m_pSet;
m_pSet = new CRouteSet(NULL);
m_pSet->Open();
return m_pSet;
}
CRouteSet* CRouteSetingView::GetRecordset()
{
CRouteSet* pData = (CRouteSet*) OnGetRecordset();
ASSERT(pData == NULL || pData->IsKindOf(RUNTIME_CLASS(CRouteSet)));
return pData;
}
void CRouteSetingView::OnInitialUpdate()
{
BeginWaitCursor();
GetRecordset();
CRecordView::OnInitialUpdate();
GetDocument()->SetTitle("路线设置");
GetParent()->SetWindowText("路线设置");
EndWaitCursor();
RECT rectalllist;
m_alllist.GetWindowRect(&rectalllist);
int alllistwidth=rectalllist.right-rectalllist.left;
DWORD dwExtendedStyle=LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE;
m_alllist.SetExtendedStyle(dwExtendedStyle|LVS_EX_FULLROWSELECT);
m_alllist.InsertColumn(0,"路线ID",LVCFMT_LEFT,alllistwidth/7-20);
m_alllist.InsertColumn(1,"路线",LVCFMT_LEFT,alllistwidth/7);
m_alllist.InsertColumn(2,"始发站",LVCFMT_LEFT,alllistwidth/7);
m_alllist.InsertColumn(3,"终点站",LVCFMT_LEFT,alllistwidth/7);
m_alllist.InsertColumn(4,"距离",LVCFMT_LEFT,alllistwidth/7);
m_alllist.InsertColumn(5,"时间",LVCFMT_LEFT,alllistwidth/7);
m_alllist.InsertColumn(6,"价格",LVCFMT_LEFT,alllistwidth/7);
Showalllist();
RECT rectresultlist;
m_resultlist.GetWindowRect(&rectresultlist);
int resultlistwidth=rectresultlist.right-rectresultlist.left;
m_resultlist.SetExtendedStyle(dwExtendedStyle|LVS_EX_FULLROWSELECT);
m_resultlist.InsertColumn(0,"路线ID",LVCFMT_LEFT,resultlistwidth/7-20);
m_resultlist.InsertColumn(1,"路线",LVCFMT_LEFT,resultlistwidth/7);
m_resultlist.InsertColumn(2,"始发站",LVCFMT_LEFT,resultlistwidth/7);
m_resultlist.InsertColumn(3,"终点站",LVCFMT_LEFT,resultlistwidth/7);
m_resultlist.InsertColumn(4,"距离",LVCFMT_LEFT,resultlistwidth/7);
m_resultlist.InsertColumn(5,"时间",LVCFMT_LEFT,resultlistwidth/7);
m_resultlist.InsertColumn(6,"价格",LVCFMT_LEFT,resultlistwidth/7);
curiItem=0;
m_alllist.SetItemState(curiItem,LVIS_SELECTED,LVIS_SELECTED);
Getvalue();
EnableView(true);
Showresultlist();
UpdateData(FALSE);
}
void CRouteSetingView::Showalllist()
{
if (!m_pSet->IsOpen())
m_pSet->Open();
m_alllist.DeleteAllItems();
m_pSet->MoveFirst();
if (!m_pSet->IsEOF())
{
while(!m_pSet->IsEOF())
m_pSet->MoveNext();
int cout=m_pSet->GetRecordCount();
m_pSet->MoveFirst();
while(!m_pSet->IsEOF())
{
CString str;
str.Format("%d",m_pSet->m_route_id);
int nCount=m_alllist.GetItemCount();
LV_ITEM lv_item;
lv_item.mask=LVIF_TEXT;
lv_item.iItem=nCount;
lv_item.iSubItem=0;
lv_item.pszText=str.GetBuffer(str.GetLength());
m_alllist.InsertItem(&lv_item);
m_alllist.SetItemText(nCount,0,str);
m_pSet->m_route.TrimRight();
m_alllist.SetItemText(nCount,1,m_pSet->m_route);
m_pSet->m_start.TrimRight();
m_alllist.SetItemText(nCount,2,m_pSet->m_start);
m_pSet->m_end.TrimRight();
m_alllist.SetItemText(nCount,3,m_pSet->m_end);
str.Empty();
str.Format("%10.2lf",m_pSet->m_distance);
m_alllist.SetItemText(nCount,4,str);
str.Empty();
str.Format("%10.2lf",m_pSet->m_drivetime);
m_alllist.SetItemText(nCount,5,str);
str.Empty();
str.Format("%10.2lf",m_pSet->m_price);
m_alllist.SetItemText(nCount,6,str);
m_pSet->MoveNext();
}
}
}
void CRouteSetingView::Showresultlist()
{
m_resultlist.DeleteAllItems();
int nCount=m_resultlist.GetItemCount();
LV_ITEM lv_item;
lv_item.mask=LVIF_TEXT;
lv_item.iItem=nCount;
lv_item.iSubItem=0;
lv_item.pszText=m_alllist.GetItemText(curiItem,0).GetBuffer(m_alllist.GetItemText(curiItem,0).GetLength());
m_resultlist.InsertItem(&lv_item);
m_resultlist.SetItemText(nCount,0,m_alllist.GetItemText(curiItem,0));
m_resultlist.SetItemText(nCount,1,m_alllist.GetItemText(curiItem,1));
m_resultlist.SetItemText(nCount,2,m_alllist.GetItemText(curiItem,2));
m_resultlist.SetItemText(nCount,3,m_alllist.GetItemText(curiItem,3));
m_resultlist.SetItemText(nCount,4,m_alllist.GetItemText(curiItem,4));
m_resultlist.SetItemText(nCount,5,m_alllist.GetItemText(curiItem,5));
m_resultlist.SetItemText(nCount,6,m_alllist.GetItemText(curiItem,6));
}
void CRouteSetingView::Getvalue()
{
m_routeid = atoi(m_alllist.GetItemText(curiItem,0));
m_route = m_alllist.GetItemText(curiItem,1);
m_start = m_alllist.GetItemText(curiItem,2);
m_end = m_alllist.GetItemText(curiItem,3);
m_distance = atof(m_alllist.GetItemText(curiItem,4));
m_drivetime = atof(m_alllist.GetItemText(curiItem,5));
m_price = atof(m_alllist.GetItemText(curiItem,6));
}
void CRouteSetingView::EnableView(bool b) //编辑框状态 false为可写
{
m_routeidcontrol.SetReadOnly(b);
m_routecontrol.SetReadOnly(b);
m_startcontrol.SetReadOnly(b);
m_endcontrol.SetReadOnly(b);
m_distancecontrol.SetReadOnly(b);
m_drivetimecontrol.SetReadOnly(b);
m_pricecontrol.SetReadOnly(b);
m_add.EnableWindow(b);
m_delete.EnableWindow(b);
m_change.EnableWindow(b);
m_okcontrol.EnableWindow(!b);
m_cancel.EnableWindow(!b);
}
void CRouteSetingView::OnAddButton()
{
EnableView(false);
m_routeid = 0;
m_route = _T("");
m_start = _T("");
m_end = _T("");
m_distance = 0.0;
m_drivetime = 0.0;
m_price = 0.0;
operation=1; //0确认不可用,1可增加数据,2为可修改数据
curiItem=m_alllist.GetItemCount();
UpdateData(FALSE);
return;
}
void CRouteSetingView::OnChangeButton()
{
// TODO: Add your control notification handler code here
if (curiItem==m_alllist.GetItemCount())
{
MessageBox("请选择您要修改的行!","警告",MB_OK|MB_ICONEXCLAMATION);
return;
}
EnableView(false);
operation=2; //0确认不可用,1可增加数据,2为可修改数据
}
void CRouteSetingView::OnClickAlllist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
curiItem = pNMListView->iItem;
if(curiItem != -1)
{
EnableView(true);
operation=0; //0确认不可用,1可增加数据,2为可修改数据
Getvalue();
Showresultlist();
}
UpdateData(FALSE);
*pResult = 0;
}
void CRouteSetingView::OnOkButton()
{
// TODO: Add your control notification handler code here
UpdateData();
if (operation==0)
{
return;
}
CStationSet stationset;
if (operation==1) //增加数据
{
if (!m_pSet->IsOpen())
{
m_pSet->Open();
}
m_pSet->AddNew(); //在表的末尾添加新记录
m_pSet->m_route_id=m_routeid;
m_pSet->m_route=m_route;
m_pSet->m_start=m_start;
m_pSet->m_end=m_end;
m_pSet->m_distance=m_distance;
m_pSet->m_drivetime=m_drivetime;
m_pSet->m_price=m_price;
m_pSet->Update();
m_pSet->Requery();
stationset.Open();
stationset.AddNew();
stationset.m_station_id = m_routeid;
stationset.m_station_name = m_end;
stationset.m_distance=m_distance;
stationset.m_drive_time=m_drivetime;
stationset.m_price=m_price;
stationset.Update();
stationset.Requery();
stationset.Close();
Showalllist();
m_pSet->MoveFirst();
while (!m_pSet->IsEOF())
{
m_pSet->MoveNext();
}
curiItem=m_pSet->GetRecordCount()-1;
Showresultlist();
EnableView(true);
operation=0;
MessageBox("增加成功!","增加成功",MB_OK|MB_ICONINFORMATION);
}
if (operation==2)
{
if (!m_pSet->IsOpen())
{
m_pSet->Open();
}
m_pSet->MoveFirst();
m_pSet->Move(curiItem);
m_pSet->Edit();
m_pSet->m_route_id=m_routeid;
m_pSet->m_route=m_route;
m_pSet->m_start=m_start;
m_pSet->m_end=m_end;
m_pSet->m_distance=m_distance;
m_pSet->m_drivetime=m_drivetime;
m_pSet->m_price=m_price;
m_pSet->Update();
m_pSet->Requery();
stationset.Open();
stationset.MoveFirst();
stationset.Move(curiItem);
stationset.Edit();
stationset.m_station_id = m_routeid;
stationset.m_station_name = m_end;
stationset.m_distance=m_distance;
stationset.m_drive_time=m_drivetime;
stationset.m_price=m_price;
stationset.Update();
stationset.Requery();
stationset.Close();
Showalllist();
Showresultlist();
UpdateData(FALSE);
EnableView(true);
MessageBox("修改成功!","修改成功",MB_OK|MB_ICONINFORMATION);
operation=0;
}
}
void CRouteSetingView::OnDeleteButton()
{
// TODO: Add your control notification handler code here
if (curiItem==m_alllist.GetItemCount())
{
MessageBox("请选择您要删除的行!","警告",MB_OK|MB_ICONEXCLAMATION);
return;
}
if (IDOK==MessageBox("确认删除?","提示",MB_OKCANCEL|MB_ICONQUESTION))
{
CStationSet stationset;
stationset.Open();
if (!m_pSet->IsOpen())
{
m_pSet->Open();
}
m_pSet->MoveFirst();
m_pSet->Move(curiItem);
m_pSet->Delete();
m_pSet->Requery();
m_alllist.DeleteItem(curiItem);
stationset.MoveFirst();
stationset.Move(curiItem);
stationset.Delete();
stationset.Requery();
stationset.Close();
curiItem=0;
Getvalue();
Showresultlist();
MessageBox("路线已经删除!","删除成功",MB_OK|MB_ICONINFORMATION);
UpdateData(FALSE);
}
}
void CRouteSetingView::OnButtonCancel()
{
// TODO: Add your control notification handler code here
EnableView(true);
Getvalue();
Showresultlist();
UpdateData(FALSE);
}
void CRouteSetingView::OnRefurbish()
{
// TODO: Add your control notification handler code here
EnableView(true);
Getvalue();
Showalllist();
Showresultlist();
UpdateData(FALSE);
// CStationSet stationset;
// stationset.Open();
// m_pSet->MoveFirst();
// while (!m_pSet->IsEOF())
// {
// stationset.AddNew();
// stationset.m_station_id = m_pSet->m_route_id;
// stationset.m_station_name = m_pSet->m_end;
// stationset.m_distance = m_pSet->m_distance;
// stationset.m_drive_time = m_pSet->m_drivetime;
// stationset.m_price = m_pSet->m_price;
// stationset.Update();
// stationset.Requery();
// m_pSet->MoveNext();
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -