C++ DLUT 上机作业(二)

C++ DLUT 上机作业(二)

我又来了,第二次的。。。

学生类析构

/设计描述某一班级的学生类,私有数据成员包括学号和姓名int id; char name, 静态成员 char classNo[10]; 公有成员函数实现以下功能:
1)定义构造函数,实现对数据成员的初始化,学生对象的默认名字是“ssdut”,默认的班号为“软2016”
2)定义析构函数,验证不同对象何时被析构;
3)重载成员函数set, 完成对各种数据成员的设置
4)显示学生相关信息的成员函数show(), 按清晰格式输出学生的所有信息
请给出类声明与定义,并对其在main()中进行测试,提交源代码(在答案框粘贴代码),附件:Stu+姓名.cpp)以及运行截图。*/

#include<iostream>
#include<cstring>

using namespace std;

class Student{
	private:
		int id;
		char *name;
		static char classNo[10];
	public:
		Student();
		Student(int num,char *n);
		~Student()
		{
			cout<<"姓名为"<<name<<"的学生被析构"<<endl; 
		}
		void set(int num,char *n);
		void set(char *cla);
		void show();
};
char Student::classNo[10]="软2006";
Student::Student()
{
	id=0;
	name=new char[6];
	strcpy(name,"ssdut");
}
Student::Student(int num, char* n ) {
	id = num;
	name = new char[strlen(n) + 1];
	strcpy(name, n);
}
void Student::set(int num,char *n)
{
	id=num;
	name=new char[strlen(n)+1];
	strcpy(name,n);
} 
void Student::set(char *m)
{
	strcpy(classNo,m);
}
void Student::show()
{
	cout<<"姓名:"<<name<<"  学号:"<<id<<"  班级:"<<classNo<<endl;
}
int main()
{
	int i;
	char name[10],cla[10];
	Student s1,s2,s3;
	cout<<"输入学生1信息(学号,姓名,班级):"<<endl;
	cin>>i>>name>>cla;
	s1.set(i,name);
	s1.set(cla);
	cout<<"输入学生2信息(学号,姓名,班级):"<<endl;
	cin>>i>>name>>cla;
	s2.set(i,name);
	s2.set(cla);
	cout<<"输出学生信息:"<<endl;
	s1.show();
	s2.show();
	cout<<"默认学生信息:"<<endl;
	s3.show();
}

学生日期组合

/利用已定义的日期类Date, 设计学生类Student,
私有数据成员包括学号和姓名int id; char name[20];
表示入学日期时间对象Date roll;
以及统计学生对象数目的静态成员number。
公有成员函数实现以下功能:
1)定义默认构造函数与有参构造函数,实现对所有数据成员的初始化,默认学生对象的名字是“ssdut”,默认入学日期为2020年9月8日,默认的学号为2020001(入学年份与number的组合) ,每创建一个对象则number与学号自增1,例如2020002。
2)重载设置入学日期的成员函数 void set(const Date&); bool set(int y, int m, int d);
3)获取已有学生数目的静态成员函数 geNum();
4)显示学生相关信息的show(), 按清晰格式输出学生的所有信息
请给出完整的类定义,并在main()中进行测试。
/

#include<iostream>
#include<cstring>
 
using namespace std;

class Date{
	private:
		int year;
		int month;
		int day;
	public:
		Date();
		Date(int y,int m,int d);
		void set(const Date&);
		bool set();
		int gety(){return year;}
		int getm(){return month;}
		int getd(){return day;}
};
Date::Date()
{
	year=2020;
	month=9;
	day=8;
}
Date::Date(int y,int m,int d)
{
	year=y;
	month=m;
	day=d;
}
void Date::set(const Date& d)
{
	year=d.year;
	month=d.month;
	day=d.day;
}
bool Date::set()
{
	if(year<=0)
	{
		return false;
	}
	if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	{
		if(!(day>0&&day<=31))
		return false;
	} 
	else if(month==4||month==6||month==9||month==11)
	{
		if(!(day>0&&day<=30))
		return false;
	}
	else if(month==2)
	{
		if(year%100==0&&year%4!=0||year%400==0)
		{
			if(!(day>0&&day<=29))
			return false;
		}
		else
		{
			if(!(day>0&&day<=28))
			return false;
		}
	}
	else
	return false;	
	return true;
}
class Student{
	private:
		int id;
	    char *name;
	    Date roll;
	    static int number;
	public:
		Student();
		Student(int n,const char *m,Date p);
		static int getNum();
		void show();
};
int Student::number=0;
Student::Student()
{
	id=2020001;
	name=new char[6];
	strcpy(name,"ssdut");
	number++;
	id+=number;
}
Student::Student(int n,const char *m,Date p):roll(p) 
{
	id=n;
	name=new char[strlen(m)+1];
	strcpy(name,m);
	if(roll.set()!=0)
	{
		number++;
	    id+=number;
	}
	else
	cout<<"创建的学生中"<<name<<"信息有误,已删去"<<endl;
}
int Student::getNum()
{
	return number;
}
void Student::show()
{
	cout<<"学号:"<<id<<endl;
	cout<<"姓名:"<<name<<endl;
	cout<<"入学日期时间:"<<roll.gety()<<"/"<<roll.getm()<<"/"<<roll.getd()<<endl;
}
int main()
{
	Date d1,d2(2020,13,1),d3(2016,45,1),d4(2018,9,1);
	Student s1,s2(202001,"sisi",d2),s3(202001,"haha",d3),s4(202001,"xixi",d4);
	if(d1.set())
	s1.show();
	if(d2.set())
	s2.show();
	if(d3.set())
	s3.show();
	if(d4.set())
	s4.show();
	cout<<"已有学生数目:"<<s2.getNum();
}

圆与点位置关系

/定义平面点类Point,包括私有成员float x, y; 及相关成员函数;
定义圆类Circle,私有数据成员包括圆心Point center和半径double radium;
公有成员函数实现以下功能:
1)重载各种构造函数,允许将多个圆按不同形式初始化。
2)定义常成员函数show( )输出信息,例如圆的相关信息
3)定义常成员函数area( )计算圆的面积
4) 设计源判断点与圆的关系judge(), 若p在圆内或圆上返回true,否则返回false。
思考是友元函数还是成员函数?能否利用点距类计算距离的成员函数
/

#include<iostream>

using namespace std;

class Point{
	private:
		float x;
		float y;
	public:
		void setX(float m_x){x=m_x;}
		void setY(float m_y){y=m_y;}
		float getX(){return x;}
		float getY(){return y;}
};
class Circle{
	private:
		Point center;
		double radium;
	public:
		void setr(double r){radium=r;}
		double getr(){return radium;}
		double area()const;
		void setCenter(Point _Center)
	    {
		    center=_Center;
	    }
	    Point getCenter()
 	    {
		    return center;
	    }
		void show()const;
};
const double pi=3.14;
double Circle::area()const
{
	return radium*radium*pi;
}
void Circle::show()const
{
	cout<<"******圆的信息******"<<endl;
	cout<<"半径:"<<radium<<endl;
    cout<<"圆的面积:"<<area()<<endl;
}
bool judge(Circle &c,Point &p)
{
	double distance;
	distance=(c.getCenter().getX()-p.getX())*(c.getCenter().getX()-p.getX()) + 
	(c.getCenter().getY()-p.getY())*(c.getCenter().getY()-p.getY());
	double distanceR;
	distanceR=c.getr()*c.getr();
	if(distanceR>=distance)
	return true;
	return false;
}
int main()
{
    Circle c;
	double r;
	cout<<"输入半径"<<endl;
	cin>>r;
	c.setr(r);
	c.show();
	Point center;
	float cx,cy;
	cout<<"输入圆心坐标"<<endl;
	cin>>cx>>cy;
	center.setX(cx);
	center.setY(cy);
	c.setCenter(center);
	Point p;
	float px,py;
	cout<<"输入点坐标"<<endl;
	cin>>px>>py;
	p.setX(px);
	p.setY(py);
	if(judge(c,p))
	cout<<"点在圆上或圆内"<<endl;
	else
	cout<<"点在圆外"<<endl;
}

请妥善参考。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

残夜.寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值