C课程设计报告_第1页
C课程设计报告_第2页
C课程设计报告_第3页
C课程设计报告_第4页
C课程设计报告_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程设计题目:面向对象程序设计 学生姓名:吴泓专 业:软件工程班 级:指导教师:张军 2017年 6月 16日课程设计目的: 综合运用所学过的知识进行实际程序设计。课程设计内容:Part1 1: 类的组合:定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。定义line类,端点由两个point类的对象组成,包括构造函数,析构函数以及计算线段长度的函数getlength。在main函数中,定义line的对象,并输出其长度。#include#includeusing namespace std;class pointprivate:double x, y;public:point()point(double x, double y) :x(x), y(y)void setx(double xx)x = xx;double getx() return x; void sety(double yy)y = yy;double gety() return y; point(point & p)x = p.x;y = p.y;point();class lineprivate:point a, b;public:line(point aa,point bb) :a(aa), b(bb)double getlength()double length;length = sqrt(pow(a.getx() - b.getx(), 2) + pow(a.gety() - b.gety(), 2);return length;line();void main()point p1(2, 3);point p2(5, 6);line l1(p1,p2);cout The length of the line is l1.getlength()endl; Part1 1运行结果与分析:运行结果:输入 x1,y1,x2,y2:2 3 5 6p1:(2,3)p2:(5,6) Part1 1设计过程、思路与分析:1. 定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx,getx,sety,gety四个属性函数;2. 定义line类,设置其成员函数和getlength()函数。Getlength()函数可以输入和输出两点的坐标和两点之间的距离;3. 在主函数中定义类line对象myline。调用getlength()函数实现目的。Part1 2: 对象数组和函数:定义student类,数据成员包括姓名name和成绩score,成员函数包括构造函数,拷贝构造函数和析构函数。定义函数void highestscore(student s),输出分数最高的学生姓名和分数。在main函数中定义student sN,调用highestscore函数,输出分数最高的学生姓名和分数。#include#includeconst int N = 3;/定义要输入的学生数using namespace std;class student/定义student类private:string name;double score;public:student()/定义无参构造函数student(string n, double s) :name(n), score(s)/定义有参构造函数student(student &s)/拷贝构造函数name = ;score = s.score;void highestscore(student s)int k = 0;double max;max = s0.score;for (int i = 1; i N; i+)if (max si.score)max = si.score;k = i;cout The students name: endl;cout Highestscore is: sk.score endl;student()friend ostream & operator (ostream & os, student s)os s.score (istream & is, student &s)is s.score;return is;void main()student sN;for (int i = 0; i si;sN.highestscore(s);Part1 2运行结果与分析:运行结果:运行结果分析:输入的3位同学,成绩最高的是lisi 97,输出结果正确。Part1 2设计过程、思路与分析:定义student类,设置其成员函数(构造函数,拷贝构造函数和析构函数)和获取名字的函数getname()、获取成绩的函数getscore();定义highestscore(student s)函数。该函数中用k记录成绩最高的数组。并且输出其姓名和成绩的信息;主函数中定义对象数组sN,用for循环输入3个学生的姓名和学号,再调用higtestscore(student s)函数输出成绩最高的学生的信息。Part1 3: 静态数据成员:设计一个书类,能够保存书名、定价,所有书的本数和总价。(将书名和定价设计为普通数据成员;将书的本数和总价设计为静态数据成员)#include#includeusing namespace std;class Bookprivate:string name;double price;static int num;static double total;public:Book() Book(string name, double price);Book() Book(Book &con_refbook);string get_name();double get_price();static int get_num();static double get_total();void show();void put();Book:Book(string name, double price):name(name),price(price)num+;total += price;int Book:num = 0;int Book:get_num()return num;double Book:total = 0;double Book: get_total()return total;void Book:show()cout Book information: endl;cout name: name price: price endl;void Book:put()cout Book total: num;cout price total: total endl;int main()Book book1(Helloworld, 16.5);Book book2(C+ prime, 20.5);Book book3(C+ program, 30.0); book1.show();book2.show();book3.show();book3.put();system(pause);return 0;Part1 3运行结果与分析:运行结果:运行结果分析:一共输入三本书的书名和价格,输出的Book total为3,price total为67,输出结果正确。Part1 3设计过程、思路与分析:1. 定义Book类,设置其成员函数(构造函数,拷贝构造函数和析构函数)获取书名函数get_name()、获取价格函数get_price(),访问静态数据num的成员函数get_num()、访问静态数据total的成员函数get_total(),显示书名 及价格的函数show()、显示总价的函数put();2. 在主函数中定义Book类的三个对象book1、book2、book3,并且都初始化;3. 三个对象同时调用show( )函数,显示信息。最后调用put()函数显示书、 的总数和总价格。=Part1 4: 动态内存分配:定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。在main函数中,用new和delete分配和释放N个point的数组。(N是const常量,N=10)#includeconst int N = 10;using namespace std;class Pointprivate:float x, y;public:Point() Point() Point(float x, float y) :x(x), y(y) Point(Point &con_refpoint)x = con_refpoint.x;y = con_refpoint.y;void setx(float xx)x= xx;void sety(float yy)y= yy;float getx() return x; float gety() return y; ;int main()Point *p = new PointN;deletep;system(pause);return 0;Part1 4运行结果与分析:运行结果分析:程序主函数中位PointN数组申请了一段内存空间,并定义指针p指向该对象,然后用delete直接作用于指针,删除new创建的对象,释放指针p所指向的内存空间。Part1 4设计过程、思路与分析:1. 定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx( )、sety( )、getx( )、gety( )属性函数;2. 在主函数中用new来为Point对象数组申请一块连续的内存,然后用delete直接作用于指针,删除new创建的对象,释放指针p所指向的内存空间。=Part1 5 : 类的继承:定义一个point类,包含私有数据成员x,y,成员函数包括无参构造函数,带参构造函数,set和get属性函数。定义circle类,从point类公有派生,增加数据成员半径r,成员函数包括无参构造函数,带参构造函数,计算面积函数getarea。在main函数中定义一个circle的对象,并计算其面积。#include using namespace std;class pointpublic:point() point(int x, int y)void set_x(int x)this-x = x;int get_x() return x;void set_y(int y)this-y = y;int get_y()return y;private:int x;int y;class circle :public pointpublic:circle() circle(int r,int x,int y):point(x,y)this-r = r;int get_r() return r;double getarea() return(3.14*r*r);private:int r;int main()circle c1(2, 3, 2);coutr=c1.get_r()endl;cout the circles area=c1.getarea() endl;system(pause);return 0;Part1 5运行结果与分析:运行结果分析:在主函数中初始化圆的半径r=2,输出结果area=12.56 输出结果正确。Part1 5设计过程、思路与分析:1 定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx() sety() getx() gety() 四个属性函数。2 定义circle类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及获取半径r的函数get_r() 计算面积并获取面积的函数getarea()。3 在主函数中定义类的对象c1并初始化r=2。再调用getarea()函数输出面积=Part1 6 : 虚基类:定义vehicle类,数据成员包括私有的weight,公有的构造函数,析构函数和输出函数dispaly;从vehicle类公有派生car类,增加数据成员载人数personnum,公有的构造函数,析构函数和输出display;从vehicle类公有派生truck类,增加数据成员载货量laod,公有的构造函数,析构函数和输出函数display;从car类和truck类共同公有派生出pickup类,包括公有的构造函数和输出函数。在main函数中,定义pickup类对象,并输出其基本信息。#include using namespace std;class vehiclepublic:vehicle() vehicle(int weight)this-weight = weight; vehicle()cout vehicle constructoring! endl;void display()cout the weight of vehicle is weight personnum = personnum;car()cout car constructoring! endl;virtual void display()cout The number of person is personnum load = load;truck()cout truck constructoring! endl;virtual void display()cout The load of the truck is: load endl;private:int load;class pickup :public car,public truckpublic:pickup() pickup(int weight1, int weight2, int personnum, int load,int weight) :car(personnum, weight1), truck(load, weight2),vehicle(weight)cout pickup constructoring!,功能。在main函数里测试该类。#include#includeusing namespace std;class counter;istream& operator(istream& is,counter& a);ostream& operator(istream& is,counter& a); /重载输入运算符friend ostream& operator(ostream& os,counter& a); /重载输出运算符(istream& is,counter& a) /运算符实现isa.P;return is;ostream& operator(ostream& os,counter& a) /运算符实现osa.P;return os;int main()counter c1(5),c2(3); coutc1=c1endlc2=c2endl;cout+c1=+c1endl; /测试自增自减功能coutc1+=c1+endl;coutc2-=c2-endl;cout-c2=-c2endl;system(pause);return 0;Part1 7运行结果与分析:运行结果分析:定义c1的值为5,c2的值为3;此时+c1的数值为6;c1+输出时为6,输出后为7;此时c2输出时为3;-c2输出时为1,输出后为1;输出结果正确。Part1 7设计过程、思路与分析:1.定义counter类,私有成员数据weight,设置其成员函数(构造函数和析构函数)2.重载自加自减运算符和运算符。3.在主函数中实现运算符重载。4.友元函数需要声明。=Part1 8 : 虚函数和抽象类:定义一个抽象类shape,包括公有的计算面积area函数,计算体积volume函数,输出基本信息函数printinfo(三个函数均为纯虚函数)。从shape公有派生point类,增加私有数据成员x,y坐标,以及构造函数,析构函数。从point公有派生circle类,增加私有数据成员半径r,以及构造函数,析构函数。从circle公有派生cylinder类,增加私有数据成员高度h,以及构造函数,析构函数。(在定义三个派生类的过程中,自己考虑需要重定义哪个虚函数)。在main函数中,定义shape类的指针,指向派生类的对象,输出三类对象的基本信息,面积,体积;(将shape指针改为引用再尝试)。#include #include #define P 3.1415using namespace std;class shapepublic:virtual double area() = 0;virtual double volume() = 0;virtual void printinfo () = 0;class point :public shapepublic:point() point(double x, double y)this-x = x;this-y = y;void printinfo()cout x= x ,y= y r = r;double area()return P*r*r;void printinfo()point:printinfo();cout r= r endl;cout circle area is area() h = h;double volume()return h*circle:area();void printinfo()circle:printinfo();cout h= h endl;cout cylinder volume is volume() endl;cylinder() private:double h;int main()cylinder c1(5, 2, 2, 3);shape *s;/指针s = &c1;(*s).printinfo();cout circle area is area() endl;cout volume is (*s).volume() endl;system(pause);return 0;Part1 8运行结果与分析:运行结果:运行结果分析:在主函数中分别用了shape类的指针和引用,输出结果正确。Part1 8设计过程、思路与分析:4 先定义基类shape。设置三个纯虚函数并且声明:virtual double area()=0; /声明计算面积纯虚函数area();virtual void volume()=0; /声明计算体积纯虚函数volume();virtual void printinfo()=0; /声明输出基本信息纯虚函数printinfo();5 定义类point共有继承自类shape。并且在该类中实现三个纯虚函数。6 定义类circle共有继承自类point。并且在该类中实现三个纯虚函数。7 定义类cylinder共有继承自类circle。并且在该类中实现三个纯虚函数。8 在主函数中分别创建类point的对象a,circle的对象b,cylinder的对象c,并初始化;9 在主函数中分别定义shape类的指针和引用,调用printinfo()函数。=Part1 9 : 模板:设计一个堆栈的类模板Stack,在模板中用类型参数T表示栈中存放的数据,用非类型参数MAXSIZE代表栈的大小。#includeusing namespace std;templateclass Stackpublic:Stack();bool full();bool empty();void push(T element);T gettop();void pop();Stack()deleteptr;private:int maxsize;int pos;T *ptr;templateStack:Stack()maxsize = MAXSIZE;pos = 0;ptr = new TMAXSIZE;templatebool Stack:full()return pos = MAXSIZE;templatebool Stack:empty()return pos0;templatevoid Stack:push(T element)if (!full()pos+;ptrpos = element;elsecout the stack is full endl;templateT Stack:gettop()if (empty()cout the stack is empty endl;elsereturn ptrpos;templatevoid Stack:pop()if (empty()cout the stack is empty endl;elsepos-;int main()Stacks1;s1.push(5);s1.push(10);s1.push(2);s1.push(22);s1.push(7);cout s1.gettop() endl;system(pause);return 0;Part1 9运行结果与分析:运行结果:运行结果分析:在栈中放入5个数:5,10,2,22,7.输出栈顶元素7输出结果正确。Part1 9设计过程、思路与分析:1. 先定义类模板template;2. 在class类中写入判断栈是否已满的函数full(),判断栈是否已空的函数empty(),写入数据的函数push( ),获取栈顶的函数gettop()。3. 在主函数中在栈中放入5个数:5,6,7,8,9.输出栈顶元素9=Part1 10: 文件读写:定义学生类数组,有N个人(N=5),包括姓名和语数外三名课的成绩,通过重载运算符实现学生数组的文件读写。(姓名用string name;)#include #include #include #define N 5using namespace std;class student;ostream& operator (istream & is, student &s);class studentpublic:student() student(string name, int c_socre, int m_score, int e_score)this-name = name;this-c_score= c_score;this-m_score = m_score;this-e_score = e_score;friend ostream& operator(ostream & os, student s)os s.c_score s.m_score s.e_score (istream & is, student &s)is s.c_score s.m_score s.e_score;return is;private:string name;int c_score;int m_score;int e_score;int main()int i;student sN;for( i=0;isi;ofstream ofs(d:testtest.txt, ios_base:out);if(!ofs)cerrfile open failedendl;exit(1);for( i=0;iN;i+)ofs.write(reinterpret_cast(& si),sizeof(student);ifstream ifs(d:testtest.txt, ios_base:out);if(!ifs)cerrfile open failedendl;exit(1);for( i=0;iN;i+)ifs.read(reinterpret_cast(& si),sizeof(student);for(i=0;iN;i+)coutsi;system(pause);return 0;Part1 10运行结果与分析:运行结果:Part1 10设计过程、思路与分析:1. 定义student类,私有数据成员字符数组name20;2. 定义运算符重载;3. 在住函数中定义student 类数组sN;并以输出和二进制的方式打开文件;=Part2 1: 小型软件的开发(共占程序检查分的70%,学号的最后一位即选做的题号,最后一位是0则选做第10题,例如号做的题目为第5题,做的题目是第10题)1.教职工信息管理基本要求:定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在系部和职称。功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确查询职工信息; 2)能够根据姓名、科室查询职工信息 3)分系部进行职称统计,计算各职称的人数 4、根据职工的职称排序输出 5、根据工号修改职工信息 6、根据工号删除职工信息Part2 1项目分析:1 功能描述:本项目要实现一个简单信息管理系统,该系统具有四大功能:输入功能,查询功能,修改删除功能,显示功能: 1、输入功能:添加输入教职工的信息,并在文件中保存下来。 2、查询功能:查找已存入的教职工信息。3、修改删除功能:修改或删除已存教职工信息。4、显示功能:显示存入的教职工信息以及在修改删除后显示人员信息。 2项目分析:确定项目功能后,依据功能进行类和数据结构的设计。系统中采用单向链表结构管理教职工信息。1、教职工信息的输入、添加 项目中使用文件(Esystemsave.dat)保存输入和添加的教职工信息。2、教职工信息查询 信息查询功能中提供了按指定条件进行信息查询功能。用户可以对产品的指定属性按某个条件进行精确查询或范围查询。3、教职工职称排序 通过链表对教职工信息依次访问,按职称大小依次排序显示输出4、修改信息功能 管理系统中可以随时通过姓名和电话号码精确找到人员信息并且修改。5、删除信息功能 管理系统中可以随时通过姓名和工号精确找到人员信息并且删除。6、显示教职工信息 包括姓名、性别、工号、电话、所在系部、职称等信息。8、信息保存功能 运行期间可以保存人员信息,将人员信息存入文件(Esystemsave.dat)中。设计思路: 定义Technical_Date结构体,定义姓名、性别、工号、电话号码、所在系部、职称等数据。再定义Technical类,在类中定义题目所需要求的函数:Add_Technical_Information(); / 添加人员信息函数;Query_Information(); / 查询功能; Technical_Title_Statistics(); /查询功能中的职工按系部统计职工职称Technical_Title_Sort();/根据教职工职称按排序输出 Modify_Technical_Information()/根据工号查找到该工号教职工信息并修改职工信息Delete_Technical_Information();/根据工号查找到该工号教职工信息并删除职工信息Display_All_Technical_Date();/6显示所有教职工信息(息;Display_after_all_p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论