收藏 分销(赏)

c++课程设计任务书.doc

上传人:a199****6536 文档编号:10525211 上传时间:2025-06-01 格式:DOC 页数:15 大小:129.51KB
下载 相关 举报
c++课程设计任务书.doc_第1页
第1页 / 共15页
c++课程设计任务书.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
《面向对象程序设计课程设计》任务书 一、课程设计的目的与要求 1、教学目的 综合运用所学过的知识进行实际程序设计。 2、教学要求 从课程设计的目的出发,用C++编写简单的的程序,程序要求如下: (1)算法正确,容错性能好; (2)完成从用户需求分析、到上机编程、调试和应用等全过程。 二、课程设计的题目、内容及要求 Part 1: 小程序练习(必须全部完成) 1 函数重载 定义重载函数max3用于计算三个数的最大值(参数类型分别为int和double)。 #include <iostream> using namespace std; int max3(int a,int b,int c) { if(b>a) a=b; if(c>a) a=c; return a; } double max3(double a,double b,double c) { if(b>a) a=b; if(c>a) a=c; return a; } int main( ) { int max3(int a,int b,int c); double max3(double a,double b,double c); int i1,i2,i3,i; cout<<”请输入三个数:”<<endl; cin>>i1>>i2>>i3; i=max3(i1,i2,i3); cout<<"i.max3="<<i<<endl; double d1,d2,d3,d; cin>>d1>>d2>>d3; d=max3(d1,d2,d3); cout<<"d.max3="<<d<<endl; } 2 类的组合 定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。定义line类,端点由两个point类的对象组成,包括构造函数,析构函数以及计算线段长度的函数getlength。在main函数中,定义line的对象,并输出其长度。 #include<iostream> #include<cmath> using namespace std; class point {private: int x,y; public: point(int x,int y):x(x),y(y){} point(point &p); int getx() {return x;} void setx(int x) {this->x=x;} int gety() {return y;} void sety(int y) {this->y=y;} ~point(){} }; point::point(point &p) {x=p.x; y=p.y;} class line {private: point p1,p2; double len; public: line(point pt1,point pt2); line(line &l); double getlen() {return len;} ~line(){} }; line::line(point pt1,point pt2):p1(pt1),p2(pt2) {double x=p1.getx()-p2.getx(); double y=p1.gety()-p2.gety(); len=sqrt(x*x+y*y); } line::line(line &l):p1(l.p1),p2(l.p2) {len=l.len;} int main() {point po1(1,2),po2(3,4); line line(po1,po2); cout<<"the length of line is:"<<endl; cout<<line.getlen()<<endl; } 3 对象数组和函数 定义student类,数据成员包括姓名name和成绩score,成员函数包括构造函数,拷贝构造函数和析构函数。定义函数void highestscore(student s[]),输出分数最高的学生姓名和分数。在main函数中定义student s[N],调用highestscore函数,输出分数最高的学生姓名和分数。 #include<iostream> #include<string> const int N=3; using namespace std; class student {private: string name; int score; public: student(string n="",int s=0):name(n),score(s){} student(student &stu) { name=stu.name; score=stu.score; } ~student(){} friend istream &operator>>(istream &is,student &stu) {is>>stu.name>>stu.score; return is; } friend void highestscore(student s[]); }; void highestscore(student stu[]) {int i,h,t; t=stu[0].score; for(i=0;i<N;i++) {if(t<stu[i].score) {t=stu[i].score; h=i; } } cout<<"name:"<<stu[h].name<<"score:"<<stu[h].score<<endl; } void main() {student s1[N]; for(int i=0;i<N;i++) cin>>s1[i]; highestscore(s1); } 4 静态数据成员 设计一个书类,能够保存书名、定价,所有书的本数和总价。(将书名和定价设计为普通数据成员;将书的本数和总价设计为静态数据成员) #include<iostream> #include<string> using namespace std; class book {private: string name; int price,num; static int count,sum; public: book(string na,int p,int n):name(na),price(p),num(n) { count+=num; sum+=num*price; } void display() { cout<<"书名:"<<name<<endl; cout<<"价格:"<<price<<endl; cout<<"所有书的本数:"<<num<<endl; cout<<"总价:"<<sum<<endl; } ~book(){} }; int book::count=0; int book::sum=0; void main() {book a("c grammer",100,10),b("c++ grammer",50,6); a.display(); b.display(); } 5 动态内存分配 定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。在main函数中,用new和delete分配和释放N个point的数组。(N是const常量,N=10) #include<iostream> using namespace std; class point {private: int x,y; void setx(int x) {this->x=x;} void sety(int y) {this->y=y;} public: point(int x=0,int y=0); point(const point &p) { x=p.x; y=p.y; } void setxy(int x,int y) {setx(x); sety(y);} int getx() {return x;} int gety() {return y;} void showpoint() { cout<<"x="<<x<<" y="<<y<<endl; } ~point(){} }; inline point::point(int x,int y) { this->x=x; this->y=y; } void main() {point *pt=new point[10]; (*pt).setxy(1,2); (*pt).showpoint(); delete []pt; } 6 类的继承 定义一个point类,包含私有数据成员x,y,成员函数包括无参构造函数,带参构造函数,set和get属性函数。定义circle类,从point类公有派生,增加数据成员半径r,成员函数包括无参构造函数,带参构造函数,计算面积函数getarea。在main函数中定义一个circle的对象,并计算其面积。 #include<iostream> using namespace std; class point {private: int x,y; public: point():x(0),y(0){} point(int x,int y):x(x),y(y){} int getx() {return x;} void setx(int x) {this->x=x;} int gety() {return y;} void sety(int y) {this->y=y;} ~point(){} }; class circle:public point {private: int r; public: circle(int x,int y,int r):point(x,y),r(r){} int getr() {return r;} void setr(int r) {this->r=r;} void getarea() {cout<<"area:"<<r*r*3.14<<endl;} }; int main() {circle c(1,2,3); c.getarea(); } 7 虚基类 定义vehicle类,数据成员包括私有的weight,公有的构造函数,析构函数和输出函数dispaly;从vehicle类公有派生car类,增加数据成员载人数personnum,公有的构造函数,析构函数和输出display;从vehicle类公有派生truck类,增加数据成员载货量laod,公有的构造函数,析构函数和输出函数display;从car类和truck类共同公有派生出pickup类,包括公有的构造函数和输出函数。在main函数中,定义pickup类对象,并输出其基本信息。 #include<iostream> using namespace std; class vehicle {private: int weight; public: vehicle(int w):weight(w){} void display() { cout<<"weight:"<<weight<<endl; } ~vehicle(){} }; class car:virtual public vehicle {private: int personnum; public: car(int p,int w):vehicle(w),personnum(p){} void display() { cout<<"personnum:"<<personnum<<endl; } ~car(){} }; class truck:virtual public vehicle {private: int load; public: truck(int w,int l):vehicle(w),load(l){} void display() { cout<<"load:"<<load<<endl; } ~truck(){} }; class pickup:virtual public car,public truck {public: pickup(int w,int l,int p,int w1,int w2):vehicle(w),car(w1,p),truck(w2,l){} void display(){} }; void main() {pickup p(10,20,30,40,50); p.vehicle::display(); p.car::display(); p.truck::display(); p.pickup::display(); } 8 运算符重载,友元函数和this指针 定义一个计数器类counter,具备自增,自减功能(前后缀);输入输出>>,<<功能。在main函数里测试该类。 #include<iostream> using namespace std; class counter {private: double number; public: counter(double num=0):number(num){} friend counter operator ++(counter &c,int); friend counter operator --(counter &c,int); friend counter operator ++(counter &c); friend counter operator --(counter &c); friend istream &operator>>(istream &is,counter &c) {is>>c.number; return is; } friend ostream &operator<<(ostream &os,counter &c) {os<<c.number; return os; } ~counter(){} }; counter operator ++(counter &c) { c++; return c; } counter operator --(counter &c) { c--; return c; } counter operator ++(counter &c,int) { counter ctemp; ctemp=c.number; c.number++; return ctemp; } counter operator --(counter &c,int) {counter ctemp; ctemp=c.number; c.number--; return ctemp; } int main() { counter c1,c2; cin>>c1; c2=operator++(c1,2); cout<<"count before:"<<c2<<" count after:"<<c1<<endl; } 9 虚函数和抽象类 定义一个抽象类shape,包括公有的计算面积area函数,计算体积volume函数,输出基本信息函数printinfo(三个函数均为纯虚函数)。从shape公有派生point类,增加私有数据成员x,y坐标,以及构造函数,析构函数。从point公有派生circle类,增加私有数据成员半径r,以及构造函数,析构函数。从circle公有派生cylinder类,增加私有数据成员高度h,以及构造函数,析构函数。(在定义三个派生类的过程中,自己考虑需要重定义哪个虚函数)。在main函数中,定义shape类的指针,指向派生类的对象,输出三类对象的基本信息,面积,体积;(将shape指针改为引用再尝试)。 #include<iostream> using namespace std; class shape {public: virtual double area()=0; virtual double volume()=0; virtual void printinfo()=0; }; class point:public shape { private: int x,y; public: point(int x,int y):x(x),y(y){} double area() {return 0;} double volume() {return 0;} void printinfo() {cout<<"point:x="<<x<<",y="<<y<<endl;} ~point(){} }; class circle:public point {private: int r; public: circle(int x,int y,int r):point(x,y),r(r){} double area() {return 3.14*r*r;} void printinfo() {cout<<"area:"<<area<<endl;} ~circle(){} }; class cylinder:public circle {private: int h; public: cylinder(int x,int y,int r,int h):circle(x,y,r),h(h){} double volume() {return circle::area()*h;} void printinfo() {cout<<"volume:"<<volume<<endl;} ~cylinder(){} }; void fun(shape *p) { p->printinfo(); } void main() {point p(1,1); circle c(1,1,3); cylinder C(1,1,3,4); /*p.printinfo(); c.printinfo(); C.printinfo();*/ fun(&p); fun(&c); fun(&C); } 10 模板 设计一个堆栈的类模板Stack,在模板中用类型参数T表示栈中存放的数据,用非类型参数MAXSIZE代表栈的大小。 #include<iostream.h> const int Maxsize=5; template<typename T> class stack {private: T elem[Maxsize]; int top; public: stack() {top=0;} void push(T e) {if (top==Maxsize) {cout<<"栈已满!"<<endl; return ; } elem[top]=e; top++; } T pop() {if(top==0) {cout<<"栈空!"<<endl; return -1;} top --; return elem[top]; } }; void main() {stack <int> s; s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); cout<<s.pop()<<endl; } 11 文件读写 定义学生类数组,有N个人(N=5),包括姓名和语数外三名课的成绩,通过重载<<和>>运算符实现学生数组的文件读写。(姓名用string name;) #include<iostream> #include<fstream> using namespace std; class stu {private: char name[10]; int chi,mat,eng; public: stu(char s[]="",int c=0,int m=0,int e=0) {strcpy(name,s); chi=c; mat=m; eng=e; } friend ostream&operator<<(ostream &os,stu &s) {os<<s.name<<" "<<s.chi<<" "<<s.mat<<" "<<s.eng<<endl; return os; } friend istream&operator>>(istream &is,stu &s) {is>>s.name>>s.chi>>s.mat>>s.eng; return is; } }; const int N=5; void main() { stu s[N]; int i=0; fstream iof("c:\\student.txt",ios::out|ios::binary); if(!iof.is_open ()) {cout<<"file open failed"<<endl; return ; } else {for(int i=0;i<N;i++) {cin>>s[i]; cout<<s[i]; iof.write((char *)&s[i],sizeof(stu)) ; } iof.close (); } stu s1[N]; iof.open("c:\\student.txt",ios::out|ios::binary); if(!iof.is_open()) { return ; } else { int i=0; iof.read((char *)&s1[i],sizeof(stu)); while(!iof.eof()) {cout<<s1[i]; i++; iof.read((char *)&s1[i],sizeof(stu)); } iof.close();} } Part 2: 小型软件的开发(选做一题,且由个人独立开发完成) 1教师通信录的设计 基本要求: 定义教师(teacher)类,其中至少包括姓名、性别、电话、地址、邮政编码、邮箱、QQ号和类别(例如:同学、朋友等)。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入人员信息,并保存到文件中; 3、查询功能: 1)能够根据姓名、电话精确查询人员信息; 2)能够根据地址进行模糊查询人员信息; 3)根据人员类别查询人员信息 4、根据姓名对人员信息排序输出 5、能根据姓名、电话修改人员信息 6、能根据姓名、电话删除人员信息 2职工工资管理 基本要求: 定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在科室和工资。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确查询职工信息; 2)能够根据姓名、科室查询职工信息 3)分科室进行工资统计,计算各科室的平均工资 4、根据职工的工资排序输出 5、根据工号修改职工信息 6、根据工号删除职工信息 #include<iostream> #include<string> using namespace std; class employee {private: string name,sex,office; int id,phone number,salary; public: employee() 3公司员工管理系统 基本要求: 设计一个虚基类Staff(员工),包括编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出工程师类Engineer包含专业和职称保护数据成员以及相关的成员函数,再由Staff派生出领导类Leader,包括职务和部门保护数据成员以及相关的成员函数;然后由Engineer和Leader类派生出主任工程师类Chairman。 功能要求: 1、增加员工数据信息 2、更新员工数据信息 3、查询员工数据信息 4、删除员工数据信息 5、良好的人际交互界面、方便操作 4三角形的种类与面积 基本要求: 定义点(point)类,包含点的坐标x和y;通过继承点类派生出线段(line)类;通过线段(line)类的组合定义三角形(triangle )类。 功能要求: 1、设计菜单实现功能选择; 2、输入三角形的三个顶点坐标; 3、判断三角形的种类(一般三角形、等腰三角形、等边三角形、直角三角形和不能构成三角形); 4、计算并输出三角形的面积 。 5字符串类的设计 基本要求: 定义点字符串(string)类,包含存放字符串的字符数组和字符串中字符的个数。 功能要求: 1、设计菜单实现功能选择; 2、字符串的输入与赋值; 3、字符串的运算,包括: 1)连接 2)复制 3)查找 4)交换 5)求子串 6)比较 4、字符串的输出 6学生成绩管理 基本要求: 定义学生(student)类,其中至少包括姓名、性别、学号、班级和四门功课的成绩。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入学生信息,并保存到文件中; 3、计算每个学生的总分与平均分并排序 4、能根据学号修改学生信息 5、能根据学号删除学生信息 6、查询功能: 1)能够根据学号查询学生信息; 2)能够根据姓名、班级查询学生信息 3)统计学生成绩,按照班级和科目计算平均分。 7几何体的表面积与体积 基本要求: 定义一个抽象类形状(shape),包含输入基本图形的信息函数input()、显示基本图形信息函数disp()、计算表面积的函数area()、计算体积的函数volume(),它们均为纯虚函数。通过继承形状类派生出球体类、正方体类、长方体类、圆柱体类。 功能要求: 1、设计菜单实现功能选择; 2、输入各种形状信息; 3、显示各种形状信息; 4、计算各种形状的表面积; 5、计算各种形状的体积; 8学生信息管理 基本要求: 定义学生(student)类,其中至少包括姓名、性别、学号、班级和联系电话。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入学生信息,并保存到文件中; 3、能按照学生的学号排序 4、能根据学号修改学生信息 5、能根据学号删除学生信息 6、查询功能: 1)能够根据学号查询学生信息; 2)能够根据姓名、学号、班级等查询学生信息 3)按照班级统计学生人数。 9教职工信息管理 基本要求: 定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在系部和职称。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确查询职工信息; 2)能够根据姓名、科室查询职工信息 3)分系部进行职称统计,计算各职称的人数 4、根据职工的职称排序输出 5、根据工号修改职工信息 6、根据工号删除职工信息 10复数计算器 基本要求: 定义复数(complex )类,其中至少包括实部和虚部,对复数类实现尽可能丰富的运算。 功能要求: 1)建立复数类 2)复数信息的初始化 3)复数信息的输出 4)将复数信息保存为文件 5)求复数的绝对值 6)实现复数的加、减、乘、除、乘方、自加、自减等运算 三、源程序清单和执行结果:源程序清单中应有足够的注释。 四、课程设计完成时间:二周。 五、课程设计的成绩评定 1、 程序设计结果(30%) 2、 课程设计报告(40%) 3、 平时表现 (30%) 附:课程设计实习报告的书写格式 一、 设计题目 二、 运行环境(软、硬件环境) 三、 算法设计的思想 四、 算法的流程图 五、 算法设计分析 六、 源代码 七、 运行结果分析 八、 收获及体会 六、上机时间安排表 课程设计的时间及教师安排 专业 班级 周次 机房安排 上机时间 指导老师 软件工程 1421813-15 第16-17周 核工楼308 周三(1,2,3,4) 周四(1,2,3,4) 周五(1,2,3,4,5,6,7,8) 魏振华 许志文 15
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服