实验四 成绩管理程序设计与实现
一、实验目的与要求
实验目的:锻炼面向对象编程与文件操作能力 实验要求:
1、熟悉C++程序设计。
2、运用OO知识对实验题目进行分析和设计。 3、进行程序编写和调试工作。 二、实验内容
设计一个程序实现对学生成绩的管理,要求可以对指定的文件进行操作,可将多个文件组成一个文件。程序设计功能及要求:
1、输入:学生的基本信息,包括学号、姓名、C语言成绩、高等数学成绩等。
原始数据文件格式 (具体数据和项目自行编写): 学号 姓名 1 张三 2 李四
英语
C语言 高等数学????
76 89 78 ? ? ?
2、查询:可以按学号、姓名等进行成绩查询。 3、删除:删除某条记录。
4、计算:计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录后。
5、统计:统计每科成绩分布情况,统计情况加到文件最后。 输出数据文件(由程序自动生成)
学号 姓名 英语 C语言 高等数学 ???平均成绩 名次 1 张三 76 89 78 2 李四 ?. ?. ?.
统计情况:
????
分数段 英语 C语言 高等数学 ???????.
? ? ? ?
<60 2 60~69 8 70~79 5 80~89 10
平均分 78 ? 三、实验方法 1、数据结构的设计
根据对题目的要求,设计合适的类或结构类型、以及各种对象、变量。 2、设计各成员函数,分别实现以下功能: 1)学生信息的录入
从键盘录入学生的基本信息,并将其保存至学生成绩文件。 2)学生信息查询
从键盘输入姓名或学号,在学生成绩文件中实现按学号、姓名的查找,如果存在,则输出该学生的其他信息,如不存在,输出不存在此学生。 3)学生信息的删除
从键盘输入要删除的学生学号或姓名,在学生成绩文件中删除该学生的基本信息。 4)成绩的计算
计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录后; 5)统计
统计每科成绩分布情况,统计情况加到学生成绩文件最后。 3、界面的设计
采用菜单或字符界面的形式,方便功能的选择。 四、参考资料
1、 创建基于对话框的mfc project 2、 涉及的新控件
List control(property->style->view->report)
3、 数据存储:可以考虑定义结构体或者类,在相关类中手动增加用于保存成绩数据的公有数据成员,注意在构造函数中初始化
class CListControlDlg : public CDialog {
// Construction public:
CListControlDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CListControlDlg)
enum { IDD = IDD_LISTCONTROL_DIALOG }; CListCtrl m_list; CString m_Number; CString m_Name; int
m_Math;
int int
m_English; m_Politic;
//}}AFX_DATA
// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CListControlDlg) protected:
virtual void DoDataExchange(CDataExchange* pDX);
//
DDX/DDV
support
//}}AFX_VIRTUAL
struct Student stu[50];//用于保存最多50个学生的成绩 int m_length;//实际的保存的学生成绩记录数 // Implementation
??????????????.. }
4、 List control初始化
在初始化函数BOOL CListControlDlg::OnInitDialog()中进行相关初始化,显示list control中的列标题
m_list.InsertColumn(0,\学号\
m_list.InsertColumn(1,\姓名\m_list.InsertColumn(2,\数学\m_list.InsertColumn(3,\英语\m_list.InsertColumn(4,\政治\m_list.InsertColumn(5,\总分\m_list.InsertColumn(6,\平均分\m_list.InsertColumn(7,\名次\
说明:InsertColumn参数1:第**列,参数2:列标题,参数3,:对齐方式(LVCFMT_CENTER,LVCFMT_LEFT等),参数4:列宽 5、 退出/取消函数
调用CDialog::OnCancel();或CDialog::OnOK(); 6、 CListControlDlg::OnSave()
(1) 用户通过edit控件输入的数据传给类的数据成员,保存到数组
中
(2) 显示在list control中
m_list.InsertItem(m_length,m_Number);//插入第m_length条新记录 m_list.SetItemText(m_length,1,m_Name);//该记录的具体列的值,参数1:第m_length条记录,参数2:该记录的第**列,参数3:具体内容,CString类型 7、 排序
显示排序后的数据需要重新刷屏,即先删除所有list control中的记录,再重新插入
m_list.DeleteAllItems(); m_list.DeleteItem(int nItem); m_list.DeleteColumn(int col);