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

📄 学分绩点计算dlg.cpp

📁 四川大学学生学分绩点计算工具软件 现在把代码公开 王政东
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//		m_kms[num-1]=m_kms[num-1];
    		Sshow();
			m_score = _T("");
         	m_xuefen = _T("");
			m_num=num+1;
			UpdateData(false);
			GetDlgItem(IDC_BUTTON6)->EnableWindow(true);
	    	GetDlgItem(IDC_EDIT2)->SetFocus();
			m_xuefencb.SetCurSel(0);
	    	return;
		}
	}
}

void CMyDlg::OnButton2()   //计算按钮
{
	// TODO: Add your control notification handler code here
	if(num)
	{
    	Saver();
       	Smax();
       	Smin();	
	    Sjidian();
        Sxuefen();
		CString temp;
		temp.Format("            计算完成\n\n您的学分绩点是 %0.3f  您的平均分是 %0.3f",m_jidian,m_aver);
		MessageBox(temp,"恭喜",MB_ICONINFORMATION);
	}
	else
		MessageBox("还没有数据,计算失败 ","错误",MB_ICONERROR);
	    GetDlgItem(IDC_EDIT2)->SetFocus();
		return;
}

void CMyDlg::OnButton4()    //浏览按钮
{
	// TODO: Add your control notification handler code here
	char    str[500];
	CString temp;
	int     i=0,j=0;
	FILE *fp;
    MessageBox("保存的数据格式请参考所给样本!! \n\n数据中 第2行为科目名称 可以直接回车  \n\n第4行为分  第10行为绩 每一科目的息必须占14行(从教务处网页复制保存就符合)    ","注意",MB_ICONINFORMATION);
	CFileDialog dlg(true,"*.txt","score.txt",0,"*.txt|*.txt");

	int nStructSize = 0;
	DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
	dwVersion = GetVersion();
	dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
	dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
	if(dwVersion < 0x80000000)
	{
		nStructSize = 88;   //2k,xp下显示新的版本
	}
	else
	{
		nStructSize = 76;   //98下显示老版本
	}
	dlg.m_ofn.lStructSize=nStructSize;
	dlg.m_ofn.Flags |=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;

    if (dlg.DoModal()==IDOK)
	{
    	if(!(fp=fopen(dlg.GetPathName(),"r")))
		{
			char error;
			error=GetLastError();
			MessageBox((char*)error,"错误",MB_ICONERROR);
			return;
		}

		fp=fopen(dlg.GetPathName(),"r");
		while(m_show.GetCount()>=1)    //先删除已经在显示框中显示的数据
		{
			m_list.DeleteItem(0);
    		m_show.DeleteString(0);
		}
//////////////////////////////////////////////////////////////////
	while(!feof(fp))
		{
	    	if(fgets(str,100,fp)!=NULL)
			{
			//TODO 存储数据
			i++;
			if(i%14==2)
			{
				temp=str;
				temp.Replace("\n","");
				temp.TrimLeft();
			}
			if(i%14==4)
			{
				m_xf[j]=atof(str);
				m_xfs[j]=str;
			}
			if(i%14==10)
			{
				m_sc[j]=atof(str);
				m_cjs[j]=str;
				m_cjs[j].Replace("\n","");
				m_cjs[j].TrimLeft();
				if(strcmp("优",m_cjs[j])==0 || strcmp("优秀",m_cjs[j])==0)
				{
					m_sc[j]=90;
					m_cjs[j++]="优(估90)";
				}
				else if(strcmp("优(估90)",m_cjs[j])==0)
				{
					m_sc[j++]=90;
				}
				else if(strcmp("良",m_cjs[j])==0 || strcmp("良好",m_cjs[j])==0)
				{
					m_sc[j]=80;
					m_cjs[j++]="良(估80)";
				}
				else if(strcmp("良(估80)",m_cjs[j])==0)
				{
					m_sc[j++]=80;
				}
				else if(strcmp("中",m_cjs[j])==0 || strcmp("中等",m_cjs[j])==0)
				{
					m_sc[j]=75;
					m_cjs[j++]="中(估75)";
				}
				else if(strcmp("中(估75)",m_cjs[j])==0)
				{
					m_sc[j++]=75;
				}
				else if(strcmp("及格",m_cjs[j])==0)
				{
					m_sc[j]=65;
					m_cjs[j++]="及格(估65)";
				}
				else if(strcmp("及格(估65)",m_cjs[j])==0)
				{
					m_sc[j++]=65;
				}
				else
				{
					m_sc[j++]=atof(str);
				}
				m_kms[j-1]=temp;
			}
			m_show.AddString(str);
	    	UpdateData(0);
			}
		}
		m_num=j;
		if(num=m_num)       //更新总数据项数
		m_bSerior=true;
		GetDlgItem(IDC_BUTTON6)->EnableWindow(true);
		UpdateData(false);
		Supdate();
		GetDlgItem(IDC_BUTTON7)->EnableWindow(1);
		return;
	}
}

void CMyDlg::OnCancel()     //退出按钮
{
	// TODO: Add extra cleanup here
    if(MessageBox("你确认要退出吗?","询问",MB_OKCANCEL+MB_ICONQUESTION)==1)
	CDialog::OnCancel();
}

double CMyDlg::Saver()      //平均分计算
{
	double result = 0.0;
	int i;
	for(i=0;i<num;i++)
		result=result + m_sc[i];
	result = result / num;
	result = result * 1000;  //对结果保留三位小数
	result = floor(result) / 1000;
	m_aver = 0;
	m_aver = result;
    UpdateData(false);
	return result;
}

double CMyDlg::Sjidian()     //绩点计算
{
	double result = 0.0;
	if(Sxuefen())
	result = Sscore() / Sxuefen();
	else
		result = 0;
	if(result < 1)                      //小于 1 则置 0
		result = 0.00;
	else 
	{
		result = result * 1000;          //对结果保留三位小数
		result = floor(result) / 1000;
	}
	m_jidian = result;
	UpdateData(false);
	return result;
}

double CMyDlg::Smax()        //最高分
{
	double result = 0.0;
	int i;
	for(i=0;i<num;i++)
	{
		if(result < m_sc[i])
			result = m_sc[i];
	}
	m_max = result;
	UpdateData(false);
	return result;
}

double CMyDlg::Smin()         //最低分
{
	double result = 100.0;
	int i;
	for(i=0;i<num;i++)
	{
		if(result > m_sc[i])
			result = m_sc[i];
	}
	m_min = result;
	UpdateData(false);
	return result;
}

double CMyDlg::Sscore()        //学分 × 绩点 再求和
{
	double result = 0.0;
	double tem = 0.0;
	double temp[200]={0};      //临时存储单科所获的绩点
	int i;
	for(i=0;i<num;i++)
	{
		if(m_sc[i] >= 95 && m_sc[i] <= 100)
			temp[i]=4.0;
		else if(m_sc[i] >= 90)
			temp[i]=3.8;
		else if(m_sc[i] >= 85)
			temp[i]=3.6;
		else if(m_sc[i] >= 80)
			temp[i]=3.2;
		else if(m_sc[i] >= 75)
			temp[i]=2.7;
		else if(m_sc[i] >= 70)
			temp[i]=2.2;
		else if(m_sc[i] >= 65)
			temp[i]=1.7;
		else if(m_sc[i] >= 60)
			temp[i]=1.0;
		else temp[i]=0;
	}
	for(i=0;i<num;i++)
	{
		tem = m_xf[i] * temp[i];
		result = result + tem;
	}
	return result;
}

void CMyDlg::Sshow()
{
	int nItem;
//	for(int i=0;i<num;i++)
//	{
	int i=num-1;
		nItem=m_list.InsertItem(i,_T(m_kms[i]));
		m_list.SetItemText(nItem,1,_T(m_cjs[i]));
		m_list.SetItemText(nItem,2,_T(m_xfs[i]));
//	}

}

void CMyDlg::Supdate()    //实现 实时数据更新
{
	int nItem;
	for(int i=0;i<num;i++)
	{
		nItem=m_list.InsertItem(i,_T(m_kms[i]));
		m_list.SetItemText(nItem,1,_T(m_cjs[i]));
		m_list.SetItemText(nItem,2,_T(m_xfs[i]));
		continue;
	}
	return;
}

double CMyDlg::Sxuefen()      //总的学分计算
{
	double result = 0.0;
	int i;
	for(i=0;i<num;i++)
		result = result + m_xf[i];
	result = result * 100;   //对结果保留两位小数
	result = floor(result) / 100;
	m_allscore = result;
	UpdateData(false);
	return result;
}

void CMyDlg::OnButton3()     //帮助按钮
{
	// TODO: Add your control notification handler code here
	CAboutDlg dlg;	
	if(dlg.DoModal())
       ::ShellExecute(NULL,"open","http://hi.baidu.com/wsmwzd",NULL,NULL,SW_SHOWNORMAL);
}

void CMyDlg::OnButton6()     //保存数据
{
	// TODO: Add your control notification handler code here
	if(!num)
	{
		MessageBox("没有输入数据","错误",MB_ICONERROR);
			return;
	}
	CFile file;
	FILE  *fp;
	int i;
	CString str,temp;
    CFileDialog dlg(false);//,"*.txt","我的成绩信息.txt",0,"*.txt|*.txt");

	int nStructSize = 0;
	DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
	dwVersion = GetVersion();
	dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
	dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
	if(dwVersion < 0x80000000)
	{
		nStructSize = 88;   //2k,xp下显示新的版本
	}
	else
	{
		nStructSize = 76;   //98下显示老版本
	}
	dlg.m_ofn.lpstrFilter=_T("文本文件(*.txt)\0*.txt\0所有类型(*.*)\0*.*\0");
	dlg.m_ofn.lStructSize=nStructSize;
	dlg.m_ofn.Flags |=OFN_HIDEREADONLY;

    if (dlg.DoModal()==IDOK)
	{
		fp=fopen(dlg.GetPathName(),"w");
		for(i=0;i<num;i++)
		{
		   fprintf(fp,"****\n%s\n\n%0.3f\n\n\n\n\n\n%s\n\n\n\n\n",m_kms[i],m_xf[i],m_cjs[i]);
		}
		if(m_jidian != 0 && m_allscore !=0)
		{
			fprintf(fp,"学分绩点:%0.3f   总学分: %0.1f\n",m_jidian,m_allscore);
			fprintf(fp,"平均分:%0.3f   最高分:%0.1f    最低分:%0.1f",m_aver,m_max,m_min);
		}
		fprintf(fp,"******************************************************************88\n\n程序设计 王政东 谢谢您的使用 数据仅供参考 如有错误请指正 QQ 290052851");
		fclose(fp);
	}
}

void CMyDlg::OnButton7() 
{
	// TODO: Add your control notification handler code here
	if(m_bSerior)
	{
    SetWindowPos(&wndTop,0,0,673,420+m_nTitleWideth,SWP_NOMOVE);
	GetDlgItem(IDC_BUTTON7)->EnableWindow(1);
	GetDlgItem(IDC_BUTTON7)->SetWindowText("收 起 ←");
	GetDlgItem(IDC_EDIT2)->SetFocus();
	m_bSerior=false;
	}
	else
	{
    SetWindowPos(&wndTop,0,0,374,420+m_nTitleWideth,SWP_NOMOVE);
	GetDlgItem(IDC_BUTTON7)->EnableWindow(1);
	GetDlgItem(IDC_BUTTON7)->SetWindowText("查看读入的数据→");
	GetDlgItem(IDC_EDIT2)->SetFocus();
	m_bSerior=true;
	}
}

void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	int n=pNMListView->iItem;
	if(num <= n || n<0)
	{
		return;
	}
	if(MessageBox("确认删除该项数据么  ","提示",MB_OKCANCEL+MB_ICONQUESTION)==1)
	{
		m_list.DeleteItem(n);
		num-=1;
		m_num=num;
		for(n;n<num+2;n++)
		{
			m_sc[n]=m_sc[n+1];
	        m_xf[n]=m_xf[n+1];
	        m_xfs[n]=m_xfs[n+1];
	        m_kms[n]=m_kms[n+1];
			m_cjs[n]=m_cjs[n+1];
		}
	//	Supdate();
	}
	*pResult = 0;
}

void CMyDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	SYSTEMTIME systime;
	::GetLocalTime(&systime);
	CString timenow;
	CString week;
	switch(systime.wDayOfWeek)
	{
	case 0:
		{
			week="一";
			break;
		}
	case 1:
		{
			week="二";
			break;
		}
	case 2:
		{
			week="二";
			break;
		}
	case 3:
		{
			week="三";
			break;
		}
	case 4:
		{
			week="四";
			break;
		}
	case 5:
		{
			week="五";
			break;
		}
	case 6:
		{
			week="六";
			break;
		}
	}
	timenow.Format("%d年%d月%d日 星期%s %2d时%2d分%2d秒",systime.wYear,systime.wMonth,systime.wDay,week,systime.wHour,systime.wMinute,systime.wSecond);
	GetDlgItem(IDC_STATIC_TIME)->SetWindowText(timenow);
	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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