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

📄 studentdlg.cpp

📁 中学学生信息管理系统 选定的课程及课程安排 学号等
💻 CPP
字号:
// StudentDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "Student.h"
#include "StudentDlg.h"
#include ".\studentdlg.h"
#include "SltDlg.h"
#include "InfoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CStudentDlg 对话框



CStudentDlg::CStudentDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CStudentDlg::IDD, pParent)
	, m_Name(_T(""))
	, m_Age(0)
	, m_SexStr(_T(""))
	, m_Brithday(COleDateTime::GetCurrentTime())
	, m_Num(_T(""))
	, m_Class(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bOpen = false;
}

void CStudentDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_INFO, m_ListInfo);
	DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
	DDV_MaxChars(pDX, m_Name, 30);
	DDX_Text(pDX, IDC_EDIT_AGE, m_Age);
	DDX_Control(pDX, IDC_COMBO_SEX, m_Sex);
	DDX_CBString(pDX, IDC_COMBO_SEX, m_SexStr);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_Brithday);
	DDX_Text(pDX, IDC_EDIT_NUM, m_Num);
	DDX_Text(pDX, IDC_EDIT_CLASS, m_Class);
}

BEGIN_MESSAGE_MAP(CStudentDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
	ON_BN_CLICKED(ID_UPDATE, OnBnClickedUpdate)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_INFO, OnLvnItemchangedListInfo)
	ON_BN_CLICKED(ID_CHANGE, OnBnClickedChange)
	ON_BN_CLICKED(ID_ADD, OnBnClickedAdd)
	ON_BN_CLICKED(ID_DEL, OnBnClickedDel)
	ON_BN_CLICKED(ID_SLTDATA, OnBnClickedSltdata)
	ON_BN_CLICKED(IDC_BUTTON1, &CStudentDlg::OnBnClickedButton1)
	
	ON_BN_CLICKED(IDC_BUTTON_INFO, &CStudentDlg::OnBnClickedButtonInfo)
END_MESSAGE_MAP()


// CStudentDlg 消息处理程序

BOOL CStudentDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将\“关于...\”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	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);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	// 初始化信息框
	m_ListInfo.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );
	m_ListInfo.InsertColumn(0,"姓名",LVCFMT_LEFT,100);
	m_ListInfo.InsertColumn(1,"性别",LVCFMT_LEFT,50);
	m_ListInfo.InsertColumn(2,"学号",LVCFMT_LEFT,100);
	m_ListInfo.InsertColumn(3,"班级",LVCFMT_LEFT,100);
	m_ListInfo.InsertColumn(4,"年龄",LVCFMT_LEFT,50);
	m_ListInfo.InsertColumn(5,"生日",LVCFMT_LEFT,100);

	// 性别对话框初始化
	m_Sex.AddString( "未知" );
	m_Sex.AddString( "男" );
	m_Sex.AddString( "女" );
	// 设置默认选项
	m_Sex.SetCurSel(0);

	// 打开数据库连接
	this->OpenDBLink();

	LoadAllData();
	// 设置当前选择项
	m_ListInfo.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
	// 更新显示
	UpdateShowTxt();

	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

void CStudentDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CStudentDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CStudentDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

// 打开数据库连接
bool CStudentDlg::OpenDBLink()
{
	// 如果数据库已经打开了, 先关闭数据库连接
	if( m_bOpen )
	{
		this->CloseDBLink();
	}

	try
	{
		HRESULT hr;

		// 创建Connection对象
		hr = m_pConnection.CreateInstance("ADODB.Connection");
		if( SUCCEEDED( hr ) )
		{
			// 连接数据库
			hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb",
				"","",adModeUnknown);
		}
		else
		{
			m_bOpen = false;
			return m_bOpen;
		}
	}
	catch( ... )
	{
		MessageBox( "连接数据库失败,请确定数据库 student.mdb 是否在当前路径下");
		m_bOpen = false;
	}

	try
	{
		// 生成Recordset实例
		m_pRecordset.CreateInstance("ADODB.Recordset");

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		m_pRecordset->Open("SELECT * FROM student",   // 查询所有语句
			_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
	}
	catch( _com_error * e )
	{
		m_pConnection->Close();
		MessageBox( e->ErrorMessage() );
		m_bOpen = false;
	}
	m_bOpen = true;
	return m_bOpen;;
}
// 关闭数据库连接
void CStudentDlg::CloseDBLink()
{
	// 已经关闭了
	if( m_bOpen == false )
		return;
	try
	{
		m_pRecordset->Close();
		m_pConnection->Close();
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
		m_bOpen = true;
	}
	m_bOpen = false;
}
// 读取所有的记录,并显示
void CStudentDlg::LoadAllData()
{
	if( m_bOpen == false )
		return;
	_variant_t value;
	COleDateTime time;
	CString name, sex, num, classnum;
	int age;

	try
	{
		m_ListInfo.DeleteAllItems();
		if( !m_pRecordset->BOF )
			m_pRecordset->MoveFirst();

		int index = 0;
		while( !m_pRecordset->adoEOF )
		{
			// 姓名
			value = m_pRecordset->GetCollect( "NAME" );
			if( value.vt != VT_NULL )
				name = value.bstrVal;
			else
				name = "";

			// 性别
			value = m_pRecordset->GetCollect( "SEX" );
			if( value.vt != VT_NULL )
				sex = value.bstrVal;
			else
				sex = "未知";

			// 学号
			value = m_pRecordset->GetCollect( "NUM" );
			if( value.vt != VT_NULL )
				num = value.bstrVal;
			else
				num = "";

			// 班级
			value = m_pRecordset->GetCollect( "CLASS" );
			if( value.vt != VT_NULL )
				classnum = value.bstrVal;
			else
				classnum = "";

			// 年龄
			value = m_pRecordset->GetCollect( "AGE" );
			if( value.vt != VT_NULL )
				age = (int)value.llVal;
			else
				age = 0;

			// 生日
			value = m_pRecordset->GetCollect( "Birthday" );
			if( value.vt != VT_NULL )
				time = value.date;
			else
				time.SetDate(2000,1,1);

			// 把数据加入列表框
			m_ListInfo.InsertItem( index, name, 0 );
			m_ListInfo.SetItemText( index, 1, sex);
			m_ListInfo.SetItemText( index, 2, num);
			m_ListInfo.SetItemText( index, 3, classnum);
			CString temp;
			temp.Format( "%d", age );
			m_ListInfo.SetItemText( index, 4, temp );
			m_ListInfo.SetItemText( index, 5, time.Format() );
			index++;

			m_pRecordset->MoveNext();
		}
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
}
// 得到当前选择项
int CStudentDlg::GetCurSltCount()
{
	// 是否有选中项
	if(m_ListInfo.GetSelectedCount() <= 0)
		return -1;

	for(int i =0;i<m_ListInfo.GetItemCount();i++ )
	{
		if(m_ListInfo.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//选中状态。。
		{
			return i;
		}
	}

	return -1;  // 没有找到选中项
}

// 根据当前选中项,更新显示
bool CStudentDlg::UpdateShowTxt()
{
	// 移动数据库指针
	int k = GetCurSltCount();
	if( k == -1 )
	{
		return false;
	}

	try
	{
		if( !m_pRecordset->BOF )
			m_pRecordset->MoveFirst();
		m_pRecordset->Move( k );

		_variant_t value;
		COleDateTime time;
		CString name, sex, num, classnum;
		int age;

		// 姓名
		value = m_pRecordset->GetCollect( "NAME" );
		if( value.vt != VT_NULL )
			name = value.bstrVal;
		else
			name = "";

		// 性别
		value = m_pRecordset->GetCollect( "SEX" );
		if( value.vt != VT_NULL )
			sex = value.bstrVal;
		else
			sex = "未知";

		// num
		value = m_pRecordset->GetCollect( "NUM" );
		if( value.vt != VT_NULL )
			num = value.bstrVal;
		else
			num = "";

		// class
		value = m_pRecordset->GetCollect( "CLASS" );
		if( value.vt != VT_NULL )
			classnum = value.bstrVal;
		else
			classnum = "";

		// 年龄
		value = m_pRecordset->GetCollect( "AGE" );
		if( value.vt != VT_NULL )
			age = (int)value.llVal;
		else
			age = 0;

		// 生日
		value = m_pRecordset->GetCollect( "Birthday" );
		if( value.vt != VT_NULL )
			time = value.date;
		else
			time.SetDate(2000,1,1);

		m_Name = name;
		m_Age = age;
		m_Brithday = time;
		m_Num = num;
		m_Class = classnum;
        if( sex == "未知" )
			m_Sex.SetCurSel(0);
		else if( sex == "男" )
			m_Sex.SetCurSel(1);
		else
			m_Sex.SetCurSel(2);

		UpdateData( false );
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
		return false;
	}
	return true;
}

// 更改数据库
bool CStudentDlg::UpdateDataDB()
{
	// 判断数据的正误
	if( UpdateData() == false )
		return false;

	if( m_Name.IsEmpty() )
	{
		MessageBox( "请输入姓名" );
		return false;
	}
	if( m_Age < 0 || m_Age > 200 )
	{
		MessageBox( "您输入的年龄有误" );
		return false;
	}

	try
	{
		m_pRecordset->PutCollect( "NAME", _variant_t(m_Name) );
		m_pRecordset->PutCollect( "SEX", _variant_t(m_SexStr) );
		m_pRecordset->PutCollect( "NUM", _variant_t(m_Num) );
		m_pRecordset->PutCollect( "CLASS", _variant_t(m_Class) );
		m_pRecordset->PutCollect( "AGE", m_Age );
		m_pRecordset->PutCollect( "Birthday", _variant_t(m_Brithday) );
		m_pRecordset->Update();

		LoadAllData();
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage () );
		return false;
	}
	return true;
}
// 添加一条记录
bool CStudentDlg::AddNewInfo()
{
	// 判断数据的正误
	if( UpdateData() == false )
		return false;

	if( m_Name.IsEmpty() )
	{
		MessageBox( "请输入姓名" );
		return false;
	}
	if( m_Age < 0 || m_Age > 200 )
	{
		MessageBox( "您输入的年龄有误" );
		return false;
	}

	try
	{
		m_pRecordset->AddNew();
		m_pRecordset->PutCollect( "NAME", _variant_t(m_Name) );
		m_pRecordset->PutCollect( "SEX", _variant_t(m_SexStr) );
		m_pRecordset->PutCollect( "NUM", _variant_t(m_Num) );
		m_pRecordset->PutCollect( "CLASS", _variant_t(m_Class) );
		m_pRecordset->PutCollect( "AGE", m_Age );
		m_pRecordset->PutCollect( "Birthday", _variant_t(m_Brithday) );
		m_pRecordset->Update();

		LoadAllData();
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
		return false;
	}
	return true;
}
// 删除当前记录
bool CStudentDlg::DelCurData()
{
	int k = GetCurSltCount();
	if( k == -1 )
	{
		MessageBox( "您好像没有选择当前列" );
		return false;
	}

	try
	{
		m_pRecordset->Delete( adAffectCurrent );
		m_pRecordset->Update();

		// 重新读入数据
		this->LoadAllData();
		// 设置当前列
		if( m_ListInfo.GetItemCount() > 0 )
		{
			k--;
			if( k < 0 )
				k = 0;
			if( k >= m_ListInfo.GetItemCount() )
				k = m_ListInfo.GetItemCount() - 1;
			m_ListInfo.SetItemState(k,LVIS_SELECTED,LVIS_SELECTED);
			UpdateShowTxt();
		}
		else
		{
			// 没有记录了
			m_Name.Empty();
			m_Sex.SetCurSel(0);
			m_Num.Empty();
			m_Class.Empty();
			m_Age = 0;
			UpdateData(false);
		}
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
		return false;
	}
	return true;
}
void CStudentDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	// 关闭数据库连接
	this->CloseDBLink();

	OnCancel();
}
// 刷新数据库
void CStudentDlg::OnBnClickedUpdate()
{
	// TODO: 在此添加控件通知处理程序代码
	int k = GetCurSltCount();

	LoadAllData();

	// 设置当前选择项
	if( k != -1 )
		m_ListInfo.SetItemState(k,LVIS_SELECTED,LVIS_SELECTED);
	UpdateShowTxt();
}

void CStudentDlg::OnLvnItemchangedListInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;

	UpdateShowTxt();
}

void CStudentDlg::OnBnClickedChange()
{
	// 记住当前选择项
	int k = GetCurSltCount();
	if( k == -1 )
	{
		return ;
	}
	if ( UpdateDataDB() == false )
	{
		MessageBox( "修改失败" );
		return;
	}

	// 设置当前选择项
	m_ListInfo.SetItemState(k,LVIS_SELECTED,LVIS_SELECTED);
	// 更新显示
	UpdateShowTxt();
}
// 添加记录
void CStudentDlg::OnBnClickedAdd()
{
	// TODO: 在此添加控件通知处理程序代码
	int k = m_ListInfo.GetItemCount();

	if( this->AddNewInfo() == false )
	{
		MessageBox( "添加记录失败" );
		return;
	}

	// 设置当前选择项
	m_ListInfo.SetItemState(k,LVIS_SELECTED,LVIS_SELECTED);
	// 更新显示
	UpdateShowTxt();
}
// 删除当前记录
void CStudentDlg::OnBnClickedDel()
{
	// TODO: 在此添加控件通知处理程序代码
	if( this->DelCurData() == false)
	{
		MessageBox( "删除失败" );
	}
}

void CStudentDlg::OnBnClickedSltdata()
{
	// TODO: 在此添加控件通知处理程序代码
	CSltDlg  dlgSearch;
	dlgSearch.DoModal();
}

void CStudentDlg::OnBnClickedButton1()
{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
}



void CStudentDlg::OnBnClickedButtonInfo()
{
	// TODO: 在此添加控件通知处理程序代码

	CInfoDlg dlgInfo;
	CString temp;
	dlgInfo.m_Name=m_Name;
	//性别转换
	temp.Format("%d",m_Sex);
	dlgInfo.m_Sex=temp;

	dlgInfo.m_Num=m_Num;
	dlgInfo.m_Class=m_Class;
	//年龄转换
	temp.Format("%d",m_Age);
	dlgInfo.m_Age=temp;
	//生日转换
	/////temp= (CString) m_Brithday; //////////////////////时间如何转换成字符
	dlgInfo.m_Birthday="Date如何转换成CString";
	
	dlgInfo.DoModal();
}

⌨️ 快捷键说明

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