라라리라
2023.08.23 / Step 10 [클래스] - 코딩 35 일차 본문
클래스1_개념01_json복습.html
<script>
/*
[문제1]
data1과 data2를 파싱하여 아래와 같이 jsonList에 json형태로 저장하시오.
data1은 json의 key 이다.
data2는 json의 value 이다.
[정답1]
jsonList = [
{"num" : 1001, "name" : "김철수", "kor" : 100, "math" : 20},
{"num" : 1002, "name" : "이영수", "kor" : 90, "math" : 40},
{"num" : 1003, "name" : "오민수", "kor" : 20, "math" : 50}
]
[문제2]
1등 학생의 이름을 출력하시오.
[정답2]
이영수
[문제3]
새로운 학생의 정보를 추가하시오.
[정답3]
1001 김철수 100 20
1002 이영수 90 40
1003 오민수 20 50
1004 신민아 90 89
[문제4]
평균 60점 이하의 학생 정보를 삭제하시오.
[정답4]
1002 이영수 90 40
1004 신민아 90 89
*/
function quest1 (data1, data2){
let rs = [];
let key = data1.split("/");
let token = data2.split(",");
for(let i = 0; i < token.length; i++){
let temp = token[i].split("/");
let unit = {}
for(let j = 0; j < temp.length; j++){
unit[key[j]] = temp[j];
}
rs.push(unit);
}
return rs;
}
function printJSON (arr){
for(let i = 0; i < arr.length; i++){
let keys = Object.keys(arr[i]); //대문자
for(let j = 0; j < keys.length; j++){
document.write(arr[i][keys[j]] + " ");
}
document.write("<br>");
}
document.write("<br>");
}
function checkfirst (arr){
let max = 0;
let maxid = 0;
for(let i = 0; i < arr.length; i++){
let total = Number(arr[i]["kor"]) + Number(arr[i]["math"]);
if(max < total){
max = total;
maxid = i;
}
}
document.write("1등 = " + arr[maxid]["name"] + "<br>");
}
function addnewstudent (data1, add, rs){
let key = data1.split("/"); //변수지정할때 이미 rs 는 지정해둔 상태이기 때문에 let rs로 한번 더 변수설정할 필요가 없다.
let temp = add.split("/")
let unit = {};
for(let i = 0; i < key.length; i++){
unit[key[i]] = temp[i];
}
rs.push(unit);
return rs;
}
function deletestudent (arr){
for(let i = 0; i < arr.length; i++){
let avg = (Number(arr[i]["kor"]) + Number(arr[i]["math"])) / 2;
if(avg <= 60){
arr.splice(i, 1);
i--;
}
}
}
let data1 = "num/name/kor/math";
let data2 = "1001/김철수/100/20,1002/이영수/90/40,1003/오민수/20/50";
// 새로운 학생정보
let add = "1004/신민아/90/89";
// 문제1)
let q1 = quest1(data1, data2);
printJSON(q1);
// 문제2)
checkfirst(q1);
// 문제3)
addnewstudent(data1, add, q1);
printJSON(q1);
// 문제4)
deletestudent(q1);
printJSON(q1);
</script>
클래스1_개념02_클래스정의.html
<script>
/*
[개념] 클래스
[1] 클래스는 기존의 json과 함수를 합쳐놓은 것이다.
(1) 단순히 두 기능을 합친 것 뿐만 아니라
상속을 이용해서 객체지향 프로그램을 작성할 수 있다.
(2) 상속은 추후에 다룬다.
[2] 클래스 정의
(1) 클래스 정의는 데이터가 생성된 것은 아니고,
생성했을 때의 모양을 미리 정의해놓는 것이다.
(2) 추후 똑같은 객체를 여러개 생성하기 위해서 사용된다.
[3] 클래스 생성
변수 = new 클래스이름();
[예시]
let st = new stdent();
[4] 클래스 사용
객체변수.내부변수
[예시]
st.name = "김철수";
[5] json과 거의 유사하나
미리 정의해놓고 사용한다는 점에서 다르다.
[6] 보통 클래스는 json과 마찬가지로
배열과 함께 쓰인다.
[7] 클래스 내부의 변수들을
인스턴스 변수라 부른다.
*/
let jsonList = [
{"num":1001, "name":"김철수", "kor":100, "math":20},
{"num":1002, "name":"이만수", "kor":40, "math":60}
];
// 클래스 정의
class Student {
// 인스턴스(instance) 변수
num = 0;
name = "";
kor = 0;
math = 0;
}
// 클래스(= 객체) 생성
// 객체(= instance)
let st1 = new Student();
st1.num = 1001;
st1.name = "김철수";
st1.kor = 100;
st1.math = 20;
let st2 = new Student();
st2.num = 1002;
st2.name = "이만수";
st2.kor = 40;
st2.math = 60;
document.write(st1.num + ", " + st1.name + ", " + st1.kor + ", " + st1.math + "<br>");
document.write(st2.num + ", " + st2.name + ", " + st2.kor + ", " + st2.math + "<br>");
</script>
클래스1_개념03_상품매출.html
<script>
/*
[문제]
member는 회원목록이다. 번호와 아이디가 기록되어있다.
item은 쇼핑몰 판매상품이다. 상품이름과 가격이 기록되어있다.
order는 오늘 주문 목록이다.
주문한회원아이디와 아이템이름 그리고, 주문개수가 기록되어있다.
오늘의 매출을 출력하시오.
Member 클래스와 Item 클래스, Order클래스를 만들고,
문자열을 잘라 각각의 클래스에 저장 후 문제를 푸시오.
[정답]
33200
*/
class Member {
num = 0;
id = "";
}
class Item {
name = "";
price = 0;
}
class Order {
id = "";
name = "";
count = 0;
}
let memberData = "1001,qwer1234/1002,pythongood/1003,testid";
let itemData = "사과,1100/바나나,2000/딸기,4300";
let orderData = "qwer1234,사과,3/phthongood,바나나,2/qwer1234,딸기,5/testid,사과,4";
let memberList = [];
let itemList = [];
let orderList = [];
let token = memberData.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let member = new Member();
member.num = temp[0];
member.id = temp[1];
memberList.push(member);
}
token = itemData.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let item = new Item();
item.name = temp[0];
item.price = temp[1];
itemList.push(item);
}
token = orderData.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let order = new Order();
order.id = temp[0];
order.name = temp[1];
order.count = temp[2];
orderList.push(order);
}
let total = 0;
for(let i = 0; i < itemList.length; i ++){
for(let j = 0; j < orderList.length; j++){
if(itemList[i].name == orderList[j].name){
total += itemList[i].price * orderList[j].count;
}
}
}
document.write("total = " + total + "<br>");
</script>
클래스1_문제01_상품취소.html
<script>
/*
[문제]
member는 회원목록이다.
item은 쇼핑몰 판매상품이다.
price는 아이템 가격이다.
order는 오늘 주문 목록이다.
cancel은 주문취소 목록이다.
오늘의 매출을 출력하시오.
Member, Item, Order, Cancel 클래스를 만들고,
문자열을 잘라 각각의 클래스에 저장 후 문제를 푸시오.
[정답]
7700
*/
class Member {
id = "";
}
class Item {
name = "";
price = 0;
}
class Order {
id = "";
name = "";
count = 0;
}
class Cancel {
id = "";
name = "";
count = 0;
}
let memberList = [];
let itemList = [];
let orderList = [];
let cancelList = [];
let member = "qwer1234,pythongood,testid";
let item = "사과,1100/바나나,2000/딸기,4300";
let order = "qwer1234,사과,3/phthongood,바나나,2/qwer1234,딸기,5/testid,사과,4";
let cancel = "qwer1234,딸기,5/phthongood,바나나,2";
let token = member.split(",");
for(let i = 0; i < token.length; i++){
let mem = new Member();
mem.id = token[i];
memberList.push(mem);
}
token = item.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let it = new Item ();
it.name = temp[0];
it.price = Number(temp[1]);
itemList.push(it);
}
token = order.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let ord = new Order ();
ord.id = temp[0];
ord.name = temp[1];
ord.count = Number(temp[2]);
orderList.push(ord);
}
token = cancel.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let can = new Cancel ();
can.id = temp[0];
can.name = temp[1];
can.count = Number(temp[2]);
cancelList.push(can);
}
let total = 0;
for(let i = 0; i < itemList.length; i++){
let count = 0;
for(let j = 0; j < orderList.length; j++){
if(itemList[i].name == orderList[j].name) count += orderList[j].count;
}
for(let j = 0; j < cancelList.length; j++){
if(itemList[i].name == cancelList[j].name) count -= cancelList[j].count;
}
if(count > 0) total += count * itemList[i].price;
}
document.write("total = " + total + "<br>");
</script>
클래스1_문제02_상품통계.html
<script>
/*
[문제]
member는 회원목록이다.
item은 쇼핑몰 판매상품이다.
order는 오늘 주문목록이다.
Member, Item, Order 클래스를 만들고,
문자열을 잘라 각각의 클래스에 저장 후
회원별 아이템 주문개수를 출력하시오.
[정답]
이만수: 고래밥 3
김철민: 고래밥 1 칸쵸 1
이영희: 새우깡 2 칸쵸 1
*/
class Member {
stnum = 0;
stname = "";
}
class Item {
num = 0;
name = "";
}
class Order {
stnum = 0;
num = 0;
}
let member = "3001/이만수,3002/김철민,3003/이영희";
let item = "1001/고래밥,1002/새우깡,1003/칸쵸";
let order = "3001,1001/3001,1001/3003,1002/3002,1003/3001,1001/3003,1002/3003,1003/3002,1001";
let memberList = [];
let itemList = [];
let orderList = [];
let token = member.split(",");
for(let i = 0; i < token.length; i++){
let temp = token[i].split("/");
let mem = new Member ();
mem.stnum = temp[0];
mem.stname = temp[1];
memberList.push(mem);
} token = item.split(",");
for(let i = 0 ; i < token.length; i++){
let temp = token[i].split("/");
let it = new Item ();
it.num = temp[0];
it.name = temp[1];
itemList.push(it);
} token = order.split("/");
for(let i = 0; i < token.length; i++){
let temp = token[i].split(",");
let ord = new Order ();
ord.stnum = temp[0];
ord.num = temp[1];
orderList.push(ord);
}
let resultList = [];
for(let i = 0; i < memberList.length; i++){
let info = [memberList[i].stname];
for(let j = 0; j < itemList.length; j++){
let count = 0;
for(let k = 0; k < orderList.length; k++){
if(memberList[i].stnum == orderList[k].stnum){
if(itemList[j].num == orderList[k].num) count++;
}
}
info.push(count);
}
resultList.push(info);
}
for(let i = 0; i < resultList.length; i++){
document.write(resultList[i][0] + " ");
for(let j = 0; j < itemList.length; j++){
if(resultList[i][j + 1] > 0){
document.write(itemList[j].name + " " + resultList[i][j + 1]);
}
}
document.write("<br>");
}
</script>
'코딩 > 2023 JavaScript Console' 카테고리의 다른 글
2023.08.25 / Step 10 [클래스] - 코딩 37 일차 (0) | 2023.08.25 |
---|---|
2023.08.24 / Step 10 [클래스] - 코딩 36 일차 (0) | 2023.08.24 |
2023.08.22 / Step 10 [함수] - 코딩 34 일차 (0) | 2023.08.22 |
2023.08.21 / Step 10 [함수] - 코딩 33 일차 (0) | 2023.08.21 |
2023.08.20 / Step 10 [함수] - 코딩 32 일차 (0) | 2023.08.20 |