>>it only reads the lines
Thats what getline() does. It places all information in the input stream up to the indicated terminating character into the string indicated. If it the end of file indicator, EOF, before it finds a terminating char it will also cease input into the string indicated. Since the default deliminting value is the newline char, if there is no newline char in the file, then it will read in the whole file into a single string. In this case, there is probably a newline char at the end of each line. Therefore each line will be read into a "different" string. If you change the terminating char to be a colon char like this:
string temp;
getline(indata, temp, ':');
then you could read in the initial line of the file up to the colon after Year, remove the colon from the input stream, and just don't do anything with temp if you want. Then you could use a call to the >> operator to read the year into an int variable for later use if you want. You can break up (parse) the entire file into strings and numerical variables using getline() to read in strings and the >> operator to read in the numerical values, storing what you want in appropriate variables/arrays/whatever.
Be aware however that >> doesn't remove terminating whitespace char from the input stream. For instance it won't remove the newline char that's present in the file after 2006, even though you don't see a newline char when reading the file with your eyes. Therefore if you next call getline() with the default newline char as the terminating char the first thing getline() will find in the input stream is the newline char left behind by >> and it won't put anything useful in the string indicated. Then if you try reading 3 into a int variable the program will likely crash, because the string "No. of Employess:" is still in the input stream and you can't put a string into an int. To prevent this you should call the ignore() istream method after the call to >> if you are going to use a call to getline() next. Since you are reading in a file, it's unlikely there is more than one new line at the end of each line, though if there are any "empty" lines in the file there may be two newlines in succession. If there aren't any empty lines in the file, and your post suggests there isn't, then ignoring just a single char after the last consecutive call to >> should work. Otherwise you are going to need a more sophisticated syntax.
To avoid the hassle of throwing in calls to ignore() it is perfectly acceptable to read in the file line by line as one string per line using nothing but getline() as you originally did. However, then you would need to parse each string using a stringstream or a function that you create yourself thereby creating strings you can ignore and numerical variables you want to store.
It's probably just as easy to parse the file as you read it since it is predictable, but the choice is yours.
>>Why are there only three lines? Shouldn't there be four
Probably a typo and should be 3 instead of 4 just like the second number in the employee ID numbers are probably all 2s instead of 3s so that all three employees are represented in 2006 and 2005 rather than 3 different employees in each year, but who knows for sure.