Загрузка данных
using System;
using System.Collections.Generic;
using System.IO;
using Dapper;
using Microsoft.Data.Sqlite;
namespace planets_ivanov
{
// Классы для удобной работы с Dapper
public class Planet
{
public int id { get; set; }
public string name { get; set; }
public int index_from_sun { get; set; }
public double distance_from_sun { get; set; }
public double size { get; set; }
}
public class Satellite
{
public int id { get; set; }
public string name { get; set; }
public double size { get; set; }
public int planet_id { get; set; }
}
class Program
{
static string connectionString = "Data Source=app.db";
static void Main(string[] args)
{
// Если базы нет, создаем её и заполняем данными
InitializeDatabase();
while (true)
{
Console.WriteLine("\n--- СПИСОК ПЛАНЕТ ---");
using (var connection = new SqliteConnection(connectionString))
{
// Получаем планеты, отсортированные по удаленности от Солнца
var planets = connection.Query<Planet>("SELECT * FROM planets ORDER BY index_from_sun").AsList();
// Выводим список, пронумерованный от 1 до N
for (int i = 0; i < planets.Count; i++)
{
Console.WriteLine($"{i + 1}. {planets[i].name}");
}
}
Console.Write("\nВведите номер планеты (или 0 для выхода): ");
string input = Console.ReadLine();
// Если ввели 0 - выходим
if (input == "0")
{
break;
}
// Проверяем, является ли ввод числом и попадает ли в диапазон
if (int.TryParse(input, out int planetNumber) && planetNumber > 0 && planetNumber <= 8)
{
// Получаем ID планеты по её номеру в списке (индекс в массиве = номер - 1)
using (var connection = new SqliteConnection(connectionString))
{
var planets = connection.Query<Planet>("SELECT * FROM planets ORDER BY index_from_sun").AsList();
var selectedPlanet = planets[planetNumber - 1];
// Ищем спутники для этой планеты
var satellites = connection.Query<Satellite>(
"SELECT * FROM satellites WHERE planet_id = @PlanetId",
new { PlanetId = selectedPlanet.id }).AsList();
Console.WriteLine($"\nСпутники планеты {selectedPlanet.name}:");
if (satellites.Count > 0)
{
foreach (var sat in satellites)
{
Console.WriteLine($" - {sat.name} (размер: {sat.size})");
}
}
else
{
Console.WriteLine(" - Спутников нет.");
}
}
}
else
{
// Если ввели что-то другое
Console.WriteLine("\nНекорректная команда. Введите число от 0 до 8.");
}
}
}
static void InitializeDatabase()
{
bool isNewDb = !File.Exists("app.db");
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
// Создаем таблицы при первом запуске
if (isNewDb)
{
connection.Execute(@"
CREATE TABLE planets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
index_from_sun INTEGER NOT NULL,
distance_from_sun REAL NOT NULL,
size REAL NOT NULL
);
CREATE TABLE satellites (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
size REAL NOT NULL,
planet_id INTEGER NOT NULL,
FOREIGN KEY(planet_id) REFERENCES planets(id)
);
");
// Заполняем планеты (Плутон не считаем, как сказано в задании)
// index_from_sun - порядковый номер от Солнца
var planetsData = @"
INSERT INTO planets (name, index_from_sun, distance_from_sun, size) VALUES
('Меркурий', 1, 57.9, 4879),
('Венера', 2, 108.2, 12104),
('Земля', 3, 149.6, 12742),
('Марс', 4, 227.9, 6779),
('Юпитер', 5, 778.6, 139820),
('Сатурн', 6, 1433.5, 116460),
('Уран', 7, 2872.5, 50724),
('Нептун', 8, 4495.1, 49244);
";
connection.Execute(planetsData);
// Заполняем спутники (не более 2 на планету, если есть)
// planet_id ссылается на id планеты из таблицы planets (Земля = 3, Марс = 4, Юпитер = 5, Сатурн = 6)
var satellitesData = @"
INSERT INTO satellites (name, size, planet_id) VALUES
('Луна', 3474, 3), -- Спутник Земли
('Фобос', 22, 4), -- Спутник Марса
('Деймос', 12, 4), -- Спутник Марса
('Ио', 3643, 5), -- Спутник Юпитера
('Европа', 3121, 5), -- Спутник Юпитера
('Титан', 5150, 6); -- Спутник Сатурна
";
connection.Execute(satellitesData);
Console.WriteLine("База данных app.db успешно создана и заполнена.");
}
}
}
}
}