Advertisement
Guest User

Untitled

a guest
May 26th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 37.17 KB | None | 0 0
  1. Public Class Form1
  2.     Inherits System.Windows.Forms.Form
  3.  
  4. #Region " Windows Form Designer generated code "
  5.  
  6.     Public Sub New()
  7.         MyBase.New()
  8.  
  9.         'This call is required by the Windows Form Designer.
  10.         InitializeComponent()
  11.  
  12.         'Add any initialization after the InitializeComponent() call
  13.  
  14.     End Sub
  15.  
  16.     'Form overrides dispose to clean up the component list.
  17.     Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
  18.         If disposing Then
  19.             If Not (components Is Nothing) Then
  20.                 components.Dispose()
  21.             End If
  22.         End If
  23.         MyBase.Dispose(disposing)
  24.     End Sub
  25.  
  26.     'Required by the Windows Form Designer
  27.     Private components As System.ComponentModel.IContainer
  28.  
  29.     'NOTE: The following procedure is required by the Windows Form Designer
  30.     'It can be modified using the Windows Form Designer.  
  31.     'Do not modify it using the code editor.
  32.     Friend WithEvents txtNavn As System.Windows.Forms.TextBox
  33.     Friend WithEvents txtKlasse As System.Windows.Forms.TextBox
  34.     Friend WithEvents txtEpost As System.Windows.Forms.TextBox
  35.     Friend WithEvents txtFodselsdato As System.Windows.Forms.TextBox
  36.     Friend WithEvents Button8 As System.Windows.Forms.Button
  37.     Friend WithEvents Label5 As System.Windows.Forms.Label
  38.     Friend WithEvents Label6 As System.Windows.Forms.Label
  39.     Friend WithEvents Label7 As System.Windows.Forms.Label
  40.     Friend WithEvents Button9 As System.Windows.Forms.Button
  41.     Friend WithEvents Button10 As System.Windows.Forms.Button
  42.     Friend WithEvents Button11 As System.Windows.Forms.Button
  43.     Friend WithEvents Button12 As System.Windows.Forms.Button
  44.     Friend WithEvents Button13 As System.Windows.Forms.Button
  45.     Friend WithEvents Button14 As System.Windows.Forms.Button
  46.     Friend WithEvents Label8 As System.Windows.Forms.Label
  47.     Friend WithEvents txtViserPostNr As System.Windows.Forms.TextBox
  48.     Friend WithEvents Label9 As System.Windows.Forms.Label
  49.     Friend WithEvents Button15 As System.Windows.Forms.Button
  50.     Friend WithEvents Button16 As System.Windows.Forms.Button
  51.     Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
  52.     <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  53.         Me.txtNavn = New System.Windows.Forms.TextBox
  54.         Me.txtKlasse = New System.Windows.Forms.TextBox
  55.         Me.txtEpost = New System.Windows.Forms.TextBox
  56.         Me.txtFodselsdato = New System.Windows.Forms.TextBox
  57.         Me.Button8 = New System.Windows.Forms.Button
  58.         Me.Label5 = New System.Windows.Forms.Label
  59.         Me.Label6 = New System.Windows.Forms.Label
  60.         Me.Label7 = New System.Windows.Forms.Label
  61.         Me.Button9 = New System.Windows.Forms.Button
  62.         Me.Button10 = New System.Windows.Forms.Button
  63.         Me.Button11 = New System.Windows.Forms.Button
  64.         Me.Button12 = New System.Windows.Forms.Button
  65.         Me.Button13 = New System.Windows.Forms.Button
  66.         Me.Button14 = New System.Windows.Forms.Button
  67.         Me.Label8 = New System.Windows.Forms.Label
  68.         Me.txtViserPostNr = New System.Windows.Forms.TextBox
  69.         Me.Label9 = New System.Windows.Forms.Label
  70.         Me.Button15 = New System.Windows.Forms.Button
  71.         Me.Button16 = New System.Windows.Forms.Button
  72.         Me.GroupBox1 = New System.Windows.Forms.GroupBox
  73.         Me.GroupBox1.SuspendLayout()
  74.         Me.SuspendLayout()
  75.         '
  76.         'txtNavn
  77.         '
  78.         Me.txtNavn.Location = New System.Drawing.Point(360, 32)
  79.         Me.txtNavn.Name = "txtNavn"
  80.         Me.txtNavn.Size = New System.Drawing.Size(152, 20)
  81.         Me.txtNavn.TabIndex = 5
  82.         Me.txtNavn.Text = ""
  83.         '
  84.         'txtKlasse
  85.         '
  86.         Me.txtKlasse.Location = New System.Drawing.Point(360, 64)
  87.         Me.txtKlasse.Name = "txtKlasse"
  88.         Me.txtKlasse.Size = New System.Drawing.Size(152, 20)
  89.         Me.txtKlasse.TabIndex = 6
  90.         Me.txtKlasse.Text = ""
  91.         '
  92.         'txtEpost
  93.         '
  94.         Me.txtEpost.Location = New System.Drawing.Point(360, 96)
  95.         Me.txtEpost.Name = "txtEpost"
  96.         Me.txtEpost.Size = New System.Drawing.Size(152, 20)
  97.         Me.txtEpost.TabIndex = 7
  98.         Me.txtEpost.Text = ""
  99.         '
  100.         'txtFodselsdato
  101.         '
  102.         Me.txtFodselsdato.Location = New System.Drawing.Point(360, 128)
  103.         Me.txtFodselsdato.Name = "txtFodselsdato"
  104.         Me.txtFodselsdato.Size = New System.Drawing.Size(152, 20)
  105.         Me.txtFodselsdato.TabIndex = 7
  106.         Me.txtFodselsdato.Text = ""
  107.         '
  108.         'Button8
  109.         '
  110.         Me.Button8.Location = New System.Drawing.Point(168, 168)
  111.         Me.Button8.Name = "Button8"
  112.         Me.Button8.Size = New System.Drawing.Size(208, 23)
  113.         Me.Button8.TabIndex = 13
  114.         Me.Button8.Text = "Slett post (se kommentar i koden)"
  115.         '
  116.         'Label5
  117.         '
  118.         Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  119.         Me.Label5.Location = New System.Drawing.Point(224, 96)
  120.         Me.Label5.Name = "Label5"
  121.         Me.Label5.Size = New System.Drawing.Size(128, 24)
  122.         Me.Label5.TabIndex = 27
  123.         Me.Label5.Text = "Epost"
  124.         '
  125.         'Label6
  126.         '
  127.         Me.Label6.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  128.         Me.Label6.Location = New System.Drawing.Point(224, 64)
  129.         Me.Label6.Name = "Label6"
  130.         Me.Label6.Size = New System.Drawing.Size(128, 24)
  131.         Me.Label6.TabIndex = 26
  132.         Me.Label6.Text = "Klasse"
  133.         '
  134.         'Label7
  135.         '
  136.         Me.Label7.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  137.         Me.Label7.Location = New System.Drawing.Point(224, 32)
  138.         Me.Label7.Name = "Label7"
  139.         Me.Label7.Size = New System.Drawing.Size(128, 24)
  140.         Me.Label7.TabIndex = 25
  141.         Me.Label7.Text = "Navn"
  142.         '
  143.         'Button9
  144.         '
  145.         Me.Button9.Location = New System.Drawing.Point(40, 128)
  146.         Me.Button9.Name = "Button9"
  147.         Me.Button9.Size = New System.Drawing.Size(160, 23)
  148.         Me.Button9.TabIndex = 19
  149.         Me.Button9.Text = "Avslutt"
  150.         '
  151.         'Button10
  152.         '
  153.         Me.Button10.Location = New System.Drawing.Point(136, 40)
  154.         Me.Button10.Name = "Button10"
  155.         Me.Button10.Size = New System.Drawing.Size(96, 23)
  156.         Me.Button10.TabIndex = 17
  157.         Me.Button10.Text = "< Bla Forrige"
  158.         '
  159.         'Button11
  160.         '
  161.         Me.Button11.Location = New System.Drawing.Point(40, 96)
  162.         Me.Button11.Name = "Button11"
  163.         Me.Button11.Size = New System.Drawing.Size(160, 23)
  164.         Me.Button11.TabIndex = 16
  165.         Me.Button11.Text = "Lagre som ny post på fil"
  166.         '
  167.         'Button12
  168.         '
  169.         Me.Button12.Location = New System.Drawing.Point(240, 40)
  170.         Me.Button12.Name = "Button12"
  171.         Me.Button12.Size = New System.Drawing.Size(96, 23)
  172.         Me.Button12.TabIndex = 15
  173.         Me.Button12.Text = "Bla Neste >"
  174.         '
  175.         'Button13
  176.         '
  177.         Me.Button13.Location = New System.Drawing.Point(40, 64)
  178.         Me.Button13.Name = "Button13"
  179.         Me.Button13.Size = New System.Drawing.Size(160, 23)
  180.         Me.Button13.TabIndex = 14
  181.         Me.Button13.Text = "Blank ut tekstfeltene"
  182.         '
  183.         'Button14
  184.         '
  185.         Me.Button14.Location = New System.Drawing.Point(40, 32)
  186.         Me.Button14.Name = "Button14"
  187.         Me.Button14.Size = New System.Drawing.Size(160, 23)
  188.         Me.Button14.TabIndex = 18
  189.         Me.Button14.Text = "Åpne fil"
  190.         '
  191.         'Label8
  192.         '
  193.         Me.Label8.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  194.         Me.Label8.Location = New System.Drawing.Point(224, 72)
  195.         Me.Label8.Name = "Label8"
  196.         Me.Label8.Size = New System.Drawing.Size(168, 32)
  197.         Me.Label8.TabIndex = 24
  198.         Me.Label8.Text = "Nå vises post nummer:"
  199.         '
  200.         'txtViserPostNr
  201.         '
  202.         Me.txtViserPostNr.BackColor = System.Drawing.Color.FromArgb(CType(224, Byte), CType(224, Byte), CType(224, Byte))
  203.         Me.txtViserPostNr.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
  204.         Me.txtViserPostNr.Enabled = False
  205.         Me.txtViserPostNr.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  206.         Me.txtViserPostNr.ForeColor = System.Drawing.Color.Black
  207.         Me.txtViserPostNr.Location = New System.Drawing.Point(408, 72)
  208.         Me.txtViserPostNr.Name = "txtViserPostNr"
  209.         Me.txtViserPostNr.Size = New System.Drawing.Size(48, 20)
  210.         Me.txtViserPostNr.TabIndex = 20
  211.         Me.txtViserPostNr.Text = ""
  212.         Me.txtViserPostNr.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
  213.         '
  214.         'Label9
  215.         '
  216.         Me.Label9.Font = New System.Drawing.Font("Microsoft Sans Serif", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  217.         Me.Label9.Location = New System.Drawing.Point(224, 128)
  218.         Me.Label9.Name = "Label9"
  219.         Me.Label9.Size = New System.Drawing.Size(128, 24)
  220.         Me.Label9.TabIndex = 10
  221.         Me.Label9.Text = "Fødselsdato"
  222.         '
  223.         'Button15
  224.         '
  225.         Me.Button15.Location = New System.Drawing.Point(16, 40)
  226.         Me.Button15.Name = "Button15"
  227.         Me.Button15.Size = New System.Drawing.Size(96, 23)
  228.         Me.Button15.TabIndex = 29
  229.         Me.Button15.Text = "<<< Bla Første"
  230.         '
  231.         'Button16
  232.         '
  233.         Me.Button16.Location = New System.Drawing.Point(360, 40)
  234.         Me.Button16.Name = "Button16"
  235.         Me.Button16.Size = New System.Drawing.Size(96, 23)
  236.         Me.Button16.TabIndex = 28
  237.         Me.Button16.Text = "Bla Siste >>>"
  238.         '
  239.         'GroupBox1
  240.         '
  241.         Me.GroupBox1.Controls.Add(Me.Button16)
  242.         Me.GroupBox1.Controls.Add(Me.Button15)
  243.         Me.GroupBox1.Controls.Add(Me.txtViserPostNr)
  244.         Me.GroupBox1.Controls.Add(Me.Label8)
  245.         Me.GroupBox1.Controls.Add(Me.Button12)
  246.         Me.GroupBox1.Controls.Add(Me.Button10)
  247.         Me.GroupBox1.Location = New System.Drawing.Point(40, 208)
  248.         Me.GroupBox1.Name = "GroupBox1"
  249.         Me.GroupBox1.Size = New System.Drawing.Size(472, 120)
  250.         Me.GroupBox1.TabIndex = 30
  251.         Me.GroupBox1.TabStop = False
  252.         Me.GroupBox1.Text = "Navigasjon i filen, dvs bla mellom studenter"
  253.         '
  254.         'Form1
  255.         '
  256.         Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
  257.         Me.ClientSize = New System.Drawing.Size(552, 357)
  258.         Me.Controls.Add(Me.Label5)
  259.         Me.Controls.Add(Me.Label6)
  260.         Me.Controls.Add(Me.Label7)
  261.         Me.Controls.Add(Me.Button9)
  262.         Me.Controls.Add(Me.Button11)
  263.         Me.Controls.Add(Me.Button13)
  264.         Me.Controls.Add(Me.Button14)
  265.         Me.Controls.Add(Me.Button8)
  266.         Me.Controls.Add(Me.txtEpost)
  267.         Me.Controls.Add(Me.txtKlasse)
  268.         Me.Controls.Add(Me.txtNavn)
  269.         Me.Controls.Add(Me.txtFodselsdato)
  270.         Me.Controls.Add(Me.Label9)
  271.         Me.Controls.Add(Me.GroupBox1)
  272.         Me.Name = "Form1"
  273.         Me.Text = "Studentregister"
  274.         Me.GroupBox1.ResumeLayout(False)
  275.         Me.ResumeLayout(False)
  276.  
  277.     End Sub
  278.  
  279. #End Region
  280.  
  281.     '************************************************************************'
  282.     '*         Strategi:   D A T O     S K A L    R E G I S T R E R E S     *'
  283.     '*                                                                      *'
  284.     '*  Hva må endres i programmet når dato skal med?
  285.     '*      - Utvide den egendefinerte datatypen
  286.     '*      - Endre konstanten postLengde
  287.     '*      - Legge til en ekstra tekstboks
  288.     '*      - Lese inn informasjonen fra denne tekstboksen
  289.     '*      - Brukte ikke With ved innlegging i egendefinert datatype
  290.     '*        overalt i leksjonen, men det er ingen grunn til ikke å
  291.     '*        gjøre det konsekvent i øvingen. With er viktig!
  292.     '*  MERK:
  293.     '*      - Siden oppgave 2 består i å lage kode for å hoppe helt
  294.     '*        først og helt sist, men fortsatt vise koden i tekstfelt,
  295.     '*        er det lurt å generalisere denne visningen ut i en egen
  296.     '*        prosedyre som kan kalles opp.
  297.     '*      - Kan også kalle denne prosedyren fra de knappene som blar
  298.     '*        bare en og en post.
  299.     '*      - Prosedyren heter visInformasjonITekstbokser()                 *'
  300.     '*                                                                      *'
  301.     '************************************************************************'
  302.  
  303.  
  304.     '************************************************************************'
  305.     '*         Strategi:   S L E T T I N G     A V    S T U D E N T E R     *'
  306.     '*                                                                      *'
  307.     '*  Fakta:
  308.     '*      - Sletting av studenter (XTRA) er ikke helt enkelt å få til.
  309.     '*      - I første øyekast innebærer det å måtte reorganisere filen
  310.     '*        og fjerne den posten som skal slettes. Dette er tidkrevende.
  311.     '*      - En vanlig teknikk er derfor å rett og slett legge til et nytt
  312.     '*        felt som heter Slettet.
  313.     '*              - Dersom dette feltet har verdi TRUE er posten
  314.     '*                ikke-eksisterende.
  315.     '*              - Dersom det er FALSE, har posten data.
  316.     '*      - En annen strategi er å blanke ut alle felt
  317.     '*      - En kan også sette teksten "SLETTET" i for eksempel første
  318.     '*        felt Navn for de poster som skal slettes.
  319.     '*      - I dette løsningsforslaget bruker vi den siste teknikken.
  320.     '*
  321.     '*  Konsekvens for Bla-funksjonaliteten:
  322.     '*      - Det er ikke bra dersom slettede poster faktisk vises i
  323.     '*        grensesnittet.
  324.     '*      - Dette kan unngås ved å sjekke i Bla-knappene om posten er
  325.     '*        slettet, og i så fall bla videre inntil en post
  326.     '*        som ikke er slettet treffes på.
  327.     '*      - MERK: Implementerer ikke dette i denne løsningen
  328.     '*
  329.     '*  Konsekvens for innlegging av nye studenter:
  330.     '*      - Dette bør fortsatt skje på slutten av filen, siden det er
  331.     '*        tidkrevende å søke gjennom filen og legge inn en ny student
  332.     '*        på en gammel slettet-post.
  333.     '*
  334.     '*  Konsekvens for filen som sådan:
  335.     '*      - En kan kjøre en "garbage collection" (opprydningsrutine)
  336.     '*        med jevne mellomrom som kopierer bare de postene som har
  337.     '*        fornuftige data over til en ny fil, og så slette hele den
  338.     '*        gamle filen. Dermed fjerner en de tomme postene for godt.
  339.     '*      - Det er for øvrig ofte regnet som viktig å ta vare på data,
  340.     '*        selv om de skal slettes. Dette for statistikkens skyld.
  341.     '*        Kanskje det er interessant å se hvor mange som er slettet?
  342.     '*        Eller å rekonstruere data? I så fall må en enten bruke et
  343.     '*        arkiv, eller bare markere slettede poster med et flagg
  344.     '*        eller teksten SLETTET. Lurt? Slike teknikker er mye brukt,
  345.     '*        både i fil- og databaseløsninger!                             *'
  346.     '*                                                                      *'
  347.     '************************************************************************'
  348.  
  349.  
  350.     '************************************************************************'
  351.     '*         G  L  O  B  A  L  E        V  A  R  I  A  B  L  E  R         *'
  352.     '*                                                                      *'
  353.     '*    Her er definisjonen av vår egendefinerte datatype, StudentPost    
  354.     '*    og globale variabler (og konstanter) som brukes                  
  355.     '*    av flere prosedyrer og knapper i programmet                       *'
  356.     '*                                                                      *'
  357.     '************************************************************************'
  358.  
  359.     Structure StudentPost
  360.         ' Tallet i parantesen til konstanten VBFixedString
  361.         ' står for lengden på hvert enkeltfelt
  362.         ' Den totale postlengden blir summen av hvert felt,
  363.         ' det vil si 60 for strengene og 8 for dato,
  364.         ' totalt 68
  365.  
  366.         <VBFixedString(30)> Public Navn As String
  367.         <VBFixedString(5)> Public Klasse As String
  368.         <VBFixedString(25)> Public EPost As String
  369.         Public Bursdag As Date
  370.     End Structure
  371.  
  372.  
  373.     'Deklarerer en variabel av typen som vi har opprettet nettopp.
  374.     'Innlesing og skriving av en student mellomlagres her.
  375.     Private minStudent As StudentPost
  376.  
  377.     'Lager en konstant for å holde rede på postlengden (her 68 bytes)
  378.     Const postLengde = 68
  379.  
  380.     'Inneholder totalt antall studenter i filen
  381.     Private Antall As Integer
  382.  
  383.     'Holder rede på hvilken post som skal skrives til eller leses fra
  384.     'i filen. Dette tallet angir altså riktig posisjon til enhver tid.
  385.     Private Posisjon As Integer
  386.  
  387.     'En fil har et logisk nummer. Lager en global
  388.     'variabel slik at filnummeret kan brukes av alle prosedyrene.
  389.     Private FilNummer As Integer
  390.  
  391.  
  392.     '************************************************************************'
  393.     '*         V  I  K  T  I  G   -  egne prosedyrer lages her              *'
  394.     '*                                                                      *'
  395.     '*    Vi ser et mønster hvor flere hendelsesprosedyrer                  
  396.     '*    skal utføre samme kode: nemlig å skrive noe til skjerm            
  397.     '*    Lager derfor egne prosedyrer som gjør dette                       *'
  398.     '*                                                                      *'
  399.     '************************************************************************'
  400.  
  401.  
  402.  
  403.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  404.     ' Navn:         visInformasjonITekstbokser                               '
  405.     ' Argumenter:   en post av type StudentPost                              '
  406.     ' Hva skjer?    Overfører innholdet i posten til tekstboksene på         '
  407.     '               skjermen.                                                '
  408.     ' Merk:         Bruker With til å hente ut spesielle felt.               '
  409.     '               Dette er en egendefinert prosedyre som må kalles fra     '
  410.     '               steder der en ønsker å slette tekstfeltenes innhold, for '
  411.     '               eksempel i knappene "Lagre" og "Bla neste".              '
  412.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  413.     Private Sub visInformasjonITekstbokser(ByVal post As StudentPost)
  414.         With post  'argumentet post er nå som en lokal variabel å regne
  415.             txtNavn.Text = .Navn   'uten With: txtNavn.Text = minStudent.Navn
  416.             txtKlasse.Text = .Klasse
  417.             txtEpost.Text = .EPost
  418.             txtFodselsdato.Text = .Bursdag
  419.         End With
  420.     End Sub
  421.  
  422.  
  423.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  424.     ' Navn:         fjernTekstFraTekstFelter                                 '
  425.     ' Argumenter:   Ingen                                                    '
  426.     ' Hva skjer?    Fjerner det som ligger i tekstfeltene.                   '
  427.     ' Merk:         Dette er en egendefinert prosedyre som må kalles fra     '
  428.     '               steder der en ønsker å slette tekstfeltenes innhold, for '
  429.     '               eksempel i knappen "Blank ut felter".                    '
  430.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  431.     Private Sub fjernTekstFraTekstFelter()
  432.         txtNavn.Text = ""
  433.         txtKlasse.Text = ""
  434.         txtEpost.Text = ""
  435.         txtFodselsdato.Text = ""
  436.     End Sub
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.     '-----------------------------------------------------------------------------------------------------------
  446.     ' Knapp:    Sletter gjeldende post
  447.     ' Strategi: Har riktig posisjon allerede, så det er bare å manipulere innholdet
  448.     '           i den posten som Posisjon peker mot.
  449.     '           Sletter opplysningene ved å sette inn teksten slettet hvor studentens navn er
  450.     '           Blanker også ut de andre feltene og setter datoen til 1.1.3000  (som ingen kan være født på)
  451.     ' Merk:     Se også kommentarene helt øverst i koden.
  452.     '           Posisjon endres ikke her, men i en fullgod løsning bør den også oppdateres til noe forutsigbart
  453.     '-----------------------------------------------------------------------------------------------------------
  454.     Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
  455.         Dim bekreft As Integer = MsgBox("Vil du virkelig slette denne studenten?")
  456.         If bekreft = vbOK Then
  457.             With minStudent
  458.                 .Navn = "SLETTET"
  459.                 .Klasse = ""
  460.                 .EPost = ""
  461.                 .Bursdag = CDate("1.1.3000")  'å nullstille en dato betyr å velge en dato vi selv mener er null
  462.             End With
  463.             fjernTekstFraTekstFelter()  'Indikerer overfor brukeren at posten ble slettet
  464.             FilePut(FilNummer, minStudent, Posisjon)  'Skriver informasjonen til fil, nå med tekst slettet
  465.             MsgBox("Studenten ble slettet")  'Gir en bekreftende beskjed
  466.         Else
  467.             MsgBox("Studenten ble ikke slettet")  'Hvis Avbryt trykkes slettes ingenting
  468.         End If
  469.  
  470.         'MERK: Posisjon er ikke endret.
  471.     End Sub
  472.  
  473.  
  474.  
  475.  
  476.     '-----------------------------------------------------------------------------------------------------------
  477.     ' Knapp:    Åpne filen
  478.     ' Strategi: Åpner filen og klargjør alt for bruk.
  479.     '           - Når denne knappen trykkes, vil enten
  480.     '               a) en ny fil lages dersom det ikke eksisterer noen fil fra før.
  481.     '               b) eksisterende fil åpnes, og første post leses inn i tekstfeltene.
  482.     ' Merk:     - Postlengden er 68 (30+5+25+8).
  483.     '           - Posisjon initialiseres enten til 1 eller 0.
  484.     '           - Denne knappen må trykkes før noe annet. Det er en litt dum løsning. En bedre strategi
  485.     '             er å legge inn koden i form_load-prosedyren, så klargjørs filen i det programmet starter.
  486.     '           - Skriver posisjonen til tekstfeltet txtViserPostNr
  487.     ' Kaller:   Prosedyren VisInformasjonITekstbokser   [definert øverst i koden]
  488.     '-----------------------------------------------------------------------------------------------------------
  489.     Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
  490.         'Henter det neste tilgjengelige filnummeret vha innebygd funksjon.
  491.         FilNummer = FreeFile()
  492.  
  493.         'Åpner filen med FileOpen setningen. Her spesifiserer vi det
  494.         'logiske filnummeret, den fysiske adressen til filen, modus,
  495.         'lar to argumenter stå tomme, og angir tilslutt lengde på posten
  496.         FileOpen(FilNummer, "student.dat", OpenMode.Random, , , postLengde)
  497.  
  498.         'Finner hvor mange studenter det er i registeret
  499.         'ved å dele fillengden på postlengden
  500.         Antall = FileLen("student.dat") / postLengde
  501.  
  502.         'Hvis det finnes noe på filen, er det registrert studenter fra før.
  503.         'Strategien er å lese første post fra filen inn i en variabel
  504.         'og så legge innholdet i denne variabelen ut på skjerm.
  505.         'Samtidig oppdaterer vi posisjonspekeren slik at vi vet hvor
  506.         'på filen vi skal lese fra neste gang. Dette er viktig!
  507.         If Antall > 0 Then
  508.             'Leser inn den studenten som ligger i første post på
  509.             'filen, og legger denne posten inn i variabelen minStudent
  510.             FileGet(FilNummer, minStudent, 1)
  511.  
  512.             ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  513.             ' NYTT: Skriver ut informasjonen på skjerm i tekstbokser '
  514.             ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  515.             visInformasjonITekstbokser(minStudent)
  516.  
  517.             'Holder rede på hvor vi er kommet i filen
  518.             Posisjon = 1
  519.         Else
  520.             Posisjon = 0  'Dersom filen er tom, settes Posisjon til 0.
  521.         End If
  522.         'Oppgir hvilken post som vises nå
  523.         txtViserPostNr.Text = Posisjon
  524.  
  525.     End Sub
  526.  
  527.  
  528.  
  529.  
  530.     '-----------------------------------------------------------------------------------------------------------
  531.     ' Knapp:    Blanke ut tekstfeltene
  532.     ' Strategi: Blanker ut, og gir deretter fokus til tekstfeltet, slik at det bare er å skrive rett inn.
  533.     '-----------------------------------------------------------------------------------------------------------
  534.     Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
  535.         'Blanker ut tekstfeltene på skjermen
  536.         txtNavn.Text = ""
  537.         txtKlasse.Text = ""
  538.         txtEpost.Text = ""
  539.         txtFodselsdato.Text = ""
  540.  
  541.         'Gir fokus til første tekstfelt
  542.         txtNavn.Focus()
  543.     End Sub
  544.  
  545.  
  546.  
  547.  
  548.     '-----------------------------------------------------------------------------------------------------------
  549.     ' Knapp:    Lagre på fil
  550.     ' Strategi: Det som ligger i tekstfeltene på skjerm, lagres i en ny post på fil
  551.     '           - For å skrive til en ny post, må Antall oppdateres til å reflektere at det nå er flere
  552.     '             poster på fil.
  553.     '           - Posisjon må oppdateres, slik at bla-knappene fungerer slik de skal.
  554.     ' Merk:     Angående innlegging av Bursdag, må vi være litt forsiktige.
  555.     '           - Hvis feltet txtFodselsdato er tomt, vil en tom streng overføres.
  556.     '           - Det vil faktisk medføre at programmet kræsjer. En blank dato skal
  557.     '             nemlig skrives som en gyldig dato, ikke som tom streng.
  558.     '           - En løsning på dette er å late som at 1.1.3000 er det samme som å nullstille dato.
  559.     '             Det går fordi 1.1.3000 trolig aldri vil bli brukt i programmet.
  560.     ' Kaller:   Prosedyren fjernTekstFraTekstFelter   [definert øverst i koden]
  561.     '-----------------------------------------------------------------------------------------------------------
  562.     Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
  563.         'Antall som er lagt inn fra før ligger i variabelen Antall.
  564.         'Vi må skrive studentinformasjonen til neste post etter denne.
  565.         'Vi må huske på å ikke overskrive gamle,
  566.         'derfor oppdaterer vi antallet med en ekstra.
  567.         Antall = Antall + 1
  568.  
  569.         'Antallet sier hvor mange poster som vi har på filen til nå
  570.         'Posisjon sier hvor neste post skal skrives. 'Siden vi skal ha
  571.         'en ny post på slutten av filen blir Posisjon og Antall det samme.
  572.         Posisjon = Antall
  573.  
  574.         'Overfører verdiene fra tekstboksene til feltene i studentPost
  575.         With minStudent
  576.             If txtFodselsdato.Text = "" Then
  577.                 .Bursdag = CDate("1.1.3000")  'å nullstille en dato betyr å velge en dato vi selv mener er null
  578.             Else
  579.                 .Bursdag = CDate(txtFodselsdato.Text)  'gjør om til dato først. Bruker kan finne på å skrive mange ulike formater her
  580.             End If
  581.             .Navn = txtNavn.Text
  582.             .Klasse = txtKlasse.Text
  583.             .EPost = txtEpost.Text
  584.         End With
  585.  
  586.         'Skriver hele posten til datafilen
  587.         'Legg merke til at den legges i i filen som det postnr som er angitt i variablen Posisjon.
  588.         'Kunne også brukt variabelen Antall (siden den tilfeldigvis har samme verdi som Posisjon),
  589.         'men det er litt mer sølete og ikke så intuitivt. Vi skriver til en posisjon (med Posisjon)
  590.         'og filen har til enhver tid et visst antall poster (Antall) som innhold. Bruk disse riktig!
  591.         FilePut(FilNummer, minStudent, Posisjon)
  592.  
  593.         'Blanker ut tekstfeltene for å vise tydelig at ting ble lagret.
  594.         'Har laget en prosedyre for dette, kaller den.
  595.         'Prosedyren er definert øverst i koden.
  596.         fjernTekstFraTekstFelter()
  597.  
  598.         'Oppgir hvilken post som vises nå = ingen (fordi vi lagret)
  599.         txtViserPostNr.Text = ""
  600.     End Sub
  601.  
  602.  
  603.  
  604.  
  605.     '-----------------------------------------------------------------------------------------------------------
  606.     ' Knapp:    Avslutt
  607.     ' Strategi: Lukke filen og deretter avslutte programmet. Hvis ikke det gjøres, vil filen være åpen.
  608.     '           noe som er uheldig.
  609.     '-----------------------------------------------------------------------------------------------------------
  610.     Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
  611.         FileClose(FilNummer)
  612.         MsgBox("Filen er lukket")
  613.         End     'lukker skjemaet, og dermed også programmet    
  614.     End Sub
  615.  
  616.  
  617.  
  618.  
  619.     '-----------------------------------------------------------------------------------------------------------
  620.     ' Knapp:    Bla forrige
  621.     ' Strategi: Blar bakover i filen
  622.     '           - Kan ikke bla lenger bak enn til første post
  623.     '           - Reduserer posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på første post.
  624.     ' Merk:     Ikke noe spesielt
  625.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  626.     '-----------------------------------------------------------------------------------------------------------
  627.     Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
  628.         'Før vi blar oss bakover i filen, tester vi på at vi ikke er på
  629.         'den 1. studenten. I såfall er det ingen flere å bla bakover mot.
  630.         If Posisjon >= 1 Then
  631.             If Posisjon > 1 Then
  632.                 'Minker posisjonen hvor vi er i registeret med 1
  633.                 'men ikke dersom posisjonen er nøyaktig lik 1
  634.                 Posisjon = Posisjon - 1
  635.             End If
  636.  
  637.             'Henter studenten fra registeret med utgangspunkt i
  638.             'hvor posisjonspekeren er rettet mot
  639.             FileGet(FilNummer, minStudent, Posisjon)
  640.  
  641.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  642.             'MERK:  Innebærer å kalle den egendefinerte
  643.             '       prosedyren visInformasjonITekstbokser
  644.             visInformasjonITekstbokser(minStudent)
  645.         End If
  646.  
  647.         'Oppgir hvilken post som vises nå
  648.         txtViserPostNr.Text = Posisjon
  649.     End Sub
  650.  
  651.  
  652.  
  653.  
  654.     '-----------------------------------------------------------------------------------------------------------
  655.     ' Knapp:    Bla neste
  656.     ' Strategi: Blar forover i filen
  657.     '           - Kan ikke bla lenger enn til siste post
  658.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  659.     ' Merk:     Kan ikke bla i det hele tatt dersom filen er tom (Posisjon = 0).
  660.     '           Her er det lett å gjøre feil siden en gjerne lager en fil først, og så tester programmet hele tiden
  661.     '           mens denne filen har innhold.
  662.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  663.     '-----------------------------------------------------------------------------------------------------------
  664.     Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
  665.         'Før vi blar oss framover i filen, tester vi på om det er flere
  666.         'å bla i i det hele tatt. Bare hvis så, fortsetter vi
  667.         If Posisjon <= Antall And Posisjon <> 0 Then
  668.             If Posisjon < Antall Then
  669.                 'Øker posisjonen hvor vi er i registeret med 1
  670.                 'men ikke dersom posisjonen er nøyaktig lik Antall
  671.                 Posisjon = Posisjon + 1
  672.             End If
  673.  
  674.             'Henter denne studenten fra registeret
  675.             FileGet(FilNummer, minStudent, Posisjon)
  676.  
  677.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  678.             'MERK:  Innebærer å kalle den egendefinerte
  679.             '       prosedyren visInformasjonITekstbokser
  680.             visInformasjonITekstbokser(minStudent)
  681.         End If
  682.  
  683.         'Oppgir hvilken post som vises nå
  684.         txtViserPostNr.Text = Posisjon
  685.     End Sub
  686.  
  687.  
  688.  
  689.  
  690.     '-----------------------------------------------------------------------------------------------------------
  691.     ' Knapp:    Gå til siste post
  692.     ' Strategi: Viser siste post i filen, dersom filen har poster
  693.     '           - Kan ikke bla lenger enn til siste post
  694.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  695.     ' Merk:     Må oppdatere Posisjon.
  696.     '           - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
  697.     '             men bare brukt Antall direkte, tror du?
  698.     '           - Svaret er at neste gang du klikker på for eksempel Forrige, og posisjon ikke er oppdatert
  699.     '             vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
  700.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  701.     '-----------------------------------------------------------------------------------------------------------
  702.     Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
  703.         'Skal hoppe til siste post og vise opplysningene i tekstfeltene
  704.         'Setter posisjonen til Antall siden vi nå skal til siste post
  705.  
  706.         'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
  707.         If Antall > 0 Then
  708.             Posisjon = Antall   'Antall er siste plass
  709.  
  710.             ' Henter studenten fra registeret med utgangspunkt i
  711.             ' hvor posisjonspekeren er rettet mot
  712.             FileGet(FilNummer, minStudent, Posisjon)
  713.  
  714.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  715.             'MERK:  Innebærer å kalle den egendefinerte
  716.             '       prosedyren visInformasjonITekstbokser
  717.             visInformasjonITekstbokser(minStudent)
  718.  
  719.             'Oppgir hvilken post som vises nå
  720.             txtViserPostNr.Text = Posisjon
  721.         End If
  722.     End Sub
  723.  
  724.  
  725.  
  726.  
  727.     '-----------------------------------------------------------------------------------------------------------
  728.     ' Knapp:    Gå til første post
  729.     ' Strategi: Viser siste post i filen, dersom filen har poster
  730.     '           - Kan ikke bla lenger enn til siste post
  731.     '           - Øker posisjonen i Posisjon med 1, men bare dersom vi ikke allerede er på siste post.
  732.     ' Merk:     Må oppdatere Posisjon.
  733.     '           - Hva hadde skjedd dersom vi ikke hadde oppdatert posisjonen nå,
  734.     '             men bare brukt tallet 1 direkte, tror du?
  735.     '           - Svaret er at neste gang du klikker på for eksempel Neste, og posisjon ikke er oppdatert
  736.     '             vil det bli kluss med hvilken post som vises, og i verste fall kan programmet kræsje.
  737.     ' Kaller:   Prosedyren visInformasjonITekstbokser   [definert øverst i koden]
  738.     '-----------------------------------------------------------------------------------------------------------
  739.     Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
  740.         'Skal hoppe til første post og vise opplysningene i tekstfeltene
  741.         'Setter posisjonen til 1 siden vi nå skal til første post
  742.  
  743.         'Må håndtere at filen kan være tom. Hvis tom, og denne knappen trykkes på, må ingenting gjøres.
  744.         If Antall > 0 Then
  745.  
  746.             Posisjon = 1
  747.  
  748.             ' Henter studenten fra registeret med utgangspunkt i
  749.             ' hvor posisjonspekeren er rettet mot
  750.             FileGet(FilNummer, minStudent, Posisjon)
  751.  
  752.             'Overfører opplysningen om studenten til tekstboksen på skjermen
  753.             'MERK:  Innebærer å kalle den egendefinerte
  754.             '       prosedyren visInformasjonITekstbokser
  755.             visInformasjonITekstbokser(minStudent)
  756.  
  757.             'Oppgir hvilken post som vises nå
  758.             txtViserPostNr.Text = Posisjon
  759.         End If
  760.     End Sub
  761.  
  762.  
  763.  
  764.  
  765.     '-----------------------------------------------------------------------------------------------------------
  766.     ' Knapp:    Form_Load (altså ingen knapp, men det som skjer når programmet starter)
  767.     ' Strategi: Det er viktig at brukeren trykker på knappen "Åpne fil" før noe annet klikkes på.
  768.     '           Det er fort gjort å glemme dette. Derfor vises en beskjed hvor dette påpekes ettertrykkelig.
  769.     '           Noe som er enda smartere, er å legge koden fra "Åpne fil" inn i Form_Load. Da slipper brukeren å
  770.     '           tenke på at filen i det hele tatt må åpnes.
  771.     '-----------------------------------------------------------------------------------------------------------
  772.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  773.         MsgBox("Husk å åpne filen først" & vbLf & "Du må klikke på knappen ""Åpne fil"" før du gjør noe annet")
  774.     End Sub
  775. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement