When you have classes in different packages that need to be compiled together, you need to understand how Java handles packages. By default, the Java compiler treats packages as relative to where it is being run from - that is, it expects the packages it encounters to be in subdirectories of where it is running. When you run it from the 'person' package directory, it finds Dave.java because you told it to compile Dave.java. When it encounters person.Person in the Dave.java code, it looks for a subdirectory called 'person' containing class Person.java. It doesn't find it because it is already running in the person directory.
There are two ways to fix this - either run the compiler from the 'package root' directory - the directory that contains all the packages, or use the classpath option to tell javac where to find the package root directory.
For example, running javac from the package root directory:
javac person\Dave.java
In practice, for non-trivial applications, the classpath option is generally used, because it means you can run javac from anywhere and it will know where to find the other classes:
c:\>javac
-classpath c:\projects\exercise1\src c:\projects\exercise1\src\person\Dave.java
Above, the compiler is running from the root of drive c: with a classpath to the package root (bolded) and it is being asked to compile the Dave.java file. It will now use the classpath to find all the files referred to by Dave.java. You can add other package root directories to the classpath by separating them with a semicolon ';'.