superstar_v2/DBObj/ArtistManager.cs
2025-04-07 16:54:10 +08:00

116 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using DualScreenDemo;
namespace DBObj
{
/**
從資料庫取資料回來
*/
public class ArtistManager
{
private static ArtistManager _instance;
public List<Artist> AllArtists { get; private set; }
public static ArtistManager Instance
{
get
{
if (_instance == null)
{
_instance = new ArtistManager();
}
return _instance;
}
}
public ArtistManager()
{
AllArtists = new List<Artist>();
LoadArtists();
}
private void LoadArtists()
{
string databaseFileName = "KSongDatabase.db";
string databasePath = Path.Combine(Application.StartupPath, databaseFileName);
Console.WriteLine(databasePath);
string connectionString = String.Format("Data Source={0};Version=3;", databasePath);
using (var connection = new SQLiteConnection(connectionString))
{
try
{
connection.Open();
string sql = "SELECT 歌手姓名, 歌手注音, 歌手分類, 歌手筆畫 FROM ArtistLibrary";
using (var command = new SQLiteCommand(sql, connection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string artist = reader["歌手姓名"].ToString();
string phonetic = reader["歌手注音"].ToString();
string category = reader["歌手分類"].ToString();
string strokesStr = reader["歌手筆畫"].ToString();
if (string.IsNullOrEmpty(strokesStr))
{
// Console.WriteLine("歌手筆畫的值為空或無效");
}
if (double.TryParse(strokesStr, out double strokesDouble))
{
int strokes = (int)Math.Round(strokesDouble);
AllArtists.Add(new Artist(artist, phonetic, category, strokes));
}
else
{
// Console.WriteLine($"Failed to parse '歌手筆畫' value: {strokesStr}");
}
}
}
}
connection.Close();
}
catch (Exception ex)
{
Console.WriteLine("Failed to load artists from SQLite database: " + ex.Message);
}
}
}
private void PrintAllArtists()
{
Console.WriteLine("All Artists:");
foreach (var artist in AllArtists)
{
Console.WriteLine(artist.ToString());
}
}
public List<Artist> GetArtistsByCategoryAndStrokeCountRange(string category, int minStrokes, int maxStrokes)
{
if (category == "全部")
{
return AllArtists.Where(artist => artist.Strokes >= minStrokes && artist.Strokes <= maxStrokes).ToList();
}
else
{
return AllArtists.Where(artist => artist.Category == category && artist.Strokes >= minStrokes && artist.Strokes <= maxStrokes).ToList();
}
}
}
}