import 'dart:io'; // Define constants const int MIN_TEMP = 15; const int MAX_TEMP = 30; // Define device status Map deviceStatus = { 'lightsOn': false, 'thermostatTemp': 20, // Default value 20°C 'securityArmed': false, // Default value DISARMED }; // Main function to run the system void main() { print('Welcome to the Smart Home System!'); // Loop for continuous user interaction while (true) { displayMenu(); // Read user choice String? choiceInput = stdin.readLineSync(); int? choice = int.tryParse(choiceInput ?? ''); if (choice == null) { print('Invalid input. Please enter a number from 1 to 5.'); continue; } switch (choice) { case 1: toggleLights(); break; case 2: setThermostatTemperature(); break; case 3: armDisarmSecurity(); break; case 4: viewSystemStatus(); break; case 5: print('Exiting the system. Goodbye!'); return; // Exit the main function and the program default: print('Invalid choice. Please select an option from 1 to 5.'); } print(''); // Newline for separation } } // Display menu options void displayMenu() { print('Please choose an action:'); print('1. Toggle lights'); print('2. Set thermostat temperature (${MIN_TEMP}°C - ${MAX_TEMP}°C)'); print('3. Arm/disarm security system'); print('4. View system status'); print('5. Exit'); stdout.write('Enter your choice: '); } // 1. Toggle lights void toggleLights() { deviceStatus['lightsOn'] = !deviceStatus['lightsOn']; String status = deviceStatus['lightsOn'] ? 'ON' : 'OFF'; print('Lights are now $status.'); } // 2. Set thermostat temperature void setThermostatTemperature() { stdout.write('Enter thermostat temperature (${MIN_TEMP}°C - ${MAX_TEMP}°C): '); String? tempInput = stdin.readLineSync(); int? newTemp = int.tryParse(tempInput ?? ''); // Input validation if (newTemp == null || newTemp < MIN_TEMP || newTemp > MAX_TEMP) { print('Invalid temperature. Please enter a number between $MIN_TEMP and $MAX_TEMP.'); return; } deviceStatus['thermostatTemp'] = newTemp; print('Thermostat set to ${newTemp}°C.'); } // 3. Arm/disarm security system void armDisarmSecurity() { deviceStatus['securityArmed'] = !deviceStatus['securityArmed']; String status = deviceStatus['securityArmed'] ? 'ARMED' : 'DISARMED'; print('Security system is now $status.'); } // 4. View system status void viewSystemStatus() { String lightsStatus = deviceStatus['lightsOn'] ? 'ON' : 'OFF'; String securityStatus = deviceStatus['securityArmed'] ? 'ARMED' : 'DISARMED'; int currentTemp = deviceStatus['thermostatTemp']; // FizzBuzz-like exercise to determine day status String dayStatus; if (currentTemp % 3 == 0 && currentTemp % 5 == 0) { dayStatus = 'Perfect Day'; } else if (currentTemp % 3 == 0) { dayStatus = 'Cool Day'; } else if (currentTemp % 5 == 0) { dayStatus = 'Warm Day'; } else { dayStatus = 'Normal Day'; } // Use String Interpolation to display status print(''' System Status: - Lights: $lightsStatus - Thermostat: ${currentTemp}°C - $dayStatus - Security System: $securityStatus '''); }