#include <bits/stdc++.h> using namespace std; const int MAX_num_AIM = 3; const int MAX_num_TRAVELWAY = 2; const int MAX_num_LUGGAGENUMBER = 3; const int MAX_num_PASSENGER = 62; enum Aim {DomesticShort, DomesticLong, International}; enum TravelWay {Free, Agency}; class Luggage{ public: void nameself(string name,int luggageNumber); int number; string name[3]; }; class Passenger{ public: Passenger(string name,int luggageNumber, TravelWay travelWay, Aim aim); void Introduce(); string name; Luggage luggage; TravelWay travelWay; Aim aim; int money; int carryMoney; }; string passengername[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"}; int ticket(int luggageNumber, Aim aim); class Team{ public: Aim aim; string name; int number; int money; }; class TravelAgency{ public: void regist(Passenger &passenger); Team team[5]; int number; void introduce(void); }; TravelAgency travelAgency; class TicketOffice{ public: void regist(Passenger &passenger); void regist(TravelAgency &travelAgency); void introduce(void); int money[6]; string name[6]; }; TicketOffice ticketOffice; int main(){ ios::sync_with_stdio(false); srand(static_cast<unsigned> (time(NULL))); int passengerNumber = rand() % MAX_num_PASSENGER; for (int i = 0; i < passengerNumber; i++){ Passenger passenger(passengername[i], 1 + rand() % MAX_num_LUGGAGENUMBER, (TravelWay) (rand() % MAX_num_TRAVELWAY), (Aim) (rand() % MAX_num_AIM)); travelAgency.regist(passenger); ticketOffice.regist(passenger); } ticketOffice.regist(travelAgency); travelAgency.introduce(); ticketOffice.introduce(); cout << endl; return 0; } Passenger::Passenger(string name,int luggageNumber, TravelWay travelWay, Aim aim){ this->name = name; this->luggage.number = luggageNumber; this->luggage.nameself(name, luggageNumber); this->travelWay = travelWay; this->aim = aim; this->money = ticket(luggageNumber, aim); if (aim == International && this->luggage.number > 2) this->carryMoney = 100; else this->carryMoney = 0; Introduce(); } void Passenger::Introduce(){ cout << " 我是乘客 " << name << ","; if (travelWay == Free) cout << "选择自由出行"; else cout << "报名旅行社"; cout << ","; if (aim == DomesticShort) cout << "选择国内短途"; if (aim == DomesticLong) cout << "选择国内长途"; if (aim == International) cout << "选择国际游"; cout << ",携带" << this->luggage.number << "件行李,行李编号是 "; for (int i = 0; i < this->luggage.number; i++){ if (i != 0) cout << "、"; cout << this->luggage.name[i]; } cout << ",买票需付" << money << "元"; if (carryMoney) cout << ",行李托运费100元"; cout << "。" << endl; } void TravelAgency::regist(Passenger &passenger){ if (passenger.travelWay != Agency) return; for (int i = 0; i < 5; i++){ if (travelAgency.team[i].number == 0){ travelAgency.team[i].name += passenger.name; travelAgency.number++; travelAgency.team[i].number++; travelAgency.team[i].aim = passenger.aim; travelAgency.team[i].money += passenger.money + passenger.carryMoney; break; } else if (travelAgency.team[i].aim == passenger.aim && travelAgency.team[i].number < 6){ travelAgency.team[i].name = travelAgency.team[i].name + "," + passenger.name; travelAgency.number++; travelAgency.team[i].money += passenger.money + passenger.carryMoney; travelAgency.team[i].number++; break; } } } int ticket(int luggageNumber, Aim aim){ int money = 0; if (aim == DomesticShort) money += 10; if (aim == DomesticLong) money += 100; if (aim == International) money += 500; return money; } void Luggage::nameself(string name,int luggageNumber){ char str[2]; for (int i = 0; i < luggageNumber; i++){ sprintf(str, "%d", i + 1); this->name[i] = name + "0" + str; } } void TravelAgency::introduce(void){ cout << " 旅行社开始报名。" << endl << " 旅行社共计安排了5个旅行团,共计" << number << "人报名。" << endl << "出行的目的地分别是:"; for (int i = 0; i < 5; i++){ switch (team[i].aim){ case DomesticShort: if (team[i].number != 0) cout << "国内短途"; else { int temp = rand() % 3; switch (temp) { case 0: cout << "国内短途"; break; case 1: cout << "国内长途"; break; case 2: cout << "国际游"; break; } } break; case DomesticLong: cout << "国内长途"; break; case International: cout << "国际游"; break; } if (i < 4) cout << ","; else cout << ";"; } cout << "每个旅行团的人数分别是:"; for (int i = 0; i < 5; i++) { cout << team[i].number; if (i < 4) cout << ","; else cout << ";"; } cout << "每个旅行团需要支付的票价是:"; for (int i = 0; i < 5; i++) { cout << team[i].money; if (i < 4) cout << ","; else cout << "。" << endl; } } void init(int &num) { cout << ticketOffice.money[num]; cout << "元,乘客姓名:"; cout << ticketOffice.name[num++]; } void TicketOffice::introduce(void){ int num = 0; cout << " 售票处开始售票。" << endl << " 售票结束,营业额统计信息如下:"; cout << endl << " 国内短途自由行:"; init(num); cout << endl << " 国内长途自由行:"; init(num); cout << endl << " 国际游自由行: "; init(num); cout << endl << " 国内短途团购: "; init(num); cout << endl << " 国内长途团购: "; init(num); cout << endl << " 国际游团购: "; init(num); } void TicketOffice::regist(Passenger &passenger){ if (passenger.travelWay != Free) return; int num = passenger.aim; if (money[num] != 0) name[num] += ","; name[num] += passenger.name; money[num] += passenger.money + passenger.carryMoney; } void TicketOffice::regist(TravelAgency &travelAgency){ for (int i = 0, num; i < 5; i++){ if (travelAgency.team[i].number == 0) continue; num = 3 + travelAgency.team[i].aim; if (money[num] != 0) name[num] += ","; name[num] += travelAgency.team[i].name; money[num] += travelAgency.team[i].money; } } // // // \ // // \ // // ##DDDDDDDDDDDDDDDDDDDDDD## // ## DDDDDDDDDDDDDDDDDDDD ## ________ ___ ___ ___ ________ ___ ___ ___ // ## hh hh ## | __ | | | | __ | | | // ## hh // \ hh ## | /_ \ \ | /_ \ // ## hh // \ hh ## __ \ \ \ __ \ \ // ## hh hh ## | \ \ \____ \ | \ \ \____ // ## hh wwww hh ## \_______\ \__\ \_______\ \__\ \_______\ \__\ \_______\ \__ // ## hh hh ## |_______| |__| |_______| |__| |_______| |__| |_______| |__| // ## MMMMMMMMMMMMMMMMMMMM ## // ##MMMMMMMMMMMMMMMMMMMMMM## // / /