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

📄 searchstatisticsview.cpp

📁 一个学生信息管理系统,使用了多中数值算法,有HASH查找,归并排序,堆排序,快速排序,界面也不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				"                                        -------------------------------搜索结果-------------------------------\r\n\r\n                                                                       没有找到此种性别的学生!");			
}

void CSearchStatisticsView::SearchByStudNum(CString strSchCtt)
{
	UINT uiStudNum;
	uiStudNum=Char2UINT((LPSTR)(LPCTSTR)strSchCtt);
	UINT uiAddr=(uiStudNum-uiStudNum/1000*1000)%11;
	UINT uiAddrBkUp=uiAddr;
	bool bIsFind=true;

	if(pStudInfo[uiAddr].uiStudNum==uiStudNum)
		PrintStudInfo(pStudInfo[uiAddr]);
	else
		while(pStudInfo[uiAddr].uiStudNum!=uiStudNum)
		{
			uiAddr=(uiAddr+1)%10;
			if(uiAddr==uiAddrBkUp)
			{
				bIsFind=false;
				break;
			}
		}

	if(!bIsFind)
		m_pMainFrame->m_wndOutputBar.SetEditText(1,
		"                                        -------------------------------搜索结果-------------------------------\r\n\r\n                                                                       查无此人!");
}

void CSearchStatisticsView::SearchByTeacher(CString strSchCtt)
{
	UINT i;
	bool bIsFind=false;
	char* pInTeacher;
	char pTeacherTemp1[10];
	char pTeacherTemp2[10];

	pInTeacher=(LPSTR)(LPCTSTR)strSchCtt;
	for(i=0;i<10;i++)
	{
		strcpy(pTeacherTemp1,pStudInfo[i].pCourseInfo->pTeacher);
		strcpy(pTeacherTemp2,pStudInfo[i].pCourseInfo->pNext->pTeacher);

		if(!strcmp(strupr(pTeacherTemp1),strupr(pInTeacher))) 
		{
			bIsFind=true;
			PrintStudInfo(pStudInfo[i]);
		}

		if(!strcmp(strupr(pTeacherTemp2),strupr(pInTeacher))) 
		{
			bIsFind=true;
			PrintStudInfo(pStudInfo[i]);
		}
	}

	if(!bIsFind)
		m_pMainFrame->m_wndOutputBar.SetEditText(1,
		"                                        -------------------------------搜索结果-------------------------------\r\n\r\n                                                               没有学生听该老师的课!");
}

void CSearchStatisticsView::PrintStudInfo(StudInfo studInfo)
{
	CString str;
	CString strFormer; //输出结果栏中原来已有的字符串
	char* pName;       //姓名
	UINT uiStudNum;    //学号,规定为9位,如080210114
	UINT uiAge;        //年龄
	char* pSex;        //性别
	char* pCourse1;    //课程名
	UINT uiMark1;      //成绩
	char* pTeacher1;   //教师
	char* pCourse2;    //课程名
	UINT uiMark2;      //成绩
	char* pTeacher2;   //教师
	
	strFormer=m_pMainFrame->m_wndOutputBar.GetEditText(1);

	pName=studInfo.pName;
	uiStudNum=studInfo.uiStudNum;
	uiAge=studInfo.uiAge;
	pSex=studInfo.pSex;
	
	pCourse1=studInfo.pCourseInfo->pCourse;
	uiMark1=studInfo.pCourseInfo->uiMark;
	pTeacher1=studInfo.pCourseInfo->pTeacher;
	
	pCourse2=studInfo.pCourseInfo->pNext->pCourse;
	uiMark2=studInfo.pCourseInfo->pNext->uiMark;
	pTeacher2=studInfo.pCourseInfo->pNext->pTeacher;

	if(uiStudNum/100000000==0)
		str.Format("                                   %-10s0%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s\r\n",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
	else
		str.Format("                                   %-10s%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s\r\n",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);

	str=strFormer+str;
	m_pMainFrame->m_wndOutputBar.SetEditText(1,str);
}

UINT CSearchStatisticsView::GetGrade(UINT uiStudNum)
{
	return (uiStudNum/100000)%100;
}

void CSearchStatisticsView::GetStudInfo(StudInfo *pStudInfo)
{
	this->pStudInfo=pStudInfo;
}

UINT CSearchStatisticsView::Char2UINT(char* pStr)
{
	UINT uiRet=0;
	UINT uiLen=strlen(pStr);
	UINT i;

	for(i=0;i<uiLen;i++)
		uiRet+=((int)pStr[i]-48)*pow(10,uiLen-i-1);

	return uiRet;
}

void CSearchStatisticsView::StatisticsBoyGirlCount()
{
	UINT i;
	m_uiBoyCount=0,m_uiGirlCount=0;

	for(i=0;i<10;i++)
		if(!strcmp(pStudInfo[i].pSex,"男") || !strcmp(pStudInfo[i].pSex,"M") || !strcmp(pStudInfo[i].pSex,"m"))
			m_uiBoyCount++;
		else
			m_uiGirlCount++;

	this->UpdateData(false);
}

void CSearchStatisticsView::StatisticsCourseAverageMark()
{
	UINT pCourseAllMark[20]={0}; //各门课总分
	float pCourseAverageMark[20];//各门课平均分
	UINT pStudCount[10]={0};     //各门课人数
	char* pCourse[20]={NULL};    //各门课数组
	UINT i,j;
	bool bIsFind1,bIsFind2;
	UINT uiPos=0;
	CString str,strTemp;

	for(i=0;i<10;i++)
	{
		bIsFind1=false;
		bIsFind2=false;

		//分析该学生的课程1是否已在课程数组
		for(j=0;j<20;j++)
			if(pCourse[j]!=NULL)
				if(!strcmp(pCourse[j],pStudInfo[i].pCourseInfo->pCourse))
			{
				bIsFind1=true;
				break;
			}
				
		if(!bIsFind1)
		{
			pCourse[uiPos]=pStudInfo[i].pCourseInfo->pCourse;
			pCourseAllMark[uiPos]=pStudInfo[i].pCourseInfo->uiMark;
			pStudCount[uiPos]=1;
			uiPos++;
		}
		else
		{
			pStudCount[j]++;
			pCourseAllMark[j]+=pStudInfo[i].pCourseInfo->uiMark;
		}

		//分析该学生的课程2是否已在课程数组
		for(j=0;j<20;j++)
			if(pCourse[j]!=NULL)
				if(!strcmp(pCourse[j],pStudInfo[i].pCourseInfo->pNext->pCourse))
			{
				bIsFind2=true;
				break;
			}
				
		if(!bIsFind2)
		{
			pCourse[uiPos]=pStudInfo[i].pCourseInfo->pNext->pCourse;
			pCourseAllMark[uiPos]=pStudInfo[i].pCourseInfo->pNext->uiMark;
			pStudCount[uiPos]=1;
			uiPos++;
		}
		else
		{
			pStudCount[j]++;
			pCourseAllMark[j]+=pStudInfo[i].pCourseInfo->pNext->uiMark;
		}
	}

	for(i=0;i<uiPos;i++)
		pCourseAverageMark[i]=pCourseAllMark[i]*1.0/pStudCount[i];

	str.Format("%-10s%-8s\r\n","课程","平均成绩");
	for(i=0;i<uiPos;i++)
	{
		strTemp.Format("%-10s%-8f\r\n",pCourse[i],pCourseAverageMark[i]);
		str+=strTemp;
	}
	m_edtCourseAverageMark.SetWindowText(str);
}

void CSearchStatisticsView::StatisticsGradeAverageAge()
{
	int pGrade[10];			   //年级数组
	UINT pGradeAllAge[10]={0}; //各年级总年龄
	UINT pStudCount[10]={0};   //各年级人数
	float pGradeAverageAge[10];//各年级平均年龄
	UINT i,j,uiPos=0;
	bool bIsFind;
	UINT uiCount=0;
	CString str,strTemp;
	
	//初始化
	for(i=0;i<10;i++)
		pGrade[i]=-1;

	for(i=0;i<10;i++)
	{
		bIsFind=false;

		//分析该学生所在年级是否已在年级数组
		for(j=0;j<10;j++)
			if(GetGrade(pStudInfo[i].uiStudNum)==pGrade[j])
			{
				bIsFind=true;
				break;
			}

		if(!bIsFind)
		{
			pGrade[uiPos]=GetGrade(pStudInfo[i].uiStudNum);
			pGradeAllAge[uiPos]=pStudInfo[i].uiAge;
			pStudCount[uiPos]=1;
			uiPos++;			
		}
		else
		{
			pStudCount[j]++;
			pGradeAllAge[j]+=pStudInfo[i].uiAge;
		}
	}

	for(i=0;i<uiPos;i++)
		pGradeAverageAge[i]=pGradeAllAge[i]*1.0/pStudCount[i];

	str.Format("%-10s%-8s\r\n","年级","平均年龄");
	for(i=0;i<uiPos;i++)
	{
		if(pGrade[i]>9)
			strTemp.Format("%-10d%-8f\r\n",pGrade[i],pGradeAverageAge[i]);
		else
			strTemp.Format("0%-9d%-8f\r\n",pGrade[i],pGradeAverageAge[i]);

		str+=strTemp;
	}

	m_edtGradeAverageAge.SetWindowText(str);
}

void CSearchStatisticsView::StatisticsPersonAverageMark()
{
	UINT i;
	float uiTemp;
	CString str,strTemp;

	str.Format("%-10s%-8s\r\n","姓名","平均成绩");	
	for(i=0;i<10;i++)
	{
		uiTemp=(pStudInfo[i].pCourseInfo->uiMark+pStudInfo[i].pCourseInfo->pNext->uiMark)*1.0/2;
		strTemp.Format("%-10s%-8f\r\n",pStudInfo[i].pName,uiTemp);
		str+=strTemp;
	}
	m_edtPersonAverageMark.SetWindowText(str);
}

void CSearchStatisticsView::OnFileOpen() 
{
	// TODO: Add your command handler code here
	
}

void CSearchStatisticsView::OnEditchangeComboSchctt() 
{
	// TODO: Add your control notification handler code here
	CString str;
	CComboBox* hWnd;

	hWnd=(CComboBox*)GetDlgItem(IDC_COMBO_SCHCTT);
	hWnd->GetWindowText(str);
	int nLength = str.GetLength();
  
	// Currently selected range
	DWORD dwCurSel =hWnd->GetEditSel();
	WORD dStart = LOWORD(dwCurSel);
	WORD dEnd   = HIWORD(dwCurSel);

	// Search for, and select in, and string in the combo box that is prefixed
	// by the text in the edit box
	if (hWnd->SelectString(-1, str) == CB_ERR)
	{
		hWnd->SetWindowText(str);		// No text selected, so restore what was there before
		if (dwCurSel != CB_ERR)
			hWnd->SetEditSel(dStart, dEnd);	//restore cursor postion
	}

	// Set the text selection as the additional text that we have added
	if (dEnd < nLength && dwCurSel != CB_ERR)
		hWnd->SetEditSel(dStart, dEnd);
	else
		hWnd->SetEditSel(nLength, -1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -