Task

Write a simple tool to track a small set of data.

The tool should have a command-line interface to enter at least two different values.

The entered data should be stored in a structured format and saved to disk.

It does not matter what kind of data is being tracked.   It could be a collection (CDs, coins, baseball cards, books), a diary, an electronic organizer (birthdays/anniversaries/phone numbers/addresses), etc.



You should track the following details:

 A description of the item. (e.g., title, name)
 A category or tag (genre, topic, relationship such as “friend” or “family”)
 A date (either the date when the entry was made or some other date that is meaningful, like the birthday); the date may be generated or entered manually
 Other optional fields


The command should support the following Command-line arguments to run:

 Add a new entry
 Print the latest entry
 Print the latest entry for each category
 Print all entries sorted by a date


The category may be realized as a tag or as structure (by making all entries in that category subitems)

The file format on disk should be human readable, but it need not be standardized.   A natively available format that doesn't need an external library is preferred.   Avoid developing your own format if you can use an already existing one.   If there is no existing format available, pick one of:

   JSON
   S-Expressions
   YAML
   others


Related task

   Take notes on the command line 


 
using System;
using System.IO;
 
namespace Simple_database
{
	class Program
	{
		public static void Main(string[] args)
		{
			//
			// For appropriate use of this program
			// use standard Windows Command Processor or cmd.exe
			//
			// Create cmd.bat file at the same folder with executive version
			// of program Simple_database.exe, so when started, the correct
			// file path will be automatically set to cmd console.
			//
			// Start notepad, write only cmd.exe and save file as cmd.bat
			// 
			// To start cmd just double click at cmd.bat file.
			//
			//
			//
			// Console application command line start command
			// 
			// application name.exe [argument] [argument parameters]
			//
			//
			// Command line argument followed by parameters
			//
			// [a] - Add new entry
			//
			// ["data1"]["data2"]["data3"]...["data n"]
			//
			// ["data1"] - Data category !
			// ["data2"] - Data
			// ["data3"] - Data
			//
			//
			// NOTICE !
			//
			// First parameter is taken for data category.
			//
			//
			//
			// Command line argument with no parameters
			//
			// [p1] - Print the latest entry
			//
			// [p2] - Print the latest entry for each category
			//
			// [p3] - Print all entries sorted by a date
			//
			//
			//
 
			//
			// Command line example
			//
			// Small_database.exe [a] ["home"] ["+398125465458"] ["My tel number"]
			//
			// Small_database.exe [a] ["office"] ["+398222789000"] ["Boss"]
			//
			// Small_database.exe [a] [cd] ["Action movie"] ["Movie title"]
			// Small_database.exe [a] [cd] ["SF movie"] ["Movie title"]
			// Small_database.exe [a] [dvd] ["Action movie"] ["Movie title"]
			//
			//
			// NOTICE !
			//
			// Brackets and space between arguments and parameters are necessary.
			// Quotes must be used when parameters have more than one word.
			//
			// If not used as shown in examples, program will show error message.
			//
			//
 
 
			//
			// Check command line for arguments
			// 
			//
			if(args.Length==0)
			{
				Console.WriteLine();
				Console.WriteLine(" Missing Argument Error. ");
				Console.WriteLine();
			}
			else
			{
				switch (args[0])
				{
						case "[a]" : Add_New_Entry(args);
						break;
 
						case "[p1]": Print_Document("Print the latest entry.txt");
						break;
 
						case "[p2]": Print_Document("Print the latest entry for each category.txt");
						break;
 
						case "[p3]": Print_Document("Print all entries sorted by a date.txt");
						break;
 
						default :
						{
							Console.WriteLine();
							Console.WriteLine(" Incorrect Argument Error. ");
							Console.WriteLine();
						}
						break;
				}
			}
		}
 
		static void Add_New_Entry(string [] args)
		{
 
			//
			// Check parameters
			//
			//
			// Minimum one parameter, category
			//
			if(args.Length==1)
			{
				Console.WriteLine();
				Console.WriteLine(" Missing Parameters Error..... ");
				Console.WriteLine();
			}
			else
			{
				bool parameters_ok = true;
				foreach (string a in args)
				{
					if(!a.StartsWith("[") || !a.EndsWith("]"))
					{
						parameters_ok = !parameters_ok;
						break;
					}
				}
				//
				// Add new entry to Data base document
				//
				if(parameters_ok)
				{
					//
					//
					//
					Console.WriteLine();
					Console.WriteLine(" Parameters are ok..... ");
					Console.WriteLine();
					Console.WriteLine(" Writing new entry to database..... ");
					//
					// Create new Data base entry
					//
					args[0] = string.Empty;
					string line = string.Empty;
					foreach (string a in args)
					{
						line+=a;
					}
					line+="[" + DateTime.Now.ToString() + "]";
					args[0] = "[" + DateTime.Now.ToString() + "]";
					//
					// Write entry to Data base
					// 
					StreamWriter w = new StreamWriter("Data base.txt",true);
					w.WriteLine(line);
					//
					// Close and dispose stream writer
					//
					w.Close();
					w.Dispose();
					//
					//
					//
					Console.WriteLine();
					Console.WriteLine(" New entry is written to database. ");
 
					Create_Print_Documents(args);
 
					//
					//
					//
					Console.WriteLine();
					Console.WriteLine(" Add new entry command executed. ");
					//
					//
					//
				}
				else
				{
					Console.WriteLine();
					Console.WriteLine(" ! Parameters are not ok ! ");
					Console.WriteLine();
					Console.WriteLine(" Add new entry command is not executed. ");
					Console.WriteLine();
				}
			}
		}
 
		static void Create_Print_Documents(string [] args)
		{
			//
			//
			//
			Console.WriteLine();
			Console.WriteLine(" Creating new print documents. ");
			//
			// Create "Print all entries sorted by a date.txt"
			//
			File.Copy("Data base.txt","Print all entries sorted by a date.txt",true);
			//
			//
			//
			Console.WriteLine();
			Console.WriteLine(" Print all entries sorted by a date.txt created. ");
			//
			// Create "Print the latest entry.txt"
			//
			//
			// Create new entry
			//
			string line = string.Empty;
			foreach (string a in args)
			{
				line+=a;
			}
			//
			StreamWriter w = new StreamWriter("Print the latest entry.txt");
			//
			w.WriteLine(line);
			//
			w.Close();
			w.Dispose();
			//
			//
			//
			Console.WriteLine();
			Console.WriteLine(" Print the latest entry.txt created. ");
			//
			// Create "Print the latest entry for each category.txt"
			//
			string latest_entry = string.Empty;
			foreach (string a in args)
			{
				latest_entry+=a;
			}
 
			if(!File.Exists("Print the latest entry for each category.txt"))
			{
				File.WriteAllText("Print the latest entry for each category.txt",latest_entry);
			}
			else
			{
				StreamReader r = new StreamReader("Print the latest entry for each category.txt");
				//
				w = new StreamWriter("Print the latest entry for each category 1.txt",true);
				//
				line = string.Empty;
				//
				while(!r.EndOfStream)
				{
					line = r.ReadLine();
					if(line.Contains(args[1].ToString()))
					{
						w.WriteLine(latest_entry);
						latest_entry = "ok";
					}
					else
					{
						w.WriteLine(line);
					}
				}
				// add new category
				if(latest_entry != "ok")
					w.WriteLine(latest_entry);
				//
				w.Close();
				w.Dispose();
				//
				r.Close();
				r.Dispose();
				//
				File.Copy("Print the latest entry for each category 1.txt",
				          "Print the latest entry for each category.txt",true);
				//
				File.Delete("Print the latest entry for each category 1.txt");
				//
				//
				//
				Console.WriteLine();
				Console.WriteLine(" Print the latest entry for each category.txt created. ");
				Console.WriteLine();
			}
		}
 
		static void Print_Document(string file_name)
		{
			//
			// Print document
			//
			Console.WriteLine();
			Console.WriteLine(file_name.Replace(".txt","")+ " : ");
			Console.WriteLine();
			//
			StreamReader r = new StreamReader(file_name);
			//
			string line = string.Empty;
			//
			line = r.ReadToEnd();
			//
			Console.WriteLine(line);
			//
			r.Close();
			r.Dispose();
			//
			//
			//
		}
	}
}
 