基于C++MFC的学生成绩管理系统

1.题目要求

学期末,班级要统计该学期考试成绩,计算每个人的学分绩点,并按照学分绩点、平均分进行排序。假设本学期开设的课程共有n门课程,每门课程均有名称、学分数;学生考试成绩的学分绩点根据考试成绩核对如下:
100分 5绩点;95-99分 4.5绩点;90-94分 4个绩点;
85-89分 3.5绩点 80-84分 3绩点,以此类推。

学生学期绩点计算方法如下:
∑(课程获取的绩点数 * 学分数)/∑学分数

提示:
1、学期所学课程的记录文件为lesson.txt,该文件共三列,第一列为课程编号,第二列为课程名称,第三列为课程学分;
2、考试成绩记录文件为grade.txt,该文件第一行为标题行,记录考生学号、姓名、考试课程;从第二行开始记录考生对应课程的考试成绩,形式如下:
在这里插入图片描述
请编写程序完成如下界面与功能:
在这里插入图片描述
1)读取课程时,对课程文件进行读取;
2)读取成绩时对成绩文件进行读取;
3)在课程信息列表中显示所有课程的基本信息;
4)在学生考试成绩信息列表中显示学生考试信息;
5)在学会考试信息列表中可对学生成绩进行修改,修改完成后,点击修改,则完成修改工作;点击保存时,将学生考试信息保存;
6)当点击查询时,对学生考试情况进行查询,弹出如下对话框
在这里插入图片描述
可以以学号或姓名查询,在学号或者姓名编辑框中输入学号或者姓名,点击查询,在下方的列表框中显示学生考试信息。

7)点击上个界面中的计算绩点按钮时,弹出如下界面
在这里插入图片描述
计算出每个学生的绩点;选择一种排序方法(生序排序或者降序排序),点击排序后,对列表中的数据进行排序;
点击保存按钮时,将排序后的结果输出到一个文件中,该文件中共有三列数据,如列表框中所示。

2.需求分析

用户利用此学生成绩管理系统,应得以实现以下主要功能:
(1)、“读取课程”:将既定lesson.txt中的课程信息读入系统,并在课程信息列表中显示出来;
(2)、“读取成绩”:将既定grade.txt中的学生成绩读入系统,并在学生考试信息列表中显示出来;
(3)、“修改”:对考试信息列表中学生成绩进行修改,并将改动保存至grade.txt;
(4)、“计算绩点”:对各学生平均绩点进行计算,在绩点统计列表中显示出来,并能根据需要,依照平均绩点进行升序或降序排列;
(5)、“查询”:能通过学生的姓名或学号,查询其各科考试成绩,并在信息查询列表中显示出来。

3.总体设计

为实现上述功能,应按照以下流程图构建系统:
在这里插入图片描述
主要的类:

(1)欢迎界面对话框的类

// WelcomeDlg 对话框

class WelcomeDlg : public CDialogEx
{
   
	DECLARE_DYNAMIC(WelcomeDlg)

public:
	WelcomeDlg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~WelcomeDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_DIALOG_WELCOME };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
};

(2)登录界面对话框的类

// LoginDlg 对话框

class LoginDlg : public CDialogEx
{
   
	DECLARE_DYNAMIC(LoginDlg)

public:
	LoginDlg(CWnd* pParent = nullptr);  // 标准构造函数
	virtual ~LoginDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_DIALOG_LOGIN };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	CString m_szUsername;//Edit control控件值的变量,用于存储用户输入的“用户名”
	CString m_szPassward;//Edit control控件值的变量,用于存储用户输入的“密码”

(3)课程的类

class course
{
   
public:
	//cstr
	course() :code(""),cname(""), credit(0)
	{
   }
	course(CString _cname, CString _code, float _credit) :cname(_cname), code(_code), credit(_credit)
	{
   }
	//copy-cstr
	course(const course & c)
	{
   
		cname = c.cname;
		code = c.code;
		credit = c.credit;
	}
	//dstr
	virtual~course()
	{
   }
	//member of data
public:
	CString code; //课程编号
	CString cname; //课程名称
	float credit; //课程学分
};

(4)学生的类

class student
{
   
public:
	//cstr
	student() :sname(""), number(""), averpoint(0.0f), spoint(0.0f)
	{
   
		grade[3] = {
    0 };
	}
	student(CString _sname, CString _number, int _grade[3],float _averpoint, float _spoint) :sname(_sname), number(_number), averpoint(_averpoint), spoint(_spoint)
	{
   
		grade[0] = _grade[0];
		grade[1] = _grade[1];
		grade[2] = _grade[2];
	}
	//dstr
	virtual~student()
	{
   }
	//member of data
public:
	CString sname;//学生姓名
	CString number;//学生学号
	int grade[3];//假设共有三门考试科目,存储成绩的数组
	float averpoint;//学生的平均学分绩点GPA
	float spoint;//学生所有考试科目的总学分
};

(5)系统主界面对话框的类

// MainDlg 对话框

class MainDlg : public CDialogEx
{
   
	DECLARE_DYNAMIC(MainDlg)

public:
	MainDlg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~MainDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_DIALOG_MAIN };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	CListCtrl CourseList;//课程信息列表Listctrl的控件变量
	CListCtrl GradeList;//学生考试信息列表Listctrl的控件变量
CEdit m_edit;//供成绩修改用的Edit control
protected:
	CalPointDlg*cdlg;
	SearchDlg*sdlg;
public:
virtual BOOL OnInitDialog();
	afx_msg void OnBnClickedButtonGetcourse();//按“读取课程”时的操作
	afx_msg void OnBnClickedButtonGetscore();//按“读取成绩”时的操作
	afx_msg void OnBnClickedButtonCalculatepoint();//按“计算绩点”时的操作
	afx_msg void OnBnClickedButtonSearch();//按“查询”时的操作
afx_msg void OnBnClickedButtonChange();//按“修改”时的操作
	afx_msg void OnBnClickedButtonSave();//按“保存”时的操作
	afx_msg void OnLvnItemchangedListDisplayscore(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnNMDblclkListDisplayscore(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnEnKillfocusEditChange();//使供成绩修改用的Edit control失焦的操作
};

(6)“计算绩点”子界面对话框的类

// CalPointDlg 对话框

class CalPointDlg : public CDialogEx
{
   
	DECLARE_DYNAMIC(CalPointDlg)

public:
	CalPointDlg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CalPointDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_DIALOG_CALPOINT };
#endif

public:
	void calaverpoint();//计算学生平均学分绩点的函数
	float calgradepoint(int i);//计算单科绩点的函数
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	CListCtrl PointList;//绩点统计列表Listctrl的控件变量
	virtual BOOL OnInitDialog();
	afx_msg void OnBnClickedButtonSaverank();//按“保存”时的操作
	afx_msg void OnBnClickedRadioUp();//选择“升序排列”时的操作
	afx_msg void OnBnClickedRadioDown();//选择“降序排列”时的操作
	afx_msg void OnBnClickedButtonRamk();//按“排序”时的操作
};

(7)“查询”子界面对话框的类

// SearchDlg 对话框

class SearchDlg : public CDialogEx
{
   
	DECLARE_DYNAMIC(SearchDlg)

public:
	SearchDlg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~SearchDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_DIALOG_SEARCH };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	CListCtrl SearchList;//信息查询列表Listctrl的控件变量
	virtual BOOL OnInitDialog();
	afx_msg void OnBnClickedButtonSearch();//按“查询”时的操作
public:
	CString SearchNumber;//Edit control控件值的变量,用于存储待查询学生的“学号”
	CString SearchName;//Edit control控件值的变量,用于存储待查询学生的“姓名”
};

4.详细设计

具体函数代码:

(1)MFCApplication(学生成绩管理系统).cpp

BOOL CMFCApplication学生成绩管理系统App::InitInstance()
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值