質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

4回答

1619閲覧

より完璧にプログラムを完成したいので厳しめにご指導の方を宜しくお願いします。後半

ook

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/03/18 13:00

}finally{
if(con!=null){
try{
con.close();
}catch(SQLException e){
System.out.println("MySQLのクローズに失敗しました。");
}
}
}
}
int gakub;
void gncheck(){
Connection con=null;
try{
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/javadb","workusr","workpass"); //ログイン
Statement stm=con.createStatement();
String sql="select * from gakusei where gakuban='"+g+"'"; //ffSQL文
ResultSet rsa=stm.executeQuery(sql);
while(rsa.next()){
gakub=rsa.getInt("gakuban");
if(g==gakub){
System.out.println("その学番は既に存在します。");
h=1;
}
}
}catch(Exception e){
}finally{
if(con!=null){
try{
con.close();
}catch(SQLException e){
System.out.println("MySQLのクローズに失敗しました。");
}
}
}
if(gakub==0){
System.out.println("その学番は存在しません。");
System.out.print("入力しなおしますか(1:はい 2:いいえ):");
int x=stdIn.nextInt();
switch(x){
case 1:
System.out.println();
kobetuC.kobetu();
break;
case 2:
System.out.println("メニューへ戻ります。");
System.out.println();
DB2.main(null);
}
}

}

}

//生年月日チェック
class ycheckC{
int y,a=0,iy,im,id,h;
String ymd,yy,ym,yd;
void yacheck(){ //生年月日英数字チェック
Scanner stdIn=new Scanner(System.in);
try{
iy=Integer.parseInt(yy);
im=Integer.parseInt(ym);
id=Integer.parseInt(yd);
}catch(Exception e){
System.out.println("英数字で入力してください。");
System.out.print("入力しなおしますか(1:はい 2:いいえ):");
int n=stdIn.nextInt();
switch(n){
case 1:
torokuC.toroku();
break;
case 2:
DB2.main(null);
System.out.println();
break;
}
}
}
void yscheck(){ //生年月日桁チェック
char[] cy=ymd.toCharArray();
if(cy.length!=8){
a=1;
}
if(a==1){
System.out.println("生年月日:NULL");
}else{
yy=ymd.substring(0,4);
ym=ymd.substring(4,6);
yd=ymd.substring(6,8);
System.out.println("生年月日:"+yy+"年 "+ym+"月 "+yd+"日");
}
}
void ymcheck(){ //生年月日の日付チェック
Scanner stdIn=new Scanner(System.in);
iy=Integer.parseInt(yy);
im=Integer.parseInt(ym);
id=Integer.parseInt(yd);
switch(im){
case 1:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 2:
if(1<=id&&id<=28){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 3:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 4:
if(1<=id&&id<=30){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 5:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 6:
if(1<=id&&id<=30){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 7:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 8:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 9:
if(1<=id&&id<=30){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 10:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 11:
if(1<=id&&id<=30){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
case 12:
if(1<=id&&id<=31){
}else{
System.out.println("その日付は存在しません。");
h=1;
}
break;
default:
System.out.println("その月は存在しません。");
System.out.print("入力しなおしますか(1:はい 2:いいえ):");
int n=stdIn.nextInt();
switch(n){
case 1:
torokuC.toroku();
break;
case 2:
DB2.main(null);
System.out.println();
break;
}
}
}
}

class ks{
Scanner stdIn = new Scanner(System.in);
kobetuC kobetu=new kobetuC();
int gakuban;
String name;
String birthday;
void kousin(){
stdIn.useDelimiter("\r\n");
Connection con=null;
try{
System.out.println("変更後の学生番号を入力してください");
System.out.print("学番:");
int gakuban1=stdIn.nextInt();
System.out.println("変更後の名前を入力してください");
System.out.print("名前:");
String name1=stdIn.next();
System.out.println("変更後の生年月日を入力してください");
System.out.print("生年月日:");
int birthday1=stdIn.nextInt();
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/javadb","workusr","workpass"); //ログイン
Statement stm = con.createStatement();
String sql = "update gakusei set gakuban='"+gakuban1+"',name='"+name1+"',birthday='"+birthday1+"' where gakuban="+gakuban;
int num = stm.executeUpdate(sql);
sql = "select * from gakusei where gakuban='"+gakuban1+"'";
ResultSet rs = stm.executeQuery(sql);
while(rs.next()){
int gakuban2 = rs.getInt("gakuban");
String name2 = rs.getString("name");
String birthday2 = rs.getString("birthday");
System.out.println("変更しました。 -> " + gakuban2 + ":" + name2 + ":" +birthday2);
System.out.println();
System.out.print("お選びください(1:メニュー2:終了):");
int w=stdIn.nextInt();
System.out.println();
switch(w){
case 1:
DB2.main(null);
break;
case 2:
endC.end();
break;
}
}
}catch(Exception e){
System.out.println("入力内容に間違いがあります。");
System.out.print("入力しなおしますか(1:はい 2:いいえ):");
int n=stdIn.nextInt();
switch(n){
case 1:
kobetuC.kobetu();
break;
case 2:
DB2.main(null);
break;
}

} } void sakuzyo(){ stdIn.useDelimiter("\\r\\n"); System.out.println("削除中"); System.out.println("検索結果 -> " + gakuban + ":" + name + ":" +birthday); Connection con=null; System.out.println("本当に削除しますか?(1:はい 2:いいえ):"); int h=stdIn.nextInt(); switch(h){ case 1: try{ con=DriverManager.getConnection("jdbc:mysql://localhost:3306/javadb","workusr","workpass"); //ログイン Statement stm = con.createStatement(); String sql = "delete from gakusei where gakuban="+gakuban; int num = stm.executeUpdate(sql); System.out.println(); System.out.println("削除が完了しました。"); System.out.println(); System.out.print("お選びください(1:メニュー2:終了):"); int w=stdIn.nextInt(); System.out.println(); switch(w){ case 1: DB2.main(null); break; case 2: endC.end(); break; } }catch(Exception e){ System.out.println("入力内容に間違いがあります。"); System.out.print("入力しなおしますか(1:はい 2:いいえ):"); int n=stdIn.nextInt(); switch(n){ case 1: kobetuC.kobetu(); break; case 2: DB2.main(null); break; default: System.out.println(); } } break; case 2: kobetuC.kobetu(); break; } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lib

2016/03/18 13:04

長いですねー。。。markdownのコード記入用あります・・・それも利用してみてください・・・。
archiver

2016/03/18 14:17 編集

一応、回答はしましたが、前半と後半はまとめておいた方がいいと思います。このような質問の仕方だとなかなか回答はつかないと思いますよ。しかも、回答が分散してしまって、あなたが後で見返す時に大変だと思います。
argius

2016/03/19 05:22

他の方も書かれていますが、一度に張り付けられないということは、そういう質問は受け付けていないという風にも考えられます。どうしても長いコードを見てほしいのであれば、(GitHubの)Gistなどの外部サービスを使うと良いです。それと、「より完璧に」というのはどの程度のことなのか判断が難しいです。例えば、Javaとしては、名前の付け方がおかしいとか、日付の判定をAPIを使わずにする必要があるのか、もっと短くできないのか、などです。
guest

回答4

0

厳し目にということなので。。。
そもそも論を書きます。

自分以外の人がソースコードを読むことを前提にコーディングしましょう。
コメントもそうですし、そもそもここに投稿する時点で、markdownなど使うべきです。
どれだけ優れたソースコードでも、読んでもらえなかったら、まともに評価すらしてもらないです。

投稿2016/03/18 14:26

Odacchi

総合スコア907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

別回答にも書きましたが、1質問で書ききれない質問はteratailは想定していないのです。

それと今の状態だと複数の質問をたどることが少し難しいですよね?
ユーザーページからたどることはできますけどね。
なので、せめて各質問のリンクを付けてみるようにしてはどうですか?

そういう配慮や発想も、優れたプログラミングをするために必要だと思いますので、検討してみてください。

...

完璧にするのは現実的でないので、妥当な線でごく簡単に指摘をするとしたら。

  • 重複などの無駄が多すぎます。
  • APIを適切に使いましょう。日付をチェックするような汎用的なコードは既に誰かが書いています。
  • catchの中身を空にするのは絶対にやってはいけません。そのまま外に投げるか、せめてprintStackTraceを実行してどこかに例外が発生したことを分かるようにしましょう。
  • メソッドやクラスの名前が分かりにくいです。その機能が分かるような名前を付けましょう。
  • コードを人に見せる前提なら、インデントやフォーマットに気を配りましょう。

まずはこんなところでしょうか。

投稿2016/03/19 05:48

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何を意識してコーディングしたのかを明示しましょう。

投稿2016/03/18 14:32

kaw2014

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

後半で気が付いたところだと、
ycheckCクラスのymcheckメソッドがうるう年を考慮していませんね。2月は固定で28日までではないです(今年がそうでしたよね)。
それと、各月の日付判定ですが、各月をcaseで一つ一つ書いていますが、「大の月」と「小の月」に大別できるので、その分岐にした方が短くできると思います(2月は例外で、うるう年判定をした上で上限値の判定をする必要がありますが)。

投稿2016/03/18 14:11

archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2016/03/18 14:32

というか、日付の妥当性チェックなんてよくやりそうなことを わざわざ自分で組まないとできないわけがないと思ってググったら Calendarでできるんですね。
archiver

2016/03/18 14:41

ozwkさん> Calendarですか。やっぱり、そういうの用意されてますよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問