設計のヒント
個人制作で迷ったときの参考です。
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. 画面とロジックの分離
| 役割 | 場所 | 内容 |
|---|---|---|
| UI | Form1 | ボタン・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種類のデータ(例:商品のみ)
- 追加・一覧表示・ファイル保存
- 余裕があれば:削除、編集、検索
次に読む:発表が心配 → 発表の進め方 / 発表資料の準備について / 一覧に戻る
訪問数 22 回, 今日の訪問数 22回



ディスカッション
コメント一覧
まだ、コメントがありません