📄 学分绩点计算dlg.cpp
字号:
// 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 + -