成績管理計画
18546 ワード
//学生成績管理計画(ver 0.0.1)
//クラス全員で5名様
//学号は1~
//科目は国語英語数学
//各科の成績と総和を出力して、平均数(小数第2位)を求めてください
1.文字列の使用
:入力するだけ入力します.
:配列のサイズが決定され、入力できません.
:これはいい例ではありません.交換するものが多くなりました.
メリット:需要が増えても簡単に追加できます.+多様な資料型処理が可能
:学号は変わらない値で、名前を付けて処理したほうがいいです.
: 넣으면 넣는대로 들어가길 원하기 때문에
アレイ・レプリケーションにより、静的データ構造を動的に割り当てます.ArrayListクラス
//クラス全員で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("이용해주셔서 감사합니다");
}
}
Reference
この問題について(成績管理計画), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/성적관리-프로그램テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol