現在私はVB2005で四択のクイズ形式のプログラムを作成しています。
目標は「300問の問題を作成しそのなかからランダムに100問を出題し全問回答を終えたらその結果を表示する」というものを作ることです。
ですが製作するにあたって300問という量の問題を単純に配列に格納して出題・・・という流れではプログラム自体がとても不恰好でどうすればいいのかわからなくなってしまいました。
データベースを使えばいいのか?とか他に方法があるのかな?と試行錯誤の状態です。
もしいいアイデアをお持ちの方がいましたらぜひアドバイスのほうよろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.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
No.4
- 回答日時:
私は、VBは書けないのでソースを出すことは出来ないのですが、、、
参考に どうぞ http://dobon.net/vb/
テキストの読み込みからいろいろサンプルが載ってます。
これを組み合わせれば、クイズは完成すると思いますよ。
あと、問題集は、No3さんのような独自形式のテキストよりもiniなど定められた形式を使うほうが後々楽になりますよ。
この回答への補足
御回答ありがとうございます。
当方なりにiniファイルについて調べたのですがこれをどうやってVBとどう結びつけて使えばいいのかイマイチ理解できませんでした。
もしアドバイスをいただけたら大助かりなのですが・・・、よろしくお願いします。
No.3
- 回答日時:
リッチテキストとして問題ファイルをしたのように作ってやるのが簡単だとおもいます。
3+5,8,5,2,9
プログラムでは一つの要素に対して構造体を作りList等に格納すれば楽です。
No.2
- 回答日時:
No.1さんの言うとおり外部ファイルを使うのがよいでしょう。
特に、データセットのReadXmlメソッドを使うのが手軽だと思います。
これなら登録画面と書き込み、読み込み合わせて10行以内で実現できますよ。
この回答への補足
みなさん回答どうもありがとうございます。
データセットやReadxmlメソッドについて調べてみて理論はなんとなくわかったのですが、当方VBは初心者でコードを書くと段になるとどうにも太刀打ちできなくなってしまいます。
恐縮なのですが例を示していただけたらもう大助かりなのですが・・・
どうかよろしくお願いしますm(_ _)m
No.1
- 回答日時:
問題をプログラム内に格納するのではなく、プログラム起動時などに外部から取り入れるようにすればいいと思います。
iniファイルとかに問題を書いて読み込むのが手っ取り早いかと思います。
これであれは、問題を自由に変更できましす、問題を変えるためだけにビルドする必要もなくなりますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- Excel(エクセル) ランダムで四択の問題を作る場合にvbaで何を学べばいいでしょうか。 1 2022/04/14 16:45
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- その他(教育・科学・学問) クイズ! 嘘つきクイズ問題を作っています。辻褄があっているか、確認してください。 エイプリルフールに 3 2022/03/23 19:48
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Illustrator(イラストレーター) ワードに貼った画像のキャンバスと画像本体のサイズの調整 2 2022/05/19 18:31
- 大学・短大 卒業するのに問題ないか 3 2023/02/13 17:41
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
指定したフォルダーを最前面表...
-
プロダクションコードとは?
-
テキストの暗号化
-
初級者の質問――time_tについて
-
gccでスタックオーバーフローの...
-
c言語プログラミングについて ...
-
c言語についてで、星占いをswit...
-
COBOLのS9タイプからXタイプへ...
-
時刻歴応答解析
-
無限ループ中にある任意のキー...
-
Arduino nano(アルドゥイーノ ...
-
コンパイルエラーの意味
-
c言語のサイコロを100回振って...
-
javaで辞書プログラムを作りたい.
-
VBでスタックオーバーフロー
-
C言語で1000までの素数を求める...
-
C言語primeについて
-
Directshowのサンプルを利用して
-
Visual Basic 2010で方形波(矩...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
Webプログラムってネイティブア...
-
プロダクションコードとは?
-
指定したフォルダーを最前面表...
-
VBA
-
初級者の質問――time_tについて
-
Arduino nano(アルドゥイーノ ...
-
世界一美しいソースコード
-
2値化した画像の黒い部分のピク...
-
C言語primeについて
-
COBOLのS9タイプからXタイプへ...
-
無限ループ中にある任意のキー...
-
マイコンからプログラムを読み...
-
processingで雪が積もるような...
-
Excel VBA で、データベースフ...
-
openGLで物体を半透明にして表...
-
C言語→MATLABへの変換で、困っ...
-
三次元のグラフを書きたいので...
-
コンパイルエラーの意味
-
プログラムってコードに性格っ...
おすすめ情報