• ベストアンサー

課題がどうしても分かりません。

[問] レンタルビデオ屋のシステムを作ります。 このレンタルビデオ屋では、ビデオとDVDを貸し出しています。 ビデオあるいはDVDを借りるためには、まず会員にならなければなりません。 一度に借りられる本数は、DVDとビデオあわせて3本までです。 借りていられる期間は無期限ですが、何か借りているものがある間は、新たに借りることは出来ません。 DVDは再生が可能で、ビデオは再生と巻き戻しが可能です。 ビデオは必ず巻き戻してからでしか返却できません。 システムを構築するに当たって、継承とメソッドの多重定義を必ず使うこと。 クラスにVideoクラス,DVDクラス,mainメソッドを持ったクラスがあって、VideoクラスとDVDクラスは継承が出来ると思ったのですが…。 どんなプログラムになるのか全く分かりません。 どなたかご教授ください。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

課題ということは、あまり答えすぎても本人のためにならないかもと思いつつも、とりあえず考え方の筋道を述べてみます。 >レンタルビデオ屋のシステムを作ります。 まずは、データベースをどのように構築するかが問題でしょう。 ざっと見たところでは 会員table(username(char), userid(int), nyukaidate(timestamp), kasidasi_flag(int), addr(varchar), tell(char)) 貸し出しリスト(userid(int), vvid(int), kasidate(timestamp), henkyakuyotei(timestamp), makicheck(boolean)) 商品table(vvname(char), vvid(int), vv(char), konyudate(timestamp), kasidasi_flag(boolean)) ※()内は field(type) この3つのtableが必要かと思います。 →これらにアクセスするclassをそれぞれ構築するとよさそうですね。 そして、それらを操作するメソッドをクラスに持たせる。 メソッドの多重定義は、同じ名前で、引数の数や型を変えて、似た操作のものを作るわけだから、id からtable情報を取り出す関数とnameからtable情報を取り出す関数とを考えれば、必然的に使うことになるでしょう。 この方法は覚えると結構重宝ですよね。 継承は、商品クラスを継承して、dvdクラスとvideoクラスを作るというのが 割とすぐ思いつきますね。 で、全体像は以下のような感じかな? 今、手元にリファレンスがないので、かなりおおざっぱに枠組みだけ示してみました。 予約語の記述間違いなどは、ご容赦願います。 というか、自分で調べて完璧になるようにしてください。 public rental extends Frame{ rental_system system; public void main(arg[],,){ //引数の記述がうろ覚え // rental_system の初期化 system = new rental_system(); //次に frame構築 操作パネル作成 (省略) } } class rental_system{ public rental_system(){ //初期化 =システムの起動 ー> databaseへのアクセス確立 } class syohin{ // 商品table へのアクセス public syohin(){ // 商品table へのアクセス確立 } public arraylist getSyohin(int sid){ // 商品id sidから 商品情報をarraylistで得る } public arraylist getSyohin(string sname){ // 商品名 snameから 商品情報をarraylistで得る // getSyohin多重定義 } public int setSyohin( string sname, string date){ // 商品名 sname, 購入日 date で新たに商品を登録し、作成された商品id を返す。 // 商品idは、登録順に連番などとする。 // 同名複数商品の場合は。。。製造番号か何か、もう一つ項目が要りそう } } class video extends shohin{ // 継承 public video(){ super(); // 商品table へのアクセス確立 // 貸し出しリストへのアクセスも確立 } public boolean makicheck(int sid){ // 巻き戻しチェック // 返却時巻き戻してあれば、trueを設定; // 巻き戻していなければfalseを設定; } } class user{ // 会員情報へのアクセス public user(){ // 会員table へのアクセス確立 } public arraylist getUser(int sid){ // 会員id sidから 会員情報をarraylistで得る } public arraylist getUser(string sname){ // 会員名 snameから 会員情報をarraylistで得る // getUser多重定義 } public int setUser( string sname, string date){ // 会員名 sname, 登録日 date で新たに会員を登録し、作成された会員id を返す。 // 登録済みならば、登録済みidを返す。同姓同名対策が必要。 } public int setRental(int sid, int r){ // sidの会員が 借りた(1~3)または返した(-1~-3)個数r を元のkasidasi_flagに足して、最終貸し出し数を返す } } // 貸し出しリスト (省略) }

asmodel
質問者

お礼

課題であるからこそ自分で解かなければ意味がないと思いながらも、解き方・導き方が見当もつかなかったため丸投げの投稿になってしまいました。 それにもかかわらずお答えいただきありがとうございます。 コメント付でアウトラインを教えていただけたので、大変分かりやすく、それをもとに解くことが出来ました。 ありがとうございました。

その他の回答 (2)

回答No.3

課題がわからない。 と自分では何もせずに丸投げ。 (もしかして何かしてるかもしれませんが、少なくとも「ここ」には「○○をした。」なんて記述ないですよね?) 「思ったのですが…。」 ↑は何もしてないに等しいですよ。 「どんなプログラムになるのか全く分かりません。」 全く分からない人に対して回答しようがないですよ。 困り度3:直ぐに回答ほしいです ↑なわりには回答をくれた人に対してなんのコメントもなし。 立派な「教えて君」の予備軍ですね。 参考URLのページを熟読することをオススメします。

参考URL:
http://myu.daa.jp/osiete/
  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.2

課題の趣旨に合っているのか自信はありませんが、参考にして書き直してください。 javac Shop.java でコンパイルしてから、 java Shop asmodel 2 1 で会員名と借りる本数(video 2本 DVD 1本)を引数にして実行します。 import java.io.*; class Video{ private int rental = 0; public void setRental(int rental){ this.rental = rental; } public int getRental(){ return rental; } public void windUp(){ System.out.println("巻き直しの開始"); System.out.println("巻き直しの終了"); } public void play(){ System.out.println("再生の開始"); System.out.println("再生の終了"); } } class DVD extends Video{ public void play(){ super.windUp(); super.play(); } } public class Shop{ public static void main(String args[]){ Shop shop = new Shop(); if(shop.searchRegist(args[0])){ System.out.println(args[0] + "は登録されています"); }else{ System.out.println(args[0] + "は登録されていません"); shop.regist(args[0]); System.out.println(args[0] + "は登録されました"); } DVD dvd = new DVD(); Video video = new Video(); int v = Integer.parseInt(args[1]); int d = Integer.parseInt(args[2]); dvd.setRental(v + d); if(dvd.getRental() > 3){ System.err.println("本数オーバーです"); System.exit(1); }else{ System.out.println("DVDを楽しみます。"); dvd.play(); System.out.println("DVDは終わりました。"); System.out.println("Videoを巻きなおします。"); video.windUp(); System.out.println("Videoを巻きなおしました。"); System.out.println("Videoを楽しみます。"); video.play(); System.out.println("Videoは終わりました。"); } } public void regist(String name){ try{ BufferedWriter bw = new BufferedWriter(new FileWriter("regist.txt",true)); bw.write(name); bw.newLine(); bw.close(); } catch(IOException e){ e.printStackTrace(); } } public boolean searchRegist(String name){ boolean flag = false; try{ String line = ""; BufferedReader br = new BufferedReader(new FileReader("regist.txt")); while((line=br.readLine())!=null){ if(name.equals(line)){ flag = true; System.out.println(name +" registed"); } } br.close(); } catch(IOException e){ e.printStackTrace(); } return flag; } }

asmodel
質問者

お礼

課題の丸投げにも関わらず、お答えいただきありがとうございます。 BufferedReaderを利用してのテキスト読み出しは思いつかなかったことだったので、勉強になったと同時にプログラム全てを載せていただけたので流れがわかり、大変役立ちました。 ありがとうございました。

関連するQ&A

  • AWT Frameを利用するプログラムのmainメソッドを含むクラスについて

    AWTのFrameを継承してWindowプログラムを作成する際に、どんな書籍のサンプルプログラムを見ても、メインクラスがFrameを継承し、その中にmainメソッドが有って、そのmainメソッド内で自分自身のクラスのインスタンスを作成してshowする、といった事を定石のように行っています。 しかし私が思うに、mainメソッドなど含まずFrameを継承してWindow周りの処理を純粋に行うクラスを作成し、プログラムのメインとなるクラス内のmainメソッドからFrameを継承した別クラスのインスタンスを作成・showする方が、よほどスッキリして理解し易いような気がするのですが、どうなんでしょ? そういったサンプルプログラムを作成してみましたが問題なく動作します。ただそういう事をやっている他のサンプルソースが見当たらないので、何となく不安です(笑)

    • ベストアンサー
    • Java
  • ArrayクラスとtoStringについて

    問題集で次のプログラムを見掛ました。 public class Main{  public static void main(String args[]){   int[] array = new int[0];   System.out.println(array);  } } これを実行するとprintlnメソッドで toStringメソッドが呼び出されますが、 ArrayクラスはObjectクラスを継承しているため、 toStringメソッドもObjectクラスから継承されているので、 結果として、配列の要素数が0であっても、 エラー等が発生せずハッシュコードが表示される、ということです。 ObjectクラスのtoStringメソッドが ハッシュコードを返すものであるのは理解できます。 でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 ハッシュコードが返らないのでしょうか? 詳しい方、解説をお願いします。

  • RPGの主人公、町人、敵キャラのクラス関係

    ・町人は移動処理のみ ・主人公は移動処理とステータス ・敵キャラはステータス をもっているクラスとします。 この場合、どのように抽象クラスと継承を設計するべきでしょうか? 町人と主人公は共通の親、主人公と敵キャラは共通の親をもつべきかと思いますが 主人公が多重継承になってしまいます。 また、町人と主人公の親を作り、主人公から敵キャラへ継承すると 敵キャラに不要なメソッドを多く引き継がせることになってしまいます。

  • DVD借りましたが再生出来ません

    DVD借りましたが再生が出来ません。 これって返却するときレンタルビデオ屋さんに言えば タダ券貰えるんですか? そしてここからが本題です。 私、タダ券の存在知らずに 再生出来ずとも普通に返却していたものがありました。 過去かりた作品です。少なくとも(2)作品 それって今、いってもただ券貰えるんでしょうか? 恐らくレンタルビデオ屋さんの借りるカードの「履歴」 に過去DVD借りたもののデータがあるはずなので 恐らく可能かと思いますが、実際の所どうなんでしょうか? ちょっとイレギュラーな件だと思いますが、宜しくお願い致します。 恐らく前者はOKかと思いますが、後者がどうだか・・・

  • equals()メソッドの継承について

    ある本に ーーーーーーーーーーーーーーーーーーーーー class Car { protected int num; protected double gas; public Car() { num = 0; gas = 0.0; System.out.println("車を作成しました。"); } } class Sample8 { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Car(); Car car3; car3 = car1; boolean bl1 = car1.equals(car2); boolean bl2 = car1.equals(car3); System.out.println("car1とcar2が同じか調べたところ" + bl1 + "でした。"); System.out.println("car1とcar3が同じか調べたところ" + bl2 + "でした。"); } } JavaのクラスはすべてObjectクラスのメンバを継承していますので、equals()メソッドを記述しなくても、このメソッドを呼び出すことが出来るわけです。 ----------------------------------------- JavaのクラスはすべてObjectクラスのメンバを継承していますので、equals()メソッドを記述しなくても、このメソッドを呼び出すことが出来る    についてですが、 逆から言えば他の言語の場合は本来クラスの宣言の辺りにでもequals()メソッドを記述する必要があるという意味なんでしょうか?

    • ベストアンサー
    • Java
  • レンタルビデオのテープが切れてしまったが…

    先日、ビデオをレンタルして家で観ていたら約30分ぐらいして 突然、ビデオが止まってしまった。その後、巻き戻しや再生を やろうとしたが、全然動かなかったのでビデオテープをデッキ から取りだし、ビデオテープをみたらテープが切れていました。 この場合、レンタル屋に弁償しなければならないのでしょうか? よろしくお願いします。

  • ビデオカメラで撮影した動画を高画質でPCに取り込みたい

    小さいDVD-Rを使用するビデオカメラで撮影して、そのDVD-RをPCで読み取りコピーして再生したのですが、ビデオカメラをTVに直接繋いで再生した時と比べて随分画質が荒く見にくかったです。 高画質で取り込む方法はないでしょうか?? ちなみに、使用したビデオカメラはレンタルしたやつで既に返却したので手元にはありません。動画が保存されている小さいDVD-Rだけあります。 よろしくお願いします。

  • あれ?

    すいません。 長い間、 疑問に思ってたことがあるんですけれども、 (1) import javax.swing.*; class Sample {  public static void main (String args[])  {   ........   Aメソッド()  } } (2) import javax.swing.*; class Sample extends aiueo {   public static void main (String args[])  {   ........   Aメソッド()  } } (3) class Sample extends aiueo {  public static void main (String args[])  {    ........   Aメソッド()  } } の違いが、 考えれば考えるほどわからなくなってきました。 パッケージと継承の関係について、 どうやら理解できていないみたいです。 どなたか分かりやすく教えてください。 よろしくお願いします。 (注) Aメソッドはaiueoクラスのメソッドとし、 aiueoクラスはjavax.swingパッケージに入っているものとします。

    • ベストアンサー
    • Java
  • win10でDVDを早送り再生する

    昨年末に、Windows7をWindows10にupdate?upgrade?したら DVDが再生できなくなったので、いろいろ検索し、 VLC media playerとAny Playerをインストールしてみましたが、 DVDは再生できました。 ただ、再生したまま早送りをしたり、巻き戻し(ビデオではないのですが)が できないのです。 無料のDVD再生アプリで、再生状態で早送りや巻き戻しのできるものがあれば 教えていただきたいのですが。無料アプリではありませんか? よろしくお願いいたします。

  • 別クラスのメソッドの呼び出し

    どうしても期待した値が取れず、バイナリが返ってきてしまいます。 簡単な内容なので申し訳ないのですが書き方を教えて下さい。 下記内容です。↓ クラス01にmainメソッドを作成。 そこに「一」「二」「三」を格納する変数を宣言。 クラス02にpublic以外のメソッドを作成。 そこで「一」「二」「三」を引数として受け取り、その3つを「+」以外で文字列連結する。 クラス01のmainメソッドから、クラス02のメソッドを呼び出し、最後にSystem.out.printlnで戻ってきた文字列を出力。 ソース貼っておらず申し訳ないのですが宜しくお願いします。

    • ベストアンサー
    • Java