C# Programm ändert Werte bei 2. durchlauf nicht mehr

thelch

Cadet 3rd Year
Registriert
Nov. 2009
Beiträge
52
Hallo bei meinem Projekt tritt folgendes auf:

Als erstes Gibt man einen Barcode für einen User ein, dann den für ein Getränk. Der Wert des Getränks wird vom Guthaben abgezogen.

Trinkt der User aber direkt hintereinander 2 oder mehr Getränke, wird zwar angezeigt, dass er 2 oder mehr Getränke getrunken hat aber es wird nur das erste vom Guthaben abgezogen.
Code:
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Getränke : Form
    {
        public const string FILENAME_LOG = @"e:\\44\\logfile.txt";
        public const string FILENAME_USER = @"e:\\44\user.txt";
        public const string FILENAME_WERTE = @"e:\\44\werte.txt";
        public const string FILENAME_TEMP = @"e:\\44\temp.txt";

        public string global_user = "";
        public string global_barcode = "";
        public string global_guthaben = "";
        public string global_wert = "";
        public int global_line = 0;

        public Getränke()
        {
            InitializeComponent();
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void eingabe_box_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                string searchfor = Convert.ToString(eingabe_box.Text);

                string line;
                name.Text = searchfor;

                if (global_line < 1)
                {
                    global_barcode = "";
                    global_guthaben = "";
                    global_user = "";
                    global_wert = "";
                    warnung.Visible = false;

                }

                using (StreamReader tr = new StreamReader(FILENAME_USER))
                using (StreamReader bu = new StreamReader(FILENAME_WERTE))


                    // Wenn kein User eingetragen, wird Barcode auf Zusammengehörigkeit mit einem User geprüft
                    if (global_user == "")
                    {

                        {
                            while ((line = tr.ReadLine()) != null)
                            {
                                global_line++;
                                string[] splittedString = line.Split('#');

                                if (splittedString[0] == searchfor)
                                {
                                    name.Text = splittedString[1];
                                    guthaben_form1.Text = splittedString[2];
                                    global_barcode = splittedString[0];
                                    global_user = splittedString[1];
                                    global_guthaben = splittedString[2];
                                    global_wert = splittedString[2];
                                    using (StreamWriter file = new StreamWriter(FILENAME_LOG, true))
                                        file.WriteLine("{0} hat noch {1}€ Guthaben!", global_user, global_guthaben);
                                    // using (StreamWriter file = new StreamWriter(FILENAME_TEMP))
                                    //    file.WriteLine(line);
                                    eingabe_box.Text = "";
                                    double guthaben = Convert.ToDouble(global_guthaben);
                                    // GUthaben kleiner 5€ dann warnung einblenden
                                    if (guthaben < 5)
                                    {
                                        warnung.Visible = true;
                                    }
                                    else
                                    {
                                        warnung.Visible = false;
                                    }
                                }
                            }
                        }
                    }
                    // Dem User wird ein Getränk zugewiesen
                    else if (global_user != "")
                    {

                        while ((line = bu.ReadLine()) != null)
                        {
                            string[] splittedWerte = line.Split('#');
                            global_line = 0; // Wenn die Variable am Schleifenende == 0 ist wird der Personen-Barcode gecheckt

                            // Überprüfen ob der Getränkecode funktioniert.
                            if (splittedWerte[0] == searchfor)
                            {

                                double guthaben = 0;
                                double wert = 0;
                                guthaben = Convert.ToDouble(global_guthaben);
                                wert = Convert.ToDouble(splittedWerte[2]);
                                guthaben = guthaben + wert;
                                global_guthaben = Convert.ToString(guthaben);
                                // Festlegen ob Aufladung oder Abbuchung
                                using (StreamWriter file = new StreamWriter(FILENAME_LOG, true))
                                    if (wert < 0)
                                    {
                                        file.WriteLine("{0} hat {1} getrunken und noch {2}€ Guthaben", global_user, splittedWerte[1], global_guthaben);
                                    }
                                    else if (wert > 0)
                                    {
                                        file.WriteLine("{0} hat sein Guthaben um {1}€ aufgeladen", global_user, wert);
                                    }
                                

                                // Änderungen in der Textdatei speichern
                                StreamReader einfuegen = File.OpenText(FILENAME_USER);
                                string inhalt = einfuegen.ReadToEnd();
                                einfuegen.Close();
                                tr.Close();


                                string alt = global_barcode + "#" + global_user + "#" + global_wert;
                                string neu = global_barcode + "#" + global_user + "#" + global_guthaben;


                                inhalt = inhalt.Replace(alt, neu);
                                StreamWriter speichern = File.CreateText(FILENAME_USER);
                                speichern.Write(inhalt);
                                speichern.Close();
                                // Ende des Speicherns

                                eingabe_box.Text = ""; //Textbox wird geleert
                                name.Text = global_user; // Name anpassen   
                                guthaben_form1.Text = global_guthaben; // Neues Guthaben ausgeben
                                global_line = 1;
                                break;
                            }
                        }
                        // Vermeidet das 2. benötigte Enter fals es kein getränkbarcode ist
                        if (global_line < 1)
                        {
                            global_barcode = "";
                            global_guthaben = "";
                            global_user = "";
                            global_wert = "";
                            //SendKeys.Send("{ENTER}");

                            while ((line = tr.ReadLine()) != null)
                            {
                                global_line++;
                                string[] splittedString = line.Split('#');

                                if (splittedString[0] == searchfor)
                                {
                                    name.Text = splittedString[1];
                                    guthaben_form1.Text = splittedString[2];
                                    global_barcode = splittedString[0];
                                    global_user = splittedString[1];
                                    global_guthaben = splittedString[2];
                                    global_wert = splittedString[2];
                                    using (StreamWriter file = new StreamWriter(FILENAME_LOG, true))
                                    file.WriteLine("{0} hat noch {1}€ Guthaben!", global_user, global_guthaben);
                                    eingabe_box.Text = "";
                                    double guthaben = Convert.ToDouble(global_guthaben);
                                    if (guthaben < 5)
                                    {
                                        warnung.Visible = true;
                                    }
                                    else
                                    {
                                        warnung.Visible = false;
                                    }
                                }
                            }
                        }
                    }
            }
            if (!File.Exists(FILENAME_LOG))
            {
                Console.WriteLine("{0} existiert nicht!", FILENAME_LOG);
            }
            using (StreamReader sr = File.OpenText(FILENAME_LOG))
            {
                String ausgabe;
                while ((ausgabe = sr.ReadLine()) != null)
                {
                    ausgabeFenster.Text = sr.ReadToEnd();
                    ausgabeFenster.SelectionStart = ausgabeFenster.Text.Length;
                    ausgabeFenster.ScrollToCaret();

                }

            }
        }

        private void hinzufügenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            anlage_nutzer frm = new anlage_nutzer();
            frm.Show();
        }

        private void hinzufügenToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            getraenke_anlegen frm = new getraenke_anlegen();
            frm.Show();
        }

   


    }
}
c# fehler.jpg

Hier einmal das Komplette Projekt mit allen benötigten Dateien:
Anhang anzeigen System.rar

Bin für jede Hilfe dankbar, da er ja im Logfile alles richtig schreibt aber es dann doch nicht macht!

Danke schon mal.
Grüße Thelch
 
Nur für den Fall, dass das keine Hausaufgabe ist: Bist du sicher, dass du den Quellcode herumzeigen darfst?
Wenn du das für deinen Arbeitgeber machst, kann das zweifelhaft sein und ich würde vorher unbedingt ein Ok holen.
 
Hallo, ja ich bin mir sicher, da ich diesen Komplett selber geschrieben habe, er weder für die Schule noch für ein Unternehmen geschrieben ist.
Wir haben in der Schule die Grundlagen in c# gelernt und nun wollte ich diese für mein Projekt verwenden, welches ich vor längerer Zeit einmal Versucht habe in PHP zu realisieren. Sogar mit Hilfe dieses Forums ;-)

Zum Schreiben des Programms habe ich übrigens Microsoft Visual c# 2010 Express benutzt.
 
Zeile 136, Variable global_wert

Rest musst du selbst herausfinden.

Hättest du durch das Debuggen auch selbst herausfinden können ;)
 
Hallo Ocram1992 was ist den daran Falsch?

In der Variablen global_wert steht das Guthaben, mit dem der User in der Txt Datei steht und dient nur dazu die Richtige Zeile zu finden und zu ersetzen.

Das neue Guthaben welches gespeichert werden soll ist global_guthaben
 
Ja, beim ersten mal ersetzen ist der Wert z.B. "19,5", danach wird in der Datei dann z.B. "15,5" gespeichert. Soll nun wieder was gespeichert werden, so suchst du wieder nach "19,5" statt "15,5" und es wird nichts ersetzt.
 
ja super das war echt der Fehler ein simpeles global_wert = global_guthaben; hat mein Problem gelöst


Ich danke dir :-)
 
Ich hoffe, dass das kein Projekt für den produktiveinsatz ist sondern für was privates quick und dirty gemacht, weil codestyle ist schaurig.

PS: ok , post über lesen. Sorry.
 
Ja es soll erst einmal einfach nur Laufen, da uns der jetzige Rechner mit dem Programm gestorben ist und es schnellst möglich Ersatz für den Rechner geben soll. In dem Zug haben wir uns dann überlegt direkt auch eine Neue Software die mehr unseren Anforderungen entspricht einzusetzen.
 
Hm ich kann nur sagen,

Bastle aus den eingaben eine Klasse und serialisiere oder De-serialisiere diese. Da tust du es einfacher. Noch schöner wäre wenn du eine Datenbank dahinter hast.
SQLite oder SqlCompact würde total ausreichen.

Hm sorry aber ich wollte nicht den ganze Code durchlesen....
 
Zurück
Oben