Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Vuokrausohjelma

Sivun loppuun

jomppa [15.10.2007 22:16:42]

#

Onko vb:lla mahdollista tehdä jonkinlainen pieni videoitten varausohjelma, mis käy ilmi leffat,lainaaja ja niistä et onko kyseinen leffa lainas. Ja tähän vois lisätä noita kyseisiä tietoja. Olen vasta-alkaja näis asiois.

Antti Laaksonen [15.10.2007 22:26:54]

#

On mahdollista eikä välttämättä kovin vaikeaa. Yksinkertaisin toteutus on ohjelma, joka tallentaa vuokraustiedot tiedostoon.

jomppa [15.10.2007 22:30:23]

#

Mitenkäs sellasen sais helposti tehtyy (koodinpätkää?).

Antti Laaksonen [15.10.2007 22:32:45]

#

Mitä VB-versiota käytät?

Ihan parin rivin koodi ei ole kyseessä, mutta ehkä voin jonkin neuvon antaa.

jomppa [15.10.2007 22:33:20]

#

Nyt tul kyl väärään paikkaan.Piti sanoo et visual studio 2003. Ihan pihalle laitoin itteni.

Grez [15.10.2007 23:07:59]

#

Antti Laaksonen kirjoitti:

On mahdollista eikä välttämättä kovin vaikeaa. Yksinkertaisin toteutus on ohjelma, joka tallentaa vuokraustiedot tiedostoon.

Sanoisin vieläpä, että kaikkein yksinkertaisimmassa toteutuksessa se tiedosto on acceess-tietokanta, jota käpistellään VB:n datatyökaluilla. Tai siis ainakin jos mittarina on tarvittavan koodimäärän vähäisyys suhteessa ohjelman hyödyllisyyteen.

Antti Laaksonen [15.10.2007 23:11:34]

#

Tuossapa on esimerkki, jonka tein iltapuhteeksi. Vasemmassa listassa ovat elokuvat ja oikeassa lainaajat. Elokuvat-taulukossa kenttä laina on -1, jos elokuvaa ei ole lainattu, ja muuten se osoittaa Lainaajat-taulukkoon. Ohjelman tiedot tallennetaan tiedostoihin elokuvat.txt ja lainaajat.txt.

Public Class Form1
    Inherits System.Windows.Forms.Form

    Structure Elokuva
        Dim nimi As String
        Dim laina As Integer
    End Structure

    Structure Lainaaja
        Dim nimi As String
    End Structure

    Dim Elokuvat(1000) As Elokuva
    Dim Lainaajat(1000) As Lainaaja
    Dim ElokuvaMaara = 0
    Dim LainaajaMaara = 0
#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 ListBox1 As System.Windows.Forms.ListBox
    Friend WithEvents ListBox2 As System.Windows.Forms.ListBox
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    Friend WithEvents Button4 As System.Windows.Forms.Button
    Friend WithEvents Button5 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.ListBox1 = New System.Windows.Forms.ListBox
        Me.ListBox2 = New System.Windows.Forms.ListBox
        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.TextBox2 = New System.Windows.Forms.TextBox
        Me.Button1 = New System.Windows.Forms.Button
        Me.Button2 = New System.Windows.Forms.Button
        Me.Button3 = New System.Windows.Forms.Button
        Me.Button4 = New System.Windows.Forms.Button
        Me.Button5 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'ListBox1
        '
        Me.ListBox1.Location = New System.Drawing.Point(16, 24)
        Me.ListBox1.Name = "ListBox1"
        Me.ListBox1.Size = New System.Drawing.Size(120, 95)
        Me.ListBox1.TabIndex = 0
        '
        'ListBox2
        '
        Me.ListBox2.Location = New System.Drawing.Point(176, 24)
        Me.ListBox2.Name = "ListBox2"
        Me.ListBox2.Size = New System.Drawing.Size(120, 95)
        Me.ListBox2.TabIndex = 1
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(16, 136)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(120, 20)
        Me.TextBox1.TabIndex = 2
        Me.TextBox1.Text = ""
        '
        'TextBox2
        '
        Me.TextBox2.Location = New System.Drawing.Point(176, 136)
        Me.TextBox2.Name = "TextBox2"
        Me.TextBox2.Size = New System.Drawing.Size(120, 20)
        Me.TextBox2.TabIndex = 3
        Me.TextBox2.Text = ""
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(16, 176)
        Me.Button1.Name = "Button1"
        Me.Button1.TabIndex = 4
        Me.Button1.Text = "Lisää"
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(176, 176)
        Me.Button2.Name = "Button2"
        Me.Button2.TabIndex = 5
        Me.Button2.Text = "Lisää"
        '
        'Button3
        '
        Me.Button3.Location = New System.Drawing.Point(16, 216)
        Me.Button3.Name = "Button3"
        Me.Button3.TabIndex = 6
        Me.Button3.Text = "Lainaa"
        '
        'Button4
        '
        Me.Button4.Location = New System.Drawing.Point(336, 176)
        Me.Button4.Name = "Button4"
        Me.Button4.TabIndex = 7
        Me.Button4.Text = "Tallenna"
        '
        'Button5
        '
        Me.Button5.Location = New System.Drawing.Point(336, 216)
        Me.Button5.Name = "Button5"
        Me.Button5.TabIndex = 8
        Me.Button5.Text = "Raportti"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(432, 293)
        Me.Controls.Add(Me.Button5)
        Me.Controls.Add(Me.Button4)
        Me.Controls.Add(Me.Button3)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.Button1)
        Me.Controls.Add(Me.TextBox2)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.ListBox2)
        Me.Controls.Add(Me.ListBox1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim nimi As String, laina As Integer
        Dim i As Integer
        ' ladataan elokuvat
        If IO.File.Exists("elokuvat.txt") Then
            FileSystem.FileOpen(1, "elokuvat.txt", OpenMode.Input)
            While Not FileSystem.EOF(1)
                nimi = FileSystem.LineInput(1)
                laina = FileSystem.LineInput(1)
                Elokuvat(ElokuvaMaara).nimi = nimi
                Elokuvat(ElokuvaMaara).laina = laina
                ElokuvaMaara += 1
            End While
            FileSystem.FileClose(1)
        End If
        ' ladataan lainaajat
        If IO.File.Exists("lainaajat.txt") Then
            FileSystem.FileOpen(1, "lainaajat.txt", OpenMode.Input)
            While Not FileSystem.EOF(1)
                nimi = FileSystem.LineInput(1)
                Lainaajat(LainaajaMaara).nimi = nimi
                LainaajaMaara += 1
            End While
            FileSystem.FileClose(1)
        End If
        ' näytetään elokuvat
        For i = 0 To ElokuvaMaara - 1
            ListBox1.Items.Add(Elokuvat(i).nimi)
        Next
        ' näytetään lainaajat
        For i = 0 To LainaajaMaara - 1
            ListBox2.Items.Add(Lainaajat(i).nimi)
        Next
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim i As Integer
        ' tallennetaan elokuvat
        FileSystem.FileOpen(1, "elokuvat.txt", OpenMode.Output)
        For i = 0 To ElokuvaMaara - 1
            FileSystem.PrintLine(1, Elokuvat(i).nimi)
            FileSystem.PrintLine(1, Elokuvat(i).laina)
        Next
        FileSystem.FileClose(1)
        ' tallennetaan lainaajat
        FileSystem.FileOpen(1, "lainaajat.txt", OpenMode.Output)
        For i = 0 To LainaajaMaara - 1
            FileSystem.PrintLine(1, Lainaajat(i).nimi)
        Next
        FileSystem.FileClose(1)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' elokuvan lisäys
        Elokuvat(ElokuvaMaara).nimi = TextBox1.Text
        Elokuvat(ElokuvaMaara).laina = -1
        ElokuvaMaara += 1
        ListBox1.Items.Add(TextBox1.Text)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' lainaajan lisäys
        Lainaajat(LainaajaMaara).nimi = TextBox2.Text
        LainaajaMaara += 1
        ListBox2.Items.Add(TextBox2.Text)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If ListBox1.SelectedIndex = -1 Or ListBox2.SelectedIndex = -1 Then
            Exit Sub
        End If
        If Elokuvat(ListBox1.SelectedIndex).laina = -1 Then
            ' elokuvan lainaus
            Elokuvat(ListBox1.SelectedIndex).laina = ListBox2.SelectedIndex
            Button3.Text = "Palauta"
        ElseIf Elokuvat(ListBox1.SelectedIndex).laina = ListBox2.SelectedIndex Then
            ' elokuvan palautus
            Elokuvat(ListBox1.SelectedIndex).laina = -1
            Button3.Text = "Lainaa"
        End If
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        ' lainausnapin päivitys
        If ListBox1.SelectedIndex = -1 Or ListBox2.SelectedIndex = -1 Then
            Exit Sub
        End If
        Button3.Visible = True
        If Elokuvat(ListBox1.SelectedIndex).laina = -1 Then
            Button3.Text = "Lainaa"
        ElseIf Elokuvat(ListBox1.SelectedIndex).laina = ListBox2.SelectedIndex Then
            Button3.Text = "Palauta"
        Else
            Button3.Visible = False
        End If
    End Sub

    Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
        ' lainausnapin päivitys
        If ListBox1.SelectedIndex = -1 Or ListBox2.SelectedIndex = -1 Then
            Exit Sub
        End If
        Button3.Visible = True
        If Elokuvat(ListBox1.SelectedIndex).laina = -1 Then
            Button3.Text = "Lainaa"
        ElseIf Elokuvat(ListBox1.SelectedIndex).laina = ListBox2.SelectedIndex Then
            Button3.Text = "Palauta"
        Else
            Button3.Visible = False
        End If
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        ' ilmoittaa lainatut elokuvat
        Dim i As Integer
        For i = 0 To ElokuvaMaara - 1
            If Elokuvat(i).laina <> -1 Then
                MsgBox("Elokuvan " & Elokuvat(i).nimi & " on lainannut " & Lainaajat(Elokuvat(i).laina).nimi)
            End If
        Next
    End Sub
End Class

jomppa [15.10.2007 23:20:22]

#

Kiitti ku autoitte. Vielä on mulle epäselvää et mihin kyseiset elokuvat.txt ja lainaajat.txt tiedostot laitetaan ja minkälainen projekti on kyseessä kun on visual c++ yms. en ole kauheesti vielä tutkinut kaikkia vaihtoehtoisia ympäristöjä.

Antti Laaksonen [15.10.2007 23:25:06]

#

Ohjelman tiedostot tallennetaan sen bin-hakemistoon, jossa myös käännetyn ohjelman (EXE-tiedosto) pitäisi olla. Tämä on VB.NET-ohjelma, eli valitse ikkunasta "New Project" kohta "Visual Basic Projects" ja sitten "Windows Application". Tämän jälkeen voit korvata tällä koodilla kaiken valmiina olleen koodin.

jomppa [15.10.2007 23:45:56]

#

Kiitos. Nyt tulee varmaan tyhmä kysymys. Mutta miten saisin luettelot aakkosjärjestykseen lajiteltua ja millä viittaan noihin txt syöttölaatikoihin jos haluan ne tyhjiksi aina kun on lisänny nimen. ja miten saisi poistettuu laatikoista nimiä.

Tästä oli tosi paljon apua.

Lumpio [15.10.2007 23:53:26]

#

Ei siis hyvä ihme tän kanssa taas. Perus pllk.

T.M. [15.10.2007 23:59:35]

#

WTF? Eihän täällä saanut antaa valmiita ohjelmia, vaan apua sen tekemiseen o_O

jomppa [16.10.2007 00:02:24]

#

Tästä on hyvä lähtee alottelevan opiskelemaan kyseistä alaa. Ymmärtää paljon paremmin ku jossain hiton oppitunneil.

Tare69 [16.10.2007 09:26:14]

#

Vuosia sitten tein itse tarkoitukseen sopivan ohjelman:

http://personal.inet.fi/koti/markku.tauriainen/m-cdmemo.htm

- Tare69

jomppa [16.10.2007 17:23:36]

#

Miten sais ko. ohjelmassa raportti painikkeen tulostamaan kaikki lainassa olevat samalla kertaa kun se nyt ilmoittaa yhden leffan kerrallaan?

Tare69 [18.10.2007 11:44:00]

#

Mihin sinä haluat ne tulostettavan?

Lisää uusi List3 ja :

dim txttmp as string

List3.Clear

For i = 0 To ElokuvaMaara - 1
 If Elokuvat(i).laina <> -1 Then
  txttmp=txttmp & "Elokuvan " & Elokuvat(i).nimi & " on lainannut " & Lainaajat(Elokuvat(i).laina).nimi) & CHR$(13)
  List3.Additem "Elokuvan " & Elokuvat(i).nimi & " on lainannut " & Lainaajat(Elokuvat(i).laina).nimi)
 End If
Next

MsgBox "Lainatut elokuvat : " & chr$(13) & txttmp

ja sinulla on siinä nyt lista niistä tai sitten myöskin näkyvillä MsgBoxissa sama... Siitä vain virität minne haluat ja miten haluat...

(Mod. Edit. Kooditagit.)

jomppa [18.10.2007 15:39:26]

#

Mie haluaisin laittaa ton ko. koodin siihen raportti nappulan alle, että tulis sellanen msgbox joka ilmottaa kaikki lainatut leffat,mut en saa toimimaan.

Toinen juttu on, että tein 2 poista nappia jolla saa nimen pois molemmista listasta, mut ne eivät poistu tietokannasta vaan kun avaa ohjelman uuelleen niin se poistettu item on tullut takaisin. Mul on tällanen vaan siin napis
ListBox1.Items.Remove(ListBox1.SelectedItem), et miten saisin sen poistamaan myös sieltä lainaaja.txt failista sen eli miten linkitän sen sinne tms.

Tare69 [19.10.2007 14:09:00]

#

Sinulla pitää poistaa kyseinen laina myös sieltä lainaus listalta muuttujasta ja tallentaa lista uudestaan sitten siihen lainaaja.txt tiedostoon alusta asti. Listan teet tuohon ListBox1 vaikka muodossa "00001 xxxxxx sssxxx xxxxxx ssss" eli laitat siihen sen vilmin numeron ekaksi minkä avulla sitten voit myös poistaa sen siitä muuttujasta... Liian hankalaa taitaa olla sinulle... :-)

Ja kyllä tuon pitäisi se msgbox näyttää missä ne lainatut elokuvat on... Ota se ')' pois .nimi perästä se näyttää olevan liikaa...

jomppa [19.10.2007 14:51:59]

#

Joo, on liian hankalaa kun en tajua mitä ajat takaa: ListBox1 vaikka muodossa "00001 xxxxxx sssxxx xxxxxx ssss" eli laitat siihen sen vilmin numeron ekaksi.
tiiän et en tajuu mut
"00001 xxxxxx sssxxx xxxxxx ssss"?
Mikä filmin numero?
Ota se ')' pois .nimi perästä? Mistä kohtaa?
valitti siitä msgboxista & chr$(13) kohtaa et ei tota dollarii lue tms.

jomppa [19.10.2007 17:05:48]

#

Joo, on liian hankalaa kun en tajua mitä ajat takaa: ListBox1 vaikka muodossa "00001 xxxxxx sssxxx xxxxxx ssss" eli laitat siihen sen vilmin numeron ekaksi.
tiiän et en tajuu mut
"00001 xxxxxx sssxxx xxxxxx ssss"?
Mikä filmin numero?
additemistä valittaa kans.
valitti siitä msgboxista & chr$(13) kohtaa et ei tota dollarii lue tms.

Tare69 [22.10.2007 09:35:37]

#

No voi hyvä sylvi...

Onko mitä kokemusta ohjelmoinnista, minkään valtakunnan tietoa muuttujista ja taulukoiden teosta taikka nyt edes rivien numeroinnista? Olisi mukavaa tietää, että ei tarttisi koko ohjelmaa kirjoittaa sinulle :-) Itsellä ei satu ny olemaan .net versiota käsillä VB:stä mutta koitetaan ny pikkaisen auttaa jotta pääsisit eteen päin.

Eli lisäät sinne:
Elokuvien listaan lisäät numerot aina ennen sitä elokuvan tietoa alkaen vaikka ykkösestä minkä avulla voi sitten myös kohdentaa sen vuokrauksen oikeaan elokuvaan helpommin.

Structure Elokuva
  Dim numero as Integer
  Dim nimi As String
  Dim laina As Integer
End Structure

Structure Lainaaja
  Dim numero as Integer        'Lainaajan numero
  Dim nimi As String           'Lainaajan nimi
  Dim ElokuvaNumero as Integer 'Lainattu elokuva minkä perusteella tiedetään mikä elokuva
End Structure
While Not FileSystem.EOF(1)
  Elokuvat(ElokuvaMaara).numero = FileSystem.LineInput(1)
  Elokuvat(ElokuvaMaara).nimi= FileSystem.LineInput(1)
  Elokuvat(ElokuvaMaara).laina = FileSystem.LineInput(1)
  ElokuvaMaara += 1
End While
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' elokuvan lisäys
  Elokuvat(ElokuvaMaara).numero = ElokuvaMaara
  Elokuvat(ElokuvaMaara).nimi = TextBox1.Text
  Elokuvat(ElokuvaMaara).laina = -1
  ListBox1.Items.Add(format(Elokuvat(ElokuvaMaara).numero,"0000") & " " &   TextBox1.Text)
 ElokuvaMaara += 1

End Sub
FileSystem.FileOpen(1, "elokuvat.txt", OpenMode.Output)
  For i = 0 To ElokuvaMaara - 1
    FileSystem.PrintLine(1, Elokuvat(i).numero)
    FileSystem.PrintLine(1, Elokuvat(i).nimi)
    FileSystem.PrintLine(1, Elokuvat(i).laina)
  Next
FileSystem.FileClose(1)

Ja niin edespäin. Eli aina kun elokuvan tietoja käsitellään niin tiedot voidaan kohdentaa sitten suoraan oikeaan kohteeseen, oli sitten lainaus tai poisto kyseessä. Tietty kun sieltä poistetaan elokuvia niin se myöskin vaikuttaa siihen ElokuvaMaara muuttujaan eli suurimman elokuvan numero pitää ottaa taltteen mitä taas lisätään siellä yhdellä kun lisätään tauluun... Puuh... Tuo alkuperäinen koodi tuolla on aika 'kökkö' siinä suhteessa eli siellä on paljon korjattavaa mutta tuskin Antti ajatteli kirjoittavansa sinulle koko ohjelmaa vaan jättävänsä edes jotain itsellesikin tehtäväksi.

Noh ota dollari pois siitä niin josko se auttaisi asiaa, ei se ole kuin rivin vaihto return minkä VB koodia en nyt satu muistamaan näin äkkiä kun oon tottunut kirjoittelemaan nuo yleensä ascii koodina kun olen tarvinnut.

JoreSoft [31.10.2007 23:47:43]

#

Acces tietokanta ja SQL haku on ollu vastaus tuohon jo yli 20v ;)
Eli luodaan 2 tietokantaa, jota käsitellään. Ohjelmointiesimerkkejä on vaikka muille jakaa... ja niin onkin ;)google setä tietää..
.txt tiedostot on alkeellisia, ja kaikki tieto pitää lukea muistiin ja uudelleen kirjoittaa jos yksikin tieto muuttuu


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta