BandManager

  • Ich hab für einen Freund ein Prog geschrieben mit denen er seine Alben archivieren kann.
    Da vielleicht einige andere sowas auch gerne hätten wollte ich es euch nicht vorenthalten^^
    Es sind maximal 1000 Bands, mit je maximal 500 Alben, zu verwalten.

    Quelltext:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <GuiList.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.2.8.1
    Author: Nozdrum

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    $gui_main = GUICreate("BManager",600,370)
    $gui_main_menuD = GUICtrlCreateMenu("Datei")
    $gui_main_menuD_new = GUICtrlCreateMenuItem("Neue Liste anlegen",$gui_main_menuD)
    $gui_main_menuD_save = GUICtrlCreateMenuItem("Liste Speichern",$gui_main_menuD)
    $gui_main_menuD_save2 = GUICtrlCreateMenuItem("Liste Speichern unter",$gui_main_menuD)
    $gui_main_menuD_laden = GUICtrlCreateMenuItem("Liste Laden",$gui_main_menuD)
    $gui_main_menuD_end = GUICtrlCreateMenuItem("Beenden",$gui_main_menuD)
    $gui_main_menuB = GUICtrlCreateMenu("Bearbeiten")
    $gui_main_menuB_b1 = GUICtrlCreateMenuItem("Band hinzufügen",$gui_main_menuB)
    $gui_main_menuB_b2 = GUICtrlCreateMenuItem("Album hinzufügen",$gui_main_menuB)
    $gui_main_menuB_b3 = GUICtrlCreateMenuItem("Band entfernen",$gui_main_menuB)
    $gui_main_menuB_b4 = GUICtrlCreateMenuItem("Album entfernen",$gui_main_menuB)
    $gui_main_list1 = GUICtrlCreateList("",166,20,210,330)
    $gui_main_list2 = GUICtrlCreateList("",382,20,210,330)
    $gui_main_label1 = GUICtrlCreateLabel("Bands",166,5,100,15)
    $gui_main_label2 = GUICtrlCreateLabel("Alben",382,5,100,15)
    $gui_main_b1 = GUICtrlCreateButton("Band hinzufügen",6,20,150,25)
    $gui_main_b2 = GUICtrlCreateButton("Album hinzufügen",6,55,150,25)
    $gui_main_b3 = GUICtrlCreateButton("Band entfernen",6,253,150,25)
    $gui_main_b4 = GUICtrlCreateButton("Album entfernen",6,283,150,25)
    $gui_main_b5 = GUICtrlCreateButton("Beenden",6,313,150,25)
    $gui_main_b6 = GUICtrlCreateButton("Liste speichern",6,90,150,25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Global $f[1000][500]
    Global $anz=0
    Global $changed=False
    Global $pfad=""

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $GUI_EVENT_CLOSE ) Or ( $msg = $gui_main_menuD_end ) Or ( $msg = $gui_main_b5)
    Local $w=7
    If $changed=True Then
    $w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
    EndIf
    If $w = 6 Then
    BData_save($f,$anz,$changed,$pfad)
    EndIf
    If ( $w = 7 ) Or ( $w = 6 ) Then
    Exit
    EndIf
    Case ( $msg = $gui_main_menuD_new )
    BData_new($anz,$changed)
    Case ( $msg = $gui_main_b1 ) Or ( $msg = $gui_main_menuB_b1 )
    Band_add($f,$anz,$changed)
    Case ( $msg = $gui_main_b2 ) Or ( $msg = $gui_main_menuB_b2 )
    Album_add($f,$anz,$changed)
    Case ( $msg = $gui_main_b3 ) Or ( $msg = $gui_main_menuB_b3 )
    Band_del($f,$anz,$changed)
    Case ( $msg = $gui_main_b4 ) Or ( $msg = $gui_main_menuB_b4 )
    Album_del($f,$changed)
    Case $msg = $gui_main_list1
    Albumchange($f,$anz)
    Case ( $msg = $gui_main_b6 ) Or ( $msg = $gui_main_menuD_save )
    BData_save($f,$anz,$changed,$pfad)
    Case $msg = $gui_main_menuD_save2
    BData_save2($f,$anz,$changed,$pfad)
    Case $msg = $gui_main_menuD_laden
    BData_load($f,$anz,$changed,$pfad)
    EndSelect
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func BandSearch($f,$anz,$name)
    For $i=0 To $anz
    If $f[$i][1]=$name Then Return $i
    Next
    Return -1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func AlbumSearch($f,$index,$name)
    For $i=1 To $f[$index][0]
    If $f[$index][$i+1]=$name Then Return $i
    Next
    Return -1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Array2DDelete(ByRef $f,$index, $anz,$anz2)
    For $i=$index to $anz
    For $j=0 To $anz2+1
    $f[$i][$j]=$f[$i+1][$j]
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _arraydel(ByRef $f,$index,$nummer)
    For $i=$nummer To $f[$index][0]
    $f[$index][$i+1]=$f[$index][$i+2]
    Next
    $f[$index][$f[$index][0]+1]=""
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Albumchange($f,$anz)
    $t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
    If IsArray($t1) Then
    $index = BandSearch($f,$anz,$t1[1])
    _GUICtrlListClear($gui_main_list2)
    For $i=1 to $f[$index][0]
    _GUICtrlListAddItem($gui_main_list2,$f[$index][$i+1])
    Next
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func BData_new(ByRef $anz, ByRef $changed)
    Local $w=7
    If $changed=True Then
    $w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
    EndIf
    If $w = 6 Then
    BData_save($f,$anz,$changed,$pfad)
    EndIf
    If ( $w = 7 ) Or ( $w = 6 ) Then
    _GUICtrlListClear($gui_main_list1)
    _GUICtrlListClear($gui_main_list2)
    $anz=0
    $changed=False
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Band_add(ByRef $f,ByRef $anz,ByRef $changed)
    $gui_sec = GUICreate("Neue Band",218,68)
    $gui_sec_input = GUICtrlCreateInput("Bandname",6,6,206,20)
    $gui_sec_b1 = GUICtrlCreateButton("Abbrechen",6,37,100,25)
    $gui_sec_b2 = GUICtrlCreateButton("Hinzufügen",112,37,100,25)
    GUISetState(@SW_SHOW)
    Send("{SHIFTDOWN}{END}{SHIFTUP}")
    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $gui_sec_b1 ) Or ( $msg=$GUI_EVENT_CLOSE)
    GUIDelete($gui_sec)
    ExitLoop
    Case ( $msg = $gui_sec_b2 ) And ( Not(StringIsSpace(GUICtrlRead($gui_sec_input))) ) And ( Not (GUICtrlRead($gui_sec_input)="") )
    If BandSearch($f,$anz,GUICtrlRead($gui_sec_input)) =-1 Then
    $anz +=1
    $f[$anz][0]="0"
    $f[$anz][1]=GUICtrlRead($gui_sec_input)
    _GUICtrlListAddItem($gui_main_list1,$f[$anz][1])
    GUIDelete($gui_sec)
    $changed=True
    ExitLoop
    Else
    MsgBox(0,"BManager","Band bereits vorhanden")
    EndIf
    EndSelect
    Sleep(10)
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Album_add(ByRef $f,$anz,ByRef $changed)
    $t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
    If IsArray($t1)=True Then
    $gui_thr = GUICreate("Neue Band",218,68)
    $gui_thr_input = GUICtrlCreateInput("Albumname",6,6,206,20)
    $gui_thr_b1 = GUICtrlCreateButton("Abbrechen",6,37,100,25)
    $gui_thr_b2 = GUICtrlCreateButton("Hinzufügen",112,37,100,25)
    GUISetState(@SW_SHOW)
    Send("{SHIFTDOWN}{END}{SHIFTUP}")
    $index = BandSearch($f,$anz,$t1[1])
    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $gui_thr_b1 ) Or ( $msg=$GUI_EVENT_CLOSE)
    GUIDelete($gui_thr)
    ExitLoop
    Case ( $msg = $gui_thr_b2 ) And ( Not(StringIsSpace(GUICtrlRead($gui_thr_input))) ) And ( Not (GUICtrlRead($gui_thr_input)="") )
    If AlbumSearch($f,$index,GUICtrlRead($gui_thr_input))=-1 Then
    $f[$index][0] +=1
    $f[$index][$f[$index][0]+1]=GUICtrlRead($gui_thr_input)
    _GUICtrlListAddItem($gui_main_list2,$f[$index][$f[$index][0]+1])
    GUIDelete($gui_thr)
    $changed=True
    ExitLoop
    Else
    MsgBox(0,"BManager","Album bereits vorhanden")
    EndIf
    EndSelect
    Sleep(10)
    WEnd
    Else
    MsgBox(0,"Fehler","Keine Band ausgewählt!")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Band_del(ByRef $f,ByRef $anz,ByRef $changed)
    $t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
    If IsArray($t1) Then
    Local $anz2=0
    For $i=1 To $anz
    If $f[$i][0]> $anz2 Then
    $anz2=$f[$i][0]
    EndIf
    Next
    $index = BandSearch($f,$anz,$t1[1])
    _Array2DDelete($f,$index,$anz,$anz2)
    $t1 = _GUICtrlListSelectedIndex($gui_main_list1)
    _GUICtrlListDeleteItem($gui_main_list1,$t1)
    _GUICtrlListClear($gui_main_list2)
    $anz -=1
    $changed=True
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Album_del(ByRef $f,ByRef $changed)
    $t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
    $t2 = _GUICtrlListGetSelItemsText($gui_main_list2)
    If IsArray($t1) And IsArray($t2) Then
    $index = BandSearch($f,$anz,$t1[1])
    $nummer = AlbumSearch($f,$index,$t2[1])
    $t1 = _GUICtrlListSelectedIndex($gui_main_list2)
    _GUICtrlListDeleteItem($gui_main_list2,$t1)
    _arraydel($f,$index,$nummer)
    $f[$index][0] -=1
    $changed=True
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func BData_save($f,$anz,ByRef $changed,ByRef $pfad)
    If $pfad="" Then
    $pfad = FileSaveDialog("Liste speichern unter",@ScriptDir & "\Bands","(*.txt)")
    EndIf
    If $pfad<>"" Then
    If Not(StringInStr($pfad,".txt")) Then
    $pfad=$pfad & ".txt"
    EndIf
    $phandle = FileOpen($pfad,2)
    Local $t1[500]
    For $i=1 To $anz
    For $j=0 To $f[$i][0]+1
    $t1[$j]=$f[$i][$j]
    If ( $j=0 ) And ( $t1[0]="" ) Then
    $t1[0]=0
    EndIf
    $t1[$j]=$t1[$j] & "|"
    FileWrite($pfad,$t1[$j])
    Next
    FileWrite($pfad,@CRLF)
    Next
    FileClose($phandle)
    $changed=False
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func BData_save2($f,$anz,ByRef $changed,ByRef $pfad)
    $pfad = FileSaveDialog("Liste speichern unter",@ScriptDir & "\Bands","(*.txt)")
    If $pfad<>"" Then
    BData_save($f,$anz,$changed,$pfad)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func BData_load(ByRef $f,ByRef $anz,ByRef $changed,$pfad)
    Local $w=7
    If $changed=True Then
    $w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
    EndIf
    If $w = 6 Then
    BData_save($f,$anz,$changed,$pfad)
    EndIf
    If ( $w = 7 ) Or ( $w = 6 ) Then
    $pfad = FileOpenDialog("Welche Liste wollen Sie laden",@ScriptDir & "\Bands","(*.txt)")
    If $pfad<>"" Then
    $phandle = FileOpen($pfad,1)
    Local $t1[500]
    $anz = _FileCountLines($pfad)
    For $i=1 to $anz
    $t1=StringSplit(FileReadLine($pfad,$i),"|")
    _ArrayDelete($t1,0)
    For $j=0 To $t1[0]+1
    $f[$i][$j]=$t1[$j]
    Next
    _GUICtrlListAddItem($gui_main_list1,$f[$i][1])
    Next
    FileClose($phandle)
    $changed=False
    EndIf
    EndIf

    EndFunc

    [/autoit]


    Auf Kommentare hatte ich keinen Bock^^
    edit: Grad noch 2 Bugs entfernt
    edit2: Oo noch einen schwerwiegenden Bug beim Löschen von Bands gefixt