학습목표 배열에대해서안다. 언어통합질의 (LINQ) 에대해서안다. 2
7.1 배열 7.2 언어통합질의 (LINQ) 3
배열 - 필요성 100 명의이름과국어, 영어, 수학과목에대한각각의합계와평균계산을위한프로그램? name_1 name_2 name_100 kuk_1 kuk_2 kuk_100? young_1 4
배열 -? name_1 name_2 name_100 kuk_1 kuk_2 kuk_100 young_1 name_1 Name_2 name_100 kuk_1 kuk_2 kuk_100 young_1 name kuk young 변수명 1 2 100 1 2 100 1 2 100 첨자 5
선언형식 일반변수 배열 선언과사용 Dim 변수 _ 이름 As 데이터 _ 형 strname Dim strname As String 배열변수 Dim 배열변수 _ 이름 ( 배열 _ 크기 ) As 데이터 _ 형 Dim strname(4) As String 배열변수사용 strname(2) = 홍길동 strname (0) (1) (2) (3) (4) 홍길동 6
선언문의 (4) 와실행문의 (4) 선언문에서숫자 4 는배열의크기 Dim strname(4) As String 정확히는배열의마지막첨자 실행문에서숫자 4 는 4 번째칸 strname(4) = 홍길동 strname (0) (1) (2) (3) (4) 시작첨자와끝첨자지정 선언형식 Dim 배열변수 _ 이름 ( 시작 _ 첨자 to 끝 _ 첨자 ) As 데이터 _ 형 Dim strname(1 to 4) As String strname (1) (2) (3) (4) 7
2 차원배열 선언 사용 배열 다차원배열 Dim 배열변수 _ 이름 ( 행 _ 크기, 열 _ 크기 ) As 데이터 _ 형 Dim strname(2, 3) As String intscore(1,2) = 96 시작첨자와끝첨자지정 intscore (0) (1) (2) (3) (0,0) (0,1) (0,2) (0,3) Dim 배열변수 _ 이름 ( 행 _ 시작 _ 점자 to 행 _ 끝 _ 첨자, 열 _ 시작 _ 첨자 to 열 _ 끝 _ 첨자 ) As 데이터 _ 형 Dim intscore(1 to 3, 1 to 4) As Integer (0) (1) (2) (1,0) (1,1) (1,2) (1,3) (2,0) (2,1) (2,2) (2,3) 96 intscore (1) (2) (3) (4) (1) (1,1) (1,2) (1,3) (1,4) (2) (2,1) (2,2) (2,3) (2,4) (3) (3,1) (3,2) (3,3) (3,4) 8
예제 7-1 배열을이용하여데이터를입력받아 입력 버튼을클릭하면리스트박스에보여주고 더하기 버튼을클릭하면합계를구하는프로그램 초기화면 실행화면 9
예제 7-1 컨트롤속성설정 컨트롤이름속성설정 Form Text 배열이용 Label Text 배열이용하여 4개숫자입력 Text 결과는? lblresult Text 결과값 TextBox txtinput TabIndex 1 ListBox lstinput Button btninput TabIndex 2 Text 입력 btnsum TabIndex 3 Text 더하기 10
전역변수선언 예제 7-1 코드작성 (1) 1. Dim data(3) As Integer 2. Dim count As Integer = 0 입력 버튼클릭 1. Private Sub btninput_click( ) Handles btninput.click 2. If count > 3 Then 3. MsgBox(" 초과하여입력이안됩니다.") 4. Else 5. lstinput.items.add(txtinput.text) 6. data(count) = CInt(txtInput.Text) 7. count = count + 1 8. txtinput.text = "" 9. txtinput.focus() 10. End If 11. End Sub 11
예제 7-1 코드작성 (2) 더하기 버튼클릭 1. Private Sub btnsum_click( ) Handles btnsum.click 2. Dim i, sum As Integer 3. For i = 0 To 3 4. sum = sum + data(i) 5. Next 6. lblresult.text = CStr(sum) 7. End Sub 12
예제 7-2 배열과입력대화상자를이용하여 배열선언 버튼이클릭되면국어, 영어, 수학점수를입력받아합계를출력 초기화면 실행결과 13
예제 7-2 컨트롤속성설정 컨트롤이름속성설정 Form Text 배열과입력대화상자이용 Label Text 국어영어수학점수를입력받아합계를출력 ListBox lstresult Button btnarray Text 더하기 14
예제 7-2 코드작성 (1) 간단한입력대화상자형식 InputBox( 프롬프트, 타이틀 ) 입력대화상자 15
예제 7-2 코드작성 (2) 1. Private Sub btnsum_click( ) Handles btnsum.click 2. Dim i, sum As Integer 3. For i = 0 To 3 4. sum = sum + data(i) 5. Next 6. lblresult.text = CStr(sum) 7. End Sub 16
예제 7-3 숫자를입력하면그숫자에해당하는배열값이출력 배열번호 내용 0 장미꽃 1 강한나 2 윤이나 3 홍길동 초기화면 실행결과 17
예제 7-3 컨트롤속성설정 컨트롤이름속성설정 Form Text 배열예 Label Text 번호선택 (0-3) TextBox txtnum TabIndex 1 txtname Button btn1 TabIndex 2 Text 학생이름은? 18
예제 7-3 코드작성 (1) 학생이름은? 버튼클릭 1. Private Sub btn1_click( ) Handles btn1.click 2. Dim students(3) As String 3. Dim n As Integer 4. students(0) = 장미꽃 5. students(1) = 강한나 6. students(2) = 윤이나 7. students(3) = 홍길동 8. n = CInt(txtNum.Text) 9. txtname.text = students(n) 10. End Sub 19
예제 7-4 배열의속성중에서자주사용되는속성을아래예를이용하여출력 Dim exam() As Integer = {55, 90, 80, 70, 30} 속성값설명 exam.count 5 배열원소개수 exam.max 90 배열원소의최대값 exam.min 30 배열원소의최소값 exam.first 55 배열원소의첫째값 exam.last 30 배열원소의마지막값 20
예제 7-4 폼디자인 초기화면 실행결과 21
예제 7-4 코드작성 (1) 배열속성출력 버튼클릭 1. Private Sub btnoutput_click( ) Handles btnoutput.click 2. Dim exam() As Integer = {55, 90, 80, 70, 30} 3. lst1.items.add("count: " & exam.count) 4. lst1.items.add("first: " & exam.first) 5. lst1.items.add("last: " & exam.last) 6. lst1.items.add("max: " & exam.max) 7. lst1.items.add("min: " & exam.min) 8. lst1.items.add("sum: " & FormatNumber(exam.Sum)) 9. lst1.items.add("average: " & FormatNumber(exam.Average)) 10. End Sub 22
7.1 배열 7.2 언어통합질의 (LINQ) 23
언어통합질의 (LINQ) LINQ(Language-Integrated Query) 다양한종류의데이터소스와형식에서일관성있는데이터작업을제공하도록개선된것으로항상개체를사용 강력한질의기능을가짐 배열, 텍스트파일, 데이터베이스에서사용 질의작성순서 데이터소스가져오기 질의를만들기 질의를실행하기 24
LINQ 형식 From절 : 질의시작에필수적인요소로질의의데이터집합과집합내에있는변수지정 Where절 : 질의의필터링조건을지정 ( 선택적요소 ) Select절 : 질의의조건에맞는변수선언 Dim 질의이름 = From 변수 In 배열이름 Where [condition on 변수 ] Select 변수 25
예제 7-5 대화명이저장된파일을불러서그파일내용을 LINQ 질의를이용하여리스트박스에출력 초기화면실행화면 4 글자대화명추출 26
예제 7-5 컨트롤속성설정 컨트롤이름속성설정 Form Text LINQ를이용 ListBox lstresult Button BtnName Text 대화명추출 27
예제 7-5 코드작성 (1) 한글처리와파일불러오기 Dim KS_C_5601 As System.Text.Encoding = _ System.Text.Encoding.GetEncoding(949) 한글코드처리 Dim enames() As String = IO.File.ReadAllLines("eName.txt", KS_C_5601) "ename.txt 파일내용 공부별명우등이놀란도치푸른하늘보면볼수록좋은또또거북이바람잡이봄날의엘리스이쁜방울무병장수 파일위치는작성중인폴더아래 bin Debug 폴더에실행파일이있는곳에같이있어야함 28
대화명추출 버튼 예제 7-5 코드작성 (2) 1. Private Sub btnname_click( ) Handles btnname.click 2. Dim KS_C_5601 As System.Text.Encoding = System.Text.Encoding.GetEncoding(949) 3. Dim enames() As String = IO.File.ReadAllLines("eName.txt", KS_C_5601) 4. Dim enamequery1 = From Name In enames 5. Select Name 6. For Each Name As String In enamequery1 7. lstresult.items.add(name) 8. Next 9. End Sub 29
대화명추출 버튼 예제 7-5 코드작성 (3) 대화명이 4 글자인것만추출 1. Private Sub btnname_click( ) Handles btnname.click 2. Dim KS_C_5601 As System.Text.Encoding = System.Text.Encoding.GetEncoding(949) 3. Dim enames() As String = IO.File.ReadAllLines("eName.txt", KS_C_5601) 4. Dim enamequery1 = From Name In enames 5. Select Name 6. Where Name.Length = 4 7. For Each Name As String In enamequery1 8. lstresult.items.add(name) 9. Next 10. End Sub 30
예제 7-6 폼디자인 (1) 배열로입력된숫자데이터중에서짝수, 홀수구분을 LINQ 질의를이용하여리스트박스에출력 초기화면 배열숫자 31
예제 7-6 폼디자인 (2) 짝수 홀수 32
예제 7-6 컨트롤속성설정 컨트롤이름속성설정 Form Text 배열의짝홀수판단 ListBox lstresult Button btnanumber Text 대화명추출 btneven 짝수 btnodd 홀수 33
예제 7-6 코드작성 (1) 배열숫자 버튼 1. Private Sub btnanumber_click( ) Handles btnanumber.click 2. Dim numquery1 = From num In numbers 3. Select num 4. lstresult.items.clear() 5. For Each num As Integer In numquery1 6. lstresult.items.add(num) 7. Next 8. End Sub 34
예제 7-6 코드작성 (2) 짝수 버튼 1. Private Sub btneven_click( ) Handles btneven.click 2. Dim numquery2 = From num In numbers 3. Where num Mod 2 = 0 4. Select num 5. lstresult.items.clear() 6. For Each num As Integer In numquery2 7. lstresult.items.add(num) 8. Next 9. End Sub 35
예제 7-6 코드작성 (3) 홀수 버튼 1. Private Sub btnodd_click( ) Handles btnodd.click 2. Dim numquery2 = From num In numbers 3. Where num Mod 2 = 1 4. Select num 5. lstresult.items.clear() 6. For Each num As Integer In numquery2 7. lstresult.items.add(num) 8. Next 9. End Sub 36