Загрузка данных
using System;
using System.Collections.Generic;
using System.IO;
using Dapper;
using Microsoft.Data.Sqlite;
namespace planets_ivanov // Замени 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.Clear();
Console.WriteLine("Список планет Солнечной системы:");
Console.WriteLine("--------------------------------");
List<Planet> planets;
// Получаем список планет через Dapper
using (var connection = new SqliteConnection(connectionString))
{
planets = connection.Query<Planet>("SELECT * FROM planets ORDER BY index_from_sun").AsList();
}
// Выводим пронумерованный список
for (int i = 0; i < planets.Count; i++)
{
Console.WriteLine($"{i + 1}. {planets[i].name}");
}
Console.WriteLine("\nВведите номер планеты для просмотра спутников (или 0 для выхода):");
string input = Console.ReadLine();
// Проверка на выход
if (input == "0")
{
break;
}
// Проверка корректности ввода
if (int.TryParse(input, out int choice) && choice >= 1 && choice <= planets.Count)
{
Console.Clear();
Planet selectedPlanet = planets[choice - 1];
Console.WriteLine($"Спутники планеты {selectedPlanet.name}:");
// Получаем спутники выбранной планеты
using (var connection = new SqliteConnection(connectionString))
{
var satellites = connection.Query<Satellite>(
"SELECT * FROM satellites WHERE planet_id = @Id",
new { Id = selectedPlanet.id }).AsList();
if (satellites.Count == 0)
{
Console.WriteLine("У этой планеты нет спутников в нашей базе.");
}
else
{
foreach (var sat in satellites)
{
Console.WriteLine($"- {sat.name} (размер: {sat.size} км)");
}
}
}
Console.WriteLine("\nНажмите Enter, чтобы вернуться к списку планет...");
Console.ReadLine();
// После нажатия Enter цикл while начнется заново,
// Console.Clear() очистит экран, и список появится снова.
}
else
{
Console.WriteLine("\nНекорректная команда. Нажмите Enter и попробуйте снова.");
Console.ReadLine();
}
}
}
// Метод для создания БД и её заполнения
static void InitializeDatabase()
{
bool isNewDatabase = !File.Exists("app.db");
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
// Создаем таблицы
connection.Execute(@"
CREATE TABLE IF NOT EXISTS 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 IF NOT EXISTS 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)
);
");
// Если база создается впервые, заполняем её данными
if (isNewDatabase)
{
// Вставляем планеты (Плутон исключен)
connection.Execute(@"
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);
");
// Вставляем спутники (не более 2 на планету)
// Земля (id=3)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Луна', 3474, 3)");
// Марс (id=4)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Фобос', 22, 4), ('Деймос', 12, 4)");
// Юпитер (id=5)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Ио', 3643, 5), ('Европа', 3122, 5)");
// Сатурн (id=6)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Титан', 5150, 6), ('Энцелад', 504, 6)");
// Уран (id=7)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Титания', 1578, 7), ('Оберон', 1523, 7)");
// Нептун (id=8)
connection.Execute("INSERT INTO satellites (name, size, planet_id) VALUES ('Тритон', 2707, 8)");
// У Меркурия и Венеры спутников нет
}
}
}
}
}