(visual studio2022)C++编写一个程序

已知某餐馆近三年每月的营业额(单位为万)为:
2019年:12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4
2020年:18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5
2021年:22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3
编写一个完整的程序,实现以下功能:
1)定义一个数组,表达所有月份营业额
2)写一个函数,返回一个数组,表达每年的营业总额
3)写一个函数,返回一个数组,表达每年的营业税
​(计算方法:营业总额30万内免税,30万到50万以内1.5%,50万到100万3%,100万到200万5%,200万以上10%)
4)写两个函数,分别计算某年某月的同比和环比比例。
(环比是相邻两个月份增长率,同比是相邻两年同月份增长率)

定义一个月份营业额的数组,长度为12,将三年每个月的营业额相加

#include <iostream>
using namespace std;
float yye[3][12] = {{12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4},
                    {18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5},
                    {22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3}};

void calcMonth(float a[])
{
    for(int i=0;i<12;i++)
    {
        for(int j=0;j<3;j++)
            a[i] += yye[j][i];
    }
}

void calcTotal(float a[])
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<12;j++)
            a[i] += yye[i][j];
    }
}

void calcTotalFax(float a[],float b[])
{
    for(int i=0;i<3;i++)
    {
        if(a[i] <= 30)
            b[i] = 0;
        else if(a[i] <= 50)
            b[i] = a[i]*0.015;
        else if(a[i] <= 100)
            b[i] = a[i]*0.03;
        else if(a[i] <= 200)
            b[i] = a[i]*0.05;
        else
            b[i] = a[i]*0.1;
    }
}

int tb(int year,int month,float &t)
{
    if(year < 2019 || year > 2021)
        return 0;
    if(month < 1 || month > 12)
        return 0;
    if(year == 2019 && month == 1)
        return 0;
    float now,prev;
    now = yye[year-2019][month-1];
    if(month == 1)
        prev = yye[year-2020][11];
    else
        prev = yye[year-2019][month-2];
    t = (now-prev)/prev*100;
    return 1;
}

int hb(int year,int month,float &t)
{
    if(year < 2020 || year > 2021)
        return 0;
    if(month < 1 || month > 12)
        return 0;
    float now,prev;
    now = yye[year-2019][month-1];
    prev = yye[year-2020][month-1];
    t = (now-prev)/prev*100;
    return 1;
}

int main()
{
    float total[3] = {0};
    float totalFax[3] = {0};
    float y[12] = {0};
    int res;
    calcMonth(y);
    cout<<"每月营业额为:"<<endl;
    for(int i=0;i<12;i++)
        cout<<y[i]<<" ";
    cout<<endl;
    calcTotal(total);
    cout<<"每年营业额为:"<<endl;
    for(int i=0;i<3;i++)
        cout<<total[i]<<" ";
    cout<<endl;
    cout<<"每年营业税为:"<<endl;
    calcTotalFax(total,totalFax);
    for(int i=0;i<3;i++)
        cout<<totalFax[i]<<" ";
    cout<<endl;
    cout<<"请输入同比和环比的年份及月份:";
    int year,month;
    cin>>year>>month;
    float t1,t2;
    res = tb(year,month,t1);
    cout<<"同比增长率为:";
    if(res == 0)
        cout<<"输入错误"<<endl;
    else
        cout<<t1<<"%"<<endl;
    cout<<"环比增长率为:";
    res = hb(year,month,t2);
    if(res == 0)
        cout<<"输入错误"<<endl;
    else
        cout<<t2<<"%"<<endl;
    return 0;
}

#include <iostream>
#include <array>

constexpr int NUM_MONTHS = 36;                              // 三年每月个数
constexpr int NUM_YEARS = 3;                                // 年数
constexpr int NUM_MONTHS_PER_YEAR = NUM_MONTHS / NUM_YEARS; // 每年的月份数

// 营业额数组
const std::array<double, NUM_MONTHS> revenues = {
    12.3, 11.5, 12.4, 13.8, 17.5, 16.4, 12.7, 13.2, 15.7, 13.0, 16.9, 18.4,
    18.6, 13.4, 13.3, 16.2, 17.0, 17.9, 17.2, 18.1, 19.8, 19.3, 18.2, 18.5,
    22.3, 21.2, 22.3, 23.5, 22.7, 23.7, 24.9, 24.1, 25.3, 26.4, 26.8, 27.3};

// 返回一个数组,表达每年的营业总额
std::array<double, NUM_YEARS> getAnnualRevenues()
{
    std::array<double, NUM_YEARS> annualRevenues = {0.0, 0.0, 0.0};
    for (int i = 0; i < NUM_MONTHS; i++)
    {
        annualRevenues[i / NUM_MONTHS_PER_YEAR] += revenues[i];
    }
    return annualRevenues;
}

// 返回一个数组,表达每年的营业税
std::array<double, NUM_YEARS> getAnnualTaxes()
{
    std::array<double, NUM_YEARS> annualRevenues = getAnnualRevenues();
    std::array<double, NUM_YEARS> annualTaxes = {0.0, 0.0, 0.0};
    for (int i = 0; i < NUM_YEARS; i++)
    {
        double annualRevenue = annualRevenues[i];
        if (annualRevenue > 200000)
        {
            annualTaxes[i] = annualRevenue * 0.1;
        }
        else if (annualRevenue > 100000)
        {
            annualTaxes[i] = annualRevenue * 0.05;
        }
        else if (annualRevenue > 50000)
        {
            annualTaxes[i] = annualRevenue * 0.03;
        }
        else if (annualRevenue > 30000)
        {
            annualTaxes[i] = annualRevenue * 0.015;
        }
        // 返回某年某月的同比增长率
        double getYoYGrowth(int year, int month)
        {
            if (year == 0)
            {
                return 0.0; // 第一年没有同比增长率
            }
            double previousYearRevenue = revenues[(year - 1) * NUM_MONTHS_PER_YEAR + month];
            double currentYearRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month];
            return (currentYearRevenue - previousYearRevenue) / previousYearRevenue;
        }

        // 返回某年某月的环比增长率
        double getMoMGrowth(int year, int month)
        {
            if (month == 0)
            {
                return 0.0; // 第一个月没有环比增长率
            }
            double previousMonthRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month - 1];
            double currentMonthRevenue = revenues[year * NUM_MONTHS_PER_YEAR + month];
            return (currentMonthRevenue - previousMonthRevenue) / previousMonthRevenue;
        }

        int main()
        {
            std::array<double, NUM_YEARS> annualRevenues = getAnnualRevenues();
            std::array<double, NUM_YEARS> annualTaxes = getAnnualTaxes();
            std::cout << "Annual revenues: ";
            for (int i = 0; i < NUM_YEARS; i++)
            {
                std::cout << annualRevenues[i] << " ";
            }
            std::cout << std::endl;
            std::cout << "Annual taxes: ";
            for (int i = 0; i < NUM_YEARS; i++)
            {
                std::cout << annualTaxes[i] << " ";
            }
            std::cout << std::endl;

            int year = 1, month = 3;
            std::cout << "YoY growth for year " << year + 1 << ", month " << month + 1 << ": " << getYoYGrowth(year, month) << std::endl;
            std::cout << "MoM growth for year " << year + 1 << ", month " << month + 1 << ": " << getMoMGrowth(year, month) << std::endl;

            return 0;
        }

运行结果及代码如下:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <iomanip>
using namespace std;
//返回每年的营业总额
float* sumOfEveryYear(float all[])
{
    float* sum = new float[3];
    for (int i = 0; i < 3; i++)
    {
        sum[i] = 0;
        for (int j = 0; j < 12; j++)
            sum[i] += all[i * 12 + j];
    }
    return sum; //返回每年的营业总额
}
//返回每年的营业税
float* sumOfRate(float *sum)
{
    float* r = new float[3];
    for (int i = 0; i < 3; i++)
    {
        if (sum[i] <= 30)
            r[i] = 0;
        else if (sum[i] <= 50)
            r[i] = (sum[i] - 30) * 0.015;
        else if (sum[i] <= 100)
            r[i] = 20 * 0.015 + (sum[i] - 50) * 0.03;
        else if (sum[i] <= 200)
            r[i] = 20 * 0.015 + 50 * 0.03 + (sum[i] - 100) * 0.05;
        else
            r[i] = 20 * 0.015 + 50 * 0.03 + 100 * 0.05 + (sum[i] - 200) * 0.1;
    }
    return r;
}

//计算环比
void huanBi(float all[], int year, int mon)
{
    int index = (year - 2019) * 12 + mon - 1; //得到该日期对应的下标
    float r;
    if (index == 0)
        cout <<"没有2019年1月之前的数据"<<endl;
    else
    {
        r = (all[index] - all[index - 1]) / all[index - 1];
        cout << "环比增长:" << fixed << setprecision(2) << r << endl;
    }
}

//计算同比
void tongBi(float all[], int year, int mon)
{
    int index1,index2;
    float r;
    if (year == 2019)
    {
        cout << "没有2019年之前的数据"<<endl;
    }
    else
    {
        index1 = (year - 2019) * 12 + mon - 1;
        index2 = (year - 2019 - 1) * 12 + mon - 1; //前一年的数据
        r = (all[index1] - all[index2]) / all[index2];
        cout << "同比增长:" << fixed << setprecision(2) << r << endl;
    }
}

int main()
{
    float all[] = { 12.3,11.5,12.4,13.8,17.5,16.4,12.7,13.2,15.7,13.0,16.9,18.4,
        18.6,13.4,13.3,16.2,17.0,17.9,17.2,18.1,19.8,19.3,18.2,18.5,
        22.3,21.2,22.3,23.5,22.7,23.7,24.9,24.1,25.3,26.4,26.8,27.3 }; //保存所有销售额
    int i, year, mon;
    float* sum = sumOfEveryYear(all); //获得每年的营业总额
    float* rate = sumOfRate(sum); //获得每年的营业税

    for (i = 0; i < 3; i++)
        cout << i + 2019 << "年的营业总额:" << fixed << setprecision(2) << sum[i] << endl;

    for (i = 0; i < 3; i++)
        cout << i + 2019 << "年的营业税:" << fixed << setprecision(2) << rate[i] << endl;

    cout << "请输入年(2019-2021)和月份(1-12): ";
    cin >> year >> mon;

    //计算同比
    tongBi(all, year, mon);
    //计算环比
    huanBi(all, year, mon);
    return 0;

}