Загрузка данных
using System;
using System.Collections.Generic;
using System.IO;
using Dapper;
using Microsoft.Data.Sqlite;
namespace planets_ozodboev_muzafar // Убедись, что namespace совпадает с твоим
{
class Program
{
// Строка подключения к файлу базы данных (создастся автоматически)
static string connectionString = "Data Source=app.db";
static void Main(string[] args)
{
// Проверяем, существует ли база, если нет - создаем и заполняем
InitializeDatabase();
while (true)
{
Console.WriteLine("\n--- СПИСОК ПЛАНЕТ ---");
List<Planet> planets;
// Получаем планеты из базы через Dapper
using (var connection = new SqliteConnection(connectionString))
{
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(); // Используем string? так как у тебя включен nullable
// Если ввели 0 - выходим из программы
if (input == "0")
{
break;
}
// Проверяем, является ли ввод числом и попадает ли в диапазон
if (int.TryParse(input, out int planetNumber) && planetNumber > 0 && planetNumber <= planets.Count)
{
// Получаем выбранную планету
var selectedPlanet = planets[planetNumber - 1];
// Запрашиваем спутники для этой планеты
using (var connection = new SqliteConnection(connectionString))
{
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Некорректная команда");
}
// ВАЖНО: По заданию "экран при этом не очищать", поэтому Console.Clear() тут НЕ пишем!
}
}
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)
);
");
// Заполняем планеты (Плутон не включаем)
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 на планету)
var satellitesData = @"
INSERT INTO satellites (name, size, planet_id) VALUES
('Луна', 3474, 3), -- Спутник Земли (id=3)
('Фобос', 22, 4), -- Спутник Марса (id=4)
('Деймос', 12, 4), -- Спутник Марса (id=4)
('Ио', 3643, 5), -- Спутник Юпитера (id=5)
('Европа', 3121, 5), -- Спутник Юпитера (id=5)
('Титан', 5150, 6); -- Спутник Сатурна (id=6)
";
connection.Execute(satellitesData);
Console.WriteLine("База данных app.db успешно создана и заполнена.");
}
}
}
}
}