2023.11.24 TIL(기본강의4)

SaGo_MunGcci·2023년 11월 25일
0

VB

목록 보기
6/8

Today do list

⦁ 간단한 주문앱 만들기



TIL

주문하기

Imports System.IO
Imports System.Text

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        '어플리케이션 실행과 동시에 메뉴목록텍스파일 불러와서 리스트 박스에 출력'

        Dim menu As FileIO.TextFieldParser =
            New FileIO.TextFieldParser("C:\Users\user\Desktop\velog\VBOrederList\상품목록\menu.txt")

        menu.TextFieldType = FileIO.FieldType.Delimited
        menu.SetDelimiters(",")

        While Not menu.EndOfData
            Try
                Dim menuArr As String()
                menuArr = menu.ReadFields()

                ListBox1.Items.Add(menuArr(0) & " || " & menuArr(1))
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End While

    End Sub

    '장바구니에 담기
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If ListBox1.SelectedItem Is Nothing Then
            MsgBox("메뉴를 선택해 주세요")
        Else
            CheckedListBox1.Items.Add(ListBox1.SelectedItem)
        End If





    End Sub
    '장바구니에서 제거
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If CheckedListBox1.CheckedItems.Count = 0 Then
            MsgBox("메뉴를 선택해 주세요")
        Else
            '** 배열을 for each 문이나 for문으로 삭제하면서 발생하는 중에서 발생하는
            '오류 중 인덱스 오류는 처음부터 없애니까 갯수가 줄어들면서 인덱스가 엉킴
            '따라서 배열을 반복문으로 삭제할때는 거꾸로 해줘야 한다 맨뒤부터 차례대로
            '삭제해주어야 한다.
            '중요함 이거 공식수준인데, 순간 기억못해서 당황했다. **
            For i = CheckedListBox1.CheckedItems.Count - 1 To 0 Step -1
                CheckedListBox1.Items.Remove(CheckedListBox1.CheckedItems(i))
            Next




        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        '주문하기 예외처리
        If CheckedListBox1.CheckedItems.Count = 0 Then
            MsgBox("주문할 상품을 장바구니에서 체크해 주세요")
            Return

        End If

        '1.장바구니 상품들을 String 변수에 담아주기
        'vbCrLf = vbNewLine(레거시됨)
        Dim orders As String = Nothing
        For Each item In CheckedListBox1.CheckedItems
            orders += item.ToString() + vbCrLf
        Next

        '2.txt파일로 생성후 주문서 파일에 입력하기
        '텍스트 파일 입력
        Const newTxtFileAdr As String = "C:\Users\user\Desktop\velog\VBOrederList\Orders\요기요주문.txt"
        Dim newTxtFile As IO.FileStream = IO.File.Create(newTxtFileAdr)
        newTxtFile.Close()

        '바이트 배열로 만듬
        'Dim bytes As Byte() = New UTF8Encoding(True).GetBytes(orders)
        Dim writer As IO.StreamWriter

        writer = My.Computer.FileSystem.OpenTextFileWriter(newTxtFileAdr, True)

        'newTxtFile.Write("넣을 문자열", "넣을 순서", "넣을 문자열 갯수")
        writer.Write(orders)
        writer.Close()

        MsgBox("주문이 완료되었습니다.")

        '3.장바구니 상품 초기화
        CheckedListBox1.Items.Clear()


    End Sub
End Class

주문서 확인 및 히스토리 파일로 옮기기


Imports System.Threading

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        ' 어플리케이션이 계속 켜져있는동안 실시간으로 주문서를 확인 할 수있어야 한다.
        ' 확인하면 바로 history로 파일을 이동시킨다
        While True

            '스레드 속도 제어
            Threading.Thread.Sleep(500)

            Dim files As String()

            '우리가 해줄게 orders폴더안에 새로운 파일이 생성되었을때 --> 주문이 들어왔을때
            '자동으로 감지해서
            '감지된 파일을 메시지 박스에 출력을 해주고 Orders폴더에서 History폴더로 파일을 옮긴다.
            ' 배열과 형변환까지 다해준다.
            files = My.Computer.FileSystem.
            GetFiles("C:\Users\user\Desktop\velog\VBOrederList\Orders").ToArray()

            'MsgBox(files.Count)

            '주문서가 들어왔을때 주문서 갯수가 0이 아니면 첫번째의 주문서를 읽어라(가장최근)
            ' !=<>표현한다.
            If files.Count <> 0 Then

                Dim str As String()

                str = files(0).Split("\")

                Dim destinationPath As String = "C:\Users\user\Desktop\velog\VBOrederList\History\" & str(7)
                '맨위의 txt파일(files(0))읽어라()
                MsgBox(My.Computer.FileSystem.ReadAllText(files(0)),, str(7))

                If My.Computer.FileSystem.FileExists(destinationPath) Then
                    ' 대상 파일이 이미 존재하면 새로운 파일 이름 사용
                    Dim timestamp As String = DateTime.Now.ToString("yyyyMMddHHmmss")
                    destinationPath = "C:\Users\user\Desktop\velog\VBOrederList\History\" & timestamp & "_" & str(7)
                End If
                ' My.Computer.FileSystem.MoveFile(files(0), "O:\VisualbasicLec\Samples\History\" & str(4), FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)
                My.Computer.FileSystem.MoveFile(files(0), destinationPath)

            End If
        End While




    End Sub
End Class




Retrospection

  • 파일 입출력하는 것 참고하면서 익숙해 져야겠다.


profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글