📄 planedlg.cpp
字号:
// planeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "plane.h"
#include "planeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlaneDlg dialog
CPlaneDlg::CPlaneDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPlaneDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPlaneDlg)
m_banji = _T("");
m_end = _T("");
m_etime = _T("");
m_hb1 = _T("");
m_hb2 = _T("");
m_jixing = _T("");
m_price = _T("");
m_start = _T("");
m_stime = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPlaneDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPlaneDlg)
DDX_Control(pDX, IDC_LIST, m_list);
DDX_Text(pDX, IDC_BANQI, m_banji);
DDV_MaxChars(pDX, m_banji, 12);
DDX_Text(pDX, IDC_END, m_end);
DDV_MaxChars(pDX, m_end, 8);
DDX_Text(pDX, IDC_ETIME, m_etime);
DDV_MaxChars(pDX, m_etime, 8);
DDX_Text(pDX, IDC_HB1, m_hb1);
DDV_MaxChars(pDX, m_hb1, 4);
DDX_Text(pDX, IDC_HB2, m_hb2);
DDV_MaxChars(pDX, m_hb2, 8);
DDX_Text(pDX, IDC_JIXING, m_jixing);
DDV_MaxChars(pDX, m_jixing, 8);
DDX_Text(pDX, IDC_PRICE, m_price);
DDV_MaxChars(pDX, m_price, 4);
DDX_Text(pDX, IDC_START, m_start);
DDV_MaxChars(pDX, m_start, 8);
DDX_Text(pDX, IDC_STIME, m_stime);
DDV_MaxChars(pDX, m_stime, 8);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPlaneDlg, CDialog)
//{{AFX_MSG_MAP(CPlaneDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ADD, OnAdd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlaneDlg message handlers
BOOL CPlaneDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_list.InsertColumn(0,"航班号");
m_list.InsertColumn(1,"起点站");
m_list.InsertColumn(2,"终点站");
m_list.InsertColumn(3,"航班期");
m_list.InsertColumn(4,"起飞时间");
m_list.InsertColumn(5,"到达时间");
m_list.InsertColumn(6,"机型");
m_list.InsertColumn(7,"票价");
RECT rect;
m_list.GetWindowRect(&rect);
int wid = rect.right - rect.left;
m_list.SetColumnWidth(0,wid/8);
m_list.SetColumnWidth(1,wid/8);
m_list.SetColumnWidth(2,wid/8);
m_list.SetColumnWidth(3,wid/8);
m_list.SetColumnWidth(4,wid/8);
m_list.SetColumnWidth(5,wid/8);
m_list.SetColumnWidth(6,wid/8);
m_list.SetColumnWidth(7,wid/8);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list.SetBkColor(RGB(177,151,240));
m_list.SetTextBkColor(RGB(177,151,240));
L.keynum=6;L.length=0;
CStdioFile file;
char*pFileName="data.txt";
if(!file.Open(pFileName,CFile::modeRead|CFile::typeText))
{
#ifdef _DEBUG
afxDump<<"抱歉,系统无法打开数据文件,可能是文件损坏!"<<"\n";
#endif
exit(1);
}
CString hb,start,end,banji,stime,etime,jixing,price;
BOOL lpstr=1;
int j=0;
for(int i=0;lpstr;)
{
lpstr=file.ReadString(hb);
m_list.InsertItem(i,hb);
lpstr=file.ReadString(start);
m_list.SetItemText(i,1,start);
lpstr=file.ReadString(end);
m_list.SetItemText(i,2,end);
lpstr=file.ReadString(banji);
m_list.SetItemText(i,3,banji);
lpstr=file.ReadString(stime);
m_list.SetItemText(i,4,stime);
lpstr=file.ReadString(etime);
m_list.SetItemText(i,5,etime);
lpstr=file.ReadString(jixing);
m_list.SetItemText(i,6,jixing);
lpstr=file.ReadString(price);
m_list.SetItemText(i,7,price);
if(lpstr)
{
i++;
for(j=0;j<hb.GetLength();j++)
L.sl[i].keys[j]=hb[j];
L.sl[i].keys[j]='\0';
for(j=0;j<start.GetLength();j++)
L.sl[i].others.start[j]=start[j];
L.sl[i].others.start[j]='\0';
for(j=0;j<end.GetLength();j++)
L.sl[i].others.end[j]=end[j];
L.sl[i].others.end[j]='\0';
for(j=0;j<banji.GetLength();j++)
L.sl[i].others.banji[j]=banji[j];
L.sl[i].others.banji[j]='\0';
for(j=0;j<stime.GetLength();j++)
L.sl[i].others.stime[j]=stime[j];
L.sl[i].others.stime[j]='\0';
for(j=0;j<etime.GetLength();j++)
L.sl[i].others.etime[j]=etime[j];
L.sl[i].others.etime[j]='\0';
for(j=0;j<jixing.GetLength();j++)
L.sl[i].others.jixing[j]=jixing[j];
L.sl[i].others.jixing[j]='\0';
for(j=0;j<price.GetLength();j++)
L.sl[i].others.price[j]=price[j];
L.sl[i].others.price[j]='\0';
}
}
L.length=i+1;
file.Close();
return TRUE; // return TRUE unless you set the focus to a control
}
void CPlaneDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CPlaneDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CPlaneDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CPlaneDlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
char*pFileName="data.txt";
CString hb=m_hb1+m_hb2,start=m_start,end=m_end,banji=m_banji,stime=m_stime,etime=m_etime,jixing=m_jixing,price=m_price;
CStdioFile file;
int i=L.length-1,j=0;
if(!file.Open(pFileName,CFile::modeWrite|CFile::typeText))
{
#ifdef _DEBUG
afxDump<<"抱歉,系统无法打开数据文件,可能是文件损坏!"<<"\n";
#endif
exit(1);
}
if(hb==""||start==""||end==""||banji==""||stime==""||etime==""||jixing==""||price==""){MessageBox("输入数据不能为空!");}
else
{
m_list.InsertItem(i,hb);
m_list.SetItemText(i,1,start);
m_list.SetItemText(i,2,end);
m_list.SetItemText(i,3,banji);
m_list.SetItemText(i,4,stime);
m_list.SetItemText(i,5,etime);
m_list.SetItemText(i,6,jixing);
m_list.SetItemText(i,7,price);
i++;
for(j=0;j<hb.GetLength();j++)
L.sl[i].keys[j]=hb[j];
L.sl[i].keys[j]='\0';
for(j=0;j<start.GetLength();j++)
L.sl[i].others.start[j]=start[j];
L.sl[i].others.start[j]='\0';
for(j=0;j<end.GetLength();j++)
L.sl[i].others.end[j]=end[j];
L.sl[i].others.end[j]='\0';
for(j=0;j<banji.GetLength();j++)
L.sl[i].others.banji[j]=banji[j];
L.sl[i].others.banji[j]='\0';
for(j=0;j<stime.GetLength();j++)
L.sl[i].others.stime[j]=stime[j];
L.sl[i].others.stime[j]='\0';
for(j=0;j<etime.GetLength();j++)
L.sl[i].others.etime[j]=etime[j];
L.sl[i].others.etime[j]='\0';
for(j=0;j<jixing.GetLength();j++)
L.sl[i].others.jixing[j]=jixing[j];
L.sl[i].others.jixing[j]='\0';
for(j=0;j<price.GetLength();j++)
L.sl[i].others.price[j]=price[j];
L.sl[i].others.price[j]='\0';
L.length++;
}
file.Close();
RadixSort(); //基数排序
Arrange(); //调整链表
OutputData();
m_hb1="";
m_hb2="";
m_start="";
m_end="";
m_banji="";
m_stime="";
m_etime="";
m_jixing="";
m_price="";
UpdateData(FALSE);
}
void CPlaneDlg::Arrange()
{
int p,q,i;
SLNode temp;
p=L.sl[0].next;
for(i=1;i<L.length;i++)
{
while(p<i)
p=L.sl[p].next;
q=L.sl[p].next;
if(p!=i)
{
temp=L.sl[p];L.sl[p]=L.sl[i];L.sl[i]=temp;
L.sl[i].next=p;
}
p=q;
}
}
void CPlaneDlg::Collect(SLNode *sl, int i, int f[], int e[], int ty)
{
int RADIX=1,n_or_c=1;
if(ty==1){RADIX=RADIX_n;n_or_c=48;}
else{RADIX=RADIX_c;n_or_c=65;}
int j,t;
for(j=0;!f[j];j++);
sl[0].next=f[j];
t=e[j];
while(j<RADIX-1)
{
for(j=j+1;j<RADIX-1&&!f[j];j++);
if(f[j]){sl[t].next=f[j];t=e[j];}
}
sl[t].next=0;
}
void CPlaneDlg::Distribute(SLNode *sl, int i, int f[], int e[], int ty)
{
int RADIX=1,n_or_c=1;
if(ty==1){RADIX=RADIX_n;n_or_c=48;}
else{RADIX=RADIX_c;n_or_c=65;}
int j,p;
for(j=0;j<RADIX;j++){f[j]=0;e[j]=0;}
for(p=sl[0].next;p;p=sl[p].next)
{
j=sl[p].keys[i]%n_or_c;
if(!f[j]) f[j]=p;
else sl[e[j]].next=p;
e[j]=p;
}
}
void CPlaneDlg::RadixSort()
{
int i;
ArrType_n fn,en;
ArrType_c fc,ec;
for(i=0;i<L.length-1;i++)
L.sl[i].next=i+1;
L.sl[L.length-1].next=0;
for(i=L.keynum-1;i>=2;i--)
{
Distribute(L.sl,i,fn,en,1);
Collect(L.sl,i,fn,en,1);
}
for(i=1;i>=0;i--)
{
Distribute(L.sl,i,fc,ec,2);
Collect(L.sl,i,fc,ec,2);
}
}
void CPlaneDlg::OutputData()
{
char*pFileName="data.txt";
CStdioFile file;
if(!file.Open(pFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeText))
{
#ifdef _DEBUG
afxDump<<"抱歉,系统无法打开数据文件,可能是文件损坏!"<<"\n";
#endif
exit(1);
}
CString hb,start,end,banji,stime,etime,jixing,price;
for(int i=1;i<L.length;i++)
{
file.SeekToEnd();
hb=L.sl[i].keys;
file.WriteString(hb+"\n");
start=L.sl[i].others.start;
file.WriteString(start+"\n");
end=L.sl[i].others.end;
file.WriteString(end+"\n");
banji=L.sl[i].others.banji;
file.WriteString(banji+"\n");
stime=L.sl[i].others.stime;
file.WriteString(stime+"\n");
etime=L.sl[i].others.etime;
file.WriteString(etime+"\n");
jixing=L.sl[i].others.jixing;
file.WriteString(jixing+"\n");
price=L.sl[i].others.price;
file.WriteString(price+"\n");
}
file.Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -