mfc实现按学号和按姓名查询学生信息的功能,学生信息由文件存储
时间: 2024-02-18 08:04:30 浏览: 81
学生信息管理系统, 实现学生信息包括:学号、姓名、性别、年龄、班级等信息
5星 · 资源好评率100%
要实现按学号和按姓名查询学生信息的功能,学生信息由文件存储,可以通过以下步骤实现:
1. 创建一个学生类,包含学生的姓名、学号、性别、年龄等属性,以及相应的读取和设置函数。
2. 创建一个学生管理类,实现从文件中读取学生信息和查询学生信息的功能。在该类中,可以使用 CStdioFile 类来读写文件,具体步骤如下:
- 创建一个 CStdioFile 对象,打开学生信息文件。
- 读取文件中的每一行,解析出学生的各个属性,并创建一个学生对象。
- 将学生对象加入到一个学生列表中。
- 根据查询条件,遍历学生列表,找到符合条件的学生。
3. 在 MFC 的对话框中添加两个编辑框和两个按钮,一个用来输入学号或姓名,另一个用来执行查询操作。在查询按钮的 Click 事件处理函数中,获取编辑框中输入的学号或姓名,并调用学生管理类的查询函数,将结果显示在列表框中。
下面是一个简单的示例代码:
```c++
// 学生类
class CStudent {
public:
CString GetName() const { return m_strName; }
void SetName(const CString& strName) { m_strName = strName; }
CString GetID() const { return m_strID; }
void SetID(const CString& strID) { m_strID = strID; }
CString GetGender() const { return m_strGender; }
void SetGender(const CString& strGender) { m_strGender = strGender; }
int GetAge() const { return m_nAge; }
void SetAge(int nAge) { m_nAge = nAge; }
private:
CString m_strName;
CString m_strID;
CString m_strGender;
int m_nAge;
};
// 学生管理类
class CStudentManager {
public:
CStudentManager() {}
void LoadFromFile(const CString& strFileName) {
CStdioFile file;
if (file.Open(strFileName, CFile::modeRead | CFile::typeText)) {
CString strLine;
while (file.ReadString(strLine)) {
CStringArray arrFields;
int nFields = ParseCSVLine(strLine, arrFields);
if (nFields == 4) {
CStudent student;
student.SetName(arrFields[0]);
student.SetID(arrFields[1]);
student.SetGender(arrFields[2]);
student.SetAge(_ttoi(arrFields[3]));
m_arrStudents.Add(student);
}
}
file.Close();
}
}
CArray<CStudent, CStudent&> Search(const CString& strCondition, bool bSearchByID) const {
CArray<CStudent, CStudent&> arrResult;
for (int i = 0; i < m_arrStudents.GetCount(); i++) {
const CStudent& student = m_arrStudents[i];
if (bSearchByID) {
if (student.GetID() == strCondition) {
arrResult.Add(student);
}
}
else {
if (student.GetName() == strCondition) {
arrResult.Add(student);
}
}
}
return arrResult;
}
private:
CArray<CStudent, CStudent&> m_arrStudents;
};
// 对话框类
class CMyDialog : public CDialogEx {
public:
CMyDialog() : CDialogEx(IDD_MY_DIALOG) {}
protected:
virtual BOOL OnInitDialog() {
CDialogEx::OnInitDialog();
m_editCondition.SubclassDlgItem(IDC_EDIT_CONDITION, this);
m_listResult.SubclassDlgItem(IDC_LIST_RESULT, this);
m_btnSearchByID.SubclassDlgItem(IDC_BTN_SEARCH_BY_ID, this);
m_btnSearchByName.SubclassDlgItem(IDC_BTN_SEARCH_BY_NAME, this);
m_studentManager.LoadFromFile(_T("students.csv"));
return TRUE;
}
afx_msg void OnSearchByID() {
CString strID;
m_editCondition.GetWindowText(strID);
CArray<CStudent, CStudent&> arrResult = m_studentManager.Search(strID, true);
ShowResult(arrResult);
}
afx_msg void OnSearchByName() {
CString strName;
m_editCondition.GetWindowText(strName);
CArray<CStudent, CStudent&> arrResult = m_studentManager.Search(strName, false);
ShowResult(arrResult);
}
DECLARE_MESSAGE_MAP()
private:
CStudentManager m_studentManager;
CEdit m_editCondition;
CListBox m_listResult;
CButton m_btnSearchByID;
CButton m_btnSearchByName;
void ShowResult(const CArray<CStudent, CStudent&>& arrResult) {
m_listResult.ResetContent();
for (int i = 0; i < arrResult.GetCount(); i++) {
CString strItem;
const CStudent& student = arrResult[i];
strItem.Format(_T("%s\t%s\t%s\t%d"), student.GetName(), student.GetID(),
student.GetGender(), student.GetAge());
m_listResult.AddString(strItem);
}
}
};
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_BN_CLICKED(IDC_BTN_SEARCH_BY_ID, &CMyDialog::OnSearchByID)
ON_BN_CLICKED(IDC_BTN_SEARCH_BY_NAME, &CMyDialog::OnSearchByName)
END_MESSAGE_MAP()
```
阅读全文