精华内容
下载资源
问答
  • 华中科技大学GPA计算, 包括华科, 标准, 北大算法
  • 基于Python的GPA计算器,可以直接通过导入exl表格读取信息,在你计算GPA,只需要按照实例表格写入自己的数据,就可以使用啦。
  • GPA Converter

    2011-06-16 05:01:05
    本软件用来将国内百分制的分数转化为gpa。用户可以选择多个大学的转化标准
  • 网页版GPA计算器

    千次阅读 2017-04-20 14:09:22
    按格式要求(支持空格、分号、制表符、逗号), 上传文件(纯文本) 或 复制粘贴到文本框 即可计算, 7种算法(标准、北大等)可供选择, 拒绝手输。 现在貌似90%的线上GPA计算器都要手动一项项地填写, 不利于搞事...
    痛苦的申请过程还没完, GPA计算更痛苦, 所以制作了一个 网页的 GPA 计算器

    GPA计算器


    按格式要求(支持空格、分号、制表符、逗号), 上传文件(纯文本,现在支持 excel) 或 复制粘贴到文本框 即可计算, 8种算法(标准、北大等)可供选择, 拒绝手输。

    现在貌似90%的线上GPA计算器都要手动一项项地填写, 不利于搞事(各种魔改、侥幸),


    github地址


    20170630更新, 支持 excel文件上传



    作者:简单名
    链接:https://zhuanlan.zhihu.com/p/26474934
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • GPA成绩换算器

    千次阅读 2015-03-21 14:08:48
    GPA换算器,功能要点: 1.学生成绩可以由文件导入。 2.GPA标准可以选择,也可以手动导入。 3.GPA的计算过程易于监督控制。 4.计算的可读性强。 主界面: 类视图:

    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);
    		else
    			strTemp = "无";
    
    		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);
    	else
    		SetEditRead(true);
    	ChangeType(nIndex);
    	UpdateData(FALSE);
    }
    



    运行界面:



    展开全文
  • 出国留学GPA计算器

    2010-11-03 21:30:57
    本程序是针对出国同学计算GPA设计的,里面提供了多种算法:标准4.0算法,北大4.0算法,加拿大4.3算法,中科大4.3算法,上海交大4.3算法,台湾4.0算法等等,还可以自己设计算法计算。
  • GPA以及计算

    2008-09-30 09:28:00
     申请人在国内的学习成绩,无论是高中成绩还是大学成绩,采取两种形式来表现,一种是GPA(Grade Point Average)即“平均成绩点数”,另一种是“Rank”即:“毕业名次”。这两种形式是美国大多数学校用来衡量申请人...

          英文全称:grade-point average

      简单来说就是平均成绩。

      申请人在国内的学习成绩,无论是高中成绩还是大学成绩,采取两种形式来表现,一种是GPA(Grade Point Average)即“平均成绩点数”,另一种是“Rank”即:“毕业名次”。这两种形式是美国大多数学校用来衡量申请人学业成绩的标准,通过了解申请人以前的学习名次和学习成绩来了解其学业潜力。

      (一) 平均成绩点数-GPA

      美国多数大学对申请人GPA都有最低规定,不够最低GPA要求的不予考虑。GPA计算方法是把各科成绩按等级乘以学分再以总学分除之。以百分制为例,90至100为A等=4.0,80至89为B等=3.0,70至79为C等=2.0,60至69为D等=1.0,60分以下为F等=0点。例如某学生的五门功课的学分和成绩为:A课程四个学分,成绩92(A),应得点数为4*4=16,B课程三个学分,成绩80(B),应得点数为3*3=9,C课程两个学分,成绩98(A),应得点数为2*4=8,D课程六个学分,成绩70(c),应得点数为6*2=12,E课程三个学分,成绩89(B),应得点数为3*3=9。以上五项成绩GPA:

      GPA=[(4*4)+(3*3)+(2*4)+(6*2)+(3*3)]/(4+3+2+6+3)=3.00

      总平均基点(Overall GPA)是将全部所修学科按以上方法计算出来的点数,最后两年平均基点( GPA for the last two years)即将最后两年所修的各科按上述方法计算出来的点数。

      在美国90%的学校GPA计算方法为4.00制(4.00 scale)的,又有1%的学校会采取5.00制。即A等成绩为5,B等为4,C等为3,D等为2,F等为1,这些学校的最低入学标准也就相应提高了。

      中国学生在申请时,应按照自己原先学校采用的GPA制提供成绩,同时注明采用了哪一种GPA制,对于我国学生很不利的是中国大部分学校的评分相当严,所以很多优秀学生GPA换算出来以后还不到3.0,在有些大学里班上前5名的学生平均成绩可能会在75左右。而有的学生虽然平均成绩上了80但用上述方法一计算也不到3.0-这取决与90分以上科目和80分以下科目的多少。而且在中国内部,计算GPA的方法也不尽相同,例如对外经济贸易大学,清华大学采取以下折算方法:90-A,80~90-B,70~80-C...有些学校则采取另一种方法:85以上为4.0, 75分以上为3.0. 65分以上为2.0...所以有的学校的GPA较其他学校的GPA偏高--That is unfair!!!

      (二)毕业名次--RANK

      有经验的美国学校招生和评定奖学金资助的人都十分清楚成绩是一个相对的数字,并不能说明一名学生的学业成绩。因为每个学校的评分标准各不相同,即使在同一所学校,题目的难易程度也可能造成成绩的普遍上升或下滑。因此,美国学校更加重视考试名次及百分比。考试的名次在说明时应提及全班或是全系的总人数“Rank 15th out of 272 in the Dept of Politics",百分比是将名次作为分子,总人数作为分母得出的百分比值。或是将百分比分为2%以上(upper2%),5%以上(upper5%),10%以上(upper10%)...几个等级,然后请导师注明申请人所居那种等级。

    转载于:https://www.cnblogs.com/liuzhengliang/archive/2008/09/30/1302374.html

    展开全文
  • 申请留学必备,傻瓜型GPA计算工具,多种计算标准可选。 看看你成绩吧
  • 一、目的:此文通过一个GPA计算器的制作,介绍基于对话框的应用程序的编程... 2.GPA标准可以选择,也可以手动输入。  3.GPA的计算过程易于监督控制。  4.计算结果的可读性强。 三、关键技术与算法:  1.CF...

    一、目的:此文通过一个GPA计算器的制作,介绍基于对话框的应用程序的编程方法、常用控件的编程技巧以及控件外观的更改技巧。

    二、功能描述:所谓GPA计算器,即进行GPA换算。

      功能要求由如下几点:

      1.学生成绩可以由文件导入。

      2.GPA标准可以选择,也可以手动输入。

      3.GPA的计算过程易于监督控制。

      4.计算结果的可读性强。

    三、关键技术与算法:

      1.CFile和CArchive

      CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件、内存文件和Socket文件。

      打开文件方法:

    CFile(LPCTSTR lpszFileName, UINT nOpenFlags);

    其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径。

      一个CArchive对象与一个文件相连,充当了文件与要读写的数据结构之间的桥梁和管道的角色。它在文件和要读写的数据结构之间设置了一个缓冲区,提供数据缓冲机制。CArchive的构造函数为:

    CArchive(CFile *pFile, UINT nMode, int nBufSize=4096, void *lpBuf=NULL)

    其中,pFile表示CArchive所基于的文件,nMode制定CArchive的存取模式。

      本实例用上述两个类完成了对成绩文件的读取。

      2.公共对话框

      本实例用到了CFileDialog,它是文件对话框,提供从磁盘目录结构中选择一个文件的对话框界面(经常用于打开文件或保存文件)。

    四、程序实现:

      1.创建项目:项目名为GPACalculator,基于对话框,其他默认。

      2.界面设计:打开对话框资源IDD_GPACALCULATOR_DIALOG,该对话框将是程序运行时的主界面。

      2.1 下面按要求添加控件:

    控件类型             ID                          属性设置
    Button              IDC_BUTTON_OPEN             Caption设为“浏览...”
    Button              IDC_BUTTON_OK               Caption设为“统计”
    Static Text         默认                        Caption设为“参比标准”
    Static Text         默认                        Caption设为“标准分”
    Static Text         默认                        Caption设为“原始分”
    Static Text         默认                        Caption设为“统计信息”
    Static Text         默认                        Caption设为“分数列表”
    Static Text         默认                        Caption设为“加权平均分”
    Static Text         默认                        Caption设为“GPA”
    Static Text         默认                        Caption设为“总学分”
    Edit Box            IDC_EDIT_PATHNAME           默认
    Edit Box            IDC_EDIT_S1                 ReadOnly
    Edit Box            IDC_EDIT_S2                 ReadOnly
    Edit Box            IDC_EDIT_S3                 ReadOnly
    Edit Box            IDC_EDIT_S4                 ReadOnly
    Edit Box            IDC_EDIT_S5                 ReadOnly
    Edit Box            IDC_EDIT_S6                 ReadOnly
    Edit Box            IDC_EDIT_S7                 ReadOnly
    Edit Box            IDC_EDIT_O1                 ReadOnly
    Edit Box            IDC_EDIT_O2                 ReadOnly
    Edit Box            IDC_EDIT_O3                 ReadOnly
    Edit Box            IDC_EDIT_O4                 ReadOnly
    Edit Box            IDC_EDIT_O5                 ReadOnly
    Edit Box            IDC_EDIT_O6                 ReadOnly
    Edit Box            IDC_EDIT_O7                 ReadOnly
    Edit Box            IDC_EDIT_O8                 ReadOnly
    Edit Box            IDC_EDIT_AVERAGE            ReadOnly
    Edit Box            IDC_EDIT_GPA                ReadOnly
    Edit Box            IDC_EDIT_TOTAL              ReadOnly
    Group Box           默认                        Caption设为“第一步:载入分数文件”
    Group Box           默认                        Caption设为“第二步:设置参比标准”
    Group Box           默认                        Caption设为“第三步:统计并显示”
    Combo Box           IDC_COMBO_STANDARD          DropList
    List Box            IDC_LIST_SCORE              默认

    看下效果图:

    这里需要说明几点:

    1>控件配置表与图片还是比较好对应的。两个按钮及一些静态文本框及三个组框、一个组合框、一个列表框,编辑框有一堆:第一个对应第一步里的那个pathname,然后IDC_EDIT_Sx对应标准分的那七个框框,IDC_EDIT_Ox对应原始分的那八个框框,后面是第三步里的三个编辑框,对应清晰就ok了。

    2>至于那个List Box,默认属性里不选择sort(分类),即对于列表框的数据不分类排序。

    3>这里得提点下Combo Box的用法。注意在设计ComboBox时,点下向下箭头(小三角形),即(注意看那蓝色的小正方形是否空心):

    然后将控件下边(那个实心的小正方形)向下拉,即:

    这样才能显示出ComboBox的下拉的项。

      2.2 打开ClassWizard,针对IDD_GPACALCULATOR_DIALOG所指向的类CGPACalculatorDlg,为控件添加类成员变量,按下面的要求:

    控件ID                     变量名                 数据类型
    IDC_EDIT_PATHNAME         m_sPathName            CString
    IDC_EDIT_S1               m_dS1                  double
    IDC_EDIT_S2               m_dS2                  double
    IDC_EDIT_S3               m_dS3                  double
    IDC_EDIT_S4               m_dS4                  double
    IDC_EDIT_S5               m_dS5                  double
    IDC_EDIT_S6               m_dS6                  double
    IDC_EDIT_S7               m_dS7                  double
    IDC_EDIT_O1               m_dO1                  double
    IDC_EDIT_O2               m_dO2                  double
    IDC_EDIT_O3               m_dO3                  double
    IDC_EDIT_O4               m_dO4                  double
    IDC_EDIT_O5               m_dO5                  double
    IDC_EDIT_O6               m_dO6                  double
    IDC_EDIT_O7               m_dO7                  double
    IDC_EDIT_O8               m_dO8                  double
    IDC_EDIT_AVERAGE          m_strAverage           CString
    IDC_EDIT_GPA              m_strGPA               CString
    IDC_EDIT_TOTAL            m_dTotal               double
    IDC_COMBO_STANDARD        m_cmbStandard          CComboBox
    IDC_LIST_SCORE            m_ListScore            CListBox

      3.代码编写:

      3.1 添加菜单控制

      3.1.1 制作菜单:vc菜单->插入->资源->选择menu,点击新建->制作如下(选中虚线框,鼠标右键点击属性):

      

    其中,“退出”的ID设为ID_MENUITEM_EXIT,“使用说明”的ID设为ID_MENUITEM_MAN,“关于”的ID设为ID_MENUITEM_ABOUT。菜单名字设为IDR_MAIN_MENU。

      3.1.2 装载菜单:打开主界面IDD_GPACALCULATOR_DIALOG的属性对话框,在menu的列表框中选中相应的菜单资源。如下:

      3.1.3 编写菜单代码。使用ClassWizard针对菜单项向对话框类中增加函数。

      1>【使用说明】菜单:

    void CGPACalculatorDlg::OnMenuitemMan() 
    {
        // TODO: Add your command handler code here
        WinExec("notepad.exe EXPLAIN.HEP",SW_SHOW);
    }

      2>【关于】菜单:

    void CGPACalculatorDlg::OnMenuitemAbout() 
    {
        // TODO: Add your command handler code here
        CAboutDlg dlg;
        dlg.DoModal();
    }

      3>【退出】菜单:

    void CGPACalculatorDlg::OnMenuitemExit() 
    {
        // TODO: Add your command handler code here
        DestroyWindow();
    }

      3.2 分数存储结构

      在GPACalculatorDlg.h里添加读取分数的数据结构:

    typedef struct stScore{
        double dOPoint;//原始分
        double dSPoint;//标准分
        double dNum;//学分
    }stScore;

      在StdAfx.h中添加下列头文件以支持CArray的使用:

    #include <afxtempl.h>

    至于位置,可以写这里:

    #include <afxwin.h>         // MFC core and standard components
    #include <afxext.h>         // MFC extensions
    #include <afxdisp.h>        // MFC Automation classes
    #include <afxdtctl.h>        // MFC support for Internet Explorer 4 Common Controls
    #include <afxtempl.h>
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h>            // MFC support for Windows Common Controls
    #endif // _AFX_NO_AFXCMN_SUPPORT

      在GPACalculatorDlg.h的类GPACalculatorDlg的定义中添加私有对象arScore,用作分数存储:

    CArray<stScore,stScore&> arScore;

      3.3 为类GPACalculatorDlg添加一些自定义功能函数(都是私有的。在类GPACalculatorDlg.h文件里添加函数声明,在类GPACalculatorDlg.cpp文件里添加函数实现):

      1>GetSDPoint:根据参比标准,将原始分转化为标准分。

    double GetSDPoint(double dPoint);
    double CGPACalculatorDlg::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=1;i<arOPoint.GetSize();i++){
            if(dPoint>=arOPoint[i])
                return arSPoint[i-1];
        }
        return 0;
    }

      2>SpliterString:分数文件是以“原始分 学分”的方式给出的,需要一个功能函数来将这个字符串拆分成两个double型的原始分和学分。

    void SpliterString(CString str,double &a,double &b);
    void CGPACalculatorDlg::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(strOne));
        b=atof(LPCTSTR(strTwo));
    }

      3>GatherData:将分数文件的信息导入到分数存储结构,当m_sPathName="",即无分数文件时,则导入失败。

    void GatherData();
    void CGPACalculatorDlg::GatherData(){
        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);
        }
    }

      4>ChangeType:根据不同的输入值,转变成不同的参比标准。

    void ChangeType(int nType);
    void CGPACalculatorDlg::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;
        }
    }

      5>SetEditRead:输入为TRUE时,参比标准的编辑框将被设为只读模式;而输入为FALSE时,参比标准的编辑框将被设为可写模式。

    void SetEditRead(bool bReadOnly);
    void CGPACalculatorDlg::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);
    }

      3.4 控件事件:借助ClassWizard添加控件对应的处理函数。

      1>组合框:可以通过下拉菜单选择不同的参比标准。

      需要做两步:

      首先,为组合框设初始值,否则下拉菜单里是空的。在CGPACalculatorDlg.cpp文件里的OnInitDialog()初始化函数里添加代码为组合框设初始值:

    BOOL CGPACalculatorDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        // IDC_COMBO_STANDRD
        m_cmbStandard.AddString("0");
        m_cmbStandard.AddString("1");
        m_cmbStandard.AddString("2");
        m_cmbStandard.AddString("3");
        m_cmbStandard.AddString("用户自定义");
        // Add "About..." menu item to system menu.
    
        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
            ......

      然后,还需要为组合框添加处理函数:

    void CGPACalculatorDlg::OnSelchangeComboStandard() 
    {
        // TODO: Add your control notification handler code here
        int nIndex=m_cmbStandard.GetCurSel();
        if(4==nIndex)
            SetEditRead(false);
        else
            SetEditRead(true);
        ChangeType(nIndex);
        UpdateData(false);
    }

      2>【浏览...】按钮:弹出“打开”对话框以供选择磁盘上的分数文件。添加的处理函数如下:

    void CGPACalculatorDlg::OnButtonOpen() 
    {
        // TODO: Add your control notification handler code here
        CFileDialog fdlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"成绩文件|*.dat;*.txt|",NULL);
        if(fdlg.DoModal()==IDOK){
            m_sPathName=fdlg.GetPathName();
        }
        UpdateData(false);
    }

      3>【统计】按钮:单击该按钮计算各项参数值,并把分数显示在列表框。添加的处理函数如下:

    void CGPACalculatorDlg::OnButtonOk() 
    {
        // TODO: Add your control notification handler code here
        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("%.2d    %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);
    }

      3.5 界面外观

      若对界面控件默认的外观感到不满意,可以截取消息加以控制。本程序截取VM_CTLCOLOR消息来达到修改控件外观颜色的目的。操作如下:

    处理函数为:

    HBRUSH CGPACalculatorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        
        // TODO: Change any attributes of the DC here
        switch(pWnd->GetDlgCtrlID()){
        case IDC_EDIT_S1:
        case IDC_EDIT_S2:
        case IDC_EDIT_S3:
        case IDC_EDIT_S4:
        case IDC_EDIT_S5:
        case IDC_EDIT_S6:
        case IDC_EDIT_S7:
        case IDC_EDIT_O1:
        case IDC_EDIT_O2:
        case IDC_EDIT_O3:
        case IDC_EDIT_O4:
        case IDC_EDIT_O5:
        case IDC_EDIT_O6:
        case IDC_EDIT_O7:
        case IDC_EDIT_O8:
            pDC->SetBkColor(RGB(255,255,255));
            pDC->SetTextColor(RGB(0,0,255));
            break;
        case IDC_LIST_SCORE:
            pDC->SetBkColor(RGB(255,255,255));
            pDC->SetTextColor(RGB(0,0,255));
            break;
        case IDC_EDIT_AVERAGE:
        case IDC_EDIT_GPA:
        case IDC_EDIT_TOTAL:
            pDC->SetBkColor(RGB(255,255,255));
            pDC->SetTextColor(RGB(255,0,255));
        }
        // TODO: Return a different brush if the default is not desired
        return hbr;
    }

    五、运行结果:

      1.使用说明:

      1.1 GPA计算器要求文件输入,输入格式:[spaces]课程成绩<spaces>学分数[spaces]

      eg:

    94 6.5
    62 1.5
    85 2.5
    72 3
    90 2
    93 1.5
    87 3
    94 1.5

      1.2 GPA计算器提供了几种GPA参考分数标准,可通过下拉列表选择。若程序中提供的标准(0/1/2/3)不能满足需要的话,可选择“用户自定义”,可以自行在编辑框里填入自己所需的标准。

      1.3 选择分数文件和参比标准后,单击【统计】按钮即可求出相应的加权平均分、GPA及总学分等。程序会显示分数文件中的分数,可据此核对计算结果是否正确。

      2.程序演示:

    六、小结

      麻雀虽小,五脏俱全。

    展开全文
  • 这里采用标准计算公式 S:学科分数 P:学科绩点 n:学科数目 下面举个例子,比如: 数学:90 (绩点4); 语文: 80 (绩点3); 英语: 70 (绩点2); GPA=[(904+803+80*2)*4]/[(4+3+2)*100] = 3.29 相关代码如下: #score...
  • Checkstyle 所有的东西都包括PSR-2标准等等 PMD Checkstyle,复杂度和代码大小 干燥 从检测到的重复代码phpcpd代替flay 成绩如何计算? 什么是GPA(平均绩点)? 所有年级都遵循GPA(平均绩点)的概念来确定您在...
  • 【基础练习】GPA计算

    2015-01-13 16:25:57
    由于最近刚刚从六输入输出转为标准输入输出 练手 #include using namespace std; int main(){ int n,a,xuefen=0; double b,chengji=0.0; scanf("%d",&n); for (int i=1;i;i++){ scanf("%d%lf",&a,&b
  • GPA算法器支持标准4.0算法和各种改进4.0 4.3算法,还可以自定义算法 计算时可以加载文本文件,也可以在windows窗口添加项目,灵活友好的界面,是你出国留学的好帮手
  • 平均学分绩点(Grade Point Average,即GPA)是以学分与绩点作为衡量学生学习的量与质的计算单位,以取得一定的学分和平均学分绩点作为毕业和获得学位的标准,实施多样的教育规格和较灵活的教学管理制度。...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 使用最广的短距离无线标准之一 重新定义蓝牙技术:低功耗 全新的蓝牙版本 低功耗蓝牙,高速蓝牙,传统蓝牙 logo 蓝牙4.0与传统蓝牙的关系 通信方式 蓝牙低功耗特性 高可靠性 快速连接 ...
  • 普211标准三维EE零基础转CS申

    千次阅读 2016-05-09 13:50:18
    gjw931110 4天之前 T: 102(19) G: 324+3 ...基本已经确定去哪个学校了,来回报地里,写一篇总结帖,在地里,我这...先说一下背景,最后用来申请的三维是,托福102,口语19分,GRE324,写作3分,GPA87/3.64,学
  • 采用数组保存中间变量,修改后一次性重新写入#include "stdafx.h"  #include // Write a program that makes a virtual GET system. ...// A student should consist of a first name, last name,age, GPA
  • SAS PES是使用WebExtension标准的扩展,仅适用于新加坡美国学校的学生。 该扩展在SAS中使用Powerschool时提供了各种增强功能。 无论扩展名计算什么,教师都可以覆盖最终成绩。 不要依赖此扩展中的数据 产品特点 ...
  • 利用两种不同的叠前反演方法来确定构造煤的分布,即基于Shuey方程的弹性波阻抗反演与基于Aki-Richard方程的同步...在同步反演解释中,则通过LMR变换获得了LR与MR两个岩性指示因子,并将LR≤2 GPa与MR≤1 GPa作为判断标准
  • 用伐倒木取样,按国家标准制作试件,采用SANS型微机控制电子万能试验机测定木材抗弯弹性模量(Modulus of elasticity,MOE),研究了18年生大花序桉Eucalyptus cloeziana 11个种源木材MOE在种源间、单株间、树干高度...
  • 在广义梯度近似(GGA)和GGA+U(在位库仑势)下,...根据晶体机械稳定标准得到YPd3B和YPd3C的失稳临界压强分剐约为16.5GPa和23GPa.由Pugh经验关系可知YPdaX(X=B,C)均属于韧性材料,且YPd3B的韧性略高于YPd3C.电子能带结构分
  • 小峰学习非常努力,想要评奖学金,而奖学金评定的一大标准就是绩点(GPA )高低。 单个科目的 GPA 的计算公式如下:f(x)=min(5.0,(x−45)×0.1) ,其中 x表示课程成绩,众所周知当 x<60 时 f(x)=0 。 在评定奖学...
  • 实验的温度为800℃,围压为0.2 GPa,应变量为10%,应变速率为10-5/s。实验结果表明,变形后样品中不同部位石英颗粒的激光拉曼光谱与标准的石英光谱相比较发生了明显的变化,具体表现为:挤压带中,石英颗粒的光谱...
  • 硬度、应力、表面粗糙度及热稳定性的测试表明,随着运载气体流量的增加,薄膜的应力分布、表面粗糙度和热稳定性都有很大程度的改善,但也导致薄膜的硬度下降,当运载气体的流量为30 mL/min(标准状态)时,Si 掺杂DLC ...
  • 基本信息 五百丁 汉族 广东广州 13800138000 bd@500d.me 求职意向 Net软件开发工程师 教育背景 2014.08-2015.08 五百丁信息科技 广州 有 公司 Net软件开发工程师 GPA 3.8/4.0 2011.08-2013.02 广州五小丁信息科技有 ...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

标准gpa