成績管理計画

18546 ワード

//学生成績管理計画(ver 0.0.1)
//クラス全員で5名様
//学号は1~
//科目は国語英語数学
//各科の成績と総和を出力して、平均数(小数第2位)を求めてください
1.文字列の使用
:入力するだけ入力します.
package com.bit.day07;

public class Ex10 {

	public static void main(String[] args) {
		
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			boolean boo=true;
			int num=0;
			
			String data="-------------------------------------------\n";
			data+=" 학번 | 국어 | 영어 | 수학 | 합계 | 평균\n";
			data+="-------------------------------------------\n";
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
				if(su==0){
					boo=false;
				}else if(su==1){
					System.out.println(data);
					
				}else if(su==2){
					num++;
					System.out.println("국어>");
					int kor=sc.nextInt();    
					System.out.println("영어>");
				    int eng=sc.nextInt();
				    System.out.println("수학>");
					int math=sc.nextInt();
					int sum=kor+eng+math;
					
					double avg=sum*100/3/100.0;        //소수 둘째 자리까지 나오도록 자르기
					
					data+=num+"       "+kor+"      "+eng+"       "+math+"     "+sum+"     "+avg+"       "+"\n";
				}
			}
			
			System.out.println("이용해주셔서 감사합니다.");
	}
}
2.複数のアレイの使用
:配列のサイズが決定され、入力できません.
package com.bit.day07;

public class Ex10 {

	public static void main(String[] args) {
		
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			boolean boo=true;
			
			int cnt=0;
			int[][] data=new int[5][3];       //3을 입력해야 null포인터 exception오류가 안떨어진다.
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
				if(su==0){
					boo=false;
				}else if(su==1){
					System.out.println("-------------------------------------------");
					System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
					System.out.println("-------------------------------------------");
					for(int i=0; i<data.length; i++){
						int[] stu=data[i];      //국어,영어,수학의 값이 하나씩 인덱스에 들어간다.
    //data[5][]로 만들었을 경우, 여기에 if(stu!=null)이라는 조건을 주어 null오류 해결할 수 있다.
	System.out.println(i+1+" |"+stu[0]+"  |"+stu[1]+"  |"+stu[2]+"  |"+(stu[0]+stu[1]+stu[2])+"   |"+
								(stu[0]+stu[1]+stu[2])*100/3/100.0);
					}
				}else if(su==2 && cnt<5){
					System.out.println("국어>");
					int kor=sc.nextInt();    
					System.out.println("영어>");
				    int eng=sc.nextInt();
				    System.out.println("수학>");
					int math=sc.nextInt();
//초기화는 배열 생성시에만 할 수 있기 때문에 새로운 배열 stu를 생성하여 data배열에 넣는다.
					int[] stu=new int[]{kor,eng,math};     
					data[cnt]=stu;
					cnt++;
					} else if(su==2){
						System.out.println("입력이 끝났습니다.");}
				}
			
			System.out.println("이용해주셔서 감사합니다.");

            sc.close();
	}
}
配列スペースを変更して、入力時に書き込む
package com.bit.day07;

public class Ex10 {

	public static void main(String[] args) {
		
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			boolean boo=true;
			
			int cnt=0;                     //while문의 안이 아니라 밖에 선언,초기화해야한다.

			System.out.print("총원>");
			int tot=sc.nextInt();
			
			
			int[][] data=new int[tot][3]; //while문의 안이 아니라 밖에 선언,초기화해야한다.
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
				if(su==0){
					boo=false;
				}else if(su==1){
					System.out.println("-------------------------------------------");
					System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
					System.out.println("-------------------------------------------");
					for(int i=0; i<data.length; i++){
						int[] stu=data[i]; //i번지를 출력하면 행이 나오니까, 다시 단일배열에 넣는다.
						System.out.println(i+1+"     |"+stu[0]+"    |"+stu[1]+"    |"+stu[2]+"    |"+(stu[0]+stu[1]+stu[2])+"   |"+
								(stu[0]+stu[1]+stu[2])*100/3/100.0);
					}
				}else if(su==2 && cnt<data.length){
					System.out.println("국어>");
					int kor=sc.nextInt();    
					System.out.println("영어>");
				    int eng=sc.nextInt();
				    System.out.println("수학>");
					int math=sc.nextInt();
					int[] stu=new int[]{kor,eng,math};
					data[cnt]=stu;  //data=다중배열이므로 stu를 받을 수 있다.
					cnt++;       //인덱스를 for문으로 돌린다고 생각하지말고 변수를 이용할 생각해보기!
					} else if(su==2){
						System.out.println("입력이 끝났습니다.");}
				}
			
			System.out.println("이용해주셔서 감사합니다.");
			
			sc.close();
	}
}
3.単列
:これはいい例ではありません.交換するものが多くなりました.
package com.bit.day07;

public class Ex10 {

	public static void main(String[] args) {
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			
			boolean boo=true;
			System.out.print("총원>");
			int max=sc.nextInt();				
			int[] data=new int[max*3];   //한 사람당 국어,영어,수학의 점수 3개 공간이기 때문에 *3
			int idx=0;
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
				
				if(su==0){
					boo=false;
				}else if(su==1){
					System.out.println("-------------------------------------------");
					System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
					System.out.println("-------------------------------------------");
					for(int i=0; i<data.length; i++){
						int num=i/3+1;			   //학번
						int kor=data[i++];
						int eng=data[i++];
						int math=data[i];
						int sum=kor+eng+math;
						double avg=sum*100/3/100.0;
		    	System.out.println(num+"  |" +kor+" |"+eng+" |"+math+ "  |"+sum+"  |"+avg);
					}
				}
				else if(su==2 && idx<data.length){
					System.out.println("국어>");
					data[idx++]=sc.nextInt();
					System.out.println("영어>");
					data[idx++]=sc.nextInt();
				    System.out.println("수학>");
				    data[idx++]=sc.nextInt();
				}
			}
                System.out.println("이용해주셔서 감사합니다.");
	}
}
4.単列文字列
package com.bit.day07;

public class Ex11 {

	public static void main(String[] args) {
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			
			boolean boo=true;
			String[] data=new String[5];
			int idx=0;
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
		
			if(su==0){
			boo=false;
			
		}else if(su==1){
			System.out.println("-------------------------------------------");
			System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
			System.out.println("-------------------------------------------");
			for(int i=0; i<data.length; i++){
				if(data[i]!=null){
				String[] stu=data[i].split("\t");    //string이니까 쪼개준다. 문자열 3개를 갖는 배열이 된다.
				int kor=Integer.parseInt(stu[0]);
				int eng=Integer.parseInt(stu[1]);
				int math=Integer.parseInt(stu[2]);
				int sum=kor+eng+math;
				double avg=sum*100/3/100.0;
				System.out.println(i+1+"\t"+kor+"\t"+eng+"\t"+math+"\t"+sum+"\t"+avg);
				}
			}
		}
		else if(su==2){
			System.out.println("국어>");
			int kor=sc.nextInt();
			System.out.println("영어>");
			int eng=sc.nextInt();
		    System.out.println("수학>");
			int math=sc.nextInt();
			data[idx++]=kor+"\t"+eng+"\t"+math;
		}
	}
			System.out.println("이용해주셔서 감사합니다.");
	}
}
5.オブジェクト配列の使用
メリット:需要が増えても簡単に追加できます.+多様な資料型処理が可能
package com.bit.day07;

class Student{
	int num;
	String name;
	int kor;
	int eng;
	int math;
}


public class Ex11 {

	public static void main(String[] args) {
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			
			boolean boo=true;
			Student[] stus=new Student[5];
			int num=0;
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
		
			if(su==0){
			boo=false;
			
		}else if(su==1){
			System.out.println("-------------------------------------------");
			System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
			System.out.println("-------------------------------------------");
			for(int i=0; i<stus.length; i++){
				Student stu = stus[i];
				if(stu!=null){
 			System.out.println(stu.num+"\t"+stu.kor+"\t"+stu.eng+"\t"+stu.math+
			"\t"+(stu.kor+stu.eng+stu.math)+"\t"+(stu.kor+stu.eng+stu.math)*100/3/100.0);
	
				}
			}
			
		}
		else if(su==2&&num<stus.length){
	//		System.out.println("이름>");
	//		String name=""+sc.nextInt();                 //문자열로 입력받기
			System.out.println("국어>");
			int kor=sc.nextInt();
			System.out.println("영어>");
			int eng=sc.nextInt();
		    System.out.println("수학>");
			int math=sc.nextInt();
			
			Student stu=new Student();
			stus[num++]=stu;                //여기서 stu의 시작 주소값을 stus[0]에게 넣는 것?
	//		stu.name=name;                   //객체의 속성을 쉽게 늘릴 수 있다.
			stu.num=num;                      //1을 넣는다.
			stu.kor=kor;
			stu.eng=eng;
			stu.math=math;
			
		}
	}
			System.out.println("이용해주셔서 감사합니다.");

	}
}
-作成者の使用
:学号は変わらない値で、名前を付けて処理したほうがいいです.
package com.bit.day07;
class Student{
	int num;
	String name;
	int kor;
	int eng;
	int math;
	
	Student(int kor, int eng, int math){
		this.kor=kor;
		this.eng=eng;
		this.math=math;
	}
}

public class Ex11 {

	public static void main(String[] args) {
			System.out.println("학생성적관리프로그램(ver0.0.1)");
			System.out.println("-------------------------------");
			java.util.Scanner sc=new java.util.Scanner(System.in);
			
			boolean boo=true;
			Student[] stus=new Student[5];
			int num=0;
			
			while(boo){
				System.out.println("1.목록 2.입력 0.종료>");
				int su=sc.nextInt();
		
			if(su==0){
			boo=false;
			
		}else if(su==1){
			System.out.println("-------------------------------------------");
			System.out.println(" 학번 | 국어 | 영어 | 수학 | 합계 | 평균");
			System.out.println("-------------------------------------------");
			for(int i=0; i<stus.length; i++){
				Student stu = stus[i];
				if(stu!=null){
					System.out.println(stu.num+"\t"+stu.kor+"\t"+stu.eng+"\t"+stu.math+
							"\t"+(stu.kor+stu.eng+stu.math)+"\t"+(stu.kor+stu.eng+stu.math)*100/3/100.0);
					
				}
			}
			
		}
		else if(su==2&&num<stus.length){
			System.out.println("국어>");
			int kor=sc.nextInt();
			System.out.println("영어>");
			int eng=sc.nextInt();
		    System.out.println("수학>");
			int math=sc.nextInt();
			
			Student stu=new Student(kor,eng,math);
			stus[num++]=stu;
			stu.num=num;
		
			
		}
	}
			System.out.println("이용해주셔서 감사합니다.");

	}
}
アレイ・レプリケーションによる動的割当て
: 넣으면 넣는대로 들어가길 원하기 때문에
アレイ・レプリケーションにより、静的データ構造を動的に割り当てます.ArrayListクラス
package com.bit.day07;

class Array{
	int[] arr=new int[0];
	
	public void add(int su){
		int[] temp=arr;
		arr=new int[arr.length+1];
		//기존값 복사
		for(int i=0; i<temp.length; i++){
			arr[i]=temp[i];				
		}
		arr[arr.length-1]=su;     //늘어난 arr배열 마지막 번지에 su를 넣는다.
	}
	
	public int get(int idx){
		return arr[idx];
	}
	
	//사이즈 알려주는 메소드
	public int size(){
		return arr.length;
	}
}


public class Ex12 {

	public static void main(String[] args) {
			Array arr=new Array();          //사용하는 입장에서는 내가 값을 넣은만큼 늘어나는 효과를 볼 수 있다.
			arr.add(1111);
			arr.add(2222);
			arr.add(3333);
			for(int i=0; i<arr.size(); i++){
				System.out.println(arr.get(i));
			}
		}
}
アレイ・レプリカ
package com.bit.day07;

class StuArray{
			Student[] arr=new Student[0];   //객체 배열 arr 생성

			public void add(Student su){
				Student[] temp=arr;
				arr=new Student[arr.length+1];     //새로운 배열 객체 생성, arr는 새로운 객체 참조
				//기존값 복사
				for(int i=0; i<temp.length; i++){
					arr[i]=temp[i];
				}
				arr[arr.length-1]=su;
			}

			public int size(){
				return arr.length;
			}

			public Student get(int idx){
				return arr[idx];
			}
		}
	 
class Student{
			int num;
			String name;
			int kor;
			int eng;
			int math;
			
		Student(int kor,int eng,int math){
				this.kor=kor;
				this.eng=eng;
				this.math=math;
			}
}
		 
public class Ex13 {
		
public static void main(String[] args) {
				System.out.println("학생성적관리프로그램(ver0.0.5)");
				System.out.println("--------------------------------");
				java.util.Scanner sc=new java.util.Scanner(System.in);
				boolean boo=true;

				StuArray data=new StuArray();
				int num=0;

				while(boo){
					System.out.print("1.목록 2.입력 0.종료>");
					int su=sc.nextInt();
					if(su==0){
						boo=false;
					}else if(su==1){
						System.out.println("------------------------------------------------");
						System.out.println("학번	|국어	|영어	|수학	|합계	|평균");
						System.out.println("------------------------------------------------");
						for(int i=0;i<data.size(); i++){

						 //=arr[i]번지에 있는 stu객체를 가져온다.
							Student stu=data.get(i);

							if(stu!=null){
								System.out.println(stu.num+"\t"+stu.kor+"\t"+stu.eng+"\t"
										+stu.math+"\t"+(stu.kor+stu.eng+stu.math)+"\t"
										+(stu.kor+stu.eng+stu.math)*100/3/100.0);
							}
						}
						System.out.println("------------------------------------------------");

					}else if(su==2){
						System.out.print("국어>");
						int kor=sc.nextInt();
						System.out.print("영어>");
						int eng=sc.nextInt();
						System.out.print("수학>");
						int math=sc.nextInt();
						Student stu=new Student(kor,eng,math);
						stu.num=num++;
						data.add(stu);
					}
				}
				System.out.println("이용해주셔서 감사합니다");
			}	 
		}