Flyttar till..

http://vs2010world.wordpress.com/

Jag flyttar till....

Vill få lite bättre struktur på den här bloggen och blogg.se har inte vad jag behöver så jag kommer att flytta till wordpress.com och sedan får vi se hur det blir.

http://vs2010world.wordpress.com/

Kommer fortfarande till större delen handla om C# och min utveckling från IT-Tekniker till Systemutvecklare


Ny vecka och fortsättning

Nu har det blivit en ny vecka igen.
Otroligt vad tiden bara rusar iväg, bara 26 dagar kvar till jul och endast en vecka kvar till jag åker till Stockholm på kurs (LearningTree).
Den kursen kommer att bli riktigt najs må jag säga :-) Hoppas på att man kommer att lära sig och behålla kunskapen också där ifrån.

Under förra veckan har jag pysslat en hel del med mitt lilla "försäkrings"-program (Lektion 7).
Har nog inte tillkommit så himla många nya funktioner i det förrutom ett par men har mer sysslat med felhanteringen bakom det och försökt hitta olika sätt att "göra det på".

Lägger till lite bilder och lite kod till de olika delarna så får vi se vad som händer efter det :-)
Det jag tror har utökat huvudmenyn lite är Uppdatera, Sortera och Visa Premie (E, F och G).
Se bilden nedan:




E - Uppdatera befintlig försäkring


Denna funktion börjar med att användaren matar in försäkringsid för vilken försäkrings som skall ändras.
Sendan får man skriva in samtliga värden igen med även de uppdateringar man vill göra.
I detta fall kommer start / enddate att uppdateras från den dagen man gör uppdateringen och 1 år fram.
Sedan får man se vad tidigare värden var och så får man även se de nya ändrade.

Program.cs

case "E":
case "e":
Console.Clear();
Console.Write("Ange försäkrings nummer du vill uppdatera: ");
if (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1)
{
Console.WriteLine("Du måste ange ett försäkringsnummer!");
do
{
Console.Write("Vänligen, Ange försäkringsnummer du vill uppdatera: ");
}
while (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1);
}

Insurance.InsuranceID = InsuranceID;
Insurance.Load();

Insurance incHist = new Insurance();
incHist.InsuranceID = Insurance.InsuranceID;
incHist.StartDatePeriod = Insurance.StartDatePeriod;
incHist.EndDatePeriod = Insurance.EndDatePeriod;
incHist.PremiumValue = Insurance.PremiumValue;
incHist.Value = Insurance.Value;
incHist.Rates = Insurance.Rates;
incHist.InsuranceHolder = Insurance.InsuranceHolder;
Insurance.copyObject(incHist);

Console.Write("Ange nytt Premiebelopp: ");
Insurance.PremiumValue = CheckPremiumValue(PremiumValue);
Console.Write("Ange ny Valuta: ");
Insurance.Value = CheckValue(Value);
Console.Write("Ange nya antal rater: ");
Insurance.Rates = CheckRates(Rates);
Console.Write("Ange ny försäkringstagaren: ");
Insurance.InsuranceHolder = CheckInsuranceHolder(InsuranceHolder);


// Tar hand om svaret från Insurance.Update i Insurance.cs
if (Insurance.Update())
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nTidigare försäkringsinformation:");
Console.ResetColor();
Console.WriteLine("Försäkringsnummer: " + incHist.InsuranceID + "\nFörsäkringstagare: " + incHist.InsuranceHolder + "\nStartdatum: " + incHist.StartDatePeriod.ToShortDateString() + "\t\tSlutdatum: " + incHist.EndDatePeriod.ToShortDateString() + "\nPremiebelopp: " + incHist.PremiumValue + "\t\tValuta: " + incHist.Value + "\nAntal Rater: " + incHist.Rates);
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\n\nUppdaterad försäkringsinformation:");
Console.ResetColor();
Console.WriteLine("Försäkringsnummer: " + Insurance.InsuranceID + "\nFörsäkringstagare: " + Insurance.InsuranceHolder + "\nStartdatum: " + Insurance.StartDatePeriod.ToShortDateString() + "\t\tSlutdatum: " + Insurance.EndDatePeriod.ToShortDateString() + "\nPremiebelopp: " + Insurance.PremiumValue + "\t\tValuta: " + Insurance.Value + "\nAntal Rater: " + Insurance.Rates);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\nFörsäkringens period förnyas automatiskt 1 år från dagensdatum vid ändring!\n");
Console.ResetColor();
Console.WriteLine("\nTack, försäkringen uppdaterades i databasen!\nTryck på enter för att forstätta till huvudmenyn");
Console.ReadLine();
}
else
{
Console.Clear();
Console.WriteLine("Det gick åt helvete att sprar ner/uppdatera i databasen, kontakta databasadmin för hjälp!");
Console.WriteLine("Tryck enter för att återgå till huvudmenyn");
Console.ReadLine();
}

break;


Insurance.cs

public bool Update()
{
Insurance.DeleteInsurance(InsuranceID);
Insurance Save = new Insurance();
Save = this;

return Save.Save();
}

Denna hänvisar ju då även till metoden Save i som finns ovan. (Fortfarande i Insurance.cs)

public bool Save()
{
char pad = ' ';
StringBuilder data = new StringBuilder();
data.Append(InsuranceID.ToString().PadRight(10, pad));
data.Append(StartDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "").PadRight(8, pad));
data.Append(EndDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "").PadRight(8, pad));
data.Append(PremiumValue.ToString().PadRight(10, pad));
data.Append(Value.PadRight(3, pad));
data.Append(Rates.ToString().PadRight(2, pad));
data.Append(InsuranceHolder.PadRight(50, pad));
return FredrikDAL.DatabaseHelper.SaveInsurance(data.ToString());
}


DatabaseHelper.cs

public static bool SaveInsurance(string data)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("{0}", data);
return true;
}
}


F - Sortera databasen:


Detta med sortera databasen behövs ju inte direkt OM man har en SQL eller liknande.
När man som jag gör och kör mot en fin textfil och den kommer lite i obalans tillsammans med den ovan, uppdatera en försäkring.
Då kan det plötsligt bli så att ordninge på InsuranceID inte riktigt är ok.
ex.
2
4
3
1

skulle det i detta fall vara så där och så lägger man till en ny försäkring så blir det lite skit som jag har det just nu eftersom jag kollar vad sista rades InsuranceID är och ökar det värdet med 1 för nästkommande försäkring.
Jah ni fattar säkerligen, så det jag använder den här metoden till är mer för nyskapande av försäkring så ropar jag på denna metod innan jag börjar att skapa en ny.

Hur ser den ut då? (går bara in på metoden i BLL och sedan hur DAL funkar)

Insurance.cs

public bool Sort()
{
if (!DatabaseHelper.SortDatabase())
{
return false;
}
return true;
}


DatabaseHelper.cs

public static bool SortDatabase()
{
List<string> lines = new List<string>();
string path = @"C:\Sytem007\Database\insurancedb.txt";
string temppath = @"C:\Sytem007\Database\tempinsurancedb.txt";
if (!File.Exists(path))
{
return false;
}

if (!File.Exists(temppath))
{
using (StreamWriter sw = File.CreateText(temppath))
{
sw.Write("");
}
}
using (StreamReader r = new StreamReader(new FileStream(path, FileMode.Open)))
{
string line;
while ((line = r.ReadLine()) != null)
{
lines.Add(line);
}
}
lines.Sort();
using (var sw = new StreamWriter(temppath))
{
for (int i = 0; i < lines.Count; i++)
{
string ListValue = lines[i] as string;
sw.WriteLine(ListValue);
}
sw.Close();
}
File.Delete(path);
File.Move(temppath, path);
return true;
}




G - Vad för premie:


Poängen med denna var då att skapa en metod som returnerar en decimal och som skall heta GetPremium.
Det den gör är att användaren får ange ett försäkrings ID och den skall returnera PremiumValue samt att jag även la till att den returnerar just efter PremiumValue även Value (vilken valuta det är).

Jag har även förberätt för att ta fram andra värden om så behövs.

Program.cs (UIL)

case "G":
case "g":
Console.Clear();
Console.Write("Ange försäkrings nummer: ");
if (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1)
{
Console.WriteLine("Du måste ange ett försäkringsnummer!");
do
{
Console.Write("Vänligen, Ange försäkringsnummer: ");
}
while (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1);
}
Insurance.InsuranceID = InsuranceID;    // Skickar över det inmatade försäkrings ID till Insruance.cs
if (Insurance.GetPremium() == 0)
{
Console.WriteLine("Tyvärr kan jag inte hitta försäkringen!");
}
Console.WriteLine("Försäkringsnummer: " + Insurance.InsuranceID + " Har premie: " + Insurance.PremiumValue + " " +Insurance.Value + "\nTryck enter för att fortsätta.");
Console.ReadLine();
break;


Insurance.cs


public decimal GetPremium()
{
string databasevalue = DatabaseHelper.LoadInsurance(InsuranceID, "insurancedb.txt", 10);
if (databasevalue == "")
{
decimal FaultOut = 0;
return FaultOut;
}
StartDatePeriod = Convert.ToDateTime(Convert.ToDecimal(databasevalue.Substring(10, 8)).ToString("####-##-##"));
EndDatePeriod = Convert.ToDateTime(Convert.ToDecimal(databasevalue.Substring(18, 8)).ToString("####-##-##"));
PremiumValue = Convert.ToDecimal(databasevalue.Substring(26, 10));
Value = databasevalue.Substring(36, 3);
Rates = Convert.ToInt32(databasevalue.Substring(39, 2));
InsuranceHolder = databasevalue.Substring(41);
return PremiumValue;
}



DatabaseHelper.cs

public static string LoadInsurance(int InsuranceID, string databasename, int lengthofidfieald)
{
string path = @"C:\Sytem007\Database\" + databasename;

int tempID;
// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
throw new System.IO.FileNotFoundException("Databasen kunde inte hittas!", databasename);
}

// Läser igenom hela textfilen och letar efter angivet försäkringsID
// Returnerar den raden / försäkringen.
using (StreamReader sr = File.OpenText(path))
{
string rl = "";
while (!sr.EndOfStream)
{
rl = sr.ReadLine();
tempID = Convert.ToInt32(rl.Remove(lengthofidfieald));
if (tempID == InsuranceID)
{
return rl;
}

}
return "";
}
}

Projekt som Lektion 7 forts.

Hej på er,

Har varit helt fördjupad i detta med projektet.
Det går riktigt bra och har avancerat en aningen till att fixa försäkring via meny osv.
Skall försöka visa lite hur det är byggt just nu, håller på med en massa indatakontroller som inte är 100% klara än så ni får ha lite överseende med det hela.

Det hela bygger nu mera på UIL, BLL och även då DAL (min superfina notepad databas :P).
I FredrikUIL.UIL har jag då Program.cs som då är mer det användaren ser, matar in och pressenteras.
I FredrikBLL.BLL finns det Insurance.cs där just saker som skall göras med försäkringarna, dvs skickas vidare för inmatning till databasen osv.
Sedan har vi FredrikDAL.DAL som har DatabaseHelper.cs där jag har olika funktioner mot just min textfil.

Så här ser det ut just nu. (Gud vad jag önskade att man kunde få med formateringen också!)

FredrikUIL.UIL / Program.cs

using FredrikBLL.BLL;  // Alias

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{
string myChoice;
Insurance Insurance = new Insurance();
do
{
// Här börjar Huvudmenyn!
Console.Clear();
Console.WriteLine("Välkommen till Försäkringsbolaget AB");
Console.WriteLine("Huvudmeny\n");

Console.WriteLine("A - Lägg till en försäkring");
Console.WriteLine("B - Ta bort en försäkring");
Console.WriteLine("C - Titta på alla försäkringar");
Console.WriteLine("D - Leta efter en försäkring");
Console.WriteLine("Q - Bye bye, ta ta, quit\n");

Console.Write("Dina val (A,B,C,D or Q): ");

myChoice = Console.ReadLine();

// Här börjar underdelarna till huvudmenyn beroende på val i just huvudmenyn.
switch (myChoice)
{
case "A":
case "a":
decimal PremiumValue = 0;
int InsuranceID = 0;
string Value = " ";
int Rates = 0;
string InsuranceHolder = " ";

Console.Clear();
Console.WriteLine("Du vill lägga till en försäkring\n");
Console.Write("Ange Premiebelopp: ");
PremiumValue = CheckPremiumValue(PremiumValue);
Console.Write("Ange valuta: ");
Value = CheckValue(Value);
Console.Write("Ange antal rater: ");
Rates = CheckRates(Rates);
Console.Write("Ange försäkringstagaren: ");
InsuranceHolder = CheckInsuranceHolder(InsuranceHolder);

// Sätter upp Startdate och Enddate till DateTime
DateTime StartDatePeriod = new DateTime();
StartDatePeriod = DateTime.Now;
DateTime EndDatePeriod = new DateTime();
EndDatePeriod = DateTime.Now;

Insurance.InsuranceID = InsuranceID;
Insurance.StartDatePeriod = StartDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "");
Insurance.EndDatePeriod = EndDatePeriod.AddYears(1).ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "");
Insurance.PremiumValue = Convert.ToDecimal(PremiumValue);
Insurance.Value = Value.ToUpper();
Insurance.Rates = Rates;
Insurance.InsuranceHolder = InsuranceHolder;
Insurance.save();

Console.WriteLine("\nTack, försäkringen skapades i databasen!\n");
break;

case "B":
case "b":
Console.Clear();
Console.WriteLine("Du vill plocka bort en försäkring!");
Console.Write("Ange det försäkringsnummer du vill plocka bort: ");
break;


case "C":
case "c":
Console.Clear();
Console.WriteLine("Här nedan listas alla försäkringa från databasen.");
Console.Write(Insurance.ReadAllInsurances());
break;
case "D":
case "d":
Console.Clear();
Console.Write("Ange försäkrings nummer: ");
int MyID = Convert.ToInt32(Console.ReadLine());
if (MyID == 0)
{
Console.Write("Du måste ange ett försäkrings nummer!");
break;
}
else
{
Insurance.InsuranceID = MyID;
Console.Clear();
Console.WriteLine("Försäkring id " + MyID + " " + "tillhör:\n");
Console.WriteLine(Insurance.SearchForID(MyID));
break;
}

case "Q":
case "q":
Console.WriteLine("OK, Bye Bye!");
break;
default:
Console.WriteLine("{0} är inte ett giltigt val!", myChoice);
break;
}
Console.Write("\nTryck på en tangent för att återgå till huvudmenyn.");
Console.ReadLine();
Console.WriteLine();
}
while (myChoice != "Q" && myChoice != "q");

}


// Kontrollerar om PremiumValue verkligen håller sig till en decimal
private static decimal CheckPremiumValue(decimal PremiumValue)
{
if (!decimal.TryParse(Console.ReadLine(), out PremiumValue))
{
do
Console.Write("Felaktigt värde!\nVänligen, Ange Premiebelopp: ");
while (!decimal.TryParse(Console.ReadLine(), out PremiumValue));
}
return PremiumValue;
}

// Kontrollerar om Value har ett värde som går att läsa
private static string CheckValue(string Value)
{
Value = Console.ReadLine();

if (String.IsNullOrEmpty(Value))
{
while (String.IsNullOrEmpty(Value))
{
Console.Write("Felaktigt värde!\nVänligen, ange valuta (ex. SEK, EUR): ");
Value = Console.ReadLine();
}
}

return Value;
}

private static int CheckRates(int Rates)
{
if (int.TryParse(Console.ReadLine(), out Rates))
{
do
Console.Write("Felaktigt värde!\nVänligen, ange antal rater: ");
while (!int.TryParse(Console.ReadLine(), out Rates));

}
return Rates;
}

// Kontrollerar om InsuranceHolder har ett värde som går att läsa
private static string CheckInsuranceHolder(string InsuranceHolder)
{
if (String.IsNullOrEmpty(InsuranceHolder))
{
while (String.IsNullOrEmpty(InsuranceHolder))
{
Console.Write("Felaktigt värde!\nVänligen, ange försäkringstagarens namn: ");
InsuranceHolder = Console.ReadLine();
}
}

return InsuranceHolder;
}




FredrikBLL.BLL / Insurance.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FredrikDAL;

namespace FredrikBLL.BLL
{
public class Insurance
{

public int InsuranceID { get; set; }            // Försäkringsnummer
public string StartDatePeriod { get; set; }     // Startdatum på försäkringsperioden
public string EndDatePeriod { get; set; }       // Slutdatum på försäkringsperioden
public decimal PremiumValue { get; set; }       // Premiebelopp
public string Value { get; set; }               // Valuta  ex. SEK, EUR, NOK, DKR
public int Rates { get; set; }                  // Antal rater
public string InsuranceHolder { get; set; }      // Försäkringstagare
// public Insurance();                          // Default-konstruktor
// public Insurance(int InsuranceID);           // Konstruktor som tar ett försäkringsnummer

public bool save()
{
char pad = ' ';
StringBuilder data = new StringBuilder();
data.Append(GetMaxInsuranceID().PadRight(10, pad));
data.Append(StartDatePeriod.ToString().PadRight(8, pad));
data.Append(EndDatePeriod.ToString().PadRight(8, pad));
data.Append(PremiumValue.ToString().PadRight(10, pad));
data.Append(Value.PadRight(3, pad));
data.Append(Rates.ToString().PadRight(2, pad));
data.Append(InsuranceHolder.PadRight(50, pad));
return FredrikDAL.DatabaseHelper.Insert(data.ToString());
}

private static string GetMaxInsuranceID()
{
return DatabaseHelper.read();
}

public static string ReadAllInsurances()
{
return DatabaseHelper.readAll();
}

public static string SearchForID(int MyID)
{
int InsuranceID = MyID;
return DatabaseHelper.SearchAndGet(InsuranceID);
}
}
}




FredrikDAL.DAL / DatabaseHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace FredrikDAL
{
public class DatabaseHelper
{
// Insert har hand om inmatning av data till insurancedb.txt
public static bool Insert(string data)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("{0}", data);
return true;
}
}

public static string read()
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
// Läser textfilens sista rad in i s.
using (StreamReader sr = File.OpenText(path))
{
string s;
string id = "1";

while (!sr.EndOfStream)
{
s = sr.ReadLine();
if (sr.Peek() == -1)
{
s = s.Remove(10);
int InsuranceID = Convert.ToInt32(s);
InsuranceID++;
id = Convert.ToString(InsuranceID);
}
}
return id;
}

}

// readALL Läser igenom alla raderna i insurancedb.txt och pressenterar de
public static string readAll()

{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
// Läser genom hela textfilen från början till slut och returnerar det till "line".
using (StreamReader sr = File.OpenText(path))
{
string line;
line = sr.ReadToEnd().Replace("\n", "");  // plockar med replace bort ett extra "newline"

return line;
}

}

// SearchAndGet har ett invärde (MyID) som är försäkringsnummret och som går ner o kollar om den finns
// Finns försäkringen pressenteras den på ett "snyggt" sätt.
public static string SearchAndGet(int MyID)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";
string ReturnID = "";
// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}

// Läser igenom hela textfilen och letar efter angivet försäkringsID
// Returnerar den raden / försäkringen.
using (StreamReader sr = File.OpenText(path))
{
string s;
while (!sr.EndOfStream)
{
s = sr.ReadLine();
string tempID = s.Remove(10);
int InsuranceID = Convert.ToInt32(tempID);

if (InsuranceID == MyID)
{
string tempStartDate = s.Substring(10, 8);
string tempEndDate = s.Substring(18, 8);
string tempPremiumValue = s.Substring(26, 10);
string tempValue = s.Substring(36, 3);
string tempRate = s.Substring(39, 2);
string tempInsuraceHolder = s.Substring(41);
ReturnID = "Försäkringsnummer: " + InsuranceID + "\n" + "Startdatum: " + tempStartDate + "\n" + "Slutdatum: " + tempEndDate + "\n" + "Premiebelopp: " + tempPremiumValue + "\n" + "Valuta: " + tempValue + "\n" + "Antal rater: " + tempRate + "\n" + "Försäkringstagare: " + tempInsuraceHolder + "\n";
}

}
if (ReturnID == "")
{
ReturnID = "Tyvärr finns ej en försäkring på det inmatade försäkringsnummret!";
}
return ReturnID;
}
}
}
}


Hur detta ser ut just nu kan ni se här: (Klicka på bilderna för att få de större!)


Ett litet större projekt som Lektion 7

Fick just litet större projekt att syssla med nu vilket verkar jävligt kul.

Lektion 7

  1. Skapa en ny publik klass i ditt BLL-Projekt som heter Insurance.
    Skapa properties för nedanstående egenskaper hos klassen med lämpligt namn och lämplig datatyp.
    (TIPS! Skriv "prop" och tryck 2 gågner på Tab)

    • Försäkringsnummer
    • Startdatum på försäkringsperioden
    • Slutdatum på försäkringsperioden
    • Premiebelopp
    • Valua
    • Antal rater
    • Försäkringstagare

    Lägg även till en default-konstruktor(inga parametrar) och en konstruktor som tar ett försäkringsnummer.

Det där är det första jag skall göra, kommer att fylla på detta inlägg när jag kommer till steg 2 senare.
Nu blir det att läsa lite, är dock redan i skrivandets stund klar med skapandet av properties som jag tror kommer att passa in. Och det är följande:

  • public int InsuranceID { get; set; }                  // Försäkringsnummer
  • public DateTime StartDatePeriod { get; set; }   // Startdatum på försäkringsperioden
  • public DateTime EndDatePeriod { get; set; }     // Slutdatum på försäkringsperioden
  • public decimal PremiumValue { get; set; }        // Premiebelopp
  • public decimal Value { get; set; }                     // Valuta
  • public int Rates { get; set; }                             // Antal rater
  • public string InsuraceHolder { get; set; }           // Försäkringstagare

Mer info kommer senare...

Lektion 07 - Klasser

Gomorron
Skall ta och börja läsa lite om klasser nu.

Om ni undrar vad det är jag läser ifrån så är det just nu från C# Station Tutorial
Tycker det är riktigt bra och förklara på ett bra sätt. Vissa fall kan det kanske vara lite svårt tycker jag för att förstå vissa saker där men då är det bara att googla vidare så hittar man alltid på en himla massa andra förklaringar och exempel.
Skulle det skita sig så frågar jag någon på jobbet helt enkelt :-)

Har i alla fall lyckats binda ihopp 2 stycken "solutions / projects" med varandra genom att länka in dom i en Solution Folder.
Har man redan fördigkompilerade filer så kör man ju bara in dessa dll filer som referenser.
Men har man bara ett par små Solutions som man även enkelt vill komma åt sorucen på så går det att lösa med Solutions Folders som blir som en Virtuell koppling, måste fortfarande lägga till cs filderna i references i din main/program.cs annars funkar det ju inte så bra!

Fortsättning på namespace

Fortsätter från detta.

3) Ta bort referensen till ClassLibrary1 och lägg till den på nytt men denan gång i debug.
Debugga projektet och försök "stiga in i" metoden med F11.

Anledningen till detta med kontrollen av debugging / Stiga in i för både i Release läge och Debug läge var just för att i web appar går det tydligen inte att göra det. Vet nu dock inte riktigt varför det fungerade i detta, kanske har med att det var i Console App.
Skall väll undersöka saken lite närmare om det är så att det skall vara så eller om jag i misstag kommit åt någon "feat." som stänger av den funktionen :-)
Men nu fortsätter vi...

4) Använd ovanstående program (finns i tidigare inlägg) men lägg till ett using-statement till ClassLibrary1.BLL och ta bort "onödig kod" vid metodanropet.

Men lägger helt enkelt bara till i Program.cs
using ClassLibrary1.BLL;

Så kan man i koden även ändra från:
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());

Till:
Console.Write("Är det en arbetsdag idag? " + Helper.myToday());

5) Skapa ytterligare ett nytt projekt av typen Class Library och där den till ClassLibrary2.
Spara ner den i System007-mappen. Skapa sedan en klass som heter Helper i detta projekt och lägg denna i ett namespace som heter ClassLibrary2.BLL. Skriv sedan en publik statisk metod som med en DateTime svara på frågan vad klockan är just nu. Kompilera i debug och release.

(ClassLibrary2)Helper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary2.BLL
{
public class Helper
{
public static string TimeRightNow()
{
DateTime time = DateTime.Now; //sätter time till en DateTime och kör in vad datum/tid är just nu
return time.ToShortTimeString(); // returnerar värdet från time med kort variant av tid hh:mm
// return time.ToLongTimeString(); // returnerar värdet från time fast med lång variant av tid hh:mm:ss
}
}
}


6) Lägg till referens till ClassLibrary2.BLL i ditt huvudprojekt och lägg till ett using-statement till denna. Anropa sedan metoden som svara på om det är en arbetsdag och metoden som svara på var klockan är just nu och meddela användaren det.

Svar: Här kommer det att krocka om man inte gör nått åt befintlig kod.
Eftersom koden just nu är:
...
using ClassLibrary1.BLL;
...
Console.Write("Är det en arbetsdag idag? " + Helper.myToday());

Och jag skulle då lägga till klockan där så kommer det att bli så här:
using ClassLibrary1.BLL;
using ClassLibrary2.BLL;

Console.Write("Är det en arbetsdag idag? " + Helper.myToday());
Console.Write("\nKlockan är just nu: " + Helper.TimeRightNow());

så kommer den att gnälla över Helper! Den finns ju på 2 ställen och hur vet man i koden vilken ClassLibrary den skall använda?
Well i detta läge är nog tanken att jag skall göra följande:
...
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());
Console.Write("\nKlockan är just nu: " + ClassLibrary2.BLL.Helper.TimeRightNow());

Man kan även som nästa del i lektionen gör också.

7) Använd ovanstående program och modifiera using-satserna så dom får varsitt alias.
ClassLibrary1.BLL får heta BLL_1 och ClassLibrary2.BLL får heta BLL_2.
Modifiera anropen till de 2 metoderna så att dom använder resp. alias.

Svar: Så det jag gör är att ändra lite i Programs.cs till följande
using BLL1 = ClassLibrary1.BLL.Helper;  // Alias
using BLL2 = ClassLibrary2.BLL.Helper;  // Alias
...

onsole.Write("Är det en arbetsdag idag? " + BLL1.myToday()); // Skriver ut resultatet från ClassLibrary1.BLL.Helper.myToday
Console.Write("\nKlockan är just nu: " + BLL2.TimeRightNow()); // Skriver ut resultatet från ClassLibrary2.BLL.Helper.TimeRightNow

Och otroligt nog blir då svaret samma!

Är det en arbetsdag idag? True
Klockan är just nu: 15:39




Allt detta med namespace har varit inom samma "Solution / FredrikUIL" så skall plocka ut dessa 2 ClassLibrarys och lägga dom i en egen Solution och se om det går bra att anropa de även från den?!
Vi får se :-)





Referenser

En liten notice som jag någon gång skall kolla lite på är att man skall normalt inte kunna "stiga in i" en metod med F11 om den är i Release läge.
Skall då fungerar när den är i Debugläge.
Dock så funka det i båda lägena för mig och vet inte riktigt varför, skulle kunna vara att det är Console App jag jobbar med och inte Web.

Skall testa detta även i webprojekt senare när jag börjar med det får vi se ....

Namespaces exempel

Så då har jag börjat läsa på om Namespaces och kommer väll inte att skriva om det så mycket mer här än att visa lite övningar och exempel.

Lektion 06
1) Skapa ett nytt projekt av typen Class Library och döp den till ClassLibrary1. Lägg det i System007-mappen (lokal katalog på min dator). Skapa sedan i detta projekt en klass som heter Helper (jag döpte bara om den .cs fil(class1.cs) till helper) och lägg denna i ett namespace som heter ClassLibrary1.BLL.
Skriv i Helper en publik statisk metod som med ett bool svarar på frågan om det är en arbetsdag idag, d.v.s måndag t.o.m fredag. Kompilera den i debug och release.

helper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1.BLL
{
public class Helper
{
public static bool myToday()
{
DayOfWeek today = DateTime.Today.DayOfWeek;
if (today == DayOfWeek.Monday)
{
return true;
}
else if (today == DayOfWeek.Tuesday)
{
return true;
}
else if (today == DayOfWeek.Wednesday)
{
return true;
}
else if (today == DayOfWeek.Thursday)
{
return true;
}
else if (today == DayOfWeek.Friday)
{
return true;
}
else
{
return false;
}
}
}
}


2) Lägg till referens till realease-versionen av ClassLibrary1 i ditt huvudprojekt. Anropa sedan metoden för att ta reda på om du jobbar på din fritid eller inte och meddela användaren. Använde inte using-statement(using ClassLibrary1.BLL). Debugga projektet och försök "stiga in i" metodem med F11.

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());
Console.ReadLine();
}
}
}

Min "Solution explorer" för att visa vart referensen ligger till ClassLibrary1:


Resulatatet so far:
Tillhörande Lektion 02  2)


Namespaces

Då var det dags att börja läsa lite om namespaces.

OUT myCalcOut

Som sagt, det var ju nästan rätt det jag fixade till i tidigare inlägg.
Dock helt fel eftersom det var just användning av OUT parametern och inte ref jag skulle använda mig av.

Men så efter lite meck och lite hjälp av N då jag donade till det lite fel så vart det rätt.
Vill nog dock kontrollera lite mer om vad de stora skillnaderna är mellan just out och ref. Båda två fungerar uppenbarligen.

Här kommer min kåd för det hela då.

Program.cs
Console.Write("Enter value 1: ");
decimal value1 = Convert.ToDecimal(Console.ReadLine());

Console.Write("Enter value 2: ");
decimal value2 = Convert.ToDecimal(Console.ReadLine());

string out1 = "";
string out2 = "";
string out3 = "";
string out4 = "";
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
functions.myCalcOut(value1, value2, out out1, out out2, out out3, out out4);

Console.WriteLine("Svaret nedan: \n" + out1 + out2 + out3 + out4);
Console.ReadLine();


Functions.cs
public void myCalcOut(decimal value1, decimal value2, out string out1, out string out2, out string out3, out string out4)
{
decimal sumtemp;
sumtemp = Convert.ToDecimal(value1 + value2);
out1= Convert.ToString(value1 + "+" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 - value2);
out2= Convert.ToString(value1 + "-" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 * value2);
out3= Convert.ToString(value1 + "*" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 / value2);
out4= Convert.ToString(value1 + "/" + value2 + "=" + sumtemp + "\n");
}

Men skall forska vidare lite i detta med out och ref för att just lära mig lite mer om det innan jag går vidare.

Fortsättning på ref i void metoder

Tror det går bra det här!

Lektion 05
8) Skriv ett program som från konsolen möjliggör input av 2 numreriska värden. Skriv en metod för beräkning som tar dessa 2 värden in, men som även tar 4 stycken out-parametrar in.
Tilldela dessa parametrar summan, differensen, produkten och kvot. Skriv sedan ut resultatet åt användaren utifrån out-parametrarna.
Ex.
tal1 = 5
tal2 = 5

5+5=10
5-5=0
5*5=25
5/5=1

Nu har jag dock när jag verkligen läser detta inte alls använt mig av out-parameterar utan av åter igen ref.
Men det är enkelt fixat i vilket fall.
Dock så får ni se hur jag löste detta med då ref och inte out.

Program.cs
Console.Write("Enter value 1: ");
decimal value1 = Convert.ToDecimal(Console.ReadLine());

Console.Write("Enter value 2: ");
decimal value2 = Convert.ToDecimal(Console.ReadLine());

string x = "";
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
functions.myCalcOut(ref value1, ref value2, ref x);

Console.WriteLine("Svaret nedan: \n" + x);
Console.ReadLine();

Functions.cs
public void myCalcOut(ref decimal value1, ref decimal value2, ref string x)
{
decimal sumtemp, sumtemp2, sumtemp3, sumtemp4;
string sumout = "";

sumtemp = Convert.ToDecimal(value1 + value2);
sumout += Convert.ToString(value1 + "+" + value2 + "=" + sumtemp + "\n");
sumtemp2 = Convert.ToDecimal(value1 - value2);
sumout += Convert.ToString(value1 + "-" + value2 + "=" + sumtemp2 + "\n");
sumtemp3 = Convert.ToDecimal(value1 * value2);
sumout += Convert.ToString(value1 + "*" + value2 + "=" + sumtemp3 + "\n");
sumtemp4 = Convert.ToDecimal(value1 / value2);
sumout += Convert.ToString(value1 + "/" + value2 + "=" + sumtemp4 + "\n");
x = sumout;
}

Jag får återkomma med kåden för OUT!


Gammle kan och förstår sig på ref!

Man kan ju undra om ordspråket lära gamla hudar att sitta stämmer?
Försökte förstå och lära mig detta med ref parametern i metoder men stirrade mig helt blind på det hela ett bra tag innan jag tror kronan föll ner ordentligt. Min övning skulle då utöva sig på följande sätt.

Lektion 05 del 4-6 (3 olika delar jag nu gått igenom i lektion 5)
4) Skriv ett program som från konsolen möjligör input av ett förnamn. För en variabel x i Main-metoden där du lagrar detta namn.
Skriv även en statisk void-metod som tar en string y som parameter och som till denna y lägger första bokstaven i namnet. Skriv sedan ut x. Fundera lite innan du ser resultatet om vad det bör stå!

Svar: x i detta fall har inte förändrats alls eftersom vi inte har gjort nått med det än. Y kan dessutom inte returneras.
Skulle det gå så skulle y i detta fall skriva ut första bokstaven i det inmatade förnamnet från x.

Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x);  //Skriver ut inmatat värde från användaren
Console.ReadLine();

Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1); // Plockar fram första tecknet från värdet i x och kör in det i y.
// return = y   //Funkar inte här eftersom man inte kan returnera ett värde i en void.
}


5) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln x istället. Skriv sedan ut x. Fundera på innan vad det borde stå!

Svar: Ändringen som behöver göras är att ändra void till sträng och returnera x.

Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
return x;
}

6) Använd ovanstående program men ändra i metodens  parameteruppsättning så att inparametern är en referens (nyckelordet: ref). Fundera på innan vad det bör stå!

Svar: Om allt funkar som det skall borde resultatet bli första tecknet/bokstaven i förnamnet.

Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x);                      //Skriver ut inmatat värde från användaren
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();   // Skapar ett nytt objekt functions
functions.myName(ref x);
Console.WriteLine("\nYour names first letter is: " + x); //Returnerat värde från myPublicName
Console.ReadLine();

Functions.cs
public void myName(ref string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
}

Resultatet:




Kommer nu att fortsätta med sista i detta som är del 7.

7) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln y istället.
Skriv sedan ut x. Fundera....

Svar: Svaret blir ...... Det inmatade värdet!

Please enter your firstname: Fredrik

Hey there, Fredrik
Your names first letter is: Fredrik

Helg och static void

Liten så här mental note till mig själv en fredags eftermiddag som denna.

public static void myName(string namnet)

VOID i detta fall kommer inte att returnera nått värde alls.
Så får vi se hur det här kommer att gå.

Skall läsa lite till sen blir det helg, så trevlig helg på er alla!


Trevlig helg på er alla!



Check if int

Har just blivit klar med ett program som kontrollerar om ett värde är ett heltal eller ej.



Lektionen:
Skriv ett program som möjliggör input av ett heltal. Skriv en metod som svarar med ett boolskt värde hurvida det är ett heltal. Meddela användaren svaret.

Kan ju börja med att berätta a tt ett boolskt värde är sant eller falskt (true/false, 1/0).
Så det hela skall då kolla om värdet man skriver in är ett heltal (integer) och om det är det skall värdet då blir true.

Program.cs

Console.Write("Enter a number or someting: ");
string value = Convert.ToString(Console.ReadLine());
bool output;
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
output = functions.IntOrNot(value);
Console.WriteLine("The value you entered was: " + value + "\nIs this an integer? " + output);
Console.ReadLine();


Functions.cs

/// <summary>
/// Kollar in invärdet (value) är ett heltal eller ej
/// </summary>
/// <param name="value">invärde</param>
/// <returns>returenrar true eller false beror på om invärde är en integer/heltal.</returns>
public bool IntOrNot(string value)
{
try
{
int tempvalue = Convert.ToInt32(value); // Försöker omvandla value till en INT om det ej går blir det en catch
return true;
}
catch (FormatException) {  // möter inte upp parametern för ett intvärde och returnerar då false
return false;
}



Exempel med heltal:

Enter a number or someting: 3123123
The value you entered was: 3123123
Is this an integer? True


Exempel med övrig inmatning:

Enter a number or someting: 323g3r2323t33tgh
The value you entered was: 323g3r2323t33tgh
Is this an integer? False

Ej statisk metod

Tidigare övning/ar har jag använt mig av publika statiska metoder hela tiden.
Den senaste övningen var även den publik och statisk.
Nu har jag fixat till den så att den inte är statisk längre alls.

Fixat på följande sätt:

Program.cs

Console.Write("Ange 2-4 värden som är kommaseparerade (ex. 3,8,2,1): ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Det värde du matade in är: \n");
Console.Write(input + "\n\n");
Console.Write("Vänligen vänta så anropar vi rätt metod........\n");

// Skapar ett nytt objekt funktions som länkningen till Functions finns i om man vill göra den mer dynamisk.
// Nu är resterande av "FredrikBLL.BLL.Functions.myValues" private så dessa kommer jag inte åt
// förrutom att det går nu via myValuesMain beroende på inmatade värden.
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
string output = functions.myValuesMain(input);
// string output = FredrikBLL.BLL.Functions.myValuesMain(input);   // Tidigare...

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();


Functions.cs

/// <summary>
/// HuvudMetonden som kommer att anropa under metoder beroende på antalet angivna värden med kommaseparationer.
/// </summary>
/// <param name="value1">Parameter 1 / Tal 1</param>
/// <param name="value2">Parameter 2 / Tal 2</param>
/// <param name="value3">Parameter 3 / Tal 3</param>
/// <param name="value4">Parameter 4 / tal 4</param>
/// <returns>Returnerar vilken metod som returnerar ett svar.</returns>
public string myValuesMain(string input)
{
string output = "";
string[] inArray = input.Split(new char[] { ',' });

if (inArray.Length == 2)
{

string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]));
return returnvalue;
}

else if (inArray.Length == 3)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]));
return returnvalue;
}

else if (inArray.Length == 4)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]), Convert.ToInt32(inArray[3]));
return returnvalue;
}
else
{
return output = "Hittade inget passande";
}
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 2 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1 och 2</returns>
private string myValues(int value1, int value2)
{
int returnvalue = Convert.ToInt32(value1 + value2);
return Convert.ToString("Metod med 2 värden anropades.\nSumman av " + value1 + "+" + value2 + "=" + returnvalue);
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 3 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <param name="value3">parameter 3</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1, 2 och 3</returns>
private string myValues(int value1, int value2, int value3)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3);
return Convert.ToString("Metod med 3 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "=" + returnvalue);
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 4 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <param name="value3">parameter 3</param>
/// <param name="value4">parameter 4</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1, 2, 3 och 4</returns>
private string myValues(int value1, int value2, int value3, int value4)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3 + value4);
return Convert.ToString("Metod med 4 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "+" + value4 + "=" + returnvalue);
}

Lektion 05 - Metoder

Så har man läst en hel del om metoder och det var ju inte så himla mycket nytt egentligen.
Men nu har jag lekt en massa med det hela och första lektionen var då:

Skriv ett program som från konsolen möjliggör input av 2-4 tal som är kommaseparerade.
Skriv sedan tre statiska metoder, som alla har samma namn, som tar 2, 3 respektive 4 parametrar in och som returnerar summan av dessa (addera) och skriv sedan ut summan till användaren.
Anger användaren 2,2 (2 värden) så skall metoden med 2 parametrar anropas osv.

En lösning som jag fick lite hjälp med dock men som funkar riktigt ok är följande.

Program.cs

Console.Write("Ange 2-4 värden som är kommaseparerade (ex. 3,8,2,1): ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Det värde du matade in är: \n");
Console.Write(input + "\n\n");
Console.Write("Vänligen vänta så anropar vi rätt metod........\n");

string output = FredrikBLL.BLL.Functions.myValuesMain(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();


Functions.cs

/// <summary>
/// HuvudMetonden som kommer att anropa under metoder beroende på antalet angivna värden med kommaseparationer.
/// </summary>
/// <param name="value1">Parameter 1 / Tal 1</param>
/// <param name="value2">Parameter 2 / Tal 2</param>
/// <param name="value3">Parameter 3 / Tal 3</param>
/// <param name="value4">Parameter 4 / tal 4</param>
/// <returns>Returnerar vilken metod som returnerar ett svar.</returns>
public static string myValuesMain(string input)
{
string output = "";
string[] inArray = input.Split(new char[] { ',' });

if (inArray.Length == 2)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]));
return returnvalue;
}

else if (inArray.Length == 3)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]));
return returnvalue;
}

else if (inArray.Length == 4)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]), Convert.ToInt32(inArray[3]));
return returnvalue;
}
else
{
return output = "Hittade inget passande";

}

}

public static string myValues(int value1, int value2)
{
int returnvalue = Convert.ToInt32(value1 + value2);
return Convert.ToString("Metod med 2 värden anropades.\nSumman av " + value1 + "+" + value2 + "=" + returnvalue);
}

public static string myValues(int value1, int value2, int value3)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3);
return Convert.ToString("Metod med 3 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "=" + returnvalue);
}

public static string myValues(int value1, int value2, int value3, int value4)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3 + value4);
return Convert.ToString("Metod med 4 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "+" + value4 + "=" + returnvalue);
}


Exempel:

Ange 2-4 värden som är kommaseparerade (ex. 3,8,2,1): 2,3,5,9
Det värde du matade in är:

2,3,5,9

Vänligen vänta så anropar vi rätt metod........
Resultatet:
Metod med 4 värden anropades.
Summan av 2+3+5+9=19

Metoder

Nu är det dags att börja läsa en massa igen och testa lite innan det blir nya uppgifter att lösa.
Har nu kommit till Lektion 5 som innehåller Methods / Metoder.

Vilket åter igen påminner mig om att jag måste ta tag i detta med att gå till en optiker och kolla mina ögon.
Har märkt att när jag sitter och läser ex. saker ur en bok så händer det ofta att orden som blandar ihopp sig.
Antar och hoppas det har nått med mina ögon att göra så jag inte helt enkelt håller på att bli galen?

MENTAL NOTE: GÅ FÖR F-N TILL OPTIKERN OCH KOLLA DINA ÖGON GUBBE!

ForEach-Loop med förnamn

Uppgiften:

Skriv ett program som från konsolen möjliggör input av x antal förnamn som är mellanslagsseparerade.
Skriv sedan ut dem + deras ordnings siffra med hjälpa av en foreach-loop.
Ex: Olle Kalle Pelle
1: Olle
2: Kalle
3: Pelle


Program.cs

Console.Write("Ange ett par förnamn och separera dessa med ett space: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden:\n{0}\n", input);
string output = FredrikBLL.BLL.Functions.ForEachLoopMyNames(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();


Functions.cs

/// <summary>
/// Användaren matar in ex. förnamn med spaceseparationer.
/// </summary>
/// <param name="input">Förnamn med spaceseparation</param>
/// <returns>Returnerar varje namn med ordningssiffra före.</returns>
public static string ForEachLoopMyNames(string input)
{
int i = 0;
string output = "";
string[] values = input.Split(new char[] { ' ' });


foreach (string value in values)
{
output += i + " : " + value + "\n";
i++;
}

return output;
}


Mitt resultat:

Ange ett par förnamn och separera dessa med ett space: Olle Kalle Bosse Pelle Toker
Orginal inmatade värden:
Olle Kalle Bosse Pelle Toker

Resultatet:
0 : Olle
1 : Kalle
2 : Bosse
3 : Pelle
4 : Toker


My calculator is looping

Det är precis vad den gör så här tidigt på morron.
Fortsätter med loopar idag också vilket för framtidens arbete kommer att ha en himla massa loopar i sig.

Det jag skall göra nu är följande:

Skriv ett program som från konsolen möjliggör input av 3 numeriska värden och en operator.
De 2 första värdena skall ex. summeras, subtraheras.. beroende på inskickad operator.
3:e värdet skall ange hur många gånger programmet skall loopa.
Ex. värde1=2 värde2=5 värde3=4 operator=+
2+5=7
2+5=7
2+5=7
2+5=7

Min kod vart följande:

Program.cs

int value1, value2, loopvalue;
string result, CalcThis;

Console.WriteLine("Vänligen ange 2 tal som du vill räkna ut.");
Console.Write("Tal 1: ");
value1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Tal 2: ");
value2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Hur många gånger vill du loopa uträkningen? ");
loopvalue = Convert.ToInt32(Console.ReadLine());
Console.Write("vad för räknesätt? (+, - , * eller /) :");
CalcThis = Console.ReadLine();
result = FredrikBLL.BLL.Functions.LoopMyCalculator(value1, value2, loopvalue, CalcThis);

Console.WriteLine("Resultatet finner du nedan :");
Console.WriteLine(result);
Console.ReadLine();


Functions.cs

/// <summary>
/// Räknar ut värde 1 och 2 med hjälp av en operator och ett värde om hur många gånger programmet skall loopa.
/// </summary>
/// <param name="value1">Tal1</param>
/// <param name="value2">Tal2</param>
/// <param name="loopvalue">Ange hur många gånger programmet skall loopa</param>
/// <param name="CalcThis">Operatorn: +,-,* eller /</param>
/// <returns>Returnerar värdet från tal 1 (operator) tal 2 = svaret och loppar svaret antal gånger man anger det.</returns>
public static string LoopMyCalculator(int value1, int value2, int loopvalue, string CalcThis)
{
string result = "";
int i = 0;

while (i < loopvalue)                                   // Kontrollerar om i = antalet loopar man vill göra
{
if (CalcThis == "+")
result += value1 +  "+ " + value2 + " = " + Convert.ToString(value1 + value2) + "\n";
else if (CalcThis == "-")
result += value1 + " - " + value2 + " = " + Convert.ToString(value1 - value2) + "\n";
else if (CalcThis == "*")
result += value1 + " * " + value2 + " = " + Convert.ToString(value1 * value2) + "\n";
else if (CalcThis == "/")
result += value1 + " / " + value2 + " = " + Convert.ToString(value1 / value2) + "\n";
else
throw new ApplicationException("Fel värde");

i++;

}
return result; // returnerar resultatet.



Exempel:

Vänligen ange 2 tal som du vill räkna ut.
Tal 1: 5
Tal 2: 5
Hur många gånger vill du loopa uträkningen? 10
vad för räknesätt? (+, - , * eller /) :*

Resultatet finner du nedan :
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25


En riktigt bra början på min dag, helt klart!

EDIT:

Insåg att jag hade ett litet fel gällande utärkningen för dividera.
Eftersom svaret inte alltid är heltal där även om input är det så blir svaret 0 om man använder den som int.
Dvs, jag måste antingen hantera alla tal som decimaler vilket jag nog inte just nu tänker göra utan görom det enbart för just dividera..

Gör en liten ändring i Functions.cs som resulterar till detta:

public static string LoopMyCalculator(int value1, int value2, int loopvalue, string CalcThis)
{
string result = "";
decimal tempresult;
int i = 0;

while (i < loopvalue)                                   // Kontrollerar om i = antalet loopar man vill göra
{
if (CalcThis == "+")
{
tempresult = value1 + value2;
result += value1 +  "+ " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "-")
{
tempresult = value1 - value2;
result += value1 + " - " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "*")
{
tempresult = value1 * value2;
result += value1 + " * " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "/")
{
tempresult = (decimal)value1 / (decimal)value2;
result += value1 + " / " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else
throw new ApplicationException("Fel värde");

i++;

}
return result; // returnerar resultatet.

Autoformatering av kod i Visual Studio 2010

Autoformatering i Visual Studio 2010 är en bra funktion.

  • Håll ner CTRL och tryck sedan på K sedan D

Bra funktion som jag använder på tok för lite!

Jag orkar inte snurra mer nu

Fortfarande en himla massa loopar.
Denna gången så är det en foreach-loop med en break funktion.

Lyckades lösa det på ett bra sätt tycker jag?

Använd tidigare program, skriv bara ut värden fram till du stöter på siffran 5.
Kommer siffran 5 upp skriv ut värden fram till dess och sedan lägg till "Jag orkar inte snurra mer nu!"

Tar resultatet först....

Ange ett antal siffror, separera med komma tecken!: 9,8,7,6,5,4,3,2,1
Orginal inmatade värden: 9,8,7,6,5,4,3,2,1
Resultatet:

9
8
7
6
Jag orkar inte snurra mera nu!



Program.cs

onsole.Write("Ange ett antal siffror, separera med komma tecken!: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden: " + input);
string output = FredrikBLL.BLL.Functions.myForEachLoop3(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();



Functions.cs

public static string myForEachLoop3(string input)
{
string output = "";
string[] values = input.Split(new char[] { ',' });

foreach (string value in values)
{
if (value == "5")
{
output += "\n" + "Jag orkar inte snurra mera nu!";
break;
}
output += "\n" + value;

}


return output;
}




foreach-loop med continue funktion?!

Från min tidigare uppgift att skapa en foreach-loop och fixa till kommaseparerade värden skall jag nu göra följande.
Använd tidigare övning men returnera enbart de jämna kommaseparerade värden.
(Använd nyckelordet continue)


Jag har ett exempel på hur det kan se ut med att köra int hela vägen och ange då fasta "inmatade" värden:

public class Program
{
public static void Main(string [] args)
{
// Data värde
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// numQuery är en IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;

// skriv ut värdena med en foreach loop.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}

Nu skall jag bara försöka få detta till verklighet med egna inmatade värden och även kunna använda stings.

Edit:
Efter att insätt att IEnum är lite overkill och insätt att jag stirrat mig blind så behövde jag lite tips.
Nu hitta jag en lösning som är mer än förstående dessutom :-)

Program.cs

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{

Console.Write("Ange ett antal siffror, separera med komma tecken!: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden:\n{0}\n", input);
string output = FredrikBLL.BLL.Functions.myForEachLoop2(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();

}
}
}


Functions.cs

public static string myForEachLoop2(string input)
{
string output = "";
string[] values = input.Split(new char[] { ',' });


foreach (string value in values)
{
if (Convert.ToInt32(value) % 2 == 0)    //true så går den till continue (svaret blir 0), false så räknar den vidare!
output += "\n" + value;
else
continue;  // Hoppar till nästa post i values då value ej är delbart med 2 dvs 0.
}

return output;  // returnerar värdet tillbaka till program.cs
}


Får får inte lamm får foreach-loop

Då var det dags för lite ForEach-Loopar.
Behövde inte testa många gånger nu för att få detta rätt vilket jag vart riktigt glad över.
Inser att jag kanske börjar förstå en hel del...

Förklaring:

Skriv ett program som från konsolen möjliggör input av x antal kommaseparerade tal.
Skriv ut dessa värden på en egen rad med hjälp av en foreach-loop.

Koden i Program.cs

public static void Main(string[] args)
{
Console.Write("Ange ett antal siffror, separera med komma tecken!: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden:\n{0}\n", input);
string output = FredrikBLL.BLL.Functions.myForEachLoop(input);

Console.WriteLine("Resultatet:\n" + output);
Console.ReadLine();
}


Koden i Functions.cs

/// <summary>
/// Returnerar värden mellan , på varje rad istället.
/// Ex. Inmatat värde = 1,2,3,4,5
/// Resultat:
/// 1
/// 2
/// 3
/// 4
/// 5
/// </summary>
/// <param name="input">siffror med , separator</param>
/// <returns>returnerar en rad med inmatade siffror som har varit , separerade.</returns>

public static string myForEachLoop(string input)
{
string output = "";
string[] values = input.Split(new char[] {','});


foreach(string value in values)
{
output += "\n" + value;
}

return output;
}


FÅR LOOP?!

Bääääähäähääää? Nej så var det nog inte men nu har jag börjat med att förstå olika loop satser.
Lektion 4 är det jag håller på med nu.

Exempel på min kod:

Console.WriteLine("Mata in ett värde: ");
int input = Convert.ToInt32(Console.ReadLine());
int i = 1;
int r = 1;
for (; r <= input; i = r * r)
{
if (r > input)
break;

if (i * i == 0)
continue;

Console.Write("{0}, {1} * {1}\n", i, r++);
}
Console.WriteLine();
Console.ReadLine();


Resultatet:

Mata in ett värde: 4
1, 1 * 1
4, 2 * 2
9, 3 * 3
16, 4 * 4


Vad var tänken här?
Skriv ett program som från konsolen har en input av ett numeriskt värde.
Skriv sedan ut kvadraten av alla siffror från och med 1 till och med det angivna inmatade värdet med kommaseparering och denna måste använda en for-loop.

Så kan det vara, satt och försökte luska ut hur detta skulle gå till ganska läge måste jag säga.
Men så kom lunchen och jag fick annat att tänka på en kort sväng och efter det så visste jag tydligen direkt hur jag skulle lösa det hela!

Första dagen och in på den andra

Hej på er,

Igår var det min första dag på den "nya" avdelningen på jobbet.
Jag skulle äntligen börja sätta mig in i att få lära mig förstå hur C# fungerar.
Till en början så var det flytt av alla mina saker in till ett rum brevid P som kommer att vara min mentor under i alla fall första året tillsammans med N som sitter i rummet brevid.
När flytten var klar (kasta över dator och prylar till andra sidan korridoren) så fick jag en pärm som dom plockat ut från C# Station.
Så det är precis det jag skall forstätta med idag, koda lite console.
Har även fått en bunt skapade övningar till varje lektion som jag håller på med.

Men nu är det dags att gå till jobbet igen.

Mer om hur det går blir ikväll.

Kan bara säga tt jag tycker det är skit kul!

RSS 2.0