dポイントプレゼントキャンペーン実施中!

現在私はVB2005で四択のクイズ形式のプログラムを作成しています。
目標は「300問の問題を作成しそのなかからランダムに100問を出題し全問回答を終えたらその結果を表示する」というものを作ることです。

ですが製作するにあたって300問という量の問題を単純に配列に格納して出題・・・という流れではプログラム自体がとても不恰好でどうすればいいのかわからなくなってしまいました。

データベースを使えばいいのか?とか他に方法があるのかな?と試行錯誤の状態です。

もしいいアイデアをお持ちの方がいましたらぜひアドバイスのほうよろしくお願いします。

A 回答 (5件)

No.2です。


デザイナ設定部分がほとんどなのですが、起動・終了時に保存と読み込みを行うサンプルです。

・まず「プロジェクト」メニューの「新しい項目の追加」でデータセット(DataSet1)を作ります。
・DataSet1.xsdを開いて、データテーブル(DataTable1)を追加します。
・DataTable1にお好きな列を追加します。この例だと問題文、選択肢1~4、正解が最低限でしょうか。
・登録用のフォーム(Form1)にDataGridViewを貼り付けます。
・DataGridViewを選択したときに右上にアイコンが出るはずですので、そこをクリックして「データソースの選択」からDataTable1を探して選びます。
・すると、DataGridViewの表示が変わり、フォームの下に「DataSet1」と「DataTable1BindingSource」が追加されるはずです。
・Form1のコードに以下のコードを貼り付けてみてください。

Public Class Form1
Private Const filePath As String = "D:\sample.xml"

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
DataTable1BindingSource.EndEdit()
Dim xmlDoc As New Xml.XmlDataDocument(DataSet1)
xmlDoc.Save(filePath)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IO.File.Exists(filePath) Then
DataSet1.ReadXml(filePath)
End If
End Sub
End Class

出題するプログラムのほうでは、DataSet1.DataTable1(n).問題文の要領で問題にアクセスできます。

この回答への補足

返信が遅れ申し訳ありません。
コードを書いていただき本当にありがとうございますm(_ _)m

現在コードを参考にして出題のプログラムを作成しているのですが「300問の中から100問出題するとき同じ問題を出題しないようにする」ことと「ランダムに出題する」という段になりまた悩んでしまっています。

何度も頼って申し訳ありませんが知恵をお貸しいただけたらと思います。

よろしくお願いしますm(_ _)m

補足日時:2009/09/25 16:32
    • good
    • 0

私は、VBは書けないのでソースを出すことは出来ないのですが、、、


 参考に どうぞ  http://dobon.net/vb/

テキストの読み込みからいろいろサンプルが載ってます。

これを組み合わせれば、クイズは完成すると思いますよ。

あと、問題集は、No3さんのような独自形式のテキストよりもiniなど定められた形式を使うほうが後々楽になりますよ。

この回答への補足

御回答ありがとうございます。

当方なりにiniファイルについて調べたのですがこれをどうやってVBとどう結びつけて使えばいいのかイマイチ理解できませんでした。

もしアドバイスをいただけたら大助かりなのですが・・・、よろしくお願いします。

補足日時:2009/09/25 16:40
    • good
    • 0

リッチテキストとして問題ファイルをしたのように作ってやるのが簡単だとおもいます。


3+5,8,5,2,9

プログラムでは一つの要素に対して構造体を作りList等に格納すれば楽です。
    • good
    • 0

No.1さんの言うとおり外部ファイルを使うのがよいでしょう。


特に、データセットのReadXmlメソッドを使うのが手軽だと思います。
これなら登録画面と書き込み、読み込み合わせて10行以内で実現できますよ。

この回答への補足

みなさん回答どうもありがとうございます。

データセットやReadxmlメソッドについて調べてみて理論はなんとなくわかったのですが、当方VBは初心者でコードを書くと段になるとどうにも太刀打ちできなくなってしまいます。

恐縮なのですが例を示していただけたらもう大助かりなのですが・・・

どうかよろしくお願いしますm(_ _)m

補足日時:2009/09/19 13:31
    • good
    • 0

問題をプログラム内に格納するのではなく、プログラム起動時などに外部から取り入れるようにすればいいと思います。



iniファイルとかに問題を書いて読み込むのが手っ取り早いかと思います。

これであれは、問題を自由に変更できましす、問題を変えるためだけにビルドする必要もなくなりますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!