VC++课程设计报告
计算机网络课程设计报告
题目:设计一个类CStudent
专业:通信工程
班级:1301
学号:0905130129
姓名:
指导教师:张伟
日期:2014-01-10
一.课程设计的题目/封面
课程设计题目:设计一个类CStudent
二.设计目的
设计目的:这次课程设计旨在让我熟练掌握C++语言的基本语法规则;深刻理解基本的面向对象的程序设计方法,如类的实现,创建类等;全面熟悉各种面向对象的程序设计技术,如输出运算符“<<”重载。在加深我对理论教学内容的理解和掌握的同时,也培养了我分析问题、解决问题的能力,提高了我将课本知识运用到实际生活问题中的实践能力。
三.设计思路
设计思路:先定义一个类CStudent的对象,然后每次从键盘输入要存入的学生信息,将这些输入的信息保存在这个对象里面,再把这个对象写入二进制文件中,接着再读取下一个学生的信息,存入到文件中,同时利用for循环结构来实现循环,直到存入所有学生信息后终止。整个程序中须定义多个成员函数,分别实现不同功能。在程序执行的过程中,运用switch选择语句,通过选择数字0-4,来调用不同函数,以执行不同功能,达到最终目的。程序中用到的多个成员函数各自功能的说明如下:
1.void getdata():从键盘按规定的数据类型输入学生的编号、姓
名、性别、年龄、数学成绩、计算机成绩和外语成绩等信息,
并算出总成绩。
2.void outdate():从“stud.dat”文件中取出学生的数学成绩、
计算机成绩、外语成绩等信息,凭借其算出总成绩和平均成绩,再将其存入到“stud.dat”文件中,并确定在屏幕上显示的学生信息间的间隔。
3.void get():通过for循环和调用getdata()函数,从键盘输入
所有同学的相关信息,并将其存入“stud.dat”文件中。
4.void shaixuan():从键盘输入要筛选学生的性别Sex和总成绩
超过n分,按回车键后,被筛选的学生的相关信息就会显示在屏幕上。
5.void xingming():从键盘输入要筛选学生的姓名,按回车键后,
被筛选的学生的相关信息就会显示在屏幕上。
6.void bianhao():从键盘输入要筛选学生的编号,按回车键后,
被筛选的学生的相关信息就会显示在屏幕上。
解决方案:先分析实际问题,运用所学知识得出设计思路,根据设计思路,划分将要编写的程序模块,如数据类型的定义,函数的定义,main函数对其它函数的调用等,然后按各部分写成相应的程序代码,如按系统要求的不同功能,定义不同的成员函数,然后将其综合成一个总程序,最后运行、调试,若在调试过程中出现错误,再分析、发现、解决问题,直到所设计的程序能达到预期的所有功能。
四.设计原理
设计原理:该程序使用了面向对象设计的系统分析和设计,构造了一个结构类型用于描述学生的相关信息,其成员包括编号、姓名、性别、年龄、数学成绩、计算机成绩和外语成绩,其间还使用了函数的定义、说明与调用,数组的定义、使用与存储,输出运算符“<<”重载,if语句,break语句,switch选择语句,for循环结构等多种语句和结构,最终通过调试,实现了系统的所有预期功能,解决实际问题。
五.设计内容
具体内容
(1)定义数据结构
该程序根据要输入的学生信息,确定了适合的数据类型,学生信息与数据类型对应关系如下:
int Num; //学生编号
char Name[10]; //学生姓名
char Sex[10]; //学生性别
int Age; //学生年龄
float Math,Com,Eng,Total,Ave; //学生数学成绩,计算机成绩,外语成绩,总成绩,平均成绩
(2)程序实现
根据题目要求,最终设计的程序是按如下程序流程图实现的:
(3)程序要求
设计一个类CStudent,类中包含一个学生的基本信息数据如下:编号、姓名、性别、年龄、数学成绩、计算机成绩、外语成绩。并假
从键盘输入学生总数n
switch 选择语句,选择数字0-4
选择1,从键盘按适当数据类型输入所有学生相关信息 选择2,按性别和总成绩超过n 分筛选出相关学生信息 选择3,从键盘输入学生姓名,筛选出相关学生信息 选择4,从键盘输入学生编号,筛选出相关学生信息
选择0,退出程序,执行结束
继续从键盘输入数字0-4
设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如:1 LiPing m 18 89 98 94
采用binary文件形式,并使用随机读取的处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为“序”来对文件的各对象数据进行随机读写处理)。并设计该类的成员函数,而且对输出运算符“<<”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:
(1)从键盘输入一个学生的有关信息,并将他们存入到数据文件中(按编号来确定写出位置)。
(2)按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3)按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4)计算某编号学生的总成绩与平均成绩。
(5)列出所有总成绩超过n分的性别s同学的有关信息(n,s由用户从键盘输入)。
六.实现步骤
1.实现步骤:先根据题目要求编写好程序代码,然后调试程序,在调试的过程中,先从键盘输入要存入信息的学生人数n,再选择数字1,按程序中规定的数据类型从键盘分别依次输入学生的编号、姓名、性别、年龄、数学成绩、计算机成绩、外语成绩;然后选择数字
2,从键盘输入要筛选学生的性别Sex和总成绩超过多少分,屏幕上就会显示筛选出的学生的信息;然后选择数字3,从键盘输入要筛选学生的姓名,屏幕上就会显示筛选出的学生的信息;然后选择数字4,从键盘输入要筛选学生的编号,屏幕上就会显示筛选出的学生的信息;最后选择数字0,就退出程序。
2.程序代码:
#include
#include
#include
#include
using namespace std;
int n;
class CStudent
{
public:int Num;
char Name[10];
char Sex[10];
int Age;
float Math,Com,Eng,Total,ave;
public: void getdata()
{
cout<<"编号:";
cin>>Num;
cout< cin>>Name; cout< cin>>Sex; cout< cin>>Age; cout< cin>>Math; cout< cin>>Com; cout< cin>>Eng; cout< Total=Math+Com+Eng; } void outdate() { Total=Math+Com+Eng; ave=(Math+Com+Eng)/3; cout< } }; void get() {ofstream outfile("stud.dat"); CStudent s[50]; int i; cout<<"输入数据:"< for(i=0;i { cout<<"第"< s[i+1].getdata(); outfile.write((char*)&s,sizeof(s)); }; outfile.close(); } void shaixuan() { ifstream infile("stud.dat"); CStudent s[50]; int i; string sex; float total; cout<<"请输入你要筛选同学的性别:"<<""; cin>>sex; cout<<"请输入你筛选同学的总成绩超过多少分:"<<""; cin>>total; infile.read((char*)&s,sizeof(s)); while(infile) { for(i=0;i<50;i++) { if((sex==s[i].Sex)&&(total<=s[i].Total)) { cout<<"编号姓名性别年龄数学成绩计算机成绩外语成绩总分平均分"< s[i].outdate(); } } infile.read((char*)&s,sizeof(s)); }; infile.close(); } void xingming() { ifstream infile("stud.dat"); CStudent s[50]; int i; string str; cout<<"请输入你要筛选同学的姓名:"<<""; cin>>str; infile.read((char*)&s,sizeof(s)); while(infile) { for(i=0;i<50;i++) { if(str==s[i].Name) { cout<<"编号姓名性别年龄数学成绩计算机成绩外语成绩总分平均分"< s[i].outdate(); } } infile.read((char*)&s,sizeof(s)); }; infile.close(); } void xuehao() { ifstream infile("stud.dat"); CStudent s[50]; int i,m; cout<<"请输入你要筛选同学的编号:"<<""; cin>>m; infile.read((char*)&s,sizeof(s)); while(infile) { for(i=0;i<50;i++) { if(m==s[i].Num) { cout<<"编号姓名性别年龄数学成绩计算机成绩外语成绩总分平均分"< s[i].outdate(); } } infile.read((char*)&s,sizeof(s)); }; infile.close(); } int main() { int a; cout<<"请输入你想添加多少个学生的信息n:"<<""; cin>>n; do { cout<<"如果你输入数字1,你就可以添加学生信息了;"<<'\n'; cout<<"如果你输入数字2,你就可以筛选出所有总成绩超过n分的性别为sex同学的有关信息了;"<<'\n'; cout<<"如果你输入数字3,你就可以按编号进行筛选了;"<<'\n'; cout<<"如果你输入数字4,你就可以按姓名进行筛选了;"<<'\n'; cout<<"如果你输入数字0,你就可以退出此程序了;"<<'\n'; cin>>a; switch(a) { case 1:get();break; case 2:shaixuan();break; case 3:xuehao();break; case 4:xingming();break; default:cout<<"error"< } } while(a==1||a==2||a==3||a==4); return 0; } 七.最终结果显示 结果显示: 八.总结 在这次程序设计的过程中,我遇到了好多问题,同时也收获了不少。一拿到题目我就非常紧张,害怕自己做不出来,焦虑的情绪让我浪费了好多时间,这让我懂得在生活中遇到问题时,要有良好的心态,一定要镇定自若,决不能惊慌失措。当我花了好久,终于辛辛苦苦设计出了程序,可是当调试时出现了问题,不能达到预期功能,于是我又要回头检查错误,修改程序,这又让我耗了好多时间和精力,这让我知道做任何事都要严谨的态度,并考虑到结果。当遇到问题不能自己独立解决时,我求助了同学,这也让我深刻懂得,在必要的时候我们可以求助他人,但大部分还是要靠自己的力量解决问题。在完整地设计了一个较大的程序后,我对书本上的理论知识有了更全面、深刻 的理解,同时也锻炼了我的动手能力、实践能力、将课本知识运用到 实际生活中的能力。虽然这次程序设计的过程很艰难,但最终我成功了,我觉得一切的努力都是值得的。