[06-D2] Class, MXML, Array 실습

[과제 1] 플렉스로 성적처리 Application을 작성하세요.

1. VO(Value Object, DTO) Class

>>>>> src/sungjuk/SungjukVO.as
package sungjuk {
    public class SungjukVO {
        public var name:String;
        public var kuk:Number;
        public var eng:Number;
        public var mat:Number;
        public var tot:Number;
        public var avg:Number;
        
        // 생성자 SungjukVO();
        // SungjukVO("홍길동");
        // SungjukVO("홍길동", 100);
        // SungjukVO("홍길동", 100, 80);
        // SungjukVO("홍길동", 100, 80, 100);
        public function SungjukVO(name:String, kuk:Number, eng:Number, mat:Number) {
            this.name = name;
            this.kuk = kuk;
            this.eng = eng;
            this.mat = mat;            
        }

    }
}





2. Manager Class
   - 저장소: public var storge:Array = new Array(3);
   - 저장소 저장 객체: var vo:SungjukVO = new SungjukVO();
   - 자료 추가: public function add(vo:SungjukVO):void{ }
   - 자료 목록: public function list(...):Array{ }
   - 자료 수정: name 값으로 자료 구분
                public function update(vo:SungjukVO):void{ }
   - 자료 삭제: name 값으로 자료 구분
                public function delete(name:String):void{ }

>>>>> src/sungjuk/SungjukMgr.as
package sungjuk{
    public class SungjukMgr{
        public var storage:Array = null;
        
        public function SungjukMgr() {
            storage = new Array(3);
                  
        }
       
        // 신규자료 추가
        public function add(vo:SungjukVO):void{
            //배열에 값을 저장하되 기존에 배열에 값이 있으면 
            //새로운 메모리를 할당하고 값을 저장합니다.
            var length:Number = storage.length;

            
            for(var i:int=0; i<length; i++){
                vo.tot = vo.kuk + vo.eng + vo.mat;
                vo.avg = Math.round(vo.tot / 3);

// 배열 요소중에 비어있는 영역 검색 
                if (storage[i] == null){
                    storage[i] = vo;
                    break;
                }
                //storage.push(vo);                
            }
        }
        
        public function list():Array{
            return this.storage;
        }
        
        // 자료수정        
        public function update(vo:SungjukVO):void{
            vo.tot = vo.kuk + vo.eng + vo.mat;
            vo.avg = vo.tot / 3;
            for(var i:int=0; i<storage.length; i++){
                if(storage[i].name == vo.name){
                    storage[i] = vo;
                    break;
                }
            }            
        }
        
        public function deleteData(name:String):void{
            for(var i:int=0; i<storage.length; i++){
                if(storage[i].name == name){
                storage[i] = null;
                }
            }
        }
    }
}
    



3. UI

>>>>> src/sungjuk.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="absolute" 
backgroundGradientAlphas="[1.0, 1.0]" 
backgroundGradientColors="[#15860C, #15860C]" 
width="512" height="442" creationComplete="init()">
<mx:Style> <!-- CSS 적용 -->
.alertTitle {
fontSize: 18;
}
.alertMessage {
fontSize: 18;
}
Alert {
title-style-name: "alertTitle";
message-style-name: "alertMessage";
}
</mx:Style>    
<mx:Script>
<![CDATA[
import sungjuk.SungjukVO;
import sungjuk.SungjukMgr;
import mx.controls.Alert;
private var mgr:SungjukMgr = null;
private function init():void{
this.mgr = new SungjukMgr();
clear();
list();
}
private function clear():void{
txiName.text = "";
txiKuk.text = "";
txiEng.text = "";
txiMat.text = "";
}
private function list():void{
var storage:Array = mgr.list();
var str:String = "";
var vo:SungjukVO = null; 
str = "오늘 날짜: " + new Date().toLocaleString() + "\n";
for(var i:int=0; i<storage.length; i++){
if (storage[i] != null){
vo = storage[i];
str = str + vo.name + "/" + vo.kuk + "/" + vo.eng + "/" + vo.mat + "/" + vo.tot + "/" + vo.avg + "\n";    
}
txaData.text = str;    
}
private function add():void{
var vo:SungjukVO = new SungjukVO(txiName.text, Number(txiKuk.text), Number(txiEng.text), Number(txiMat.text));
var storage:Array = mgr.list();
for(var i:int=0; i<length; i++){
var _vo:SungjukVO = storage[i];
if (_vo != null){
if (_vo.name == vo.name){
Alert.show(vo.name + "학생은 이미 성적이 등록되어 있습니다.");
return;
}    
}
}
mgr.add(vo);
list();
}
private function update():void{
var vo:SungjukVO = new SungjukVO(txiName.text, Number(txiKuk.text), Number(txiEng.text), Number(txiMat.text));
mgr.update(vo);
list();
}            
private function deleteData():void{
var name:String = txiName.text;
mgr.deleteData(name);
list();
}  
]]>
</mx:Script>
<mx:Label x="138.5" y="10" text="성적 처리(Array 기반)" fontSize="20" color="#FFFFFF"/>
<mx:Label x="208" y="235" text="등록된 성적" fontSize="20" color="#FFFFFF"/>
<mx:Label x="57" y="60" text="성명" fontSize="20" color="#FFFFFF"/>
<mx:Label x="57" y="99" text="국어" fontSize="20" color="#FFFFFF"/>
<mx:Label x="178" y="99" text="영어" fontSize="20" color="#FFFFFF"/>
<mx:Label x="306.5" y="99" text="수학" fontSize="20" color="#FFFFFF"/>
<mx:TextInput x="110" y="58" fontSize="20" id="txiName" text="txiName"/>
<mx:TextInput x="110" y="97" fontSize="20" width="60" id="txiKuk" text="txiKuk"/>
<mx:TextInput x="231" y="97" fontSize="20" width="61" id="txiEng" text="txiEng"/>
<mx:TextInput x="359.5" y="97" fontSize="20" width="62" id="txiMat" text="txiMat"/>
<mx:HRule x="57" y="138" width="376.5" height="3"/>
<mx:HRule x="189.1" y="263" width="149.75" height="3"/>
<mx:HRule x="102.25" y="38" width="285.5" height="3"/>
<mx:Label x="306.5" y="99" text="수학" fontSize="20" color="#FFFFFF"/>
<mx:TextArea x="25" y="274" width="462" height="145" id="txaData" text="txtData" fontSize="20"/>
<mx:Button x="80.5" y="149" label="새로 입력" fontSize="20" id="btnNew"
  click="clear(); txiName.setFocus();"/>
<mx:Button x="205.5" y="149" label="저장" fontSize="20" id="btnSave"
  click="add();"/>
<mx:Button x="281.5" y="149" label="수정" fontSize="20" id="btnUpdate"
  click = "update();"/>
<mx:Button x="357.5" y="149" label="삭제" fontSize="20" id="btnDelete0"
  click = "deleteData();"/>
</mx:Application>



Posted by ▶파이팅◀

블로그 이미지
Let's start carefully from the beginning
▶파이팅◀

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함