《面向对象程序设计》课程设计-学生成绩管理系统.doc
《《面向对象程序设计》课程设计-学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课程设计-学生成绩管理系统.doc(18页珍藏版)》请在冰豆网上搜索。
![《面向对象程序设计》课程设计-学生成绩管理系统.doc](https://file1.bdocx.com/fileroot1/2022-10/4/df61b569-a271-40ab-a6fd-262bfc7cb3f2/df61b569-a271-40ab-a6fd-262bfc7cb3f21.gif)
《面向对象程序设计》课程设计
09计应109821122谢燕清
一.课题设计内容、具备的功能
(一)设计内容
1.性质
本课程是学生在学习完《程序设计基础》、《面向对象程序设计》课程后,为提高学生使用面向对象的语言解决实际问题的能力设置的一门实践性课程,是计算机科学与技术专业计算机应用方向的必修课。
2.目的
本课程实验教学的目的是:
1)使学生通过实践环节深入理解和掌握课堂教学内容,进一步加深理解面向对象的基本理论,掌握基本方法、基本技术。
2)通过设计一个功能比较完整的,有实际应用价值的应用软件,使学生了解采用面向对象技术开发软件的全部过程,掌握采用面向对象技术开发软件的方法。
提高学生使用面向对象方法,和面向对象的语言解决实际问题的能力。
3)通过本课程设计,为后续《数据库系统原理与应用》《数据结构》《编译原理》等课程打下扎实的专业基础。
3.任务
学生成绩管理系统,系统存储以下信息:
1)学生基本信息和成绩;
2)学生的人数。
4.要求
1)根据题目要求,对问题进行需求调查和分析,识别类和对象,合理设计类和对象;
2)合理设计程序结构,系统各项功能要求在函数中实现。
在主函数中设计菜单,通过菜单调用这个函数;
3)输入输出要求由提取运算符和插入运算符的重载函数实现;公用过程尽可能设计成函数或函数模板;
4)设计过程中必须考虑程序的健壮性,在关键的地方必须要有容错处理。
(二)具备的功能
系统功能:
1.系统初始化包括上述文件的创建和读取(二进制或ASCII文件);
2.增加学生新增加学生信息和成绩;
3.删除学生根据学号删除相应学生信息;
4查询根据学号,查询相应学生信息;
5.排序根据学生学号、姓名、成绩对学生信息排序,并显示;
6.修改修改指定学号的学生数据。
二.模块(函数)的划分、各模块(函数)的功能、采用的自定义的数据类型
(一)模块(函数)的划分
1.类的定义:
student.h
1)定义抽象类person
protected:
intID;//学号
charName[10];//姓名
public:
virtualbooloperator<(Person&)=0;//>运算符重载
virtualbooloperator>=(Person&)=0;//<=运算符重载
2)定义派生数据类student,基类为person类。
Private:
intScore[4];//成绩
voidSwapData(Student*);//交换数据
public:
Student(int=0,char*=NULL,int*=NULL);//构造函数
booloperator<(Person&);//>运算符重载
booloperator>=(Person&);//<=运算符重载
friendofstream&operator<<(ofstream&,Student*);//<<运算符重载输出到文件
friendifstream&operator>>(ifstream&,Student*);//>>运算符重载从文件输入
friendostream_withassign&operator<<(ostream_withassign&,Student*);//<<运
算符重载输出到显示器
friendistream_withassign&operator>>(istream_withassign&,Student*);//>>运算
符重载从键盘输入
friendclassList;//List为友元类
3)定义设计结点类Node
private:
Student*Stup;//指向学生对象指针
Node*Prev,*Next;//指向前后结点指针
public:
Node();//构造函数
Node(Student*);//构造函数
Node(Node&);//复制构造函数
~Node();//析构函数
friendclassList;//List为友元类
4)定义带有头结点链表类List,私有数据成员为Node*Head,*Tail分别,指向链表头尾:
private:
voidInitList();//初始化函数
public:
List();//构造函数
~List();//析构函数
voidClearList();//清空链表
Node*FindID(int&);//根据学号寻找学生所在结点
voidInsert(Node*);//插入一个学生
Node*CreateNode(Student*);//建立一个学生结点
voidAdd();//增加一个学生
voidUpdate();//修改学生成绩
voidDelete();//删除一个学生
voidQuery();//查找一个学生
voidSortID();//按学号排序
voidSortScore();//按学生总成绩排序
voidSaveBin();//以二进制形式保存数据
voidPrintList();//显示链表
voidPrintTitle();//显示标题
voidPrintOne(Student*);//显示一个学生数据
2.student类的实现:
student.cpp
3.node类的实现:
node.cpp
4.list类的实现:
list.cpp
5.主函数:
main.cpp
(二)各模块(函数)的功能
1.实现类和函数声明;
2.实现派生类student的各函数;
3.实现结点类Node的各函数;
4.实现结点类List的各函数。
程序结束运行前,调用SaveBin()函数以二进制形式保存学生数据到文件student.dat中;
5.设计主函数。
主函数中显示功能菜单,通过菜单调用类的成员函数实现系统各项功能。
(三)采用自定义的数据类型
自定义的数据类型:
student.h
#ifndefSTUDATA_H
#defineSTUDATA_H
#include
intGetID();
classList;
classPerson{//抽象类
protected:
intID;
charName[10];
public:
virtualbooloperator<(Person&)=0;
virtualbooloperator>=(Person&)=0;
};
classStudent:
publicPerson{
intScore[4];
voidSwapData(Student*);
public:
Student(int=0,char*=NULL,int*=NULL);
booloperator<(Person&);
booloperator>=(Person&);
friendofstream&operator<<(ofstream&,Student*);
friendifstream&operator>>(ifstream&,Student*);
friendostream_withassign&operator<<(ostream_withassign&,Student*);
friendistream_withassign&operator>>(istream_withassign&,Student*);
friendclassList;
};
classNode{
Student*Stup;
Node*Prev,*Next;
public:
Node();
Node(Student*);
Node(Node&);
~Node();
friendclassList;
};
classList{
Node*Head,*Tail;
voidInitList();
public:
List();
~List();
voidClearList();
Node*FindID(int&);
voidInsert(Node*);
Node*CreateNode(Student*);
voidAdd();
voidUpdate();
voidDelete();
voidQuery();
voidSortID();
voidSortScore();
voidSaveBin();
voidPrintList();
voidPrintTitle();
voidPrintOne(Student*);
};
#endif
三.程序运行流程图
开始
输入选项
输入选项!
=END
保存数据SaveBin()
增加学生、修改成绩、删除学生、查询数据、显示数据、按学号排序、按总成绩排序
注:
在主函数中,输入选项,判断是否