Autor Beitrag
Waryzion
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 11.07.11 19:47 
Nabend an alle, ich wende mich an euch, da ich absolut nicht weiter komme.
Mein Auftrag von meiner Lehrerin ist ein ISBN Konverter mit Windows Forms zu machen.
Ich habe erst mal einen in der Console gemacht, wegen den ganzen Rechnungen bevor ich mich an das "große" Projekt ran mache.
EDIT: Bin jetzt so weit gekommen, aber er gibt mir bei beiden rechnungen den fehler aus:
Die Eingabezeichenfolge hat das falsche Format.

In der Konsole funzt es, aber bei den Forms nicht.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ISBN_Konverter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string isbn;
        string aus;
        private static String ConvertISBN10To13(String isbn)
        {
            Char[] isbn10;
            UInt16[] isbn13;
            StringBuilder sb;

            isbn10 = isbn.ToCharArray();
            isbn13 = new UInt16[13];
            isbn13[0] = 9;
            isbn13[1] = 7;
            isbn13[2] = 8;
            for (UInt16 i = 0, j = 3; i < 9; i++, j++)
            {
                isbn13[j] = UInt16.Parse(isbn10[i].ToString());
            }
            isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6]
                + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7]
                + isbn13[9] + isbn13[11]))) % 10)) % 10);
            sb = new StringBuilder();
            for (UInt16 i = 0; i < 13; i++)
            {
                sb.Append(isbn13[i].ToString());
            }
            return (sb.ToString());
        }

        private static String ConvertISBN13To10(String isbn)
        {
            Char[] isbn13;
            UInt16[] isbn10;
            StringBuilder sb;
            Int32 checksum;

            isbn13 = isbn.ToCharArray();
            isbn10 = new UInt16[10];
            for (UInt16 i = 3, j = 0; i < 12; i++, j++)
            {
                isbn10[j] = UInt16.Parse(isbn13[i].ToString());
            }
            checksum = 0;
            sb = new StringBuilder();
            for (UInt16 i = 0; i < 9; i++)
            {
                checksum += isbn10[i] * (i + 1);
                sb.Append(isbn10[i].ToString());
            }
            checksum %= 11;
            if (checksum == 10)
            {
                sb.Append("X");
            }
            else
            {
                sb.Append(checksum.ToString());
            }
            return (sb.ToString());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked==true)
            {

                isbn = Convert.ToString(textBox1);
                ConvertISBN10To13(isbn);
                isbn = aus;
            }
            else
            {
                isbn = Convert.ToString(textBox1);
                ConvertISBN13To10(isbn);
                isbn = aus;
            }
            textBox3.Text = aus;
        }
    }
}

PS:Bin noch recht am anfang des Programmierens mit C#, also bitte nicht böse sein wenn was nicht sofort einrastet im Stübchen xD


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 12.07.11 06:56 
Hallo,
was ist das denn für ein Konstrukt? Dabei knallt es wohl.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
if (checkBox1.Checked==true)
{
  isbn = Convert.ToString(textBox1);
  ConvertISBN10To13(isbn);
  isbn = aus;
}
Eine TextBox kann nicht in einen string konvertiert werden! Wozu auch?
Sie hat ja eine Eigenschaft ".Text". Und dann klappt das schon :wink:

Aber: eine FormatException kann trotzdem innerhalb Deiner beiden Methoden auftreten, da es keinerlei Prüfungen auf die korrekte Form der ISBN gibt. Also auf die Länge und (in Deinem Fall, dass dort nur Zahlen drin stehen dürfen).
Besser wäre es, das Format vorher mit einem regulären Ausdruck zu prüfen.
LG

Für diesen Beitrag haben gedankt: Waryzion
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 07:15 
Erst mal Danke.
Wie gebe ich das ergebnis in der textbox3 aus, weil er will es nicht anzeigen.

Der rest klappt jetzt, nur will er mir nicht das richtige ausgeben, sondern nur das was ich eingegeben habe, aber der code ist bei der Console auch nicht anders.

Edit:
Danke an den Mod wegen den Quelltext :)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 12.07.11 09:31 
Hallo,

die Zeilen
ausblenden C#-Quelltext
1:
2:
ConvertISBN10To13(isbn);
isbn = aus;

machen wenig Sinn ;-)

Du möchtest doch den Rückgabewert der Methode in die Variable 'aus' schreiben:
ausblenden C#-Quelltext
1:
aus = ConvertISBN10To13(isbn);					

Für diesen Beitrag haben gedankt: Waryzion
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 09:46 
Gemacht, aber wie kriege ich aus in die Textbox3?
habe es mit
textBox3.Text = aus mit und ohne toString versucht, beides scheitert.
So mal der neue ganze Code

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ISBN_Konverter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string isbn;
        string aus;
        private static String ConvertISBN10To13(String isbn)
        {
            Char[] isbn10;
            UInt16[] isbn13;
            StringBuilder sb;

            isbn10 = isbn.ToCharArray();
            isbn13 = new UInt16[13];
            isbn13[0] = 9;
            isbn13[1] = 7;
            isbn13[2] = 8;
            for (UInt16 i = 0, j = 3; i < 9; i++, j++)
            {
                isbn13[j] = UInt16.Parse(isbn10[i].ToString());
            }
            isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6]
                + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7]
                + isbn13[9] + isbn13[11]))) % 10)) % 10);
            sb = new StringBuilder();
            for (UInt16 i = 0; i < 13; i++)
            {
                sb.Append(isbn13[i].ToString());
            }
            return (sb.ToString());
        }

        private static String ConvertISBN13To10(String isbn)
        {
            Char[] isbn13;
            UInt16[] isbn10;
            StringBuilder sb;
            Int32 checksum;

            isbn13 = isbn.ToCharArray();
            isbn10 = new UInt16[10];
            for (UInt16 i = 3, j = 0; i < 12; i++, j++)
            {
                isbn10[j] = UInt16.Parse(isbn13[i].ToString());
            }
            checksum = 0;
            sb = new StringBuilder();
            for (UInt16 i = 0; i < 9; i++)
            {
                checksum += isbn10[i] * (i + 1);
                sb.Append(isbn10[i].ToString());
            }
            checksum %= 11;
            if (checksum == 10)
            {
                sb.Append("X");
            }
            else
            {
                sb.Append(checksum.ToString());
            }
            return (sb.ToString());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked==true)
            {

                isbn = textBox1.Text;
                ConvertISBN10To13(isbn);
                aus = ConvertISBN10To13(isbn); 
            }
            else if (checkBox2.Checked==true)
            {
                isbn = textBox1.Text;
                ConvertISBN13To10(isbn);
                aus = ConvertISBN10To13(isbn);
                textBox3.Text = aus;
            }
        }
    }
}
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 12.07.11 10:14 
ConvertISBN10To13(isbn);
aus = ConvertISBN10To13(isbn);
Das ist schwachsinn, das erste kannst du streichen
im ersten if fehlt die ausgabe in die textbox(textBox3.Text = aus;)

Für diesen Beitrag haben gedankt: Waryzion
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 10:21 
Die ausgabe fehlt gebe ich zu, habe mich erst mal auf eins beschränkt, danach ist ja fast nur copy und paste ^^.
habe es gestrichen, das ergebnis:
Eingegebene ISBN:9783060202287
Ausgabe:9789783060203
In der Console ist das ergebnis: 3060202281
Irgendwas stimmt da immer noch nicht.
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 12.07.11 10:43 
hast du schon mal durchdebuggt. das sieht mir aus als ob der nicht in die funktionen geht, oder deine checkboxen hast du falsch angewählt bzw wird falsch verarbeitet
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 10:46 
In der Konsole ist ja die gleiche funktion, und durch die einzelschritte weiß ich das er erst die chekcbox abklappert, von dort zu der funktion, dann wieder zurück.
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 12.07.11 10:51 
werden auch exakt die gleichen werte an die Funktion übermittelt? nicht das beim umwandeln der fehler liegt
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 10:59 
Gute frage ^^
Hier mal der Console Code, der mir echt einfacher fällt.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ISBN_Konverter
{
    class Program
    {
        static void Main(string[] args)
        {
            Char auswahl = Convert.ToChar(Console.ReadLine());

            switch (auswahl)
            {
                case '1':
                    Console.Write("Geben sie die ISBN 10 komplett ein\n-->");
                    string isbn10 = Console.ReadLine();
                    Console.WriteLine(ConvertISBN10To13(isbn10));
                    Console.ReadLine();
                    break;
                case '2':
                    Console.WriteLine("Geben sie die ISBN 13 komplett ein\n-->");
                    string isbn13 = Console.ReadLine();
                    Console.WriteLine(ConvertISBN13To10(isbn13));
                    Console.ReadLine();
                    break;

                default:
                    Console.WriteLine("Falsche Eingabe! Sind dir Einstellige Zahlen schon zu schwer?");
                    Console.ReadLine();
                    break;
            }
        }
                    private static String ConvertISBN10To13(String isbn1)
                    {
                        Char[] isbn10;
                        UInt16[] isbn13;
                        StringBuilder sb;

                        isbn10 = isbn1.ToCharArray();
                        isbn13 = new UInt16[13];
                        isbn13[0] = 9;
                        isbn13[1] = 7;
                        isbn13[2] = 8;
                        for (UInt16 i = 0, j = 3; i < 9; i++, j++)
                        {
                            isbn13[j] = UInt16.Parse(isbn10[i].ToString());
                        }
                        isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6]
                            + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7]
                            + isbn13[9] + isbn13[11]))) % 10)) % 10);
                        sb = new StringBuilder();
                        for (UInt16 i = 0; i < 13; i++)
                        {
                            sb.Append(isbn13[i].ToString());
                        }
                        return (sb.ToString());
                    }

                    private static String ConvertISBN13To10(String isbn3)
                    {
                        Char[] isbn13;
                        UInt16[] isbn10;
                        StringBuilder sb;
                        Int32 checksum;

                        isbn13 = isbn3.ToCharArray();
                        isbn10 = new UInt16[10];
                        for (UInt16 i = 3, j = 0; i < 12; i++, j++)
                        {
                            isbn10[j] = UInt16.Parse(isbn13[i].ToString());
                        }
                        checksum = 0;
                        sb = new StringBuilder();
                        for (UInt16 i = 0; i < 9; i++)
                        {
                            checksum += isbn10[i] * (i + 1);
                            sb.Append(isbn10[i].ToString());
                        }
                        checksum %= 11;
                        if (checksum == 10)
                        {
                            sb.Append("X");
                        }
                        else
                        {
                            sb.Append(checksum.ToString());
                        }
                        return (sb.ToString());
                    }

            }


        }

Edit:
für circa 2 stunden off, dann aber wieder on ^^
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 12.07.11 11:15 
das mit den checkboxen würde ich mit radiobuttons machen (aber das ist formsache)
also wie gesagt durchdebuggen und gucken ob der funktion die gleichen werte übergeben werden, den wenn die funktionen gleich sind kann nur der übergabewert anders sein.
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 15:44 
Ja Radios sehen besser aus ^^
Bei der Console ändert sich der Rückgabewert erst beim letzten Console.WriteLine komischerweise.
Bei der Forms halt nicht.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 12.07.11 16:38 
Hallo Waryzion,

wie sieht denn jetzt bei dir der letzte Stand deiner button1_Click-Methode aus?
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 17:22 
hat sich nichts geändert, bin bei einem freund, kann da nicht weiterarbeiten ^^.
Aber bei ideen werde ich sie gegen 8-9 umsetzen ^^
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 12.07.11 20:40 
user profile iconWaryzion hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if (checkBox1.Checked==true)
{
  isbn = textBox1.Text;
  ConvertISBN10To13(isbn);
  aus = ConvertISBN10To13(isbn);
}
else if (checkBox2.Checked==true)
{
  isbn = textBox1.Text;
  ConvertISBN13To10(isbn);
  aus = ConvertISBN10To13(isbn);
  textBox3.Text = aus;
}
Siehst Du den Fehler in dem 2. else-Zweig? Du rufst da ConvertISBN10To13 auf und weist den Wert der TextBox zu. Ansonsten ist es auch sinnlos, eine Methode aufzurufen, von der Du einen Rückgabewert erwartest (also das Ergebnis), und diesen nicht verarbeitest. An dieser Stelle: Gebe Deinen Steuerelemaneten aussagekräftige Namen, denn keiner weiß, was z.B. checkBox1 repräsentieren soll. Also so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
private void btnConvertISBN_Click(object sender, EventArgs e)
{
  if (cbISBN10To13.Checked == true)
  {
    tbConvertetISBN.Text = ConvertISBN10To13(tbOriginalISBN.Text);
  }
  else if (cbISBN13To10.Checked == true)
  {
    tbConvertetISBN.Text = ConvertISBN13To10(tbOriginalISBN.Text);
  }
  else
  {
    tbConvertetISBN.Text = string.Empty;
    //es wurde nichts ausgewählt
  }
}
Waryzion Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 12.07.11 21:09 
Trashkid ich würde dich am liebsten umarmen, es läuft, mit beiden funktionen *puh*
Der letzte fehler naja was soll man da anderes sagen als :roll: *FAIL* habe darauf nicht geachtet, durch dieses schöne Autofüllen ^^
Werde jetzt noch Radiobuttons machen, und sie dementsprechend benennen.
Danke an alle!!!
Ihr habe mir den Tag gerettet!