92 lines
2.9 KiB
Text
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
|