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 "";
}
}

Kommentarer

Kommentera inlägget här:

Namn:
Kom ihåg mig?

E-postadress: (publiceras ej)

URL/Bloggadress:

Kommentar:

Trackback
RSS 2.0