MFC--学生管理系统(更新)

 仓库地址

GitHub - mierhaosi3/StudentManageSystem

MFC--学生管理系统_m0_53252742的博客-CSDN博客

Bilibili代码分析视频:bilibili传送门

这个是之前做的,这次进行更新,整个项目会在元旦左右上传到github,到时会附上链接

如果想提前要用来应付作业,欢迎私信。 

下面对更新内容进行介绍

 1.更新了登陆系统

2. 进入程序是弹出文件所含条数

 

 3.创建了下面的状态栏,一个是坐标随着鼠标实时改变,一个是得到系统当前时间

   更新了,点击列表头可进行排序

4.在菜单栏中加入了绘制图,链接是详细讲解

MFC--对话框的一个画图控件-HighSpeedChart_m0_53252742的博客-CSDN博客

(1)折线图

 (2)柱状图

(3).混合式图 

                光标变为十字,更方便查信息

具体实现,等明天起床再说!

=============================12.6更新===================

代码实现

1.登陆窗口:

  1. 这段代码实现了输入用户名和密码的操作
  2. if (IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED)	//如果被选中
    	{
    		//MessageBox(_T("ok"));
    		UpdateData(true);
    		CEdit* pEdit = (CEdit*)(this)->GetDlgItem(IDC_EDIT2_password);
    		pEdit->SetPasswordChar(0);
    		SetDlgItemText(IDC_EDIT2_password, password_value);
    		UpdateData(false);
    	}
    	else
    	{
    		UpdateData(true);
    		CEdit* pEdit = (CEdit*)(this)->GetDlgItem(IDC_EDIT2_password);
    		pEdit->SetPasswordChar('*');
    		SetDlgItemText(IDC_EDIT2_password, password_value);
    		UpdateData(false);
    	}
    	GetDlgItem(IDC_EDIT2_password)->SetFocus();

    2.这里用来设置密码窗口是否可见,当然也可以直接选中编辑窗口的的密码选项

void login::OnBnClickedButtonOk()
{
	// TODO: 在此添加控件通知处理程序代码
	static int k = 3;
	CString name;
	CString password; // 创造两个字符串变量来接受用户输入的信息(用户名和密码等)
	GetDlgItemText(IDC_EDIT1, name); // 返回用户名
	GetDlgItemText(IDC_EDIT2, password); // 返回密码
	UpdateData(true);
	if (password_value.IsEmpty())
	{
		MessageBox(L"用户名不能为空");
	}
	if (password_value.IsEmpty())
		MessageBox(L"密码不能为空");
	if (username_value == " " && password_value == " ")
	{
		// 进入主对话框界面
		m_SuccessLogin = true;
		CDialogEx::OnOK(); // 关闭登陆界面
	}
	else
	{
		// 弹出窗口提示用户名或密码不正确
		MessageBox(_T("用户名或密码不正确!"), _T("提示"), MB_OK);
		// 清空用户名和密码,便于重新输入
		username_value = "";
		password_value = "";
		UpdateData(FALSE); // 更新编辑框控件的显示值
	}
}

        3.依然要加一个回车响应,如果点击回车就会自动判断密码用户名是否正确 

BOOL login::PreTranslateMessage(MSG* pMsg)	//屏蔽回车响应
{
	// TODO: 在此添加专用代码和/或调用基类
	if (pMsg->message == WM_KEYDOWN)
	{
		switch (pMsg->wParam)
		{
		case VK_RETURN:     // 屏蔽回车
			OnBnClickedButtonOk();
			return TRUE;
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

        4.要在XXXXXXX.cpp中添加

login dlg_login;    //建立登陆对话框对象
	dlg_login.DoModal();   //弹出登陆对话框
	if(dlg_login.m_SuccessLogin)	//这个判断是为了保证加入的函数能正常运行
	{



    xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.......
    m_pMainWnd = &dlg;
    .....................................
    .................................    







    }

2.出现条数统计: 

 实现这个功能要在

XXXXXDlg::OnInitDialog()中先打开文件,更新到列表框之后

int index = list1.GetItemCount();	//开局显示文件中一共含有多少条数据
	tot.Format(_T("%d"), index);	//float转cstring
	MessageBox((tot), L"文件记录");

就可以了。 

3.更新表头排序

        一个是需要新增点击列表头的函数,这个是在类向导中添加,

DWORD select_line;//选择列
bool ASC = FALSE;//是否升序
bool method; // 记录比较方法
static int CALLBACK CompareFunc(LPARAM  select_line1, LPARAM  select_line2, LPARAM  Sort);
void CMFCApplication6Dlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码

		select_line = pNMLV->iSubItem;//点击的列
		int count = list1.GetItemCount();
		for (int i = 0; i < count; i++)
			list1.SetItemData(i, i); //每行的比较关键字,此处为列序号(点击的列号),可以设置为其他比较函数的第一二个参数
		list1.SortItems(CompareFunc, (DWORD_PTR)&list1); // 排序第二个参数是比较函数的第三个参数
		method = !method;
		*pResult = 0;
}

这个是排序函数 

static int CALLBACK CompareFunc(LPARAM  select_line1, LPARAM  select_line2, LPARAM  Sort)
{

	USES_CONVERSION;
	int row1 = (int)select_line1;
	int row2 = (int)select_line2;

	CListCtrl* lc = (CListCtrl*)Sort;

	CString lp1 = lc->GetItemText(row1, select_line);
	CString lp2 = lc->GetItemText(row2, select_line);

	if (select_line != (0||2))	//只有名字和性别那列是无序排列
	{
		if (method)
			return lp1.CompareNoCase(lp2);
		else
			return lp2.CompareNoCase(lp1);

	}
	else           //float类型的比较
	{
		if (method)
			return _ttof(lp1) - _ttof(lp2);
		else
			return _ttof(lp2) - _ttof(lp1);
	}
	return 0;
}

都需要在头文件中进行定义。 

 4.画图

画图使用HIGH-SPEED-chart的控件画的,这里先附上初始化的代码(基本样式和坐标轴等信息),这个控件后期会继续写一篇博客来更新的

	//折线图
	CChartStandardAxis* pBottomAxis =
		m_chartctrl.CreateStandardAxis(CChartCtrl::BottomAxis);	//绘制坐标轴
	pBottomAxis->SetMinMax(0, 20);	//暂时只用得到20
	CChartStandardAxis* pLeftAxis =
		m_chartctrl.CreateStandardAxis(CChartCtrl::LeftAxis);
	CChartAxis* pAxis1;
	CChartAxisLabel* pLabel;
	CString str1;
	pLeftAxis->SetMinMax(0, 105);
	pBottomAxis->SetTickIncrement(false, 2.0);
	pBottomAxis->SetDiscrete(true);
	CChartLineSerie* pSeries = m_chartctrl.CreateLineSerie();
	m_chartctrl.GetBottomAxis()->GetLabel()->SetText(L"学号");	
	m_chartctrl.SetBackGradient(RGB(255, 255, 255), (RGB(252,230,201)), gtVertical);//花里胡哨的背景
	m_chartctrl.EnableRefresh(false);
	m_chartctrl.GetLegend()->SetVisible(true);			//分类图
	m_chartctrl.GetLegend()->SetHorizontalMode(true);
	m_chartctrl.GetLegend()->UndockLegend(450, 250);
	条形图

	CChartStandardAxis* pBottomAxis_z =m_chartctr2.CreateStandardAxis(CChartCtrl::BottomAxis);	//绘制坐标轴(x)
	pBottomAxis_z->SetMinMax(0, 20);	//一共有0到20
	pBottomAxis_z->SetDiscrete(true);
	CChartStandardAxis* pLeftAxis_z=m_chartctr2.CreateStandardAxis(CChartCtrl::LeftAxis);//y轴
	pLeftAxis_z->SetMinMax(0, 400);
	pLeftAxis_z->GetLabel()->SetText(_T("成绩"));
	m_chartctr2.GetBottomAxis()->GetLabel()->SetText(L"学号");
	m_chartctr2.GetTitle()->AddString(_T("柱状图"));	//设置柱状图的表头
	CChartFont titleFont;
	titleFont.SetFont(_T("Arial Black"), 120, true, false, true);	//设置标题字体
	m_chartctr2.GetTitle()->SetFont(titleFont);
	m_chartctr2.GetTitle()->SetColor(RGB(0, 0, 128));
	m_chartctr2.SetBackGradient(RGB(255, 255, 255), RGB(255, 127, 80), gtVertical);	//花里胡哨背景色
	m_chartctr2.EnableRefresh(false);
	m_chartctr2.GetLegend()->SetVisible(true);
	m_chartctr2.GetLegend()->SetHorizontalMode(true);
	m_chartctr2.GetLegend()->UndockLegend(450, 10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值