// Metodi - kuitataan haluttu määrä työntekijällä maksamattomina olevista korvauksista maksetuiksi public void KuittaaMaksetuiksi(Tyontekija valittu_tyontekija) { if (valittu_tyontekija.Maksamattomat == 0) { Console.WriteLine("Ei maksamattomia korvauksia"); return; } Console.WriteLine("Maksamattomia korvauksia: " + valittu_tyontekija.Maksamattomat); Console.WriteLine("Kuinka suurella summalla haluat kuitata korvauksia maksetuiksi?"); double maksa_korvauksia = Convert.ToDouble(Console.ReadLine()); valittu_tyontekija.MaksaKorvauksia(maksa_korvauksia); Console.WriteLine("\nHenkilölle " + valittu_tyontekija.getName() + " maksettu " + maksa_korvauksia); Console.WriteLine("Maksettuja: " + valittu_tyontekija.Maksetut + " Maksamattomia: " + valittu_tyontekija.Maksamattomat); return; }
// Metodi - poista työntekijälle kirjattu matka esim. kirjoitusvirheiden varalta public void PoistaMatka(Tyontekija valittu_tyontekija) { while (true) { if (valittu_tyontekija.getMatkat().Count > 0) { var matkalista = valittu_tyontekija.getMatkat(); Console.WriteLine("Valitse minkä työmatkan haluat poistaa, 'P' palaa valikkoon: "); for (int i = 0; i < matkalista.Count(); i++) { Console.WriteLine("{0} - {1}", i + 1, matkalista[i].Tiedot()); } string poista = Console.ReadLine(); if (poista == "P" && poista == "p") { return; } else if (Convert.ToInt32(poista) - 1 >= 0 && Convert.ToInt32(poista) - 1 < matkalista.Count()) { double korvaus = matkalista[Convert.ToInt32(poista) - 1].Korvaukset(); valittu_tyontekija.Maksamattomat = (korvaus * -1); matkalista.RemoveAt(Convert.ToInt32(poista) - 1); Console.WriteLine("Matka poistettu\n"); continue; } else { Console.WriteLine("Väärä syöte\n"); return; } } else { Console.WriteLine("Henkilöllä ei ole tallennettuja matkoja"); return; } } }
// Metodi - syötetään matkakohtaiset tiedot tallennusta varten public void MatkanTallennus(Tyontekija valittu_tyontekija) { double kk = 0.44; // Korvausten arvot, oletuksena vuoden 2021 arvot double puoliPR = 20; double kokoPR = 44; Console.WriteLine("Oletusarvona vuoden 2021 korvaukset: Kilometrikorvaus {0} e/kk, Puolipäiväraha {1}e, Päiväraha {2}e", kk, puoliPR, kokoPR); Console.WriteLine("Haluatko muuttaa käytössä olevat korvaukset? K/E"); string vastaus = Console.ReadLine(); if (vastaus == "K") { MuutaKorvaukset(kk, puoliPR, kokoPR, out kk, out puoliPR, out kokoPR); // Siirretty omaksi funktiokseen } Console.WriteLine("Anna matkan päivämäärä muodossa p.kk.v"); string pvm = Console.ReadLine(); Console.WriteLine("Anna lähtöaika (muoto 12:34)"); string lahto = Console.ReadLine(); Console.WriteLine("Anna paluuaika (muoto 15:22)"); string paluu = Console.ReadLine(); Console.WriteLine("Anna matkatut kilometrit"); int kilometrit = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("\n"); Matka uusi = new Matka(pvm, lahto, paluu, kilometrit, kk, puoliPR, kokoPR); // Uusi Matka-objekti, jolle syötetään tarvittavat tiedot korvauslaskuja varten Console.WriteLine(uusi.Tiedot()); valittu_tyontekija.Maksamattomat = uusi.Korvaukset(); // Maksamattomat-metodin "set" komennolla lisätään valitulle työntekijälle matkan korvaukset valittu_tyontekija.AddMatka(uusi); // Tallennetaan Matka työntekijälle Console.WriteLine("Työntekijälle kertynyt maksamattomia korvauksia: " + valittu_tyontekija.Maksamattomat); }
// Työntekijä-objektien lisääminen/poistaminen public List <Tyontekija> LuoPoistaTyontekija(List <Tyontekija> henkilot) { List <Tyontekija> newlist = new List <Tyontekija>(); foreach (var x in henkilot) { newlist.Add(x); } while (true) { Console.WriteLine("Valitse toiminto: "); Console.WriteLine("1 - Luo työntekijä "); Console.WriteLine("2 - Poista työntekijä"); Console.WriteLine("3 - Tallenna muutokset ja palaa alkuun"); Console.WriteLine("4 - Hylkää muutokset ja palaa alkuun"); string valinta = Console.ReadLine(); Console.WriteLine("\n"); switch (valinta) { case "1": Console.WriteLine("Anna työntekijän nimi"); string nimi = Console.ReadLine(); if (!String.IsNullOrEmpty(nimi)) { Tyontekija uusi = new Tyontekija(nimi); newlist.Add(uusi); Console.WriteLine("Työntekijä luotu\n"); continue; } else { Console.WriteLine("Et antanut nimeä."); continue; } case "2": if (newlist.Count() == 0) { Console.WriteLine("Ei poistettavia työntekijöitä\n"); continue; } else { Console.WriteLine("Valitse poistettavaa henkilöä vastaava numero: \n"); for (int i = 0; i < newlist.Count(); i++) { Console.WriteLine("{0} - {1}", i + 1, newlist[i].getName()); } string poista = Console.ReadLine(); if (Convert.ToInt32(poista) - 1 >= 0 && Convert.ToInt32(poista) - 1 < newlist.Count()) { newlist.RemoveAt(Convert.ToInt32(poista) - 1); continue; } else { Console.WriteLine("Väärä syöte\n"); continue; } } case "3": return(newlist); case "4": return(henkilot); default: continue; } } }
static void Main(string[] args) { List <Tyontekija> henkilot = new List <Tyontekija>(); Funktiot funktio = new Funktiot(); // Yritetään lukea tiedosto, johon tallennettu ohjelman käsittelemät tiedot // Tiedoston path ongelma? Mikä olisi optimaalinen? Muutenkin tiedostoon tallentamisen varmuus täysi mysteeri. try { deser(); } catch (Exception) { Console.WriteLine(""); } // Päävalikko while (true) { Console.WriteLine("\nValitse toiminto:"); Console.WriteLine("1 - Luo tai poista työntekijä"); Console.WriteLine("2 - Kirjaa työmatkoja ja tarkastele työntekijöiden matkatietoja"); Console.WriteLine("3 - Kertyneiden korvausten tarkastelu"); Console.WriteLine("4 - Poistu ohjelmasta"); string valinta = Console.ReadLine(); Console.WriteLine("\n"); if (valinta == "1") { henkilot = funktio.LuoPoistaTyontekija(henkilot); ser(); // Huom. ser-funktio tallentaa (potentiaalisesti) muuttuneet tiedot tiedostoon. // Jos teet muutoksia ohjelman rakenteeseen pidä huoli, että ser-tulee kutsuttua uusien tietojen tallennusta varten. } else if (valinta == "2") { TyontekijoidenKasittely(); ser(); } else if (valinta == "3") { funktio.KorvaustenTarkastelu(henkilot); } else if (valinta == "4") { break; } } // Funktio - Lisätään matkoja työntekijälle ja tulostetaan työntekijäkohtaista tietoa void TyontekijoidenKasittely() { if (henkilot.Count == 0) { return; } Tyontekija valittu_tyontekija = funktio.TyontekijanValinta(henkilot); // Tässä vaiheessa valitaan funktion avulla työntekijä, johon toiminnot kohdistuvat while (true) { Console.WriteLine("\nValittu työntekijä: " + valittu_tyontekija.getName()); Console.WriteLine("\nMitä haluat tehdä?"); Console.WriteLine("1 - Kirjaa uusi matka"); Console.WriteLine("2 - Kuittaa korvauksia maksetuiksi"); Console.WriteLine("3 - Katso maksamattomat ja maksetut korvaukset"); Console.WriteLine("4 - Työntekijän työmatkat"); Console.WriteLine("5 - Poista tallennettu työmatka"); Console.WriteLine("6 - Palaa alkuvalikkoon"); Console.WriteLine("7 - Valitse uusi työntekijä"); string vastaus = Console.ReadLine(); Console.WriteLine("\n"); if (vastaus == "1") { funktio.MatkanTallennus(valittu_tyontekija); } else if (vastaus == "2") { funktio.KuittaaMaksetuiksi(valittu_tyontekija); } else if (vastaus == "3") { Console.WriteLine("\nHenkilölle " + valittu_tyontekija.getName() + " maksamattomat korvaukset: " + valittu_tyontekija.Maksamattomat); Console.WriteLine("Henkilölle " + valittu_tyontekija.getName() + " maksetut korvaukset: " + valittu_tyontekija.Maksetut); } else if (vastaus == "4") { if (valittu_tyontekija.getMatkat().Count > 0) { var matkalista = valittu_tyontekija.getMatkat(); // Haetaan valitun työntekijän Matkat-listaan tallennetut Matka-objektit. Console.WriteLine("Työmatkojen tiedot: "); foreach (Matka x in matkalista) { Console.WriteLine(x.Tiedot()); // Tulostetaan tallennettujen matkojen tiedot Matka-luokasta löytyvän Tiedot-metodin avulla. } } else { Console.WriteLine("Henkilöllä ei ole tallennettuja matkoja"); } } else if (vastaus == "5") { funktio.PoistaMatka(valittu_tyontekija); } else if (vastaus == "6") { return; } else if (vastaus == "7") { valittu_tyontekija = funktio.TyontekijanValinta(henkilot); continue; } } } // Funktio - Kirjoitetaan henkilot-listan kaikki sisältö xml-tiedostoon. Täyttä voodoota, toimii lähinnä tuurilla. void ser() { // Alustaa tiedoston, muutoin voi tulla ongelmia esim. jos yritetään tallentaa tyhjää listaa työntekijätietojen poistamisen jälkeen. try { FileStream fileStream = File.Open(Environment.CurrentDirectory + "\\mytext.xml", FileMode.Open); fileStream.SetLength(0); fileStream.Close(); } catch (Exception) { Console.WriteLine(""); } Stream stream = File.OpenWrite(Environment.CurrentDirectory + "\\mytext.xml"); DataContractSerializer DataSer = new DataContractSerializer(typeof(List <Tyontekija>)); DataSer.WriteObject(stream, henkilot); stream.Close(); } // Funktio - Puretaan xml-tiedoston sisältö, muunnetaan luettavaan muotoon ja luodaan henkilot-lista sen pohjalta. void deser() { Stream stream = File.OpenRead(Environment.CurrentDirectory + "\\mytext.xml"); XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas()); DataContractSerializer seri = new DataContractSerializer(typeof(List <Tyontekija>)); henkilot = (List <Tyontekija>)seri.ReadObject(reader, true); reader.Close(); stream.Close(); } }