mfc学生信息管理系统c++
时间: 2023-09-13 12:11:26 浏览: 114
MFC(Microsoft Foundation Classes)是微软公司在Windows操作系统下提供的一套图形化界面应用程序开发框架,可以用于快速开发Windows应用程序。下面是一个基于MFC的学生信息管理系统的C++代码框架。
首先,需要定义一个学生类,包含姓名、学号、年龄等属性:
```cpp
class CStudent
{
public:
CString m_strName; // 姓名
CString m_strID; // 学号
int m_nAge; // 年龄
// 其他属性
// 构造函数
CStudent()
{
m_nAge = 0;
// 其他属性的初始化
}
// 析构函数
~CStudent()
{
}
};
```
然后,需要定义一个学生信息管理系统的主界面类,包含添加学生、删除学生、修改学生、查询学生等功能:
```cpp
class CStudentMgmtDlg : public CDialogEx
{
public:
// 构造函数
CStudentMgmtDlg(CWnd* pParent = nullptr);
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_STUDENTMGMT_DIALOG };
#endif
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
// 控件变量
CListCtrl m_lstStudent;
CEdit m_editName;
CEdit m_editID;
CEdit m_editAge;
// 其他控件变量
// 学生列表
vector<CStudent> m_vecStudent;
public:
// 添加学生
void AddStudent();
// 删除学生
void DeleteStudent();
// 修改学生
void ModifyStudent();
// 查询学生
void QueryStudent();
// 初始化学生列表
void InitStudentList();
// 显示学生列表
void ShowStudentList();
// 其他函数
};
```
接下来,需要实现主界面类的函数,具体实现可以参考下面的代码:
```cpp
void CStudentMgmtDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_STUDENT, m_lstStudent);
DDX_Control(pDX, IDC_EDIT_NAME, m_editName);
DDX_Control(pDX, IDC_EDIT_ID, m_editID);
DDX_Control(pDX, IDC_EDIT_AGE, m_editAge);
// 其他控件的DDX操作
}
BEGIN_MESSAGE_MAP(CStudentMgmtDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_ADD, &CStudentMgmtDlg::OnBnClickedButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DELETE, &CStudentMgmtDlg::OnBnClickedButtonDelete)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, &CStudentMgmtDlg::OnBnClickedButtonModify)
ON_BN_CLICKED(IDC_BUTTON_QUERY, &CStudentMgmtDlg::OnBnClickedButtonQuery)
END_MESSAGE_MAP()
void CStudentMgmtDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 中心图标
HICON hIcon = GetIcon();
RECT rect;
GetClientRect(&rect);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CStudentMgmtDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CStudentMgmtDlg::AddStudent()
{
// 从控件获取学生信息
CString strName, strID, strAge;
m_editName.GetWindowText(strName);
m_editID.GetWindowText(strID);
m_editAge.GetWindowText(strAge);
// 创建学生对象并添加到列表中
CStudent student;
student.m_strName = strName;
student.m_strID = strID;
student.m_nAge = _ttoi(strAge);
m_vecStudent.push_back(student);
// 刷新学生列表
ShowStudentList();
}
void CStudentMgmtDlg::DeleteStudent()
{
// 获取选中的学生
int nIndex = m_lstStudent.GetSelectionMark();
if (nIndex == -1)
{
AfxMessageBox(_T("请选择要删除的学生"));
return;
}
// 删除学生
m_vecStudent.erase(m_vecStudent.begin() + nIndex);
// 刷新学生列表
ShowStudentList();
}
void CStudentMgmtDlg::ModifyStudent()
{
// 获取选中的学生
int nIndex = m_lstStudent.GetSelectionMark();
if (nIndex == -1)
{
AfxMessageBox(_T("请选择要修改的学生"));
return;
}
// 修改学生信息
CString strName, strID, strAge;
m_editName.GetWindowText(strName);
m_editID.GetWindowText(strID);
m_editAge.GetWindowText(strAge);
m_vecStudent[nIndex].m_strName = strName;
m_vecStudent[nIndex].m_strID = strID;
m_vecStudent[nIndex].m_nAge = _ttoi(strAge);
// 刷新学生列表
ShowStudentList();
}
void CStudentMgmtDlg::QueryStudent()
{
// 获取查询条件
CString strName, strID, strAge;
m_editName.GetWindowText(strName);
m_editID.GetWindowText(strID);
m_editAge.GetWindowText(strAge);
// 根据条件查询学生
vector<CStudent> vecResult;
for (int i = 0; i < m_vecStudent.size(); i++)
{
CStudent student = m_vecStudent[i];
if (strName.IsEmpty() || student.m_strName == strName)
{
if (strID.IsEmpty() || student.m_strID == strID)
{
if (strAge.IsEmpty() || student.m_nAge == _ttoi(strAge))
{
vecResult.push_back(student);
}
}
}
}
// 显示查询结果
m_vecStudent = vecResult;
ShowStudentList();
}
void CStudentMgmtDlg::InitStudentList()
{
// 设置列表样式
m_lstStudent.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_lstStudent.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 100);
m_lstStudent.InsertColumn(1, _T("学号"), LVCFMT_CENTER, 100);
m_lstStudent.InsertColumn(2, _T("年龄"), LVCFMT_CENTER, 100);
// 添加其他列
// 初始时显示所有学生
m_vecStudent.push_back(CStudent(_T("张三"), _T("001"), 18));
m_vecStudent.push_back(CStudent(_T("李四"), _T("002"), 20));
m_vecStudent.push_back(CStudent(_T("王五"), _T("003"), 22));
ShowStudentList();
}
void CStudentMgmtDlg::ShowStudentList()
{
// 清空列表
m_lstStudent.DeleteAllItems();
// 添加学生到列表中
for (int i = 0; i < m_vecStudent.size(); i++)
{
CStudent student = m_vecStudent[i];
int nIndex = m_lstStudent.InsertItem(0, student.m_strName);
m_lstStudent.SetItemText(nIndex, 1, student.m_strID);
m_lstStudent.SetItemText(nIndex, 2, CString(student.m_nAge));
// 设置其他列的内容
}
}
```
最后,在应用程序类中创建主界面类对象,启动应用程序:
```cpp
class CStudentMgmtApp : public CWinApp
{
public:
CStudentMgmtApp();
public:
virtual BOOL InitInstance();
private:
CStudentMgmtDlg m_dlgMain;
};
CStudentMgmtApp theApp;
CStudentMgmtApp::CStudentMgmtApp()
{
}
BOOL CStudentMgmtApp::InitInstance()
{
// 初始化MFC库
AfxEnableControlContainer();
// 创建主界面对象
m_dlgMain.Create(IDD_STUDENTMGMT_DIALOG);
m_dlgMain.ShowWindow(SW_SHOW);
// 进入消息循环
return TRUE;
}
```
这样,一个基于MFC的学生信息管理系统就完成了。需要注意的是,上面的代码只是一个框架,需要根据实际需求进行完善和修改。
阅读全文