C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#のプログラムの考え方について。

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■88973 / inTopicNo.1)  C#のプログラムの考え方について。
  
□投稿者/ わたー (1回)-(2018/10/23(Tue) 12:02:47)

分類:[C#] 

初投稿です。なるべく伝わりやすいように書きたいと思います。
どのようなソースコードにすればよいかは、もしお時間許されるようであれば例文を書いていただきたいです。

やりたいことは、「お店の来客管理ソフト」を作りたいと思ってます。

そこで、行き詰っているところは
「monthclendar」を使って、日付をクリックすると、作成した「listview」の値が変わるというものです。

例えば10月23日をクリックしたら、10月23日に予定が入っているお客さんの名前だけを出力したい。
10月24日をクリックしたら、23日のお客さんは表示せずに24日に予定が入っているお客さんの名前だけを出したい。

また、お客さんの登録の仕方は、テキストボックスに名前を打ちこんで、登録ボタンを押したらlistviewに追加されるというものです。
現段階で日付的な処理は書いてないので、listviewに追加されるだけで、日付をクリックしても、listviewの中身は変わりません。

登録するお客様情報にどんな情報を加えれば日付毎に来客を管理できるのか、考え方をご教授願います。
説明下手で申し訳ありませんが、お手柔らかにお願いします。
引用返信 編集キー/
■88975 / inTopicNo.2)  Re[1]: C#のプログラムの考え方について。
□投稿者/ 魔界の仮面弁士 (1883回)-(2018/10/23(Tue) 12:46:21)
No88973 (わたー さん) に返信
> 「monthclendar」を使って、
…「MonthCalendar」コントロールの事でしょうか?

大文字小文字を含め、スペルミスに注意。


> 作成した「listview」の値が変わるというものです。
ListView に表示するのは、「お客さんの名前」の一覧なのですね。
話を単純化するため、ひとまず同姓同名などは考慮しないものとします。



> 例えば10月23日をクリックしたら、10月23日に予定が入っているお客さんの名前だけを出力したい。
> 10月24日をクリックしたら、23日のお客さんは表示せずに24日に予定が入っているお客さんの名前だけを出したい。

予約リスト(日付ごとのお客さんの名前の一覧)は、どのように管理する予定ですか?

たとえば、その予約リストを
 private Dictionary<DateTime, List<string>> reservation = new Dictionary<DateTime, List<string>>();
な変数で管理しているとしたら、こんな感じでどうでしょう。


// MonthCalendar コントロールの
// MaxSelectionCount プロパティの設定次第では
// 複数の日付が同時に選択されることもあり得る
var selStart = monthCalendar1.SelectionStart.Date;
var selEnd = monthCalendar1.SelectionEnd.Date;

// ListView の更新開始
listView1.BeginUpdate();

// 現在のリストをクリア
listView1.Items.Clear();

for (DateTime day = selStart; day <= selEnd; day = day.AddDays(1.0))
{
  // 予定表に記載されているか?
  if (reservation.ContainsKey(day))
  {
    foreach (string userName in reservation[day])
    {
      listView1.Items.Add(userName);
    }
  }
}

// ListView の更新終了
listView1.EndUpdate();


> また、お客さんの登録の仕方は、テキストボックスに名前を打ちこんで、
> 登録ボタンを押したらlistviewに追加されるというものです。

登録ボタンクリック時に

List<string> users = reservation.ContainsKey(day) ? reservation[day] : reservation[day] = new List<string>();
users.Add(textBox1.Text);
listView1.Items.Add(textBox1.Text);

とか。

ここでは List<string> を使いましたが、ListView に特化するのなら、
List<ListViewItem> で管理するのも良いでしょう。

また、データベースなどを使うのなら、Dictionary<,> の代わりに
DataSet で管理しておくのも手かと思います。

引用返信 編集キー/
■88976 / inTopicNo.3)  Re[2]: C#のプログラムの考え方について。
□投稿者/ わたー (3回)-(2018/10/23(Tue) 13:15:48)
スペルミス失礼致しました。

日付が複数選択されることはないとします。

私が一番気になっているところは、お客さんの予約リスト(来客時間、お客さん名、性別)をどのような変数?で管理すればよいか でした。

カレンダーの日付と予約リストの情報をうまく紐づける方法があればと思ったのですが・・・。
とりあえずテキストボックスに打ち込んだものをlistviewに反映させたりだとかのやり方は大丈夫です。
考え方さえわかれば、ネットで調べながらやろうと思っているのですが、考え方がわからない分には手をつけられなかったので・・・。

やはり23日の予約リストを表示した状態で24日をクリックしたら、一度listviewのデータをクリアして、再出力する考えてよろしいのでしょうか?

初心者で申し訳ありません。
引用返信 編集キー/
■88977 / inTopicNo.4)  Re[3]: C#のプログラムの考え方について。
□投稿者/ WebSurfer (1623回)-(2018/10/23(Tue) 13:36:29)
No88976 (わたー さん) に返信
>
> 私が一番気になっているところは、お客さんの予約リスト(来客時間、お客さん名、性別)をどのような変数?で管理すればよいか でした。

SQL Server などのデータベースサーバーを使うことは考えていない(もしくは使用できない?)のでしょうか?
引用返信 編集キー/
■88979 / inTopicNo.5)  Re[4]: C#のプログラムの考え方について。
□投稿者/ わたー (5回)-(2018/10/23(Tue) 13:40:58)
No88977 (WebSurfer さん) に返信
> ■No88976 (わたー さん) に返信
> >
>>私が一番気になっているところは、お客さんの予約リスト(来客時間、お客さん名、性別)をどのような変数?で管理すればよいか でした。
>
> SQL Server などのデータベースサーバーを使うことは考えていない(もしくは使用できない?)のでしょうか?


申し訳ありません、それはできないです。
引用返信 編集キー/
■88981 / inTopicNo.6)  Re[3]: C#のプログラムの考え方について。
□投稿者/ 魔界の仮面弁士 (1884回)-(2018/10/23(Tue) 14:10:21)
No88976 (わたー さん) に返信
> お客さんの予約リスト(来客時間、お客さん名、性別)をどのような変数?で管理すればよいか でした。

専用にクラスを作り、それをコレクションで管理すればよいかと。

public class Visitor {
 public string Name { get; set; }
 public string Gender { get; set; } // あるいは列挙型
 public DateTime Time { get; set; }
}

あるいは DataTable でも可。


> カレンダーの日付と予約リストの情報をうまく紐づける方法があればと思ったのですが・・・。

Dictionary か DataSet をお奨めしておきます。

今回のケースだと、ListView を使うのではなく、
DataSet + DataGridView で管理した方が手軽かもしれません。
(もちろん、データベースを利用する必要はありません)


> やはり23日の予約リストを表示した状態で24日をクリックしたら、一度listviewのデータをクリアして、再出力する考えてよろしいのでしょうか?

DataGridView などであれば、データバインドを使って自動的に絞り込むこともできますが、
ListView だと、データ丸ごと差し替えるしか無いですね。

データ量が極端に多い場合は、ListView の仮想モードを使うことで高速化できますが、
その分コーディング量は増えますので、今回のようなケースではあまりメリットが無さそう。
引用返信 編集キー/
■88986 / inTopicNo.7)  Re[4]: C#のプログラムの考え方について。
□投稿者/ わたー (7回)-(2018/10/24(Wed) 08:56:02)
No88981 (魔界の仮面弁士 さん) に返信
> ■No88976 (わたー さん) に返信
>>お客さんの予約リスト(来客時間、お客さん名、性別)をどのような変数?で管理すればよいか でした。
>
> 専用にクラスを作り、それをコレクションで管理すればよいかと。
>
> public class Visitor {
>  public string Name { get; set; }
>  public string Gender { get; set; } // あるいは列挙型
>  public DateTime Time { get; set; }
> }
>
> あるいは DataTable でも可。
>
>
>>カレンダーの日付と予約リストの情報をうまく紐づける方法があればと思ったのですが・・・。
>
> Dictionary か DataSet をお奨めしておきます。
>
> 今回のケースだと、ListView を使うのではなく、
> DataSet + DataGridView で管理した方が手軽かもしれません。
> (もちろん、データベースを利用する必要はありません)
>
>
>>やはり23日の予約リストを表示した状態で24日をクリックしたら、一度listviewのデータをクリアして、再出力する考えてよろしいのでしょうか?
>
> DataGridView などであれば、データバインドを使って自動的に絞り込むこともできますが、
> ListView だと、データ丸ごと差し替えるしか無いですね。
>
> データ量が極端に多い場合は、ListView の仮想モードを使うことで高速化できますが、
> その分コーディング量は増えますので、今回のようなケースではあまりメリットが無さそう。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ