⦁ 간단한 주문앱 만들기
주문하기
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