C++数据套餐计费程序修复咨询:新手求助完整实现方案
搞定你的C++数据套餐计费程序!
嘿,刚入门编程别慌!我来帮你搭这个数据套餐计费的C++程序,一步步来你肯定能搞定~先给你一份完整的可运行代码,然后再拆解每部分的逻辑,这样你能直接跑起来,再慢慢理解~
#include <iostream> #include <iomanip> // 用来格式化输出金额 using namespace std; int main() { // 定义套餐相关常量,方便后续维护修改 const double PACKAGE1_BASE = 39.99; const int PACKAGE1_MINS = 450; const double PACKAGE1_OVER = 0.45; const double PACKAGE2_BASE = 59.99; const int PACKAGE2_MINS = 900; const double PACKAGE2_OVER = 0.40; const double PACKAGE3_BASE = 69.99; // 声明需要用到的变量 int accountNumber; char package; double totalMinutes; double totalCost = 0.0; // 显示清晰的套餐菜单 cout << "=== 移动通话套餐菜单 ===" << endl; cout << "A) 套餐1: $39.99/月,包含450分钟通话,超出部分$0.45/分钟" << endl; cout << "B) 套餐2: $59.99/月,包含900分钟通话,超出部分$0.40/分钟" << endl; cout << "C) 套餐3: $69.99/月,不限通话时长" << endl; cout << endl; // 获取用户输入信息 cout << "请输入您的账户编号: "; cin >> accountNumber; cout << "请选择您的套餐(A/B/C): "; cin >> package; // 统一转为大写,兼容用户输入小写的情况 package = toupper(package); cout << "请输入当月总通话时长(分钟): "; cin >> totalMinutes; // 根据所选套餐计算总费用 switch(package) { case 'A': totalCost = PACKAGE1_BASE; if (totalMinutes > PACKAGE1_MINS) { // 计算超出时长的额外费用 totalCost += (totalMinutes - PACKAGE1_MINS) * PACKAGE1_OVER; } break; case 'B': totalCost = PACKAGE2_BASE; if (totalMinutes > PACKAGE2_MINS) { totalCost += (totalMinutes - PACKAGE2_MINS) * PACKAGE2_OVER; } break; case 'C': totalCost = PACKAGE3_BASE; break; default: cout << "错误:您选择的套餐不存在,请重新运行程序选择正确套餐!" << endl; return 1; // 退出程序,返回错误状态码 } // 格式化输出账单,金额保留两位小数 cout << fixed << setprecision(2); cout << endl << "=== 账户账单详情 ===" << endl; cout << "账户编号: " << accountNumber << endl; cout << "所选套餐: " << package << endl; cout << "总通话时长: " << totalMinutes << " 分钟" << endl; cout << "当月总费用: $" << totalCost << endl; return 0; }
关键代码部分拆解
- 常量定义:把每个套餐的基础费用、包含时长、超出费率都用
const关键字定义,后续如果套餐价格调整,直接修改常量值即可,不用在代码里到处查找修改,更易维护。 - 输入容错处理:用
toupper()函数把用户输入的套餐字母转为大写,这样不管用户输入a还是A,程序都能正确识别,提升了程序的用户友好性。 - 费用计算逻辑:用
switch语句分情况处理不同套餐,逻辑清晰直观:先设置套餐基础费用,再判断通话时长是否超出套餐包含时长,超出则叠加额外费用;套餐3因为不限时长,直接取基础费用即可。 - 格式化输出:通过
fixed和setprecision(2)让金额以两位小数的形式展示,符合日常货币的显示习惯,看起来更专业。
你可以把这段代码复制到C编译器(比如Dev-C、Code::Blocks或者在线编译器)里运行,测试不同的输入场景:比如套餐A用了500分钟,套餐B用了1000分钟,套餐C随便输入时长,看看计算结果是否符合预期。
如果后续想完善程序,还可以加入输入验证(比如防止用户输入非数字的账户编号或通话时长),或者增加对比其他套餐费用的功能,不过先把核心功能跑通,再逐步优化就好~
内容的提问来源于stack exchange,提问作者fsulover
相关产品推荐
相关产品推荐

