Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class Form1
- Inherits System.Windows.Forms.Form
- #Region " Windows Form Designer generated code "
- Public Sub New()
- MyBase.New()
- 'This call is required by the Windows Form Designer.
- InitializeComponent()
- 'Add any initialization after the InitializeComponent() call
- End Sub
- 'Form overrides dispose to clean up the component list.
- Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
- If disposing Then
- If Not (components Is Nothing) Then
- components.Dispose()
- End If
- End If
- MyBase.Dispose(disposing)
- End Sub
- 'Required by the Windows Form Designer
- Private components As System.ComponentModel.IContainer
- 'NOTE: The following procedure is required by the Windows Form Designer
- 'It can be modified using the Windows Form Designer.
- 'Do not modify it using the code editor.
- Friend WithEvents txtNavn As System.Windows.Forms.TextBox
- Friend WithEvents txtKlasse As System.Windows.Forms.TextBox
- Friend WithEvents txtEpost As System.Windows.Forms.TextBox
- Friend WithEvents txtFodselsdato As System.Windows.Forms.TextBox
- Friend WithEvents Button8 As System.Windows.Forms.Button
- Friend WithEvents Label5 As System.Windows.Forms.Label
- Friend WithEvents Label6 As System.Windows.Forms.Label
- Friend WithEvents Label7 As System.Windows.Forms.Label
- Friend WithEvents Button9 As System.Windows.Forms.Button
- Friend WithEvents Button10 As System.Windows.Forms.Button
- Friend WithEvents Button11 As System.Windows.Forms.Button
- Friend WithEvents Button12 As System.Windows.Forms.Button
- Friend WithEvents Button13 As System.Windows.Forms.Button
- Friend WithEvents Button14 As System.Windows.Forms.Button
- Friend WithEvents Label8 As System.Windows.Forms.Label
- Friend WithEvents txtViserPostNr As System.Windows.Forms.TextBox
- Friend WithEvents Label9 As System.Windows.Forms.Label
- Friend WithEvents Button15 As System.Windows.Forms.Button
- Friend WithEvents Button16 As System.Windows.Forms.Button
- Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
- <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
- Me.txtNavn = New System.Windows.Forms.TextBox
- Me.txtKlasse = New System.Windows.Forms.TextBox
- Me.txtEpost = New System.Windows.Forms.TextBox
- Me.txtFodselsdato = New System.Windows.Forms.TextBox
- Me.Button8 = New System.Windows.Forms.Button
- Me.Label5 = New System.Windows.Forms.Label
- Me.Label6 = New System.Windows.Forms.Label
- Me.Label7 = New System.Windows.Forms.Label
- Me.Button9 = New System.Windows.Forms.Button
- Me.Button10 = New System.Windows.Forms.Button
- Me.Button11 = New System.Windows.Forms.Button
- Me.Button12 = New System.Windows.Forms.Button
- Me.Button13 = New System.Windows.Forms.Button
- Me.Button14 = New System.Windows.Forms.Button
- Me.Label8 = New System.Windows.Forms.Label
- Me.txtViserPostNr = New System.Windows.Forms.TextBox
- Me.Label9 = New System.Windows.Forms.Label
- Me.Button15 = New System.Windows.Forms.Button
- Me.Button16 = New System.Windows.Forms.Button
- Me.GroupBox1 = New System.Windows.Forms.GroupBox
- Me.GroupBox1.SuspendLayout()
- Me.SuspendLayout()
- '
- 'txtNavn
- '
- Me.txtNavn.Location = New System.Drawing.Point(360, 32)
- Me.txtNavn.Name = "txtNavn"
- Me.txtNavn.Size = New System.Drawing.Size(152, 20)
- Me.txtNavn.TabIndex = 5
- Me.txtNavn.Text = ""
- '
- 'txtKlasse
- '
- Me.txtKlasse.Location = New System.Drawing.Point(360, 64)
- Me.txtKlasse.Name = "txtKlasse"
- Me.txtKlasse.Size = New System.Drawing.Size(152, 20)
- Me.txtKlasse.TabIndex = 6
- Me.txtKlasse.Text = ""
- '
- 'txtEpost
- '
- Me.txtEpost.Location = New System.Drawing.Point(360, 96)
- Me.txtEpost.Name = "txtEpost"
- Me.txtEpost.Size = New System.Drawing.Size(152, 20)
- Me.txtEpost.TabIndex = 7
- Me.txtEpost.Text = ""
- '
- 'txtFodselsdato
- '
- Me.txtFodselsdato.Location = New System.Drawing.Point(360, 128)
- Me.txtFodselsdato.Name = "txtFodselsdato"
- Me.txtFodselsdato.Size = New System.Drawing.Size(152, 20)
- Me.txtFodselsdato.TabIndex = 7
- Me.txtFodselsdato.Text = ""
- '
- 'Button8
- '
- Me.Button8.Location = New System.Drawing.Point(168, 168)
- Me.Button8.Name = "Button8"
- Me.Button8.Size = New System.Drawing.Size(208, 23)
- Me.Button8.TabIndex = 13
- Me.Button8.Text = "Slett post (se kommentar i koden)"
- '
- 'Label5
- '
- Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.Label5.Location = New System.Drawing.Point(224, 96)
- Me.Label5.Name = "Label5"
- Me.Label5.Size = New System.Drawing.Size(128, 24)
- Me.Label5.TabIndex = 27
- Me.Label5.Text = "Epost"
- '
- 'Label6
- '
- Me.Label6.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.Label6.Location = New System.Drawing.Point(224, 64)
- Me.Label6.Name = "Label6"
- Me.Label6.Size = New System.Drawing.Size(128, 24)
- Me.Label6.TabIndex = 26
- Me.Label6.Text = "Klasse"
- '
- 'Label7
- '
- Me.Label7.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.Label7.Location = New System.Drawing.Point(224, 32)
- Me.Label7.Name = "Label7"
- Me.Label7.Size = New System.Drawing.Size(128, 24)
- Me.Label7.TabIndex = 25
- Me.Label7.Text = "Navn"
- '
- 'Button9
- '
- Me.Button9.Location = New System.Drawing.Point(40, 128)
- Me.Button9.Name = "Button9"
- Me.Button9.Size = New System.Drawing.Size(160, 23)
- Me.Button9.TabIndex = 19
- Me.Button9.Text = "Avslutt"
- '
- 'Button10
- '
- Me.Button10.Location = New System.Drawing.Point(136, 40)
- Me.Button10.Name = "Button10"
- Me.Button10.Size = New System.Drawing.Size(96, 23)
- Me.Button10.TabIndex = 17
- Me.Button10.Text = "< Bla Forrige"
- '
- 'Button11
- '
- Me.Button11.Location = New System.Drawing.Point(40, 96)
- Me.Button11.Name = "Button11"
- Me.Button11.Size = New System.Drawing.Size(160, 23)
- Me.Button11.TabIndex = 16
- Me.Button11.Text = "Lagre som ny post på fil"
- '
- 'Button12
- '
- Me.Button12.Location = New System.Drawing.Point(240, 40)
- Me.Button12.Name = "Button12"
- Me.Button12.Size = New System.Drawing.Size(96, 23)
- Me.Button12.TabIndex = 15
- Me.Button12.Text = "Bla Neste >"
- '
- 'Button13
- '
- Me.Button13.Location = New System.Drawing.Point(40, 64)
- Me.Button13.Name = "Button13"
- Me.Button13.Size = New System.Drawing.Size(160, 23)
- Me.Button13.TabIndex = 14
- Me.Button13.Text = "Blank ut tekstfeltene"
- '
- 'Button14
- '
- Me.Button14.Location = New System.Drawing.Point(40, 32)
- Me.Button14.Name = "Button14"
- Me.Button14.Size = New System.Drawing.Size(160, 23)
- Me.Button14.TabIndex = 18
- Me.Button14.Text = "Åpne fil"
- '
- 'Label8
- '
- Me.Label8.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.Label8.Location = New System.Drawing.Point(224, 72)
- Me.Label8.Name = "Label8"
- Me.Label8.Size = New System.Drawing.Size(168, 32)
- Me.Label8.TabIndex = 24
- Me.Label8.Text = "Nå vises post nummer:"
- '
- 'txtViserPostNr
- '
- Me.txtViserPostNr.BackColor = System.Drawing.Color.FromArgb(CType(224, Byte), CType(224, Byte), CType(224, Byte))
- Me.txtViserPostNr.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
- Me.txtViserPostNr.Enabled = False
- Me.txtViserPostNr.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.txtViserPostNr.ForeColor = System.Drawing.Color.Black
- Me.txtViserPostNr.Location = New System.Drawing.Point(408, 72)
- Me.txtViserPostNr.Name = "txtViserPostNr"
- Me.txtViserPostNr.Size = New System.Drawing.Size(48, 20)
- Me.txtViserPostNr.TabIndex = 20
- Me.txtViserPostNr.Text = ""
- Me.txtViserPostNr.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
- '
- 'Label9
- '
- Me.Label9.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.Label9.Location = New System.Drawing.Point(224, 128)
- Me.Label9.Name = "Label9"
- Me.Label9.Size = New System.Drawing.Size(128, 24)
- Me.Label9.TabIndex = 10
- Me.Label9.Text = "Fødselsdato"
- '
- 'Button15
- '
- Me.Button15.Location = New System.Drawing.Point(16, 40)
- Me.Button15.Name = "Button15"
- Me.Button15.Size = New System.Drawing.Size(96, 23)
- Me.Button15.TabIndex = 29
- Me.Button15.Text = "<<< Bla Første"
- '
- 'Button16
- '
- Me.Button16.Location = New System.Drawing.Point(360, 40)
- Me.Button16.Name = "Button16"
- Me.Button16.Size = New System.Drawing.Size(96, 23)
- Me.Button16.TabIndex = 28
- Me.Button16.Text = "Bla Siste >>>"
- '
- 'GroupBox1
- '
- Me.GroupBox1.Controls.Add(Me.Button16)
- Me.GroupBox1.Controls.Add(Me.Button15)
- Me.GroupBox1.Controls.Add(Me.txtViserPostNr)
- Me.GroupBox1.Controls.Add(Me.Label8)
- Me.GroupBox1.Controls.Add(Me.Button12)
- Me.GroupBox1.Controls.Add(Me.Button10)
- Me.GroupBox1.Location = New System.Drawing.Point(40, 208)
- Me.GroupBox1.Name = "GroupBox1"
- Me.GroupBox1.Size = New System.Drawing.Size(472, 120)
- Me.GroupBox1.TabIndex = 30
- Me.GroupBox1.TabStop = False
- Me.GroupBox1.Text = "Navigasjon i filen, dvs bla mellom studenter"
- '
- 'Form1
- '
- Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
- Me.ClientSize = New System.Drawing.Size(552, 357)
- Me.Controls.Add(Me.Label5)
- Me.Controls.Add(Me.Label6)
- Me.Controls.Add(Me.Label7)
- Me.Controls.Add(Me.Button9)
- Me.Controls.Add(Me.Button11)
- Me.Controls.Add(Me.Button13)
- Me.Controls.Add(Me.Button14)
- Me.Controls.Add(Me.Button8)
- Me.Controls.Add(Me.txtEpost)
- Me.Controls.Add(Me.txtKlasse)
- Me.Controls.Add(Me.txtNavn)
- Me.Controls.Add(Me.txtFodselsdato)
- Me.Controls.Add(Me.Label9)
- Me.Controls.Add(Me.GroupBox1)
- Me.Name = "Form1"
- Me.Text = "Studentregister"
- Me.GroupBox1.ResumeLayout(False)
- Me.ResumeLayout(False)
- End Sub
- #End Region
- '************************************************************************'
- '* Strategi: D A T O S K A L R E G I S T R E R E S *'
- '* *'
- '* Hva må endres i programmet når dato skal med?
- '* - Utvide den egendefinerte datatypen
- '* - Endre konstanten postLengde
- '* - Legge til en ekstra tekstboks
- '* - Lese inn informasjonen fra denne tekstboksen
- '* - Brukte ikke With ved innlegging i egendefinert datatype
- '* overalt i leksjonen, men det er ingen grunn til ikke å
- '* gjøre det konsekvent i øvingen. With er viktig!
- '* MERK:
- '* - Siden oppgave 2 består i å lage kode for å hoppe helt
- '* først og helt sist, men fortsatt vise koden i tekstfelt,
- '* er det lurt å generalisere denne visningen ut i en egen
- '* prosedyre som kan kalles opp.
- '* - Kan også kalle denne prosedyren fra de knappene som blar
- '* bare en og en post.
- '* - Prosedyren heter visInformasjonITekstbokser() *'
- '* *'
- '************************************************************************'
- '************************************************************************'
- '* Strategi: S L E T T I N G A V S T U D E N T E R *'
- '* *'
- '* Fakta:
- '* - Sletting av studenter (XTRA) er ikke helt enkelt å få til.
- '* - I første øyekast innebærer det å måtte reorganisere filen
- '* og fjerne den posten som skal slettes. Dette er tidkrevende.
- '* - En vanlig teknikk er derfor å rett og slett legge til et nytt
- '* felt som heter Slettet.
- '* - Dersom dette feltet har verdi TRUE er posten
- '* ikke-eksisterende.
- '* - Dersom det er FALSE, har posten data.
- '* - En annen strategi er å blanke ut alle felt
- '* - En kan også sette teksten "SLETTET" i for eksempel første
- '* felt Navn for de poster som skal slettes.
- '* - I dette løsningsforslaget bruker vi den siste teknikken.
- '*
- '* Konsekvens for Bla-funksjonaliteten:
- '* - Det er ikke bra dersom slettede poster faktisk vises i
- '* grensesnittet.
- '* - Dette kan unngås ved å sjekke i Bla-knappene om posten er
- '* slettet, og i så fall bla videre inntil en post
- '* som ikke er slettet treffes på.
- '* - MERK: Implementerer ikke dette i denne løsningen
- '*
- '* Konsekvens for innlegging av nye studenter:
- '* - Dette bør fortsatt skje på slutten av filen, siden det er
- '* tidkrevende å søke gjennom filen og legge inn en ny student
- '* på en gammel slettet-post.
- '*
- '* Konsekvens for filen som sådan:
- '* - En kan kjøre en "garbage collection" (opprydningsrutine)
- '* med jevne mellomrom som kopierer bare de postene som har
- '* fornuftige data over til en ny fil, og så slette hele den
- '* gamle filen. Dermed fjerner en de tomme postene for godt.
- '* - Det er for øvrig ofte regnet som viktig å ta vare på data,
- '* selv om de skal slettes. Dette for statistikkens skyld.
- '* Kanskje det er interessant å se hvor mange som er slettet?
- '* Eller å rekonstruere data? I så fall må en enten bruke et
- '* arkiv, eller bare markere slettede poster med et flagg
- '* eller teksten SLETTET. Lurt? Slike teknikker er mye brukt,
- '* både i fil- og databaseløsninger! *'
- '* *'
- '************************************************************************'
- '************************************************************************'
- '* G L O B A L E V A R I A B L E R *'
- '* *'
- '* Her er definisjonen av vår egendefinerte datatype, StudentPost
- '* og globale variabler (og konstanter) som brukes
- '* av flere prosedyrer og knapper i programmet *'
- '* *'
- '************************************************************************'
- Structure StudentPost
- ' Tallet i parantesen til konstanten VBFixedString
- ' står for lengden på hvert enkeltfelt
- ' Den totale postlengden blir summen av hvert felt,
- ' det vil si 60 for strengene og 8 for dato,
- ' totalt 68
- <VBFixedString(30)> Public Navn As String
- <VBFixedString(5)> Public Klasse As String
- <VBFixedString(25)> Public EPost As String
- Public Bursdag As Date
- End Structure
- 'Deklarerer en variabel av typen som vi har opprettet nettopp.
- 'Innlesing og skriving av en student mellomlagres her.
- Private minStudent As StudentPost
- 'Lager en konstant for å holde rede på postlengden (her 68 bytes)
- Const postLengde = 68
- 'Inneholder totalt antall studenter i filen
- Private Antall As Integer
- 'Holder rede på hvilken post som skal skrives til eller leses fra
- 'i filen. Dette tallet angir altså riktig posisjon til enhver tid.
- Private Posisjon As Integer
- 'En fil har et logisk nummer. Lager en global
- 'variabel slik at filnummeret kan brukes av alle prosedyrene.
- Private FilNummer As Integer
- '************************************************************************'
- '* V I K T I G - egne prosedyrer lages her *'
- '* *'
- '* Vi ser et mønster hvor flere hendelsesprosedyrer
- '* skal utføre samme kode: nemlig å skrive noe til skjerm
- '* Lager derfor egne prosedyrer som gjør dette *'
- '* *'
- '************************************************************************'
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ' Navn: visInformasjonITekstbokser '
- ' Argumenter: en post av type StudentPost '
- ' Hva skjer? Overfører innholdet i posten til tekstboksene på '
- ' skjermen. '
- ' Merk: Bruker With til å hente ut spesielle felt. '
- ' Dette er en egendefinert prosedyre som må kalles fra '
- ' steder der en ønsker å slette tekstfeltenes innhold, for '
- ' eksempel i knappene "Lagre" og "Bla neste". '
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Private Sub visInformasjonITekstbokser(ByVal post As StudentPost)
- With post 'argumentet post er nå som en lokal variabel å regne
- txtNavn.Text = .Navn 'uten With: txtNavn.Text = minStudent.Navn
- txtKlasse.Text = .Klasse
- txtEpost.Text = .EPost
- txtFodselsdato.Text = .Bursdag
- End With
- End Sub
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ' Navn: fjernTekstFraTekstFelter '
- ' Argumenter: Ingen '
- ' Hva skjer? Fjerner det som ligger i tekstfeltene. '
- ' Merk: Dette er en egendefinert prosedyre som må kalles fra '
- ' steder der en ønsker å slette tekstfeltenes innhold, for '
- ' eksempel i knappen "Blank ut felter". '
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Private Sub fjernTekstFraTekstFelter()
- txtNavn.Text = ""
- txtKlasse.Text = ""
- txtEpost.Text = ""
- txtFodselsdato.Text = ""
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Sletter gjeldende post
- ' Strategi: Har riktig posisjon allerede, så det er bare å manipulere innholdet
- ' i den posten som Posisjon peker mot.
- ' Sletter opplysningene ved å sette inn teksten slettet hvor studentens navn er
- ' Blanker også ut de andre feltene og setter datoen til 1.1.3000 (som ingen kan være født på)
- ' Merk: Se også kommentarene helt øverst i koden.
- ' Posisjon endres ikke her, men i en fullgod løsning bør den også oppdateres til noe forutsigbart
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
- Dim bekreft As Integer = MsgBox("Vil du virkelig slette denne studenten?")
- If bekreft = vbOK Then
- With minStudent
- .Navn = "SLETTET"
- .Klasse = ""
- .EPost = ""
- .Bursdag = CDate("1.1.3000") 'å nullstille en dato betyr å velge en dato vi selv mener er null
- End With
- fjernTekstFraTekstFelter() 'Indikerer overfor brukeren at posten ble slettet
- FilePut(FilNummer, minStudent, Posisjon) 'Skriver informasjonen til fil, nå med tekst slettet
- MsgBox("Studenten ble slettet") 'Gir en bekreftende beskjed
- Else
- MsgBox("Studenten ble ikke slettet") 'Hvis Avbryt trykkes slettes ingenting
- End If
- 'MERK: Posisjon er ikke endret.
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Åpne filen
- ' Strategi: Åpner filen og klargjør alt for bruk.
- ' - Når denne knappen trykkes, vil enten
- ' a) en ny fil lages dersom det ikke eksisterer noen fil fra før.
- ' b) eksisterende fil åpnes, og første post leses inn i tekstfeltene.
- ' Merk: - Postlengden er 68 (30+5+25+8).
- ' - Posisjon initialiseres enten til 1 eller 0.
- ' - Denne knappen må trykkes før noe annet. Det er en litt dum løsning. En bedre strategi
- ' er å legge inn koden i form_load-prosedyren, så klargjørs filen i det programmet starter.
- ' - Skriver posisjonen til tekstfeltet txtViserPostNr
- ' Kaller: Prosedyren VisInformasjonITekstbokser [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
- 'Henter det neste tilgjengelige filnummeret vha innebygd funksjon.
- FilNummer = FreeFile()
- 'Åpner filen med FileOpen setningen. Her spesifiserer vi det
- 'logiske filnummeret, den fysiske adressen til filen, modus,
- 'lar to argumenter stå tomme, og angir tilslutt lengde på posten
- FileOpen(FilNummer, "student.dat", OpenMode.Random, , , postLengde)
- 'Finner hvor mange studenter det er i registeret
- 'ved å dele fillengden på postlengden
- Antall = FileLen("student.dat") / postLengde
- 'Hvis det finnes noe på filen, er det registrert studenter fra før.
- 'Strategien er å lese første post fra filen inn i en variabel
- 'og så legge innholdet i denne variabelen ut på skjerm.
- 'Samtidig oppdaterer vi posisjonspekeren slik at vi vet hvor
- 'på filen vi skal lese fra neste gang. Dette er viktig!
- If Antall > 0 Then
- 'Leser inn den studenten som ligger i første post på
- 'filen, og legger denne posten inn i variabelen minStudent
- FileGet(FilNummer, minStudent, 1)
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ' NYTT: Skriver ut informasjonen på skjerm i tekstbokser '
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- visInformasjonITekstbokser(minStudent)
- 'Holder rede på hvor vi er kommet i filen
- Posisjon = 1
- Else
- Posisjon = 0 'Dersom filen er tom, settes Posisjon til 0.
- End If
- 'Oppgir hvilken post som vises nå
- txtViserPostNr.Text = Posisjon
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Blanke ut tekstfeltene
- ' Strategi: Blanker ut, og gir deretter fokus til tekstfeltet, slik at det bare er å skrive rett inn.
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
- 'Blanker ut tekstfeltene på skjermen
- txtNavn.Text = ""
- txtKlasse.Text = ""
- txtEpost.Text = ""
- txtFodselsdato.Text = ""
- 'Gir fokus til første tekstfelt
- txtNavn.Focus()
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Lagre på fil
- ' Strategi: Det som ligger i tekstfeltene på skjerm, lagres i en ny post på fil
- ' - For å skrive til en ny post, må Antall oppdateres til å reflektere at det nå er flere
- ' poster på fil.
- ' - Posisjon må oppdateres, slik at bla-knappene fungerer slik de skal.
- ' Merk: Angående innlegging av Bursdag, må vi være litt forsiktige.
- ' - Hvis feltet txtFodselsdato er tomt, vil en tom streng overføres.
- ' - Det vil faktisk medføre at programmet kræsjer. En blank dato skal
- ' nemlig skrives som en gyldig dato, ikke som tom streng.
- ' - En løsning på dette er å late som at 1.1.3000 er det samme som å nullstille dato.
- ' Det går fordi 1.1.3000 trolig aldri vil bli brukt i programmet.
- ' Kaller: Prosedyren fjernTekstFraTekstFelter [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
- 'Antall som er lagt inn fra før ligger i variabelen Antall.
- 'Vi må skrive studentinformasjonen til neste post etter denne.
- 'Vi må huske på å ikke overskrive gamle,
- 'derfor oppdaterer vi antallet med en ekstra.
- Antall = Antall + 1
- 'Antallet sier hvor mange poster som vi har på filen til nå
- 'Posisjon sier hvor neste post skal skrives. 'Siden vi skal ha
- 'en ny post på slutten av filen blir Posisjon og Antall det samme.
- Posisjon = Antall
- 'Overfører verdiene fra tekstboksene til feltene i studentPost
- With minStudent
- If txtFodselsdato.Text = "" Then
- .Bursdag = CDate("1.1.3000") 'å nullstille en dato betyr å velge en dato vi selv mener er null
- Else
- .Bursdag = CDate(txtFodselsdato.Text) 'gjør om til dato først. Bruker kan finne på å skrive mange ulike formater her
- End If
- .Navn = txtNavn.Text
- .Klasse = txtKlasse.Text
- .EPost = txtEpost.Text
- End With
- 'Skriver hele posten til datafilen
- 'Legg merke til at den legges i i filen som det postnr som er angitt i variablen Posisjon.
- 'Kunne også brukt variabelen Antall (siden den tilfeldigvis har samme verdi som Posisjon),
- 'men det er litt mer sølete og ikke så intuitivt. Vi skriver til en posisjon (med Posisjon)
- 'og filen har til enhver tid et visst antall poster (Antall) som innhold. Bruk disse riktig!
- FilePut(FilNummer, minStudent, Posisjon)
- 'Blanker ut tekstfeltene for å vise tydelig at ting ble lagret.
- 'Har laget en prosedyre for dette, kaller den.
- 'Prosedyren er definert øverst i koden.
- fjernTekstFraTekstFelter()
- 'Oppgir hvilken post som vises nå = ingen (fordi vi lagret)
- txtViserPostNr.Text = ""
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Avslutt
- ' Strategi: Lukke filen og deretter avslutte programmet. Hvis ikke det gjøres, vil filen være åpen.
- ' noe som er uheldig.
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
- FileClose(FilNummer)
- MsgBox("Filen er lukket")
- End 'lukker skjemaet, og dermed også programmet
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Bla forrige
- ' Strategi: Blar bakover i filen
- ' - Kan ikke bla lenger bak enn til første post
- ' - Reduserer posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på første post.
- ' Merk: Ikke noe spesielt
- ' Kaller: Prosedyren visInformasjonITekstbokser [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
- 'Før vi blar oss bakover i filen, tester vi på at vi ikke er på
- 'den 1. studenten. I såfall er det ingen flere å bla bakover mot.
- If Posisjon >= 1 Then
- If Posisjon > 1 Then
- 'Minker posisjonen hvor vi er i registeret med 1
- 'men ikke dersom posisjonen er nøyaktig lik 1
- Posisjon = Posisjon - 1
- End If
- 'Henter studenten fra registeret med utgangspunkt i
- 'hvor posisjonspekeren er rettet mot
- FileGet(FilNummer, minStudent, Posisjon)
- 'Overfører opplysningen om studenten til tekstboksen på skjermen
- 'MERK: Innebærer å kalle den egendefinerte
- ' prosedyren visInformasjonITekstbokser
- visInformasjonITekstbokser(minStudent)
- End If
- 'Oppgir hvilken post som vises nå
- txtViserPostNr.Text = Posisjon
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Bla neste
- ' Strategi: Blar forover i filen
- ' - Kan ikke bla lenger enn til siste post
- ' - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
- ' Merk: Kan ikke bla i det hele tatt dersom filen er tom (Posisjon = 0).
- ' Her er det lett å gjøre feil siden en gjerne lager en fil først, og så tester programmet hele tiden
- ' mens denne filen har innhold.
- ' Kaller: Prosedyren visInformasjonITekstbokser [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
- 'Før vi blar oss framover i filen, tester vi på om det er flere
- 'å bla i i det hele tatt. Bare hvis så, fortsetter vi
- If Posisjon <= Antall And Posisjon <> 0 Then
- If Posisjon < Antall Then
- 'Øker posisjonen hvor vi er i registeret med 1
- 'men ikke dersom posisjonen er nøyaktig lik Antall
- Posisjon = Posisjon + 1
- End If
- 'Henter denne studenten fra registeret
- FileGet(FilNummer, minStudent, Posisjon)
- 'Overfører opplysningen om studenten til tekstboksen på skjermen
- 'MERK: Innebærer å kalle den egendefinerte
- ' prosedyren visInformasjonITekstbokser
- visInformasjonITekstbokser(minStudent)
- End If
- 'Oppgir hvilken post som vises nå
- txtViserPostNr.Text = Posisjon
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Gå til siste post
- ' Strategi: Viser siste post i filen, dersom filen har poster
- ' - Kan ikke bla lenger enn til siste post
- ' - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
- ' Merk: Må oppdatere Posisjon.
- ' - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
- ' men bare brukt Antall direkte, tror du?
- ' - Svaret er at neste gang du klikker på for eksempel Forrige, og posisjon ikke er oppdatert
- ' vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
- ' Kaller: Prosedyren visInformasjonITekstbokser [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
- 'Skal hoppe til siste post og vise opplysningene i tekstfeltene
- 'Setter posisjonen til Antall siden vi nå skal til siste post
- 'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
- If Antall > 0 Then
- Posisjon = Antall 'Antall er siste plass
- ' Henter studenten fra registeret med utgangspunkt i
- ' hvor posisjonspekeren er rettet mot
- FileGet(FilNummer, minStudent, Posisjon)
- 'Overfører opplysningen om studenten til tekstboksen på skjermen
- 'MERK: Innebærer å kalle den egendefinerte
- ' prosedyren visInformasjonITekstbokser
- visInformasjonITekstbokser(minStudent)
- 'Oppgir hvilken post som vises nå
- txtViserPostNr.Text = Posisjon
- End If
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Gå til første post
- ' Strategi: Viser siste post i filen, dersom filen har poster
- ' - Kan ikke bla lenger enn til siste post
- ' - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
- ' Merk: Må oppdatere Posisjon.
- ' - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
- ' men bare brukt tallet 1 direkte, tror du?
- ' - Svaret er at neste gang du klikker på for eksempel Neste, og posisjon ikke er oppdatert
- ' vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
- ' Kaller: Prosedyren visInformasjonITekstbokser [definert øverst i koden]
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
- 'Skal hoppe til første post og vise opplysningene i tekstfeltene
- 'Setter posisjonen til 1 siden vi nå skal til første post
- 'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
- If Antall > 0 Then
- Posisjon = 1
- ' Henter studenten fra registeret med utgangspunkt i
- ' hvor posisjonspekeren er rettet mot
- FileGet(FilNummer, minStudent, Posisjon)
- 'Overfører opplysningen om studenten til tekstboksen på skjermen
- 'MERK: Innebærer å kalle den egendefinerte
- ' prosedyren visInformasjonITekstbokser
- visInformasjonITekstbokser(minStudent)
- 'Oppgir hvilken post som vises nå
- txtViserPostNr.Text = Posisjon
- End If
- End Sub
- '-----------------------------------------------------------------------------------------------------------
- ' Knapp: Form_Load (altså ingen knapp, men det som skjer når programmet starter)
- ' Strategi: Det er viktig at brukeren trykker på knappen "Åpne fil" før noe annet klikkes på.
- ' Det er fort gjort å glemme dette. Derfor vises en beskjed hvor dette påpekes ettertrykkelig.
- ' Noe som er enda smartere, er å legge koden fra "Åpne fil" inn i Form_Load. Da slipper brukeren å
- ' tenke på at filen i det hele tatt må åpnes.
- '-----------------------------------------------------------------------------------------------------------
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- MsgBox("Husk å åpne filen først" & vbLf & "Du må klikke på knappen ""Åpne fil"" før du gjør noe annet")
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement