provize mlm
C# .NET
class pocitani : textove_prvky // textove_prvky dědí MainWindows - takže jsou v ní ty protected Listy v MainWindow
{
public void vypocitej(out double vysledek, out int bodovy_soucet, out double procenta)
{
priprav_hodnoty(); // funkce, která je definovaná dole
bodovy_soucet = 0;
double odecet = 0;
bodovy_soucet = hodnoty.Sum();
List<int> seznamtricetdvojek = new List<int>(); // List, do kterého ukládám 32
List<int> seznamtricetpetek = new List<int>(); // List, do kterého ukládám 35
for (int i = 0; i < hodnoty.Count(); i++) // cyklus, který se spustí tolikrát, kolik uživatel zadal TextBoxů
{
int s = hodnoty[i];
if ((s >= 10000) && (s < 20000))
odecet = odecet + s * 0.04;
if ((s >= 20000) && (s < 40000))
odecet = odecet + s * 0.08;
if ((s >= 40000) && (s < 60000))
odecet = odecet + s * 0.12;
if ((s >= 60000) && (s < 120000))
odecet = odecet + s * 0.16;
if ((s >= 120000) && (s < 160000))
odecet = odecet + s * 0.20;
if ((s >= 160000) && (s < 240000))
odecet = odecet + s * 0.24;
if ((s >= 240000) && (s < 360000))
odecet = odecet + s * 0.28;
if (s >= 360000 && (procenty[i].Text != "35%") && (procenty[i].Text != "37%") && (procenty[i].Text != "39%") && (procenty[i].Text != "40%")) // ty další podmínky jsou kvůli tomu, aby se TextBoxová hodnota neukládala do seznamu 32, když mi uživatel řekl, že to je něco jiného
{
odecet = odecet + s * 0.32;
seznamtricetdvojek.Add(s);
}
if (procenty[i].Text == "35%")
{
odecet = odecet + s * 0.35;
seznamtricetpetek.Add(s);
}
if (procenty[i].Text == "37%")
{
odecet = odecet + s * 0.37;
}
if (procenty[i].Text == "39%")
{
odecet = odecet + s * 0.39;
}
if (procenty[i].Text == "40%")
{
odecet = odecet + s * 0.40;
}
}
procenta = 0;
if ((bodovy_soucet >= 10000) && (bodovy_soucet < 20000))
{
procenta = 0.04;
}
if ((bodovy_soucet >= 20000) && (bodovy_soucet < 40000))
{
procenta = 0.08;
}
if ((bodovy_soucet >= 40000) && (bodovy_soucet < 60000))
{
procenta = 0.12;
}
if ((bodovy_soucet >= 60000) && (bodovy_soucet < 100000))
{
procenta = 0.16;
}
if ((bodovy_soucet >= 100000) && (bodovy_soucet < 160000))
{
procenta = 0.20;
}
if ((bodovy_soucet >= 160000) && (bodovy_soucet < 240000))
{
procenta = 0.24;
}
if ((bodovy_soucet >= 240000) && (bodovy_soucet < 360000))
{
procenta = 0.28;
}
if (bodovy_soucet >= 360000)
{
procenta = 0.32;
}
if (seznamtricetdvojek.Count() == 1) // tady začíná ten duplikovaný a spaghetti code
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.35;
}
else
procenta = 0.32;
}
if (seznamtricetdvojek.Count() == 2)
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.37;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min()); // tady by možná mělo být .Max()
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
procenta = 35;
else
procenta = 32;
}
}
if (seznamtricetdvojek.Count() == 3)
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.39;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.37;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
procenta = 0.35;
else
procenta = 0.32;
}
}
}
if (seznamtricetdvojek.Count() > 3) // snažím se ošetřit situaci, kdy je 32 víc než 3
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
while (seznamtricetdvojek.Count() >= 3)
{
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.39;
break;
}
else
{
pomocna_promenna = 0;
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
}
}
if (seznamtricetdvojek.Count() < 3)
{
if (seznamtricetdvojek.Count() == 2)
{
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.37;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
procenta = 35;
else if (seznamtricetdvojek.Count() == 1)
{
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.35;
}
else
procenta = 0.32;
}
}
}
}
}
if (seznamtricetpetek.Count() == 3) // počítáme 35
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetpetek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.40;
}
else if (seznamtricetdvojek.Count() == 3)
{
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.39;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.37;
}
else
{
seznamtricetdvojek.Remove(seznamtricetdvojek.Min());
pomocna_promenna = 0;
foreach (int s in seznamtricetdvojek)
{
pomocna_promenna = pomocna_promenna + s;
}
if (bodovy_soucet - pomocna_promenna >= 300000)
procenta = 0.35;
else
procenta = 0.32;
}
}
}
}
if (seznamtricetpetek.Count() > 3) // snažím se ošetřit situaci, kdy uživatel zadá víc než 3 35
{
int pomocna_promenna = 0;
foreach (int s in seznamtricetpetek)
{
pomocna_promenna = pomocna_promenna + s;
}
while (seznamtricetpetek.Count() >= 3)
{
if (bodovy_soucet - pomocna_promenna >= 300000)
{
procenta = 0.40;
break;
}
else
{
pomocna_promenna = 0;
seznamtricetpetek.Remove(seznamtricetpetek.Min());
foreach (int s in seznamtricetpetek)
{
pomocna_promenna = pomocna_promenna + s;
}
}
}
}
vysledek = Math.Round(bodovy_soucet * procenta - odecet); // hodnota, kterou vracím
textboxy.Clear(); // vymažu List textboxů
seznamtricetdvojek.Clear(); // vymažu seznamy
seznamtricetpetek.Clear(); // vymažu seznamy
}
private void priprav_hodnoty() // parsovaní hodnot, upozornění uživatele na špatné zadání
{
foreach (TextBox s in textboxy)
{
int parsovanidocasnehodnoty;
if (!int.TryParse(s.Text, out parsovanidocasnehodnoty))
MessageBox.Show("Nezvládl jsem načíst číslo. Výpočet nemusí být správný.");
hodnoty.Add(parsovanidocasnehodnoty); // uložení hodnoty do seznamu, se kterým pracuju při počítání
}
}
}
Neformátovaný
Přidáno: 8.11.2016
Expirace: Neuvedeno