第2周-项目5-数组作数据成员-工资类(动态数组)

问题及代码:
/*   
*Copyright (c)2015,烟台大学计算机与控制工程学院   
*All rights reserved.   
*文件名称:score.cpp   
*作    者:单昕昕   
*完成日期:2015年3月20日   
*版 本 号:v1.0   
*   
*问题描述:用salary[50]有限制,实际人数少时,会浪费空间,人数多了,无法完成任务。在main()中先输入职工人数,作为参数传递给输入职工工资的成员函数,然后利用动态分配内存的机制,开辟一个大小正好的连续空间,完成上面的工作。 
*程序输入:工资,涨的工资。
*程序输出:降序排序后工资数据。  
*/ 
#include <fstream>   //操作文件必写
#include<iostream>
#include<cstdlib>
using namespace std;
class Salary
{
private:
    int number;
    double *salarys; //多人的工资

public:
    void set_salarys();//输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中;
    void add_salarys(int x);//给每个人涨x元工资
    void sort_salarys();//对工资排序
    void show_salarys();//显示工资信息
};

void Salary::set_salarys( )
{
    int i;
    cout<<"请输入职工的人数: ";
    cin>>number;
    salarys=new double[number];  //分配大小正好合适的空间存放数据
    cout<<"请输入职工的工资: ";
    for(i=0; i<number; ++i)
    {
        cin>>salarys[i];
    }
}
void Salary::add_salarys(int x)//给每个人涨x元工资
{
    for(int i=0; i<number; i++)
        salarys[i]+=x;
}
void Salary::sort_salarys()//对工资排序
{
    int j,i,t;    //冒泡升序排列所有工人的工资
    for(j=0; j<number-1; j++)
        for(i=0; i<number-1-j; i++)
            if(salarys[i]>salarys[i+1])
            {
                t=salarys[i];
                salarys[i]=salarys[i+1];
                salarys[i+1]=t;
            }
}
void Salary::show_salarys()//显示工资信息
{
    int i;
    for(i=0; i<number; i++)
        cout<<salarys[i]<<endl;
}
int main()
{
    int x;
    Salary salary;
    salary.set_salarys();
    cout<<"请输入涨的工资数:";
    cin>>x;
    salary.add_salarys(x);
    salary.show_salarys();
    return 0;
}



运行结果:


知识点总结:
动态数组。

学习心得:

说实话我一开始真的忘了怎么开辟新的空间,忘了动态数组到底怎么解决了。。看来知识点就是得多用才能记住啊~~~

### C++ 中定义和使用结构体数组 #### 定义结构体 在 C++ 中,`struct` 是一种自定义的数据型,允许将不同型的数据组合在一起。以下是定义 `Worker` 结构体的示例: ```cpp #include <iostream> #include <string> using namespace std; // 1. 创建结构体 struct Worker { int id; // 员工编号 string name; // 员工姓名 double salary; // 工资 }; ``` 上述代码定义了一个名为 `Worker` 的结构体,其中包含了三个成员变量:员工编号 (`id`)、姓名 (`name`)工资 (`salary`)--- #### 定义结构体数组 一旦定义了结构体,就可以像其他基本数据型一样创建其数组。以下是一个包含多个 `Worker` 对象的结构体数组的例子[^3]: ```cpp int main() { // 2. 定义结构体数组 const int size = 3; Worker workers[size]; // 3. 初始化结构体数组中的元素 workers[0].id = 101; workers[0].name = "Alice"; workers[0].salary = 5000.0; workers[1].id = 102; workers[1].name = "Bob"; workers[1].salary = 6000.0; workers[2].id = 103; workers[2].name = "Charlie"; workers[2].salary = 7000.0; // 4. 遍历并输出结构体数组的内容 for (int i = 0; i < size; ++i) { cout << "ID: " << workers[i].id << ", Name: " << workers[i].name << ", Salary: $" << workers[i].salary << endl; } return 0; } ``` 在这个例子中,首先声明了一个大小为 3 的 `workers` 数组,并逐个初始化每个元素的成员变量。最后通过循环遍历整个数组并将每条记录打印到控制台。 --- #### 使用指针访问结构体数组 除了直接通过索引访问外,还可以借助指针来操结构体数组。下面展示了如何使用指针对结构体数组进行读取和修改[^2]: ```cpp int main() { // 定义结构体数组 Worker workers[] = {{101, "Alice", 5000}, {102, "Bob", 6000}, {103, "Charlie", 7000}}; int size = sizeof(workers) / sizeof(Worker); // 获取第一个元素地址为起始指针 Worker* ptr = workers; // 输出结构体数组内容 for (int i = 0; i < size; ++i) { cout << "Pointer Access - ID: " << ptr->id << ", Name: " << ptr->name << ", Salary: $" << ptr->salary << endl; // 移动指针至下一个元素 ptr++; } return 0; } ``` 这里先计算出数组长度,再用指针逐一访问每一个结构体实例。注意当使用指针时需改用箭头运算符(`->`)代替`.` 来获取成员值。 --- #### 总结 以上介绍了如何在 C++ 中定义以及操结构体数组的方法。无论是简单的赋值还是复杂的逻辑处理都可以基于此基础展开实现。合理运用可以使程序更加清晰易懂且高效实用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值