0

我的任务是使用 3 个带参数的函数,如下所示:

  1. 函数 calcRegBill – 接受一个整数参数来表示使用的分钟数。确定并返回到期总金额。

  2. 函数 calcPremBill – 接受两个整数参数,分别表示使用的白天分钟数和夜间分钟数。确定并返回到期总金额。

  3. 函数 printBill – 接受 4 个参数:字符串帐号、字符服务代码、使用的整数总分钟数和到期金额。请注意,这是一个通用的打印账单功能,它使用以下格式打印普通账单或保费账单:

帐号:XXXX

服务类型:常规(或高级,取决于收到的字符)

总分钟数:XXX

应付金额:$XXX.XX

您的主要功能将提示用户输入帐号和服务代码。根据服务代码,main 将询问正确的分钟数,然后根据需要调用上面的函数来完成工作。此外,您必须:

在您的程序中加入一个循环,以根据需要多次运行账单。您可以通过哨兵控制循环或计数器控制循环来执行此操作。

我已经构建了程序并使用程序主要功能中的所有内容对其进行了测试。我真的很困惑如何将它分解为 3 个单独的功能并让它仍然有效。我是 C++ 的菜鸟

这是到目前为止的程序,我开始添加功能,但我不相信它们是正确的。

// Cell Bill Fun
// April 14, 2013

#include <iostream>
#include <iomanip>

using namespace std;

double calcRegBill(int a);

double calcPremBill(int b, int c);

void printBill(string acctNumber, char serviceCode, int d, double e);

int main()
{

//declare variables for question 4

char serviceCode;
int acctNumber;
int minutes;
int dayMinutes;
int nightMinutes;
int charge;
int dayFee;
int nightFee;
double amtDue;


//get input
cout << "Please enter your information to calculate your cell phone bill ";
cout << "What is your account number? (please enter a 4-digit number-example 1234): ";
cin >> acctNumber;
cout << "Do you have regular or premium service? Enter r for regular service, p for   Premium.: ";
cin >> serviceCode;

//format output
cout<< setprecision(2) << fixed;
//output

 switch (serviceCode)
{
    case 'r':{
cout << "How many minutes did you use?: ";
cin >> minutes;
    if (minutes <= 50)
    amtDue = 10;
    else if (minutes > 50)
     amtDue=10+((minutes-50)*.20);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

case 'R':{
cout << "How many minutes did you use?: ";
cin >> minutes;
    if (minutes <= 50)
    amtDue = 10;
    else if (minutes > 50)
     amtDue=10+((minutes-50)*.20);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

case 'p':
    cout << "How many daytime minutes did you use?";
    cin >> dayMinutes;
    if (dayMinutes <= 75)
    dayFee = 0;
    else if (dayMinutes > 75)
    dayFee=((dayMinutes-75)*.10);
    cout << "How many night time minutes did you use?";
    cin >> nightMinutes;
    if (nightMinutes <= 100)
    nightFee = 0;
    else if (nightMinutes > 100)
    nightFee=((nightMinutes-100)*.05);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Premium" << endl;
cout <<"Total Minutes:" <<dayMinutes+nightMinutes << endl;
cout <<"Amount Due: $"<<25<<"+"<<dayFee<<"+"<<nightFee<<"= $"<<25+dayFee+nightFee << endl;
break;

case 'P':
cout << "How many daytime minutes did you use?";
    cin >> dayMinutes;
    if (dayMinutes <= 75)
    dayFee = 0;
    else if (dayMinutes > 75)
    dayFee=((dayMinutes-75)*.10);
    cout << "How many night time minutes did you use?";
    cin >> nightMinutes;
    if (nightMinutes <= 100)
    nightFee = 0;
    else if (nightMinutes > 100)
    nightFee=((nightMinutes-100)*.05);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Premium" << endl;
cout <<"Total Minutes:" <<dayMinutes+nightMinutes << endl;
cout <<"Amount Due: $"<<25<<"+"<<dayFee<<"+"<<nightFee<<"= $"<<25+dayFee+nightFee << endl;
break;

default:

cout << "Invalid Service Code. Enter r for regular service, p for Premium.";

}






return 0;

}
double calcRegBill(int a)

{


}
double calcPremBill(int b, int c)

{

}

void printBill(string acctNumber, char serviceCode, int d, double e )
{


return;
}
4

3 回答 3

1

函数通过请求数据(传递给它们的参数)来工作,并且通常通过返回数据来操作这些数据。

例如,在case 'r':块中,而不是你的代码,你会想要:

cout << "How many minutes did you use?: ";
cin >> minutes;

amtDue = calcRegBill(minutes);

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

然后,您可以将之前在 main 中计算 amtDue 的代码移动到calcRegBill()函数中,如下所示:

double calcRegBill(int minutes)
{
    double bill;

    if (a < 50)
        bill = 10;

    else
        bill = 10+((minutes-50)*.20);

    return bill;
}

这里的关键是不是在主函数中计算amtDue,而是在函数中计算calcRegBill并返回给主函数。另外,请注意我将参数的名称从 更改aminutes。这提高了其在函数中的用途的清晰度。

于 2013-04-14T23:25:36.003 回答
0

你的程序的一般结构大多是正确的,我不确定你在问什么。

对于故障排除,编写您的一个函数并在没有所有其他内容的情况下对其进行测试。例如,写 calcRegBill...

然后写一个很简单的main:

int main() {
  cout << calcRegBill(3) << endl;
  cout << calcRegBill(11) << endl;
}

你得到预期的值了吗?如果是这样,那么继续下一个功能。开发通常是将问题分解为更小的可管理问题。

于 2013-04-14T23:11:47.140 回答
0

你需要分解你正在做的事情的流程。

  1. 首先,你收集信息。注意:无论是保费账单还是普通账单,您要查找的信息都是相同的。你不需要这么早分支。
  2. 为了计算他们的账单,您根据保费或常规进行分支。无论哪种方式,您都可以从中获得 a double,因此您可以拥有一个double变量来存储来自calcRegBill或其中的​​回报calcPremBill。在分支之前声明这个double变量,在你的两个分支(常规或高级)内分配给它。
  3. 然后,当您调用 时printBill,您可以传递此值以及它是什么类型的账单。
于 2013-04-14T23:22:16.183 回答