vbscripting/shop_db.vbs
2022-10-11 11:29:27 +04:00

92 lines
2.9 KiB
Text

Rem Áîëüøîé ïðîåêò
Rem +ñëîâàðè, Select ... case è Err
Rem Ëîêàëüíàÿ ÁÄ Ìàãàçèíà
On Error Resume Next 'Îáðàáàòûâàåì âñå îøèáêè - òåïåðü îíè íàñ íå ïîáåñïîêîÿò
Rem Option Explicit
Dim res1 'Íåíóæíàÿ ïåðåìåííàÿ äëÿ MsgBox
Dim exitFromMenu
Dim prodFileName, optionsDelim
prodFileName = "products.csv" 'Èìÿ ôàéëà ñ ïðîäóêòàìè
optionsDelim = "," 'Ðàçäåëèòåëü îïöèé (ïðîäóêò,öåíà)
'Åñëè â íàçâàíèè òîâàðà ìîæåò ïðèñóòñâîâàòü çàïÿòàÿ,
'Ëó÷øå ñòàâèòü optionsDelim = ";"
exitFromMenu = False
Rem Ñëîâàðü, êàê â Java è .NET:
Set Products = CreateObject("Scripting.Dictionary")
Dim FSO, ProdFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Sub addProducts()
Set ProdFile = FSO.OpenTextFile(prodFileName, 8, True, -1)
prodOptions = "íàèìåíîâàíèå; öåíà"
Do Until (prodOptions = "")
prodOptions = InputBox("Ââåäèòå îïöèè òîâàðà (íàèìåíîâàíèå è öåíà), ðàçäåëÿÿ òî÷êîé ñ çàïÿòîé." &_
vbCrLf & "Ïðèìåð: Âîäà Âîëæàíêà 0.5 ë; 25", "Ëîêàëüíàÿ Áàçà Äàííûõ Ìàãàçèíà")
splitedOpts = Split(prodOptions, "; ")
If UBound(splitedOpts) > 0 then Products.Add splitedOpts(0), splitedOpts(1) End if 'ïðîâåðêà - îïöèé íå 0? è çàïèñü â ñëîâàðü
loop
For Each prodkey In Products.keys 'äëÿ êàæäîãî êëþ÷à â ñëîâàðå...
ProdFile.Write(prodkey & optionsDelim &_
Products(prodkey) & vbCrLf) 'çàïèñûâàåì â ôàéë (êëþ÷ - íàèì.òîâàðà + ðàçäåëèòåëü + çíà÷åíèå(êëþ÷à) - öåíó).
next
ProdFile.Close
End Sub
Sub readProducts()
Set ProdFile = FSO.OpenTextFile(prodFileName, 1, False, -1)
MsgBox Err.Number
MsgBox ProdFile.ReadAll()
ProdFile.Close
End Sub
Sub removeAllProducts()
FSO.DeleteFile prodFileName, True
End Sub
Function computeDiscount(cost, pct)
Rem cost - îáû÷íàÿ ñòîèìîñòü.
Rem pct - ñêèäêà, â ïðîöåíòàõ.
itog = cost - (cost/100*pct)
computeDiscount = itog
End Function
Rem Äåëàåì ñâîåîáðàçíîå ìåíþ íà Èíïóòàõ
Do While (exitFromMenu = False) 'ïîêà ïîëüçîâàòåëü íå âûøåë èç ìåíþ, ïîêàçûâàåì åãî
selected_function = InputBox("Âûáåðèòå ôóíêöèþ:" & vbCrLf & "1 - äîáàâèòü ïðîäóêòû â ôàéë" & vbCrLf &_
"2 - ïðîñìîòðåòü ñïèñîê ïðîäóêòîâ" & vbCrLf & "3 - î÷èñòèòü ñïèñîê ïðîäóêòîâ" & vbCrLf &_
"4 - ðàññ÷èòàòü öåíó òîâàðà ñî ñêèäêîé" & vbCrLf & "5 - âûéòè", "Ëîêàëüíàÿ Áàçà Äàííûõ Ìàãàçèíà")
Rem select...case - òî æå ñàìîå,
Rem ÷òî è çíàêîìûé âñåì C-ïðîãðàììèñòàì switch...case.
Rem Òîëüêî ñèíòàêñèñ íåìíîæêî îòëè÷àåòñÿ.
Select case selected_function
case "1"
Call addProducts()
case "2"
Call readProducts()
Rem If Err.Number = 53 then MsgBox "Íåòó ôàéëèêà ñ ïðîäóêòàìè!" End if
case "3"
Call removeAllProducts()
case "4"
header = "Ðàññ÷èòàòü öåíó ñî ñêèäêîé"
cost = CInt(InputBox("Îáû÷íàÿ ñòîèìîñòü:", header))
prct = CInt(InputBox("Ñêèäêà, â %:", header))
res1 = MsgBox(computeDiscount(cost, prct), vbOK, header)
case "5"
exitFromMenu = True
case else
MsgBox "Îøèáêà!" & vbCrLf & "Óêàæèòå ïðàâèëüíîå çíà÷åíèå." & vbCrLf & "×òîáû âûéòè, âûáåðèòå 5."
End Select
loop