GPA成绩换算器
来源:互联网 发布:北京眼镜店哪家好 知乎 编辑:程序博客网 时间:2024/04/30 10:02
GPA换算器,功能要点:
1.学生成绩可以由文件导入。
2.GPA标准可以选择,也可以手动导入。
3.GPA的计算过程易于监督控制。
4.计算的可读性强。
主界面:
类视图:
// GPADlg.h : 头文件//#pragma once// CGPADlg 对话框class CGPADlg : public CDialogEx{// 构造public:CGPADlg(CWnd* pParent = NULL);// 标准构造函数// 对话框数据enum { IDD = IDD_GPA_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:CString m_sPathName;double m_dS1;double m_dS2;double m_dS3;double m_dS4;double m_dS5;double m_dS6;double m_dS7;double m_dO1;double m_dO2;double m_dO3;double m_dO4;double m_dO5;double m_dO6;double m_dO7;double m_dO8;CString m_strAverage;CString m_strGPA;CComboBox m_cmbStandard;double m_dTotal;CListBox m_ListScore;afx_msg void OnMenuitemman();afx_msg void OnMenuExit();afx_msg void OnAbout();typedef struct stScore{double dOPoint;//原始分double dSPoint;//标准分double dNum;//学分};private:CArray<stScore,stScore&>arScore;double GetSDPoint(double dPoint);void SpliterString(CString str, double &a, double &b);void GatherData(void);void ChangeType(int nType);void SetEditRead(bool bReadOnly);public:afx_msg void OnClickedButtonOpen();afx_msg void OnClickedButtonOk();afx_msg void OnSelchangeComboStandard();};
// GPADlg.cpp : 实现文件//#include "stdafx.h"#include "GPA.h"#include "GPADlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);}// CGPADlg 对话框CGPADlg::CGPADlg(CWnd* pParent /*=NULL*/): CDialogEx(CGPADlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_sPathName = _T("");m_dS1 = 0.0;m_dS2 = 0.0;m_dS3 = 0.0;m_dS4 = 0.0;m_dS5 = 0.0;m_dS6 = 0.0;m_dS7 = 0.0;m_dO1 = 0.0;m_dO2 = 0.0;m_dO3 = 0.0;m_dO4 = 0.0;m_dO5 = 0.0;m_dO6 = 0.0;m_dO7 = 0.0;m_dO8 = 0.0;m_strAverage = _T("");m_strGPA = _T("");m_dTotal = 0.0;}void CGPADlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT_PATHNAME, m_sPathName);DDX_Text(pDX, IDC_EDIT_S1, m_dS1);DDX_Text(pDX, IDC_EDIT_S2, m_dS2);DDX_Text(pDX, IDC_EDIT_S3, m_dS3);DDX_Text(pDX, IDC_EDIT_S4, m_dS4);DDX_Text(pDX, IDC_EDIT_S5, m_dS5);DDX_Text(pDX, IDC_EDIT_S6, m_dS6);DDX_Text(pDX, IDC_EDIT_S7, m_dS7);DDX_Text(pDX, IDC_EDIT_O1, m_dO1);DDX_Text(pDX, IDC_EDIT_O2, m_dO2);DDX_Text(pDX, IDC_EDIT_O3, m_dO3);DDX_Text(pDX, IDC_EDIT_O4, m_dO4);DDX_Text(pDX, IDC_EDIT_O5, m_dO5);DDX_Text(pDX, IDC_EDIT_O6, m_dO6);DDX_Text(pDX, IDC_EDIT_O7, m_dO7);DDX_Text(pDX, IDC_EDIT_O8, m_dO8);DDX_Text(pDX, IDC_EDIT_AVERAGE, m_strAverage);DDX_Text(pDX, IDC_EDIT_GPA, m_strGPA);DDX_Control(pDX, IDC_COMBO_STANDARD, m_cmbStandard);DDX_Text(pDX, IDC_EDIT_TOTAL, m_dTotal);DDX_Control(pDX, IDC_LIST_SCORE, m_ListScore);}BEGIN_MESSAGE_MAP(CGPADlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND(ID_MENUITEMMAN, &CGPADlg::OnMenuitemman)ON_COMMAND(ID_menu_exit, &CGPADlg::OnMenuExit)ON_COMMAND(ID_ABOUT, &CGPADlg::OnAbout)ON_BN_CLICKED(IDC_BUTTON_OPEN, &CGPADlg::OnClickedButtonOpen)ON_BN_CLICKED(IDC_BUTTON_OK, &CGPADlg::OnClickedButtonOk)ON_CBN_SELCHANGE(IDC_COMBO_STANDARD, &CGPADlg::OnSelchangeComboStandard)END_MESSAGE_MAP()// CGPADlg 消息处理程序BOOL CGPADlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码m_cmbStandard.ResetContent();CString strTemp; for(int i=0;i<4;i++){if(i)strTemp.Format("%d",i);elsestrTemp = "无";m_cmbStandard.AddString(strTemp);}m_cmbStandard.SetCurSel(0);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void CGPADlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}}// 如果向对话框添加最小化按钮,则需要下面的代码// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,// 这将由框架自动完成。void CGPADlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CGPADlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}void CGPADlg::OnMenuitemman(){// TODO: 在此添加命令处理程序代码WinExec("notepad.exe EXPLAIN.HEP",SW_SHOW);}void CGPADlg::OnMenuExit(){// TODO: 在此添加命令处理程序代码DestroyWindow();}void CGPADlg::OnAbout(){// TODO: 在此添加命令处理程序代码CAboutDlg dlg;dlg.DoModal();}double CGPADlg::GetSDPoint(double dPoint){UpdateData();CArray<double,double&>arOPoint;CArray<double,double&>arSPoint;arOPoint.Add(m_dO1);arOPoint.Add(m_dO2);arOPoint.Add(m_dO3);arOPoint.Add(m_dO4);arOPoint.Add(m_dO5);arOPoint.Add(m_dO6);arOPoint.Add(m_dO7);arOPoint.Add(m_dO8);arSPoint.Add(m_dS1);arSPoint.Add(m_dS2);arSPoint.Add(m_dS3);arSPoint.Add(m_dS4);arSPoint.Add(m_dS5);arSPoint.Add(m_dS6);arSPoint.Add(m_dS7);if(dPoint >= arOPoint[0])return arSPoint[0];for(int i = 0;i < arOPoint.GetSize();i++){if(dPoint >= arOPoint[i])return arSPoint[i-1];}return 0;}void CGPADlg::SpliterString(CString str, double &a, double &b){CString strOne, strTwo;int ifind;str.TrimLeft(' ');str.TrimRight(' ');ifind = str.Find(' ');strOne = str.Left(ifind);strTwo = str.Right(str.GetLength()-ifind-1);a = atof(LPCTSTR(_T(strOne)));b = atof(LPCTSTR(_T(strTwo)));}void CGPADlg::GatherData(void){CString str;stScore temp;if(m_sPathName == "")return;arScore.RemoveAll();CFile file(m_sPathName,CFile::modeRead);CArchive ar(&file,CArchive::load);ar.ReadString(str);while(str != ""){SpliterString(str,temp.dOPoint,temp.dNum);temp.dSPoint = GetSDPoint(temp.dOPoint);arScore.Add(temp);ar.ReadString(str);}}void CGPADlg::ChangeType(int nType){switch(nType){case 0:case 4:m_dS1 = m_dS2 = m_dS3 = m_dS4 = m_dS5 = m_dS6 = m_dS7 = 0;m_dO1 = m_dO2 = m_dO3 = m_dO4 = m_dO5 = m_dO6 = m_dO7 = m_dO8 = 0;break;case 1:m_dS1 = 4;m_dS2 = 3;m_dS3 = 2;m_dS4 = 1;m_dS5 = m_dS6 = m_dS7 = 0;m_dO1 = 100;m_dO2 = 90;m_dO3 = 80;m_dO4 = 70;m_dO5 = 60;m_dO6 = m_dO7 = m_dO8 = 0;break;case 2:m_dS1 = 4.3;m_dS2 = 4;m_dS3 = 3.7;m_dS4 = 3.3;m_dS5 = 3.0;m_dS6 = 2.7;m_dS7 = 2.3;m_dO1 = 100;m_dO2 = 90;m_dO3 = 85;m_dO4 = 80;m_dO5 = 75;m_dO6 = 70;m_dO7 = 65;m_dO8 = 60;break;case 3:m_dS1 = 4;m_dS2 = 3;m_dS3 = 2;m_dS4 = m_dS5 = m_dS6 = m_dS7 = 0;m_dO1 = 100;m_dO2 = 85;m_dO3 = 70;m_dO4 = 60;m_dO5 = m_dO6 = m_dO7 = m_dO8 = 0;break;}}void CGPADlg::SetEditRead(bool bReadOnly){((CEdit *)GetDlgItem(IDC_EDIT_S1))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S2))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S3))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S4))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S5))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S6))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_S7))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O1))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O2))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O3))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O4))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O5))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O6))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O7))->SetReadOnly(bReadOnly);((CEdit *)GetDlgItem(IDC_EDIT_O8))->SetReadOnly(bReadOnly);}void CGPADlg::OnClickedButtonOpen(){// TODO: 在此添加控件通知处理程序代码CFileDialog fdlg(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT,"成绩文件|*.dat;*.txt|",NULL);if(fdlg.DoModal() == IDOK){m_sPathName = fdlg.GetPathName();}UpdateData(FALSE);}void CGPADlg::OnClickedButtonOk(){// TODO: 在此添加控件通知处理程序代码double dGPAall = 0;double dAvgall = 0;GatherData();int i = 0;int size = arScore.GetSize();if(size == 0){return;}m_ListScore.ResetContent();m_ListScore.AddString("序号 成绩 学分 标准");m_ListScore.AddString("-----------------------------------------");m_dTotal = 0;while(i<size){CString str;m_dTotal += arScore.GetAt(i).dNum;dGPAall += arScore.GetAt(i).dSPoint*arScore.GetAt(i).dNum;dAvgall += arScore.GetAt(i).dOPoint*arScore.GetAt(i).dNum;str.Format("%d %0.2f %0.2f %0.2f",i+1,arScore.GetAt(i).dOPoint,arScore.GetAt(i).dNum,arScore.GetAt(i).dSPoint);i++;m_ListScore.AddString(str);}m_strGPA.Format("%.2f",dGPAall/m_dTotal);m_strAverage.Format("%.2f",dAvgall/m_dTotal);UpdateData(FALSE);}void CGPADlg::OnSelchangeComboStandard(){// TODO: 在此添加控件通知处理程序代码int nIndex = m_cmbStandard.GetCurSel();if(4 == nIndex)SetEditRead(false);elseSetEditRead(true);ChangeType(nIndex);UpdateData(FALSE);}
运行界面:
0 0
- GPA成绩换算器
- 英语四级成绩换算~总结篇
- GPA
- GPA
- GPA
- GPA
- GPA
- GPA
- GPA
- GPA
- GPA
- GPA
- 关于黑客改成绩出国绩点GPA不够高可以找黑客修改GPA吗
- SQL存储过程进行成绩绩点换算
- 2014多校1009--hdu4968--Improving the GPA(平均成绩的最大最小平均学分)
- px,em单位换算器
- GPA算法
- HDU GPA
- 中国佛学66句震撼世界的禅语(转贴)
- java数据类型详解
- C++二维动态数组的创建与删除
- BZOJ1503【NOI2004】郁闷的出纳员
- centos 关闭防火墙
- GPA成绩换算器
- HDOJ 题目Graph’s Cycle Component(并查集)
- 23、Android Activity中启动另一应用程序的方法,无需得到类名
- 第一行代码笔记7:调试和日志
- 技术博客中的唯一一篇非技术博文
- 深入浅出NodeJS笔记(一)
- nodejs之async异步编程
- 【随笔】C语言_基本概念
- ASIHTTPRequest详解