Imports System Imports System.IO Module Module1 'Globális változók Public Structure HívásStatisztikaTípus Dim HívásSzámCsúcsidőben As Integer Dim HívásSzámCsúcsidőnKívül As Integer Dim PercVezetékes As Integer Dim PercMobil As Integer Dim ÁrVezetékes As Decimal Dim ÁrMobil As Decimal Dim ÁrCsúcsIdő As Decimal Dim ÁrCsúcsIdőnKívül As Decimal End Structure Public HívásStatisztika As HívásStatisztikaTípus 'A hívások statisztkai adatai Public Structure HívásokTípus Dim Telefonszám As String Dim Kezdés As Date Dim Vége As Date Dim Időtartam As Integer Dim Vezetékes As Boolean Dim Csúcsidőben As Boolean Dim Ár As Decimal End Structure Public HívásokTömb() As HívásokTípus 'A beolvasott hívások Public HívásokFájl As String = "C:\Documents and Settings\Nándi\Dokumentumok\Visual Studio 2005\Projects\Emelt_Telefon_09\Emelt_Telefon_09\HIVASOK.TXT" Public PercekFájl As String = "C:\Documents and Settings\Nándi\Dokumentumok\Visual Studio 2005\Projects\Emelt_Telefon_09\Emelt_Telefon_09\percek.txt" Sub MilyenTelefonSzám(ByVal Telefonszám As String, ByRef Hívásirány As String, ByRef Vezetékes As Boolean) 'Vissza: Mobil vagy Vezetékes Dim Előhívó As String Előhívó = Left(Telefonszám, 2) Select Case Előhívó Case 39, 41, 71 Hívásirány = "Mobil" Vezetékes = False Case Else Hívásirány = "Vezetékes" Vezetékes = True End Select End Sub Sub IdőFeldolgoz(ByVal IdőSztring As String, ByRef IdőKezd As Date, ByRef IdőVég As Date, ByRef Időtartam As Integer, ByRef Csúcsidőben As Boolean) 'Be: Egy hívás IdőSztring-je, amiből megállapítja: ' Ki: IdőKezd, IdőVég (mikor kezdte, mikor végezte a beszélgetést ' Időtartam (Hány percig tartott a beszélgetés) ' Csúcsidőben: True (mikor telefonált) Dim IdőTömb() As String Dim KezdÓra As Integer IdőTömb = Split(IdőSztring, " ") IdőKezd = TimeValue(IdőTömb(0) & ":" & IdőTömb(1) & ":" & IdőTömb(2)) IdőVég = TimeValue(IdőTömb(3) & ":" & IdőTömb(4) & ":" & IdőTömb(5)) Időtartam = DateDiff(DateInterval.Minute, IdőKezd, IdőVég) + 1 KezdÓra = IdőTömb(0) If KezdÓra >= 7 And KezdÓra <= 18 Then Csúcsidőben = True Else Csúcsidőben = False End If End Sub Sub Beolvas(ByVal Fájl As String) 'Beolvassa a hívások fájlt, a HívasokTömb-be Dim fs As FileStream Dim sr As StreamReader Dim sor As String Dim HívásSzámláló, SorSzámláló As Integer Dim Hívás As HívásokTípus Dim Hívásirány As String 'Tömb törlés Erase HívásokTömb sor = "" HívásSzámláló = 0 SorSzámláló = 0 'Fájl megnyitása olvasásra fs = New FileStream(Fájl, FileMode.Open, FileAccess.Read) sr = New StreamReader(fs, Text.Encoding.Default) 'sr.BaseStream.Seek(0, SeekOrigin.Begin) While sr.Peek() > -1 sor = sr.ReadLine If Páros(SorSzámláló) Then 'Idő sor IdőFeldolgoz(sor, Hívás.Kezdés, Hívás.Vége, Hívás.Időtartam, Hívás.Csúcsidőben) Else 'Telefonszám sor Hívás.Telefonszám = sor MilyenTelefonSzám(Hívás.Telefonszám, Hívásirány, Hívás.Vezetékes) ReDim Preserve HívásokTömb(HívásSzámláló) 'A tömb feltötlése adattal HívásokTömb(HívásSzámláló).Csúcsidőben = Hívás.Csúcsidőben HívásokTömb(HívásSzámláló).Időtartam = Hívás.Időtartam HívásokTömb(HívásSzámláló).Kezdés = Hívás.Kezdés HívásokTömb(HívásSzámláló).Telefonszám = Hívás.Telefonszám HívásokTömb(HívásSzámláló).Vége = Hívás.Vége HívásokTömb(HívásSzámláló).Vezetékes = Hívás.Vezetékes HívásokTömb(HívásSzámláló).Ár = ÁrKalkulátor(Hívás.Időtartam, Hívás.Vezetékes, Hívás.Csúcsidőben) 'A hívásszámláló léptetése HívásSzámláló += 1 End If SorSzámláló += 1 End While sr.Close() End Sub Sub Kiír(ByVal Fájl As String) Dim fs As FileStream Dim sw As StreamWriter Dim Szöveg As String Dim Hívás As HívásokTípus 'Fájl megnyitása írásra (FileStrime: fájl folyam) fs = New FileStream(Fájl, FileMode.Create, FileAccess.Write) sw = New StreamWriter(fs, Text.Encoding.Default) 'A hívási idők és telefonszámainak összegyűjtése Szöveg = "" For Each Hívás In HívásokTömb Szöveg &= Hívás.Időtartam & " " & Hívás.Telefonszám & vbNewLine Next 'Írás fájlba sw.Write(Szöveg) 'Fájl tartalmának kiírása a memóriából(puffer kiürítése) sw.Flush() 'Fájl zárása (hogy a többi program is hozzáférjen) Ez kötelező, mert nyitva marad! sw.Close() End Sub Function Páros(ByVal Szám As Integer) As Boolean 'Megállapítja egy számról, ogy páros, vagy páratlan Páros = Szám Mod 2 = 0 End Function Function ÁrKalkulátor(ByRef Időtartam As Integer, ByRef Vezetékes As Boolean, ByRef Csúcsidőben As Boolean) As Decimal 'A bemenő adatok alapján megállapítja az árat Dim Ár_V_Cs As Decimal = 30 Dim Ár_V_NotCs As Decimal = 15 Dim Ár_NotV_Cs As Decimal = 69.175 Dim Ár_NotV_NotCs As Decimal = 46.675 If Vezetékes And Csúcsidőben Then ÁrKalkulátor = Időtartam * Ár_V_Cs End If If Vezetékes And Not Csúcsidőben Then ÁrKalkulátor = Időtartam * Ár_V_NotCs End If If Not Vezetékes And Csúcsidőben Then ÁrKalkulátor = Időtartam * Ár_NotV_Cs End If If Not Vezetékes And Not Csúcsidőben Then ÁrKalkulátor = Időtartam * Ár_NotV_NotCs End If End Function Sub Statisztika() 'Feldolgozza a Hívásoktömb adatait a HívásStatisztika változóba Dim Hívás As HívásokTípus 'HívásStatisztika alaphelyzet HívásStatisztika.ÁrMobil = 0 HívásStatisztika.ÁrVezetékes = 0 HívásStatisztika.HívásSzámCsúcsidőben = 0 HívásStatisztika.HívásSzámCsúcsidőnKívül = 0 HívásStatisztika.PercMobil = 0 HívásStatisztika.PercVezetékes = 0 For Each Hívás In HívásokTömb 'Statisztika Hívás irány szerint: ár és perc If Hívás.Vezetékes Then HívásStatisztika.ÁrVezetékes += Hívás.Ár HívásStatisztika.PercVezetékes += Hívás.Időtartam Else HívásStatisztika.ÁrMobil += Hívás.Ár HívásStatisztika.PercMobil += Hívás.Időtartam End If 'Statisztika idő szerint: H If Hívás.Csúcsidőben Then HívásStatisztika.ÁrCsúcsIdő += Hívás.Ár HívásStatisztika.HívásSzámCsúcsidőben += 1 Else HívásStatisztika.ÁrCsúcsIdőnKívül += Hívás.Ár HívásStatisztika.HívásSzámCsúcsidőnKívül += 1 End If Next End Sub End Module