Mittwoch, 10. September 2008

Ein Adressbuch mit "pickle"

Nach meinem erstem Projekt, welches mich in der Lernkurve doch sehr vorangebracht habe ich nun ein weiteres aus dem Projektideenfundus des Pythonwikis angestrebt und mich daran versucht.

Zunächst möchte ich ein Adressbuch auf Dateiebene, also ohne eine SQL-Datenbank realisieren bis ich so weit bin, dass ich auch das ohne Probleme hinbekommen würde. Für die Speicherung benutze ich "pickle", ein Modul, welches Daten sequentiell in eine normale Textdatei schreibt, damit es möglich ist nach dem Auslesen dieser Objekte, Variablen etc. in der gleichen Form wieder zu erhalten, ohne diese noch einmal neu deklarieren, oder füllen zu müssen.

Der erste Entwurf ist ein Versuch OOP zu schreiben. Ich hoffe es ist mir "banal" gelungen :) Die überarbeitete Version wird natürlich folgen.
  1. import pickle  
  2.   
  3. from sys import exit  
  4.   
  5. class Person(object):  
  6.     def __init__(self):  
  7.         pass  
  8.           
  9. def person_new():  
  10.     person = Person()  
  11.     person.vorname = raw_input('Vorname: ')  
  12.     person.name = raw_input('Nachname: ')  
  13.     person.geburtsort = raw_input('Geburtsort: ')  
  14.     person.strasse = raw_input('Strasse: ')  
  15.     person.hausnummer = raw_input('Hausnummer: ')  
  16.     person.plz = raw_input('PLZ: ')  
  17.     person.stadt = raw_input('Stadt: ')  
  18.     return person  
  19.   
  20. def person_add():  
  21.     print personen  
  22.   
  23. def person_show():  
  24.     x = 0  
  25.     for i in personen:  
  26.         x+=1  
  27.         print str(x) + ') ' + i  
  28.   
  29. def dump_dict():  
  30.     file = open('personen/daten.pk1''wb')  
  31.     pickle.dump(personen, file)  
  32.     file.close()  
  33.   
  34. def load_dict():  
  35.     file = open('personen/daten.pk1''rb')  
  36.     personen = pickle.load(file)  
  37.     file.close()  
  38.     return personen  
  39.           
  40. def menue_haupt():  
  41.     print '1) Personen listen'  
  42.     print '2) Person hinzufuegen'  
  43.     print '3) Person loeschen'  
  44.     print '4) Programm beenden'  
  45.     i = int(raw_input('\nWaehlen Sie eine Option: '));print ''  
  46.     return i  
  47.   
  48. def menue_list():  
  49.     i = raw_input('\nWelche Person?\n')  
  50.     person = personen[i]  
  51.     print 'Vorname: ' + person.vorname  
  52.     print 'Nachname: ' + person.name  
  53.     print 'Gebursort: ' + person.geburtsort  
  54.     print 'Strasse: ' + person.strasse  
  55.     print 'Hausnummer: ' + str(person.hausnummer)  
  56.     print 'PLZ: ' + str(person.plz)  
  57.     print 'Stadt: ' + person.stadt  
  58.   
  59. def menue_delete():  
  60.     i = raw_input('\nWelche Person moechten Sie loeschen?\n')  
  61.     del personen[i]  
  62.     dump_dict()     
  63.   
  64. ## Wieso kann `break` nicht ausgelagert werden?   
  65.   
  66. def main():  
  67.     while True:  
  68.         i = menue_haupt()  
  69.         if i == 1:             
  70.             while True:   
  71.                 person_show()  
  72.                 menue_list()  
  73.                 i = int(raw_input('\n1) Menue\n2) Nochmal\n'))  
  74.                 if i == 1:  
  75.                     break  
  76.         elif i == 2:  
  77.             person_add()  
  78.             i = int(raw_input('\n1) Menue\n2) Nochmal\n'))  
  79.             if i == 1:  
  80.                 break  
  81.         elif i == 3:  
  82.             while True:  
  83.                 person_show()  
  84.                 menue_delete()  
  85.                 i = int(raw_input('\n1) Menue\n2) Nochmal\n'))  
  86.                 if i == 1:  
  87.                     break  
  88.         elif i == 4:  
  89.             exit()  
  90.      
  91. personen = load_dict()           
  92. main()  

Keine Kommentare: