⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 planedlg.cpp

📁 是我们学期末的数据库课程设计
💻 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 + -