⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stmanagerdlg.cpp

📁 此系统为学生管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   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 + -