📄 stmanagerdlg.cpp
字号:
if(sort.DoModal()==IDCANCEL)
return ;
switch(sort.m_sortchoice)
{
case 0: link.namesort(sort.m_sortway);break;
//////调用clist.cpp中的姓名排序函数///////////
case 1: link.numbersort(sort.m_sortway);break;
//////调用clist.cpp中的学号排序函数//////////
case 2: link.allscoresort(sort.m_sortway);break;
//////调用clist.cpp中的总分排序函数//////////
case 3: link.mathsort(sort.m_sortway);break;
//////调用clist.cpp中的数学成绩排序函数//////
case 4: link.cppsort(sort.m_sortway);break;
//////调用clist.cpp中的C++成绩排序函数///////
default : link.englishsort(sort.m_sortway);break;
//////调用clist.cpp中的英语成绩排序函数//////
}
int row=m_list.GetItemCount();//得到链表的长度
int i=row;
cstudent *temp=link.head;
m_list.DeleteAllItems();//把文本框中的所有信息全部删除
while(temp!=NULL)//把排好序的链表在文本中显示出来
{
m_list.InsertItem(row-i,temp->getname());
m_list.SetItemText(row-i,1,temp->getsex());
m_list.SetItemText(row-i,2,temp->getnumber());
m_list.SetItemText(row-i,3,temp->getmajor());
CString math,cpp,english;
math.Format("%.1f",temp->getmath());//double类型转换cstring
m_list.SetItemText(row-i,4,math);
cpp.Format("%.1f",temp->getcpp());
m_list.SetItemText(row-i,5,cpp);
english.Format("%.1f",temp->getenglish());
m_list.SetItemText(row-i,6,english);
i--;
temp=temp->next;
}
}
void CStmanagerDlg::OnBUTTONdelete()//删除节点
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
AfxMessageBox("没有学生数据,不能删除");
return;
}
int selectcount=m_list.GetSelectedCount();//得到选中的行的数目
if(selectcount==0)
{
MessageBox("请先选中一行再删除");
return ;
}
int value=MessageBox("确实要删除吗?","删除",1|32);//给出是否删除的提示
if(value==2)
return;
CString nam=m_list.GetItemText(m_index,0);//得到被选中行的第零个元素
char *name=nam.GetBuffer(nam.GetLength());//把CString转换为char*
link.deletenodname(name);//调用按姓名删除函数
m_list.DeleteItem(m_index);//在文本中删除
}
void CStmanagerDlg::OnBUTTONdeletelist()//清空
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
AfxMessageBox("链表是空的,没有学生数据,不用清除");
return;
}
int value=MessageBox("确实要清空吗?","清空",1|32);//给出是否清空提示
if(value==2)
return;
link.deletelist();//调用删除链表函数
m_list.DeleteAllItems();//把文本框中的所有信息全部删除
}
void CStmanagerDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_index=m_list.GetSelectionMark();//得到被选中的一行
*pResult = 0;
}
void CStmanagerDlg::OnBUTTONreadfile()//从文件中导入学生数据
{
// TODO: Add your control notification handler code here
CString filename;
CFileDialog DlgFile(TRUE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"TXT 文件(*.txt)|*.txt|All Files(*.*)|*.*||");
if (DlgFile.DoModal()==IDOK)
filename = DlgFile.GetPathName();//filename获得文件名
else return;
link.readfile(filename);//调用链表类对象link的读文件函数
cstudent *temp;
temp=link.head;
int i=0;
m_list.DeleteAllItems();
while(temp!=NULL)
{
m_list.InsertItem(i,temp->getname());
m_list.SetItemText(i,1,temp->getsex());
m_list.SetItemText(i,2,temp->getnumber());
m_list.SetItemText(i,3,temp->getmajor());
CString math,cpp,english;
math.Format("%.1f",temp->getmath());//double类型转换cstring
m_list.SetItemText(i,4,math);
cpp.Format("%.1f",temp->getcpp());
m_list.SetItemText(i,5,cpp);
english.Format("%.1f",temp->getenglish());
m_list.SetItemText(i,6,english);
i++;
temp=temp->next;
}
}
void CStmanagerDlg::OnBUTTONsave()//保存学生数据
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
MessageBox("没有学生数据,无法保存");
return;
}
CString filename;
CFileDialog DlgFile(FALSE, "txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"TXT 文件(*.txt)|*.txt|All Files(*.*)|*.*||"); // 注意此处不能随意空格
if (DlgFile.DoModal()==IDOK)
filename = DlgFile.GetPathName();//filename获得文件名
else return;
link.savelist(filename);//调用链表类对象link的写文件函数
}
void CStmanagerDlg::OnBUTTONsearch()//查询
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
MessageBox("抱歉,没有学生数据,不能查询");
return;
}
CDlgSearch search;//定义一个查询对话框类的对象
if(search.DoModal()==IDCANCEL)
return;
cstudent *temp;
if(search.m_choice==1)//选择查询的方式
{
char *number=search.m_information.GetBuffer(search.m_information.GetLength());//把输入信息的CString型转换为char*
temp=link.numbersearch(number);//调用链表类对象link的学号查询函数
if(temp!=NULL)
{
CString cname(temp->getname());//把姓名字符串转换为CString型
CString sex(temp->getsex());//把性别字符串转换为CString型
CString cnumber(temp->getnumber());
CString major(temp->getmajor());
CDlgOutcome numberout;
numberout.m_allscore=temp->getallscore();
numberout.m_averscore=temp->average();
numberout.m_cpp=temp->getcpp();
numberout.m_english=temp->getenglish();
numberout.m_major=major;
numberout.m_math=temp->getmath();
numberout.m_name=cname;
numberout.m_number=cnumber;
numberout.m_sex=sex;
numberout.DoModal();
}
}
else//选择姓名查询
{
char *name=search.m_information.GetBuffer(search.m_information.GetLength());
temp=link.namesearch(name);//调用链表类对象link的姓名查询函数
if(temp!=NULL)
{
CString cname(temp->getname());//把姓名字符串转换为CString型
CString sex(temp->getsex());//把性别字符串转换为CString型
CString cnumber(temp->getnumber());
CString major(temp->getmajor());
CDlgOutcome nameout;
nameout.m_allscore=temp->getallscore();
nameout.m_averscore=temp->average();
nameout.m_cpp=temp->getcpp();
nameout.m_english=temp->getenglish();
nameout.m_major=major;
nameout.m_math=temp->getmath();
nameout.m_name=cname;
nameout.m_number=cnumber;
nameout.m_sex=sex;
nameout.DoModal();
}
}
}
void CStmanagerDlg::OnBUTTONAmend()//修改
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
AfxMessageBox("没有学生数据,不能修改");
return;
}
int selectcount=m_list.GetSelectedCount();//得到选中的行的数目
if(selectcount==0)
{
MessageBox("请先选中一行再修改");
return ;
}
int value=MessageBox("确定要修改吗?","修改",1|32);
if(value==2)
return ;
int index;
cstudent *temp=link.head;//用于在链表中把选中的同学的信息更换
CDlgStudent Amend;
CString math1,cpp1,english1;
index=m_list.GetSelectionMark();//得到被选中的一行的行号
Amend.m_name=m_list.GetItemText(index,0);//得到被选中行的第0个元素
Amend.m_sex=m_list.GetItemText(index,1);
Amend.m_number=m_list.GetItemText(index,2);
Amend.m_major=m_list.GetItemText(index,3);
math1=m_list.GetItemText(index,4);
Amend.m_math=atof(math1.GetBuffer(math1.GetLength()));//把CString改为double型
cpp1=m_list.GetItemText(index,5);
Amend.m_cpp=atof(cpp1.GetBuffer(cpp1.GetLength()));
english1=m_list.GetItemText(index,6);
Amend.m_english=atof(english1.GetBuffer(english1.GetLength()));
if(Amend.DoModal()==IDCANCEL)
return;
char *name=Amend.m_name.GetBuffer(Amend.m_name.GetLength());
char *sex=Amend.m_sex.GetBuffer(Amend.m_sex.GetLength());
char *number=Amend.m_number.GetBuffer(Amend.m_number.GetLength());
char *major=Amend.m_major.GetBuffer(Amend.m_major.GetLength());
for(int i=1;i<=index;i++)
temp=temp->next;
temp->setstudent(name,sex,number,major,Amend.m_math,Amend.m_cpp,Amend.m_english);
m_list.DeleteItem(index);//把原来的信息在文本里删除
m_list.InsertItem(index,temp->getname());
m_list.SetItemText(index,1,temp->getsex());
m_list.SetItemText(index,2,temp->getnumber());
m_list.SetItemText(index,3,temp->getmajor());
CString math,cpp,english;
math.Format("%.1f",temp->getmath());//double类型转换cstring
m_list.SetItemText(index,4,math);
cpp.Format("%.1f",temp->getcpp());
m_list.SetItemText(index,5,cpp);
english.Format("%.1f",temp->getenglish());
m_list.SetItemText(index,6,english);
MessageBox("修改成功");
}
void CStmanagerDlg::OnBUTTONStatistic()//统计
{
// TODO: Add your control notification handler code here
if(link.head==NULL)
{
MessageBox("没有学生数据,不能做统计");
return;
}
CDlgStatistic statistic;
statistic.m_ptlist=&link;//统计框对立,这里把link地址传给统计框的clist*,以便对链表进行操作
statistic.DoModal();
}
int CStmanagerDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)//显示启动动画
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CSplashWnd::ShowSplashScreen(this);//显示启动封面
return 0;
}
BOOL CStmanagerDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) //设置光标
{
// TODO: Add your message handler code here and/or call default
CString sClassName;
HCURSOR m_Cursor;
::GetClassName(pWnd->GetSafeHwnd(),sClassName.GetBuffer(80),90);
if(sClassName=="Button")
{
m_Cursor=AfxGetApp()->LoadCursor(IDC_CURSOR1);
::SetCursor(m_Cursor);
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -