小作业2-类和对象基础编程题

目录

1. (简答题)

2. (简答题)

3. (简答题)

4. (简答题)​​​​​​​


1. (简答题)

设计一个学生基本信息类Student,学生的基本信息有公有属性:学号、姓名,保护属性:性别,私有属性:联系电话。成员函数有设置联系电话SetTel和获取联系电话GetTel,设置性别SetSex和获取性别GetSex,输出学生所有基本信息OutputInfo,这些函数都是公有成员函数,OutputInfo函数在类外定义,其他函数在类内定义。

编写主程序对一个班的学生信息进行管理(班级学生总数不超过100人),需要的功能有:增加、修改、删除和查找,每个功能用一个函数来实现。

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class Student{
public:
    string num;    //学号
    string name;    //姓名
protected:
    string sex; //性别
private:
    string phoneNum;    //电话号码

public:
    /*性别和电话的Getter and Setter*/
    const string &getSex() const {
        return sex;
    }

    void setSex(const string &sex) {
        Student::sex = sex;
    }

    const string &getPhoneNum() const {
        return phoneNum;
    }

    void setPhoneNum(const string &phoneNum) {
        Student::phoneNum = phoneNum;
    }
    /*输出学生所有信息*/
    void OutputInfo();
};

/*输出学生所有信息*/
void Student::OutputInfo() {
    cout<<"学号:"<<Student::num<<endl;
    cout<<"姓名:"<<Student::name<<endl;
    cout<<"性别:"<<Student::getSex()<<endl;
    cout<<"联系电话:"<<Student::getPhoneNum()<<endl;
}

bool operator==(const Student &t1,const string t2){
    return t1.num == t2;
}

vector<Student> students;

/**
 * 函数声明区
 */
void searchStu(string num);
void modifyStu(string num);
void deleteStu(string num);
void addStu();

int main(){
    /**
     * 1.添加 2.修改 3.删除 4.查找
     */
     int choice;
     string num;

    while (true){
        cin>>choice;
        switch (choice) {
            case 1:
                addStu();
                break;
            case 2:
                cout<<"请输入要修改的学生学号:"<<endl;
                cin>>num;
                modifyStu(num);
                break;
            case 3:
                cout<<"请输入要删除的学生学号:"<<endl;
                cin>>num;
                deleteStu(num);
                break;
            case 4:
                cout<<"请输入要查找的学生学号:"<<endl;
                cin>>num;
                searchStu(num);
                break;
        }
    }
}

/**
* 查找
*/
void searchStu(string num){
    //容器为空直接返回
    if (students.empty()) return;

    //要查找的学生
    vector<Student>::iterator stu = find(students.begin(),students.end(),num);

    if (stu == students.end()){
        cout<<"没有该学生"<<endl;
    } else {
        stu->OutputInfo();
    }

}

/**
* 修改
*/
void modifyStu(string num){
    //容器为空直接返回
    if (students.empty()) return;

    //要修改的学生
    vector<Student>::iterator stu = find(students.begin(),students.end(),num);

    if (stu == students.end()){
        cout<<"没有该学生"<<endl;
    } else {
        cout<<"输入该学生新的信息:"<<endl;
        //设置姓名
        cout<<"姓名:"<<endl;
        cin>>stu->name;
        //设置联系电话
        cout<<"联系电话:"<<endl;
        string phoneNum;
        cin>>phoneNum;
        stu->setPhoneNum(phoneNum);
    }
}

/**
* 删除
*/
void deleteStu(string num){
    //容器为空直接返回
    if (students.empty()) return;

    //要删除的学生
    vector<Student>::iterator stu = find(students.begin(),students.end(),num);

    if (stu == students.end()){
        cout<<"没有该学生"<<endl;
    } else {
        students.erase(stu);
        cout<<"删除成功"<<endl;
    }
}

/**
* 增加
*/
void addStu(){
    Student stu;

    cout<<"请输入要添加的学生信息:"<<endl;
    string sex,phoneNum;
    cout<<"学号:"<<endl;
    cin>>stu.num;
    cout<<"姓名:"<<endl;
    cin>>stu.name;
    cout<<"性别:"<<endl;
    cin>>sex;
    stu.setSex(sex);
    cout<<"联系电话:"<<endl;
    cin>>phoneNum;
    stu.setPhoneNum(phoneNum);

    students.push_back(stu);
}

2. (简答题)

设计一个字符串类MyString,公有数据成员有:char *HeadP(指向字符串的首指针),int Len(字符串的长度),构造函数中申请空间,建立字符串,并设置数据成员,构造函数中可以传进来空串字符或者一串字符,并且可以有默认值,默认值字符串为“String Example!”,析构函数释放空间。

再编写主程序,输入和输出一个字符串类对象和它的长度,然后通过已有的字符串类对象拷贝一个新的字符串类对象,采用拷贝构造函数实现,在输出新的字符串类对象及其长度。(注意:拷贝构造函数中需要用到深拷贝实现,否则程序会出错。)

#include <iostream>
#include <string>

using namespace std;

class MyString{
public:
    char *HeadP;
    int Len;
    MyString(string s,int len);
    ~MyString();
    MyString(const MyString& myString);
};

MyString::MyString(string s,int len) {
    MyString::Len = len;
    //如果len = -1,那么就设置默认值
    if(len == -1){
        s = "String Example!";
        MyString::Len = 15;
        MyString::HeadP = (char*) malloc(sizeof (char) * MyString::Len);
        MyString::HeadP = s.data();
    } else {
        MyString::Len = len;
        MyString::HeadP = (char*) malloc(sizeof (char) * MyString::Len);
        MyString::HeadP = s.data();
    }
}

MyString::~MyString() {
    free(MyString::HeadP);
}

MyString::MyString(const MyString &myString) {
    MyString::HeadP = (char*) malloc(sizeof (char) * myString.Len);
    MyString::HeadP = myString.HeadP;
    MyString::Len = myString.Len;
}

int main() {
    int len;
    string s;
    cin>>len>>s;

    MyString myString_1(s,len);
    MyString myString_2 = myString_1;

    cout<<myString_2.Len<<" "<<myString_2.HeadP<<endl;
    return 0;
}

3. (简答题)

设计一个职工类Employee,属性有:编号Num、姓名Name、住址Addr、公司名称CName、出生日期EDate。其中:出生日期是一个Date类的子对象(需要事先编写Date类),属性是年、月、日。Num是常成员,CName是静态成员。Employee的行为有:设置生日SetDate和获取生日GetDate,输入InInfo和输出OutInfo等。InInfo和OutInfo是输入和输出Employee类的基本属性,OutInfo是常成员函数,InInfo是静态成员函数。类成员的访问属性自定义。

再编写主程序,对2个职工类对象信息进行数据的设置和输入、输出。

#include <iostream>

using namespace std;

/**
 * 日期类
 */
 class Date{
 public:
     int year;  //年
     int month; //月
     int day;   //日
 };

 /**
  * 职工类
  */
class Employee{
public:
    int Num;    //编号
    string Name;    //姓名
    string Addr;    //地址
    static string CName;   //公司名称
    Date EDate; //出生日期

public:
    //设置生日
    void SetDate(int year,int month,int day){
        Employee::EDate.year = year;
        Employee::EDate.month = month;
        Employee::EDate.day = day;
    }

    //获取生日
    const Date &getEDate() const {
        return EDate;
    }

    //输入Employee类的基本属性
    static Employee InInfo(){
        int num;
        string name;
        string addr;
        string cname;
        Date edate;
        cout<<"输入编号:"<<endl;
        cin>>num;
        cout<<"输入姓名:"<<endl;
        cin>>name;
        cout<<"输入地址:"<<endl;
        cin>>addr;
        cout<<"输入生日年份:"<<endl;
        cin>>edate.year;
        cout<<"输入生日月份:"<<endl;
        cin>>edate.month;
        cout<<"输入生日日期:"<<endl;
        cin>>edate.day;

        Employee employee(num,name,addr,edate);
        return employee;
    }

    //输出Employee类的基本属性
    const void OutInfo() const{
        cout<<"编号:"<<Employee::Num<<endl;
        cout<<"姓名:"<<Employee::Name<<endl;
        cout<<"住址:"<<Employee::Addr<<endl;
        cout<<"公司名称:"<<Employee::CName<<endl;
        cout<<"出生日期:"<<Employee::EDate.year<<"年"<<Employee::EDate.month<<"月"<<Employee::EDate.day<<"日"<<endl;
    }

    Employee(int Num,string Name,string Addr,Date EDate){
        this->Num = Num;
        this->Name = Name;
        this->Addr = Addr;
        this->EDate = EDate;
    }

    Employee(){

    }
};

string Employee::CName = "好多人";

int main() {
    system("chcp 65001");
    /**
     * 职工1
     */
    //数据设置
    Employee x;
    x.SetDate(2003,10,10);  //设置生日
    x.Num = 001;
    x.Name = "赵玥萱";
    x.Addr = "天元区泰山路88号";
    //打印
    x.OutInfo();

    /**
     * 职工2
     */
     //数据输入
     Employee y = Employee::InInfo();
     y.OutInfo();

    return 0;
}

4. (简答题)

​​​​​​​ 设计一个名为Rectangle的矩形类,其私有属性为矩形的左上角和右下角两个点的坐标,成员函数能计算和输出矩形的周长,并统计程序中目前存在矩形类对象的个数,然后写一个友元函数求矩形的面积。

#include <iostream>
#include <cmath>

using namespace std;

/**
 * 坐标类
 */
class Coordinate{
public:
    double x;  //横坐标
    double y;  //纵坐标

public:
    Coordinate(double x,double y){
        this->x = x;
        this->y = y;
    }

    Coordinate() {}
};

/**
 * 矩形类
 */
class Rectangle{
public:
    static int count;   //计数器

private:
    Coordinate left_up; //左上角坐标
    Coordinate right_down;  //右下角坐标

public:
    /*声明友元函数求矩形面积*/
    friend double calArea(Rectangle&);

    /*计算周长,统计矩形类个数*/
    int calCir(){
        double res; //计算结果
        double length = fabs(Rectangle::right_down.x - Rectangle::left_up.x); //长
        double height = fabs(Rectangle::left_up.y - Rectangle::right_down.y);  //高
        res = 2*(length + height);
        cout<<"矩形的周长是:"<<res<<endl;
        cout<<"目前存在的矩形类对象个数为:"<<count<<endl;

        return count;
    }

    /*构造器*/
    Rectangle(Coordinate a,Coordinate b){
        left_up = a;
        right_down = b;
        count++;    //调用构造函数后计数器+1
    }
};

/*计算矩形面积*/
double calArea(Rectangle& rectangle){
    double res; //计算结果
    double length = fabs(rectangle.right_down.x - rectangle.left_up.x); //长
    double height = fabs(rectangle.left_up.y - rectangle.right_down.y);  //高
    res = length * height;
    return res;
}

int Rectangle::count = 0;

int main() {
    system("chcp 65001");
    /**
     * 测试,计算面积
     */
     Coordinate left_1 = Coordinate(0, 6);
     Coordinate right_1 = Coordinate(4, 0);
     Rectangle rectangle_1 = Rectangle(left_1, right_1);

     double res = calArea(rectangle_1);

     cout<<"矩形的面积是:"<<res<<endl;

     /**
      * 测试,算周长和个数
      */
     Coordinate left_2 = Coordinate(1,8);
     Coordinate right_2 = Coordinate(5,2);
     Rectangle rectangle_2 = Rectangle(left_2,right_2);
     rectangle_2.calCir();

    return 0;
}

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Document number:BGCG-0857-BTDO-0089-2022 Document number:BGCG-0857-BTDO-0089-2022 计算机应用基础作业 期末作业考核 《计算机应用基础》 满分 100分 一、判断对错(每小题1分,共10分) ( )1.冯.诺依曼提出的计算机体系结构奠定了现代计算机的结构理论基础。 ( × )2.DOS操作系统是一个单用户多任务操作系统。 ( )3.没有装配软件系统的计算机不能做任何工作,没有实际的使用价值。 ( × )4.Windows中的记事本和写字板都不能插入图片。 ( × )5.Windows回收站中的文件不占有硬盘空间。 ( )6.在Word中可以实现文字环绕图片的效果。 ( × )7.在Excel中,选取连续单元格必须用ALT键配合。 ( × )8.在PowerPoint中,只有备注视图和母版视图状态可以对母版进行编辑和修改。 ( )9.用户可以对某张幻灯片的背景进行设置而不影响其它幻灯片。 ( )10.文件型病毒传染的对象主要是.COM和.EXE类型的文件。 二、计算题(每小题8分,共16分) 1.设汉字点阵为32×32,那么100个汉字的字形码信息需占用多少字节 解:32×32÷8×100=12800 2.将二进制数100101转换对应的十进制数和对应的十六进制数。 解:100101?=?37D?=?25H? 三、简答题(每小题8分,共40分) 1.计算机由哪五部分组成请解释各部分的功能,并画出它们的工作原理图。 答:1、计算机由运算器、控制器、存储器、输入设备和输出设备五部分组成。运算器是执行算术运算和逻辑运算的功能部件。控制器是按照人们预先确定的操作步骤,控制计算机各部件步调一致的自动工作的功能部件。存储器是用来存储信息的功能部件。输入设备是用来接受用户输入的原始数据和程序,并把它们转变为计算机能识别的形式存放到内存中。输出设备是用于将存放在内存中由计算机处理的结果转变为人们所接受的形式。 内部存储器? 外部存储器? 输入设备 中央处理 输出设备? 计算机工作原理图? 2.简述什么是裸机? 答:把电脑的各个配件简单的组装了起来,而没有装上任何软件叫裸机。? 3.INTERNET提供的服务有哪些? 答:INTERNET提供的服务功能有电子邮件(E-mail)、WWW(World?Wide?Web)、文件传输(FTP)、远程登录(TELNET)、菜单式检索器(Gopher)、查询(Archie)、WIAS(Wide?Area?Information?Service)、电子公告板(BBS)、电子论坛、名录服务等。? 4.在Word中如何输入"二 一 年"的字样,有几种简便方法? 答:这个问题主要是出在" "的输入上。对于智能ABC输入法和全拼输入法:调出输入法的状态条,鼠标右击小键盘图标,选"特殊符号",会弹出小键盘,在"T"键位会有符号" ",单击输入。对于微软拼音输入法:调出输入法的状态条,鼠标右击小键盘图标,选"选软键盘"-"特殊符号",会弹出小键盘,在"T"键位会有符号" ",单击输入。其实最方便的方法为:在智能ABC输入法下输入I0(小写字母i和数字0)即可。可以直接输入"i2010n"显示"二 一 年"。? 5.在Excel表格中,如何输入身份证号码,或是带有前0的数字? 答:右键单击,然后设置单元格格式为文本,也可以在数字前面先输入一个单引号 四、论述题(每小题12分,共34分)?? 1.请详细介绍自己在平时的学习中应用了Word的哪些功能Word在什么方面对你的帮助很大? 答:打开Word,鼠标点击左图标,下拉菜单,然后点击打开菜单,找到自己存储文件的地址,然后点击图标,即可打开一个新的文件。打开文件后,对文件进行编辑,先按住鼠标左键,移动光标,九选中了要编辑的文档。首先编辑字体,鼠标点击最上面的开始菜单,点击字体方框的右边小三角尖,弹出供你选择的字体,然后点击鼠标左键,选中相应的字体即可。字体旁边的方框是字号,同样点击小三角尖,选择自己需要的字号即可。如果要给整篇文档排版,可以把鼠标放在文档左边空白处,鼠标变成向右指的箭头,快速连续点击三下,即可选择整篇文档,选中后,可以、复制、修改字体、进行段落编辑等。例如进行段落编辑,可以点击段落,修改文本的缩进和间距,进行换页和分行等。如:我要让每一段文字的首行缩进两个字,即可在特殊格式下,点击小三角尖,选择首行缩进即可,一般它会自动选择缩进2磅。要插入图片、艺术字等,可以在插入菜单中选择相应的操作,一般是点击左键即可选择相应的操作。Word在文字的编辑,排版等方面对我的帮助都很大。 2.创建一个用于语文教学的PowerPoint演示文稿,其内容自定,不要太大,做到讲解清楚为主。结构自设,有自

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值