使用MFC的链表类存放学生信息(姓名,分数)。要求:使用链表类的添加、删除节点的方法对链表进行操作;显示链表中的学生信息。
时间: 2024-03-13 08:39:01 浏览: 173
使用MFC的链表类存放学生信息可以按照以下步骤进行操作:
1. 首先,需要创建一个学生信息类,包括姓名和分数两个成员变量。可以定义如下:
```cpp
class CStudentInfo : public CObject
{
public:
CString m_strName; // 姓名
int m_nScore; // 分数
};
```
2. 然后,在文档类中添加一个链表类的成员变量,用于存放学生信息。可以定义如下:
```cpp
CList<CStudentInfo*, CStudentInfo*> m_lstStudentInfo; // 学生信息链表
```
3. 在对话框中,可以使用MFC的列表框控件来显示学生信息。在对话框类中添加一个列表框控件的成员变量,并在OnInitDialog函数中初始化列表框。可以定义如下:
```cpp
CListCtrl m_lstStudent; // 列表框控件
BOOL CStudentDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化列表框
m_lstStudent.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);
m_lstStudent.InsertColumn(1, _T("分数"), LVCFMT_LEFT, 100);
return TRUE;
}
```
4. 在添加学生信息时,可以使用链表类的AddTail函数将学生信息添加到链表的末尾。可以定义如下:
```cpp
void CMyDoc::AddStudentInfo(const CString& strName, int nScore)
{
CStudentInfo* pInfo = new CStudentInfo;
pInfo->m_strName = strName;
pInfo->m_nScore = nScore;
m_lstStudentInfo.AddTail(pInfo);
}
```
5. 在删除学生信息时,可以使用链表类的RemoveAt函数将指定位置的学生信息从链表中删除。可以定义如下:
```cpp
void CMyDoc::RemoveStudentInfo(int nIndex)
{
POSITION pos = m_lstStudentInfo.FindIndex(nIndex);
if (pos != NULL)
{
CStudentInfo* pInfo = m_lstStudentInfo.GetAt(pos);
m_lstStudentInfo.RemoveAt(pos);
delete pInfo;
}
}
```
6. 在显示学生信息时,可以使用链表类的GetHeadPosition和GetNext函数遍历链表,并将学生信息添加到列表框中。可以定义如下:
```cpp
void CStudentDlg::ShowStudentInfo()
{
m_lstStudent.DeleteAllItems();
POSITION pos = m_pDoc->m_lstStudentInfo.GetHeadPosition();
int nIndex = 0;
while (pos != NULL)
{
CStudentInfo* pInfo = m_pDoc->m_lstStudentInfo.GetNext(pos);
m_lstStudent.InsertItem(nIndex, pInfo->m_strName);
m_lstStudent.SetItemText(nIndex, 1, CString().Format(_T("%d"), pInfo->m_nScore));
nIndex++;
}
}
```
阅读全文