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.
On mahdollista eikä välttämättä kovin vaikeaa. Yksinkertaisin toteutus on ohjelma, joka tallentaa vuokraustiedot tiedostoon.
Mitenkäs sellasen sais helposti tehtyy (koodinpätkää?).
Mitä VB-versiota käytät?
Ihan parin rivin koodi ei ole kyseessä, mutta ehkä voin jonkin neuvon antaa.
Nyt tul kyl väärään paikkaan.Piti sanoo et visual studio 2003. Ihan pihalle laitoin itteni.
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.
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
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ä.
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.
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.
Ei siis hyvä ihme tän kanssa taas. Perus pllk.
WTF? Eihän täällä saanut antaa valmiita ohjelmia, vaan apua sen tekemiseen o_O
Tästä on hyvä lähtee alottelevan opiskelemaan kyseistä alaa. Ymmärtää paljon paremmin ku jossain hiton oppitunneil.
Vuosia sitten tein itse tarkoitukseen sopivan ohjelman:
http://personal.inet.fi/koti/markku.tauriainen/m-cdmemo.htm
- Tare69
Miten sais ko. ohjelmassa raportti painikkeen tulostamaan kaikki lainassa olevat samalla kertaa kun se nyt ilmoittaa yhden leffan kerrallaan?
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.)
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.
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...
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.
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.
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.