§1、課題1 【動作説明】 コンパイル後の実行例を記載して、分かりにくいところは補足していく。 このプログラムの動作確認をしたパソコンでは、コンパイル後の実行ファイルがすべて、a.exeとなる。 ・課題1−1 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a first zwei 3 four File name you executed is a The NO.1 argument is first The NO.2 argument is zwei The NO.3 argument is 3 The NO.4 argument is four ----------------ここまで-------------------- 第1引数から順次入力されている単語を表示するプログラム。 ・課題1−2 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a 7 7!=5040 ----------------ここまで-------------------- 第1引数に入力した数字の階上をソース上で再起的に計算するプログラム。 ・課題1−3 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a sample.txt This,is,source. File,end. ----------------ここまで-------------------- 第1引数に指定したファイルを表示するプログラム。 ・課題1−4 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>dir ドライブ Z のボリューム ラベルは CIFS.HOMEDIR です ボリューム シリアル番号は 0000-0000 です Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1 のディレクトリ 2006/06/30 14:41 . 2006/06/30 14:12 .. 2006/06/30 14:41 15,153 a.exe 2006/06/09 14:52 26 sample.txt 2006/06/09 13:42 328 1031060322-1-1.c 2006/06/09 13:35 444 1031060322-1-2.c 2006/06/09 14:03 578 1031060322-1-3.c 2006/06/09 14:05 770 1031060322-1-4.c 2006/06/09 14:28 893 1031060322-1-5.c 2006/06/09 14:50 1,348 1031060322-1-6.c 8 個のファイル 19,540 バイト 2 個のディレクトリ 101,183,488 バイトの空き領域 Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a sample.txt copy.txt Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>dir ドライブ Z のボリューム ラベルは CIFS.HOMEDIR です ボリューム シリアル番号は 0000-0000 です Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1 のディレクトリ 2006/06/30 14:41 . 2006/06/30 14:12 .. 2006/06/30 14:41 15,153 a.exe 2006/06/30 14:41 26 copy.txt 2006/06/09 14:52 26 sample.txt 2006/06/09 13:42 328 1031060322-1-1.c 2006/06/09 13:35 444 1031060322-1-2.c 2006/06/09 14:03 578 1031060322-1-3.c 2006/06/09 14:05 770 1031060322-1-4.c 2006/06/09 14:28 893 1031060322-1-5.c 2006/06/09 14:50 1,348 1031060322-1-6.c 9 個のファイル 19,566 バイト 2 個のディレクトリ 101,183,488 バイトの空き領域 ----------------ここまで-------------------- 第1引数にもとから存在するファイルを指定し、第2引数で指定したファイル名で、同じフォルダ内に第1引数で指定したファイルと同じ内容のファイルを作成するプログラム。 上記の場合、sample.txtとcopy.txtは同じ内容のファイルである。 ・課題1−5 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a sample.txt -- Line 1 -- Field 1: This Field 2: is Field 3: source. -- Line 2 -- Field 1: File Field 2: end. ----------------ここまで-------------------- 引数のファイルに含まれる文字列を、カンマを区切りとして、行数と単語数に整理して表示するプログラム。 この場合のsample.txtのファイルの中身は以下。 ----------------ここから-------------------- This,is,source. File,end. ----------------ここまで-------------------- ・課題1−6 ----------------ここから-------------------- Z:\test1\岩村さんソース完成版(暫定3週目)\kadai-1>a sample.txt 2 3 -- Line 1 -- Field 1: This Field 2: source. Field 3: is -- Line 2 -- Field 1: File Field 2: end. ----------------ここまで-------------------- 課題1−5のように、第1引数にのファイルに含まれる文字列を、カンマを区切りとして分け、第2引数と第3引数で指定されたフィールド数の単語を入れ替えて表示するプログラム。 ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は、入れかえを行わない。 この場合のsample.txtのファイルの中身は以下。 ----------------ここから-------------------- This,is,source. File,end. ----------------ここまで-------------------- §2、課題2 【インストール方法】 1、1031060322-2-1.cをコマンドプロンプトにより、コンパイルする。 アクセサリから、コマンドプロンプトを開き、コンパイラのパスが通っているフォルダに、1031060322-2-1.cを移動し、コマンドプロンプトに、コンパイラがgccの場合は、 gcc 1031060322-2-1.c と入力して、ENTERを押す。 2、次に、コンパイルによってできた実行ファイル(それぞれの環境にもよるが、自分の場合はa.exeというファイル。一般的には、1031060322-2-1.cというファイルができると思われる。)をコマンドプロンプト上から実行する。 コマンドプロンプトに入力するのは、データベースファイルを第一引数にとって入力する。 データベースファイルが、student.txtの場合は、 a.exe student.txt と入力する。 これにより、本プログラムが実行される。 3、データベースファイル作成ルール ここでデータベースである、student.txtのデータベース作成のルールを説明する。 まずは、実際にデータベースに入力してある例を載せておく。 ----------------ここから-------------------- 145614,Koichi Fujita,MUSIC 145615,HItoshi Mori,READING 145616,Yutaka Mizuta,PROGRAMING 145617,Ryousuke Matsumoto,PC 145618,Saki Moriyasu,SPORTS 145619,Yuichi Tasaka,GAME 145620,Cherinn Sonn,SOCCER 145621,Takeshi Nomura,VIDEO 145622,Yuichiro Okuda,RUGBY 145613,Yasuhisa Ikuta,RUGBY 145612,Yshiharu Tuzaki,SOCCER 145623,Hirohisa Kanou,SOCCER 145611,Emi Tamaoka,SHOPPING ----------------ここまで-------------------- 上記のように、データベースを入力して、テキストファイルで保存していく。 本プログラムを実行し、その中でデータベースを記録していくことも可能(下記で説明)であるが、ここではテキストファイルとして手動で入力する方法を説明する。 上記の例のように、1行にその生徒のデータを入力する。 [学籍番号],[名前],[趣味] とういう順番で入力し、一人のデータの入力が終わったら、改行して次の行に別の人のデータを順次入力していく。 データの入力が終われば保存して、プログラムの実行ファイルがある同じフォルダ内においておく。 【使用方法】 1、上記のインストール方法により実行すると、以下のような画面になる。 ----------------ここから-------------------- [search]: search data [number]: search data from number [name] : search data from name [hobby] : search data from hobby [check] : check all data [add] : add data [save] : save data [finish]: finish searching data Enter your question : ----------------ここまで-------------------- 2、データベース検索方法。 "Enter your question :"に対し、上に表示されている8つの項目の中から、検索方法を選び入力する。 ここでは、ひとつずつ説明していく。 T、search -- 入力すると、以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :search Enter number & question[example - '145616 name']: ----------------ここまで-------------------- ここで、:以下に、exampleであげられているように、学籍番号と調べる種類をスペースをあけて入力する。 exampleの場合でいくと、145616の学籍番号の名前を調べたい、ということになる。 nameの他にhobbyを入力することもできる。 実際に入力した例を見てみると、以下となる。 ----------------ここから-------------------- Enter your question :search Enter number & question[example - '145616 name']:145616 name The name of No.145616 is 'Yutaka Mizuta' press enter key... ----------------ここまで-------------------- ----------------ここから-------------------- Enter your question :search Enter number & question[example - '145616 name']:145616 hobby The hobby of No.145616 is 'PROGRAMING' press enter key... ----------------ここまで-------------------- U、number -- 入力すると以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :number Enter number: ----------------ここまで-------------------- ここで、:以下に学籍番号を入力することで、その学籍番号の生徒のデータを出力することができる。 実際に入力した例をみてみると、以下となる。 ----------------ここから-------------------- Enter your question :number Enter number:145619 -----------DATA OF 145619----------- NUMBER:145619 NAME :Yuichi Tasaka HOBBY :GAME ------------------------------------ press enter key... ----------------ここまで-------------------- V、name -- 入力すると以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :name Enter name: ----------------ここまで-------------------- ここで、:以下に名前を入力することで、その名前の生徒のデータを出力することができる。 実際に入力した例をみてみると、以下となる。 ----------------ここから-------------------- Enter your question :name Enter name:Yuichi Tasaka -----------DATA OF 145619----------- NUMBER:145619 NAME :Yuichi Tasaka HOBBY :GAME ------------------------------------ press enter key... ----------------ここまで-------------------- W、hobby -- 入力すると以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :hobby Enter hobby: ----------------ここまで-------------------- ここで、:以下に趣味を入力することで、その趣味に該当する生徒のデータを出力することができる。 実際に入力した例をみてみると、以下となる。 ----------------ここから-------------------- Enter your question :hobby Enter hobby:SOCCER -----------DATA OF SOCCER----------- NUMBER:145620 NAME :Cherinn Sonn HOBBY :SOCCER ------------------------------------ -----------DATA OF SOCCER----------- NUMBER:145612 NAME :Yshiharu Tuzaki HOBBY :SOCCER ------------------------------------ -----------DATA OF SOCCER----------- NUMBER:145623 NAME :Hirohisa Kanou HOBBY :SOCCER ------------------------------------ press enter key... ----------------ここまで-------------------- X、check -- 入力すると以下のように、データベースファイルのすべてのデータを確認することができる。 (後述するaddで追加したデータも、saveをしていなくても、その追加したときの状態で、ソフトを終了しない限りは、checkで確認することができる。) ----------------ここから-------------------- Enter your question :check -----------DATABASE----------- 145614,Koichi Fujita,MUSIC 145615,HItoshi Mori,READING 145616,Yutaka Mizuta,PROGRAMING 145617,Ryousuke Matsumoto,PC 145618,Saki Moriyasu,SPORTS 145619,Yuichi Tasaka,GAME 145620,Cherinn Sonn,SOCCER 145621,Takeshi Nomura,VIDEO 145622,Yuichiro Okuda,RUGBY 145613,Yasuhisa Ikuta,RUGBY 145612,Yshiharu Tuzaki,SOCCER 145623,Hirohisa Kanou,SOCCER 145611,Emi Tamaoka,SHOPPING -------------------------------- press enter key... ----------------ここまで-------------------- Y、add -- 入力すると以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :add Enter number:145624 Enter name:Migiwa Sanaka Enter hobby:SHOPPING press enter key... ----------------ここまで-------------------- 順次、number、name、hobbyの順で入力する場所が現れるので、それにしたがって入力し、最後にENTERを押すことで、追加を完了する。 ただし、これは配列に格納したに過ぎず、データベースファイル自体を書き換えたわけではないので注意する。 Z、save -- 入力することで、addで追加したデータを、データベースファイルに記録することができる。 saveする際には、以下のような質問が出力される。 ----------------ここから-------------------- Enter your question :save SAVE?(y/n):y Save complete!! press enter key... ----------------ここまで-------------------- 2行目で、yかnを入力することで、ファイルに変更を記憶することができる。 [、finish -- 入力すると、このソフトを終了することができる。 6.2 検討 1、プログラムの更なる工夫について 大体のことはできるようなプログラムにした。 更なる工夫を加えるとすると、 ・データベースの種類を3つから増やす ・エラー出力時のその時に適当なエラー処理を施す 等が挙げられる。 2、工夫に対するアルゴリズム データベースの種類を増やすアルゴリズムは、簡単にできそうである。 ・構造体の種類を3つから増やす ・趣味や名前を探すときと同じアルゴリズムを同様にそれらに施す これだけでできそうな気がした。 エラー出力時の適当なエラー処理は、意外と手間がかかりそうなものが多いと思った。 大体のエラー処理は、continueでスキップするようにしたが、そうしたのはループの中にエラー出力の構成部分が組まれているため、簡単にprintfでエラー表示や、再度入力画面等にするには、そのループの構成自体を少し変えないといけなかった。 これは、今回少し課題の残る内容だとおもった。 時間があれば、どのようにループとエラー部分を分けて構成するかを考えたいと思う。 6.3 実験の感想 今回のデータベースプログラムは、考えていた構成通りに組むことができたと思う。 今まで組んできたプログラムは、練習的なものが多かったが、今回取り組んだプログラムは「ソフト」といったような感じがあって、組んでいくほどにその感覚が強くなり、できたときは達成感があった。 このような「ソフト」をプログラムでこれからもどんどん組んでいきたいとも思えたし、この実験でプログラムを組むことができて、自分のためになったとも思えた。 夏は、暇があればこのプログラムをもっと改良して、C++等でGUIを取り込んで組むのもおもしろいかなーとおもった。