一、目录

实例021——使用CPtrList类创建和使用链表_编辑框

二、源码:

void CPtrListDlg::OnCheck() 
{
// TODO: Add your control notification handler code here
UpdateData(true);//获取编辑框数据
CAccount* m_pAccount = new CAccount;//创建结构体对象指针
switch(m_radio)
{
case 0: //插入操作
if(m_name.IsEmpty()||m_count<=0) //判断插入信息的有效性
{
AfxMessageBox("输入的费用信息不正确!");
return;
}
m_pAccount->m_name = m_name;//将用户输入信息赋值给结构体对象
m_pAccount->m_count=m_count;
m_accountlist.AddTail(m_pAccount);//将结构体对象加入到链表尾
m_name="";//编辑框复位
m_count=0.0;
UpdateData(false);
Reflesh();//更新显示
break;
case 1: //去除表头操作
if(m_accountlist.GetCount())//链表不为空
{
m_accountlist.RemoveHead();//去除表头
}
m_name="";//复位
m_count=0.0;
UpdateData(false);
Reflesh();//更新显示
break;
case 2: //去除表尾操作
if(m_accountlist.GetCount())//链表不为空
{
m_accountlist.RemoveTail();//去除表尾
}
m_name="";
m_count=0;
UpdateData(false);
Reflesh();//更新显示
break;
}

}

void CPtrListDlg::Reflesh()
{
CString str,str1;
m_total=0;//总量赋值0
m_list.ResetContent(); //清空列表框
if(!m_accountlist.IsEmpty()) //链表不为空
{
POSITION pos = m_accountlist.GetHeadPosition(); //获取链表头的位置
for (int i=0;i<m_accountlist.GetCount();i++) //遍历链表
{

CAccount* m_pAccount = (CAccount*)m_accountlist.GetNext(pos);
str1.Format("%.2f",m_pAccount->m_count); //格式化费用
str="名目:"+m_pAccount->m_name+" 支出费用:"+str1;
m_list.AddString(str); //添加列表框数据
m_total+=m_pAccount->m_count; //计算总费用
}
}
UpdateData(false); //更新总费用编辑框
}

 三、运行结果

实例021——使用CPtrList类创建和使用链表_编辑框_02