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

📄 mainframe.cpp

📁 数据库程序的作业
💻 CPP
字号:
// MainFrame.cpp : implementation file
//

#include "stdafx.h"
#include "MainFrame.h"
#include "fun.h"

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

/////////////////////////////////////////////////////////////////////////////
// MainFrame

IMPLEMENT_DYNCREATE(MainFrame, CFrameWnd)  			

MainFrame::MainFrame()
{ 
	m_filepathname = "实验室信息管理.mdb";
	m_datadlg = NULL;
	x = NULL;
	y = NULL;
	m_preindex = -1;
	m_button = -1;
	m_length = 0;

	listbox = NULL;
	button1 = button2 = button3 = button4 = NULL;
	querydlg = NULL;

	RECT rect;
	Create(NULL,"应用软件开发基础    [数据库]");

	CClientDC dc(this);
	int width = dc.GetDeviceCaps(HORZRES);
	int height = dc.GetDeviceCaps(VERTRES);

	GetWindowRect( &rect );
	width = ( width - ( rect.right - rect.left ))/2 ;
	height = (height - (rect.bottom - rect.top ))/2 ;

	MoveWindow( width , 
				height , 
				(rect.right - rect.left ) , 
				(rect.bottom - rect.top ) ,
				true	);	
	

}

MainFrame::~MainFrame()
{	
	if(m_datadlg != NULL)
		delete m_datadlg;
	m_datadlg = NULL;
	if(x != NULL)
		delete [] x;
	if(y != NULL)
		delete [] y;

	x = NULL;
	y = NULL;

	if(listbox != NULL)
		delete listbox;
	if(button1 != NULL)
		delete button1;
	if(button2 != NULL)
		delete button2;
	if(button3 != NULL)
		delete button3;
	if(button4 != NULL)
		delete button4;

	listbox = NULL;
	button1 = button2 = button3 = button4 = NULL;

	if(querydlg != NULL)
		delete querydlg;
	querydlg = NULL;
}

BEGIN_MESSAGE_MAP(MainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(MainFrame)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_LBN_SELCHANGE(ID_LIST,OnSelChange)
	ON_MESSAGE(WM_VIEWDATA_CLOSE,OnViewDataClose)
	ON_MESSAGE(WM_QUERY_CLOSE,OnQueryClose)			 
	ON_MESSAGE(WM_QUERY_OK,OnQueryOk)

	ON_BN_CLICKED(ID_BUTTON1, OnQuery1)
	ON_BN_CLICKED(ID_BUTTON2, OnQuery2)
	ON_BN_CLICKED(ID_BUTTON3, OnQuery3)
	ON_BN_CLICKED(ID_BUTTON4, OnQuery4)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MainFrame message handlers

void MainFrame::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CPen pen(PS_SOLID, 0, RGB(0, 192, 192));
	CPen *oldpen = dc.SelectObject(&pen);

	DrawCoordinate(&dc, CPoint(200, 400), 350, 350);
	Draw(&dc, CPoint(200, 400), CSize(300, 300), x, y, m_length);

	dc.SelectObject(oldpen);
}

int MainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	listbox = new CListBox;
	listbox->CreateEx(	WS_EX_CLIENTEDGE,"ListBox",
						NULL,LBS_STANDARD|WS_VISIBLE|WS_CHILD,
						CRect(30,50,150,200),
						this,
						ID_LIST	);

	button1 = new CButton;
	button1->Create("查询客户",WS_VISIBLE|WS_CHILD,
						CRect(30,220,150, 250),
						this,
						ID_BUTTON1);  
	
	button2 = new CButton;
	button2->Create("查询样品",WS_VISIBLE|WS_CHILD,
						CRect(30,270,150, 300),
						this,
						ID_BUTTON2);
									    
	
	button3 = new CButton;
	button3->Create("查询仪器",WS_VISIBLE|WS_CHILD,
						CRect(30,320,150, 350),
						this,
						ID_BUTTON3);  		 						  
	
	button4 = new CButton;
	button4->Create("查询数据",WS_VISIBLE|WS_CHILD,
						CRect(30,370,150, 400),
						this,
						ID_BUTTON4);

	CString tablename, fieldname;

	if(!m_filepathname.IsEmpty ())
	{
		AfxGetModuleState()->m_dwVersion = 0x0601;
		AfxDaoInit();

		m_MyDatabase.Open (m_filepathname);
		int nTableCount = m_MyDatabase.GetTableDefCount ();
		for(int i=0; i<nTableCount; i++)
		{
			CDaoTableDefInfo TableInfo;
			m_MyDatabase.GetTableDefInfo (i, TableInfo, AFX_DAO_ALL_INFO);
			if(TableInfo.m_lAttributes != 0)
				continue; 
			
			tablename = (char *)(LPCTSTR)TableInfo.m_strName ; 
			listbox->AddString(tablename); 
			if(tablename == "实验数据表")
			{	 		
				CString str1 = "SELECT [实验数据表].[X], [实验数据表].[Y] FROM [实验数据表]";
				CDaoRecordset m_MyRS(&m_MyDatabase);
				m_MyRS.Open(dbOpenDynaset, str1);

				m_length = 0;
				m_MyRS.MoveFirst();
				while(!m_MyRS.IsEOF())
				{ 
					m_length++;
					m_MyRS.MoveNext();
				}

				if(x != NULL)
					delete [] x;
				if(y != NULL)
					delete [] y;
				x = new int [m_length]; 
				y = new int [m_length];

				m_MyRS.MoveFirst();
				int index = -1;
				while(!m_MyRS.IsEOF())
				{ 
					index++;
					x[index] = atoi(strVARIANT(m_MyRS.GetFieldValue(0)));
					y[index] = atoi(strVARIANT(m_MyRS.GetFieldValue(1)));
					m_MyRS.MoveNext();
				}
				m_MyRS.Close();
			} 	
		}
	}  




	return 0;
}  

void MainFrame::OnSelChange()
{
	int index;
	CString tablename;
	index = listbox->GetCurSel(); 
	
	if(m_preindex == index)
	{
		m_datadlg->SetFocus();
		return;
	}
	m_preindex = index;
	listbox->GetText(index, tablename);


	CString str1 = "Select * from [" + tablename + "]";	
	CDaoRecordset m_MyRS(&m_MyDatabase);
	m_MyRS.Open(dbOpenDynaset, str1); 
	
	if(m_datadlg == NULL)
	{
		 m_datadlg = new CViewData(this);
		 m_datadlg->m_record = &m_MyRS;
		 m_datadlg->m_caption = tablename;
		 m_datadlg->Create(IDD_DIALOG1);
		 m_datadlg->ShowWindow (SW_SHOW);
	}
	else
	{		
		int nColumnCount = m_datadlg->m_list.GetHeaderCtrl ()->GetItemCount ();				
		for(int i=0; i<nColumnCount; i++)
			m_datadlg->m_list.DeleteColumn(0);
		m_datadlg->m_list.DeleteAllItems();
		
		m_datadlg->m_caption = tablename;
		m_datadlg->m_record = &m_MyRS; 
		m_datadlg->Init();
		m_datadlg->Invalidate();
		m_datadlg->SetFocus();
	}
	m_MyRS.Close();

}
LONG MainFrame::OnViewDataClose(WPARAM wP,LPARAM lP)
{
	m_datadlg = NULL;
	m_preindex = -1;
	return 0;
}
LONG MainFrame::OnQueryClose(WPARAM wP,LPARAM lP)
{
	querydlg = NULL;
	m_button = -1;
	return 0;
}	 
LONG MainFrame::OnQueryOk(WPARAM wP,LPARAM lP)
{

	//AfxMessageBox("...");
	m_preindex = -1;
	CDaoRecordset m_MyRS(&m_MyDatabase);
	CString temp, caption;
	switch(m_button)
	{
	case 1:
		{
			int nCursel = querydlg->m_combo1.GetCurSel();
			if(nCursel >= 0)
			{
				querydlg->m_combo1.GetLBText(nCursel, temp); 				
				CString str1 = "SELECT [客户表].[姓名] FROM [客户表] WHERE (([单位]=\"" + temp + "\"))";
				caption = temp + "的所有客户姓名";
				m_MyRS.Open(dbOpenDynaset, str1);					
			}
			else
				return 0;
		}		
		break;
	case 2:
		{
			int nCursel = querydlg->m_combo1.GetCurSel();
			if(nCursel >= 0)
			{
				querydlg->m_combo1.GetLBText(nCursel, temp); 				
				CString str1 = "SELECT [样品表].[样品编号], [样品表].[样品类型] FROM [客户表] INNER JOIN [样品表] ON [客户表].[客户ID]=[样品表].[客户ID] WHERE ((([客户表].[姓名])=\"" + temp + "\"))";
				caption = temp + "送来的全部样品";
				m_MyRS.Open(dbOpenDynaset, str1);					
			}
			else
				return 0;
		}
		break;
	case 3:
		{
			int nCursel = querydlg->m_combo1.GetCurSel();
			if(nCursel >= 0)
			{
				querydlg->m_combo1.GetLBText(nCursel, temp); 				
				CString str1;
				str1.Format("SELECT [仪器表].[仪器型号], [仪器表].[仪器类型] FROM [仪器表] INNER JOIN [实验数据表] ON [仪器表].[仪器型号] = [实验数据表].[仪器型号] WHERE ((([实验数据表].[样品编号])=%d))",nCursel+1);
				caption = "测试" + temp + "所用的各种仪器";
				m_MyRS.Open(dbOpenDynaset, str1);					
			}
			else
				return 0;
		}
		break;
	case 4:
		{
			int nCursel1 = querydlg->m_combo1.GetCurSel();
			int nCursel2 = querydlg->m_combo2.GetCurSel();
			if((nCursel1 >= 0) && (nCursel2 >= 0))
			{ 				
				CString str1;
				str1.Format("SELECT [实验数据表].[X], [实验数据表].[Y] FROM [实验数据表] WHERE ((([实验数据表].[样品编号])=%d) AND (([实验数据表].[仪器型号])=%d))", nCursel1+1, nCursel2+1);
				CDaoRecordset m_MyRS(&m_MyDatabase);
				m_MyRS.Open(dbOpenDynaset, str1);
			}
			else
				return 0;
		}
		break;
	default:
		AfxMessageBox("这是怎么回事?应该是出错了?");
		break;
	}
	
	
	if(m_datadlg == NULL)
	{
		 m_datadlg = new CViewData(this);
		 m_datadlg->m_record = &m_MyRS;
		 m_datadlg->m_caption = caption;
		 m_datadlg->Create(IDD_DIALOG1);
		 m_datadlg->ShowWindow (SW_SHOW);
	}
	else
	{		
		int nColumnCount = m_datadlg->m_list.GetHeaderCtrl ()->GetItemCount ();				
		for(int i=0; i<nColumnCount; i++)
			m_datadlg->m_list.DeleteColumn(0);
		m_datadlg->m_list.DeleteAllItems();
		
		m_datadlg->m_caption = caption;
		m_datadlg->m_record = &m_MyRS; 
		m_datadlg->Init();
		m_datadlg->Invalidate();
		m_datadlg->SetFocus();
	}

	m_MyRS.Close();
	return 0;
}

BOOL MainFrame::Draw(CDC *pDC, CPoint O, CSize Range, int *x, int *y, int length)
{
	int xBalance = FindBalance(x, length, 5);
	int yBalance = FindBalance(y, length, 5);
	
	pDC->MoveTo(O);
	for(int i=0; i<length; i++)
		pDC->LineTo(O.x + x[i], O.y - y[i]);
	return TRUE;
}

int MainFrame::FindBalance(int *a, int length, int n)
{	
	int r, min, max;
	min = max = a[0];
	for(int i=1; i<length; i++)
	{
		if(a[i] > max)
			max = a[i];
		else if(a[i] < min)
			min = a[i];
	}
	
	r = (int)((max - min)/n);
	return r;  
} 
BOOL MainFrame::DrawCoordinate(CDC *pDC, CPoint O, int weight, int height)
{
	CPen pen(PS_SOLID,0,RGB(255,0,0));
	CPen *oldpen = pDC->SelectObject (&pen);
	COLORREF oldcolor = pDC->SetTextColor (RGB(0,255,0));
	UINT oldalign = pDC->SetTextAlign (TA_CENTER);
	
	CString str;
	int i, just;
	just= 10;
	
	
	pDC->MoveTo (O);
	pDC->LineTo (O.x + height, O.y);
	for(i=0; i<height;)
	{
		i += 10;

		pDC->MoveTo (O.x + i, O.y);
		pDC->LineTo (O.x + i, O.y + 4);
		if(!(i%100))
		{  
			pDC->LineTo (O.x + i, O.y + 8);
			str.Format ("%d",i);
			pDC->TextOut (O.x + i, O.y + 12, str);
		}
	}	   
	
	pDC->SetTextAlign (TA_RIGHT);
	pDC->MoveTo (O);
	pDC->LineTo (O.x, O.y - weight);
	for(i=0; i<weight;)
	{
		i += 10;
		
		pDC->MoveTo (O.x, O.y - i);
		pDC->LineTo (O.x - 4, O.y - i);
		if(!(i%100))
		{  
			pDC->LineTo (O.x - 8, O.y - i);
			str.Format ("%d",i);
			pDC->TextOut (O.x - 12, O.y - i - 8, str);
		}
	}	


	pDC->SetTextAlign (oldalign); 	
	pDC->SelectObject (oldpen);
	pDC->SetTextColor (oldcolor);
	
	return TRUE;

}

void MainFrame::OnQuery1()
{
	//AfxMessageBox("呵呵......query1"); 
	
	m_button = 1;	 
	CString str1 = "SELECT [客户表].[单位] FROM 客户表";												 
	CDaoRecordset m_MyRS(&m_MyDatabase);
	m_MyRS.Open(dbOpenDynaset, str1);  

	if(querydlg == NULL)
	{
		 querydlg = new CQuery(this);
		 querydlg->m_str1 = "客户单位:";
		 querydlg->m_record1 = &m_MyRS;	
		 querydlg->m_str2 = "";
		 querydlg->m_record2 = NULL;
		 querydlg->button = 1;
		 querydlg->Create(IDD_DIALOG2);
		 querydlg->ShowWindow (SW_SHOW);
	}
	else
	{
		querydlg->m_str1 = "客户单位:"; 		
		querydlg->m_record1 = &m_MyRS;
		querydlg->m_str2 = "";
		querydlg->m_record2 = NULL;	
		querydlg->button = 1;
		querydlg->Init(); 
		querydlg->UpdateData();
		//querydlg->Invalidate();
		querydlg->SetFocus();
	}		
	m_MyRS.Close();	  				
}

void MainFrame::OnQuery2()
{
	//AfxMessageBox("呵呵......query2");

	m_button = 2;	 
	CString str1 = "SELECT [客户表].[姓名] FROM 客户表;";												 
	CDaoRecordset m_MyRS(&m_MyDatabase);
	m_MyRS.Open(dbOpenDynaset, str1);  

	if(querydlg == NULL)
	{
		 querydlg = new CQuery(this);
		 querydlg->m_str1 = "客户姓名:";
		 querydlg->m_record1 = &m_MyRS;	
		 querydlg->m_str2 = "";
		 querydlg->m_record2 = NULL;
		 querydlg->button = 2;
		 querydlg->Create(IDD_DIALOG2);
		 querydlg->ShowWindow (SW_SHOW);
	}
	else
	{
		querydlg->m_str1 = "客户姓名:"; 		
		querydlg->m_record1 = &m_MyRS;
		querydlg->m_str2 = "";
		querydlg->m_record2 = NULL;	
		querydlg->button = 2;
		querydlg->Init();	
		querydlg->UpdateData();
		//querydlg->Invalidate();
		querydlg->SetFocus();
	}		
	m_MyRS.Close();

}

void MainFrame::OnQuery3()
{
	//AfxMessageBox("呵呵......query3");

	m_button = 3;	 
	CString str1 =  "SELECT 样品表.样品编号, 样品表.样品类型	FROM 样品表";												 
	CDaoRecordset m_MyRS(&m_MyDatabase);
	m_MyRS.Open(dbOpenDynaset, str1);  

	if(querydlg == NULL)
	{
		 querydlg = new CQuery(this);
		 querydlg->m_str1 = "样品:";
		 querydlg->m_record1 = &m_MyRS;	
		 querydlg->m_str2 = "";
		 querydlg->m_record2 = NULL;
		 querydlg->button = 3;
		 querydlg->Create(IDD_DIALOG2);
		 querydlg->ShowWindow (SW_SHOW);
	}
	else
	{
		querydlg->m_str1 = "样品:"; 		
		querydlg->m_record1 = &m_MyRS;
		querydlg->m_str2 = "";
		querydlg->m_record2 = NULL;
		querydlg->button = 3; 
		querydlg->Init();	  
		querydlg->UpdateData();	   
		//querydlg->Invalidate();
		querydlg->SetFocus();
	}		
	m_MyRS.Close();

}

void MainFrame::OnQuery4()
{
	//AfxMessageBox("呵呵......query4");
	m_button = 4;	 
	CString str1 =  "SELECT 样品表.样品编号, 样品表.样品类型	FROM 样品表";
	CString str2 = "SELECT * FROM [仪器表]";
	CDaoRecordset m_MyRS1(&m_MyDatabase);
	CDaoRecordset m_MyRS2(&m_MyDatabase);
	m_MyRS1.Open(dbOpenDynaset, str1); 
	m_MyRS2.Open(dbOpenDynaset, str2); 

	if(querydlg == NULL)
	{
		 querydlg = new CQuery(this);
		 querydlg->m_str1 = "样品:";
		 querydlg->m_record1 = &m_MyRS1;	
		 querydlg->m_str2 = "仪器";
		 querydlg->m_record2 = &m_MyRS2;
		 querydlg->button = 4;
		 querydlg->Create(IDD_DIALOG2);
		 querydlg->ShowWindow (SW_SHOW);
	}
	else
	{  
		querydlg->m_str1 = "样品:";
		querydlg->m_record1 = &m_MyRS1;	
		querydlg->m_str2 = "仪器";
		querydlg->m_record2 = &m_MyRS2; 
		querydlg->button = 4;
		querydlg->Init();
		querydlg->UpdateData();		
		//querydlg->Invalidate();
		querydlg->SetFocus();
	}		
	m_MyRS1.Close();  
	m_MyRS2.Close();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -