From 40f0b61b496462ab263722c1784176d6ee2e1e7f Mon Sep 17 00:00:00 2001 From: dvdmrk Date: Mon, 12 Sep 2016 18:37:31 -0400 Subject: [PATCH 1/2] asdf --- ...eek2.Challenge.csproj.FileListAbsolute.txt | 1 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6963 -> 7037 bytes 2 files changed, 1 insertion(+) diff --git a/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/CodeLou.CSharp.Week2.Challenge.csproj.FileListAbsolute.txt b/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/CodeLou.CSharp.Week2.Challenge.csproj.FileListAbsolute.txt index 0302706..8a7421d 100644 --- a/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/CodeLou.CSharp.Week2.Challenge.csproj.FileListAbsolute.txt +++ b/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/CodeLou.CSharp.Week2.Challenge.csproj.FileListAbsolute.txt @@ -1,2 +1,3 @@ C:\Users\jfraney1\Source\Repos\CodeLou.CSharp.Week2.Challenge\CodeLou.CSharp.Week2.Challenge\bin\Debug\CodeLou.CSharp.Week2.Challenge.exe.config C:\Users\Brian\CodeChallenges\Challenges\CS Week2\CodeLou.CSharp.Week2.Challenge\CodeLou.CSharp.Week2.Challenge\bin\Debug\CodeLou.CSharp.Week2.Challenge.exe.config +C:\Users\david\Documents\GitHub\C-Sharp-Weekly-Challenge\Challenges\Week2\CodeLou.CSharp.Week2.Challenge\CodeLou.CSharp.Week2.Challenge\bin\Debug\CodeLou.CSharp.Week2.Challenge.exe.config diff --git a/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Challenges/Week2/CodeLou.CSharp.Week2.Challenge/CodeLou.CSharp.Week2.Challenge/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 4f40cf818ee4ddc86635857a41a64d92eef18302..1dce84ee53a95340b9c573f1a712946464497181 100644 GIT binary patch delta 242 zcmdmN_SbB~5^lHMjLudup~b01#W5*~Wtk~4F8Rr&xv6<2#WC)gB_5?oG0wWd8Hq&& zy5Xs***TTE&KZe0IjMQ+sWEU?am-|CUYE&YJU84XQN_5;(!70KR5A}XRR*|Y}^8{WmF4DAZR*;Bg1^~TuJ$e8D From b821bb13283815f716bfd374eb6fb7f14f023e1c Mon Sep 17 00:00:00 2001 From: dvdmrk Date: Mon, 12 Sep 2016 19:03:08 -0400 Subject: [PATCH 2/2] adding week 3 --- .../CodeLou.CSharp.Week3.Challenge.sln | 22 ++++ .../CodeLou.CSharp.Week3.Challenge/App.config | 6 + .../CalendarItemBase.cs | 7 ++ .../CodeLou.CSharp.Week3.Challenge.csproj | 69 ++++++++++++ .../ICalendarItemRepository.cs | 19 ++++ .../CodeLou.CSharp.Week3.Challenge/Program.cs | 104 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 ++++++ .../Reminder.cs | 6 + .../ReminderRepository.cs | 80 ++++++++++++++ .../packages.config | 4 + 10 files changed, 353 insertions(+) create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.sln create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/App.config create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CalendarItemBase.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.csproj create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ICalendarItemRepository.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Program.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Properties/AssemblyInfo.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Reminder.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ReminderRepository.cs create mode 100644 Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/packages.config diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.sln b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.sln new file mode 100644 index 0000000..5420892 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeLou.CSharp.Week3.Challenge", "CodeLou.CSharp.Week3.Challenge\CodeLou.CSharp.Week3.Challenge.csproj", "{4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/App.config b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CalendarItemBase.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CalendarItemBase.cs new file mode 100644 index 0000000..c4f99d8 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CalendarItemBase.cs @@ -0,0 +1,7 @@ +namespace CodeLou.CSharp.Week3.Challenge +{ + public abstract class CalendarItemBase + { + public int Id { get; set; } + } +} diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.csproj b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.csproj new file mode 100644 index 0000000..21ac517 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge.csproj @@ -0,0 +1,69 @@ + + + + + Debug + AnyCPU + {4A28B7B6-2BE2-44A1-9D6A-B09C39E4D33F} + Exe + Properties + CodeLou.CSharp.Week3.Challenge + CodeLou.CSharp.Week3.Challenge + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ICalendarItemRepository.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ICalendarItemRepository.cs new file mode 100644 index 0000000..50e5e43 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ICalendarItemRepository.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace CodeLou.CSharp.Week3.Challenge +{ + public interface ICalendarItemRepository where T : CalendarItemBase + { + T FindById(int id); + T Update(T item); + void Delete(T item); + + IEnumerable FindByDate(DateTime date); + IEnumerable GetAllItems(); + string ToJson(); + void LoadFromJson(string json); + } +} diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Program.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Program.cs new file mode 100644 index 0000000..c94ff5a --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Program.cs @@ -0,0 +1,104 @@ +using System; +using System.IO; + +namespace CodeLou.CSharp.Week3.Challenge +{ + class Program + { + static void Main(string[] args) + { + // Overview: + // In this assignment, you will be creating a calendar application that will load and save data. An example of loading and saving data has been provided. + // This calendar application will accept multiple event types which will be represented by their own class types. + // You will be dealing with Appointments, Meetings, and Reminders. + + // Task 1: + // Create new classes that will represent the calendar items that you will be using. + // Each of your classes will inherit from the CalendarItemBase abstract class. + // Reminders have already been created as an example. + + // Task 2: + // Define Your Data + // Appointments need to be assigned a start date and time, an end date and time, and a location. + // Meetings need to be assigned a start date and time, an end date and time, a location, and attendees. You can decide what data you need for attendees. + // Reminders need to be assigned a start date and time. + // Hint: Use inheritance to make your life easier. + + // Task 3: + // Add the missing code to the ReminderRepository. Hint: Look for instances of NotImplementedException. + // Create repository classes for Appointments and Meetings. Use the ReminderRepository as an example. + + // Task 4: + // We want our application to load data and to save data. The process for reminders has already been created. You will need to do the same thing + // for the other data types. + var reminderRepository = new ReminderRepisitory(); + if (File.Exists("Reminders.json")) //Note: these files are created in the same folder as your .exe + //Note: What happens when this file is improperly formatte? Can you handle this case? + reminderRepository.LoadFromJson(File.ReadAllText("Reminders.json")); + + // Hint: var appointmentRepository = new AppointmentRepository(); etc... + + // Task 5: + // Fill in the missing options A, V, F, D for all classes + var sessionEnded = false; + while (!sessionEnded) + { + Console.WriteLine("Q: save and quit"); + Console.WriteLine("A: add item"); + Console.WriteLine("V: view all"); + Console.WriteLine("F: find by date"); + Console.WriteLine("D: delete an item"); + Console.WriteLine(); + + Console.Write("Select an action: "); + var selectedOption = Console.ReadKey().KeyChar; + Console.Clear(); + + switch (selectedOption) + { + case ('Q'): + //End the session when they select q + sessionEnded = true; + break; + case ('A'): + Console.WriteLine("A: Appointment"); + Console.WriteLine("M: Meeting"); + Console.WriteLine("R: Reminder"); + Console.WriteLine(); + Console.Write("Select a type:"); + var selectedType = Console.ReadKey().KeyChar; + Console.Clear(); + + switch (selectedType) + {//switch statements require a "break;", be careful not to experience this error + case ('A'): + case ('M'): + throw new NotImplementedException(); + break; + case ('R'): + var newReminder = reminderRepository.Create(); + break; + default: + //Note: The $"abc {variable} def" syntax below is new syntactic sugar in C# 6.0 that can be used + //in place of string.Format() in previous versions of C#. + Console.WriteLine($"Invalid Type {selectedType}, press any key to continue."); + Console.Read(); + break; + } + + break; + case ('V'): + case ('F'): + case ('D'): + throw new NotImplementedException(); + break; + default: + Console.WriteLine($"Invalid Option {selectedOption}, press any key to continue."); + Console.Read(); + break; + } + } + File.WriteAllText("Reminders.json", reminderRepository.ToJson()); + } + } +} diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Properties/AssemblyInfo.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bd1381a --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CodeLou.CSharp.Week3.Challenge")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CodeLou.CSharp.Week3.Challenge")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4a28b7b6-2be2-44a1-9d6a-b09c39e4d33f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Reminder.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Reminder.cs new file mode 100644 index 0000000..34efd74 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/Reminder.cs @@ -0,0 +1,6 @@ +namespace CodeLou.CSharp.Week3.Challenge +{ + public class Reminder: CalendarItemBase + { + } +} diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ReminderRepository.cs b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ReminderRepository.cs new file mode 100644 index 0000000..d94bc92 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/ReminderRepository.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; //Build the project to cause Visual Studio to load this external NuGet package. + +namespace CodeLou.CSharp.Week3.Challenge +{ + public class ReminderRepository: ICalendarItemRepository + { + //Info: This is a neat type that allows you to lookup items by ID, be careful not to ask for an item that isn't there. + private readonly Dictionary _dictionary; + + public ReminderRepository() + { + _dictionary = new Dictionary(); + } + + public Reminder Create() + { + //Challenge: Can you find a more efficient way to do this? + var nextAvailableId = 0; + foreach (var currentId in _dictionary.Keys) + { + if (nextAvailableId > currentId) + continue; + if (nextAvailableId < currentId) + break; + + nextAvailableId++; + } + + var reminder = new Reminder(); + reminder.Id = nextAvailableId; + _dictionary.Add(nextAvailableId, new Reminder()); + + return reminder; + } + + //Callenge: Are you finding that you are writing this same code many times? Is there a better way? + //Could you use inheritance? + public Reminder FindById(int id) + { + throw new NotImplementedException(); + } + + public Reminder Update(Reminder item) + { + throw new NotImplementedException(); + } + + public void Delete(Reminder item) + { + throw new NotImplementedException(); + } + + public IEnumerable FindByDate(DateTime date) + { + throw new NotImplementedException(); + } + + public IEnumerable GetAllItems() + { + throw new NotImplementedException(); + } + + public string ToJson() + { + return JsonConvert.SerializeObject(_dictionary, Formatting.Indented); + } + + public void LoadFromJson(string json) + { + var dictionary = JsonConvert.DeserializeObject>(json); + foreach (var item in dictionary) + { + //This will add or update an item + _dictionary[item.Key] = item.Value; + } + } + } +} diff --git a/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/packages.config b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/packages.config new file mode 100644 index 0000000..9d64bf3 --- /dev/null +++ b/Challenges/Week3/CodeLou.CSharp.Week3.Challenge/CodeLou.CSharp.Week3.Challenge/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file