設計のヒント

広告

個人制作で迷ったときの参考です。


0. 進め方の目安

最初は Form1 だけで動かす ことを目指しましょう。動いたら、余裕があれば Manager クラスにロジックを分離すると整理しやすくなります。最初から完璧を目指さなくて大丈夫です。

1. クラス設計の例(在庫管理)

テーマヒントでは「クラス1つ」を推奨していますが、データの形(Product)と管理の役割(Manager)を分けると、より整理されたコードになります。慣れないうちは Product 相当のクラス1つ から始めてもOKです。

Product(商品)… 1件のデータの形
  - Name : string
  - Price : int
  - Stock : int
  - ToCsvLine() : string  // ファイル保存用。Name,Price,Stock をカンマ区切りで1行にまとめる

InventoryManager(在庫管理)… 複数データの管理
  - _items : List<Product>
  - Add(product)
  - SaveToFile(path)
  - LoadFromFile(path)

2. 画面とロジックの分離

役割場所内容
UIForm1ボタン・TextBox・ListBox の配置、イベントから Manager を呼ぶ
ロジック別クラスデータの追加・削除・保存・読み込み

Form1 のイベントで直接 List を触るのではなく、Manager クラスに任せると整理しやすいです。

接続の例(Form1 の「追加」ボタンクリック時):

private InventoryManager _manager = new InventoryManager();

private void btnAdd_Click(object sender, EventArgs e)
{
    var product = new Product
    {
        Name = txtName.Text,
        Price = int.Parse(txtPrice.Text),
        Stock = int.Parse(txtStock.Text)
    };
    _manager.Add(product);
    // 一覧を更新する処理
}

3. ファイル保存の例

  • using:ファイルを開いた後、自動で閉じてくれる。忘れずに書くこと。
  • Encoding.UTF8:日本語を正しく保存・読み込みするために必要。省略すると文字化けすることがある。
// 保存
using (var writer = new StreamWriter(path, false, Encoding.UTF8))
{
    foreach (var item in _items)
    {
        writer.WriteLine(item.ToCsvLine());
    }
}

// 読み込み(空行はスキップ)
_items.Clear();
var lines = File.ReadAllLines(path, Encoding.UTF8);
foreach (var line in lines)
{
    if (string.IsNullOrWhiteSpace(line)) continue;  // 空行をスキップ
    var parts = line.Split(',');
    if (parts.Length < 3) continue;  // 不正な行をスキップ
    var product = new Product
    {
        Name = parts[0],
        Price = int.Parse(parts[1]),
        Stock = int.Parse(parts[2])
    };
    _items.Add(product);
}

4. 画面レイアウトの目安

  • 入力エリア:TextBox、Button(追加・登録)
  • 一覧エリア:ListBox または DataGridView
  • 操作ボタン:保存、読み込み、削除 など

シンプルな 1 フォームで十分です。


5. スコープを絞る

3日で完成させるため、最初は以下に絞ることをおすすめします。

  1. 1種類のデータ(例:商品のみ)
  2. 追加・一覧表示・ファイル保存
  3. 余裕があれば:削除、編集、検索

次に読む:発表が心配 → 発表の進め方 / 発表資料の準備について / 一覧に戻る


訪問数 22 回, 今日の訪問数 22回

広告