cerr << "File " << fname << " could not be opened.";
Similarly, test after read write out to the file, to see if the write was successful.
report << s.admno;
cerr << "Unable to write the admission number to file " << fname;
I realize that this is tedious, but it is the best way to ensure that the file is written correctly.
On a possibly related note, I see that you are trying to write out the variable s directly to the file. You cannot effectively do this with a structure, however; all you'll get it the pointer to the structure, not the values inside of it. Even if it were to write the structure, the data would be useless, as any pointers or offsets would be invalid when you try to read it back. You need to write out the individual elements of the structure (a process called serialization) in order to get a useful value written to the file.
C and C++ do not provide direct support for serialization. It is however possible to write your own serialization functions, since both languages support writing binary data. Besides, compiler-based solutions, such as the ODB ORM system for C++, are capable of automatically producing serialization code with few or no modifications to class declarations. Another popular serialization framework is Boost.Serialization  from the Boost Framework.
In this case, it is simply a matter of writing out the individual elements of the structure in some appropriate order. It doesn't have to be anything fancy; a comma-separated values (CSV) file will do the trick, I would expect. Can you post the structure in question?
Not necessarily, I hope. If you look at the Google book I'd linked earlier, you'll see that there was also a chdir() (change directory) function, which should let you use directories other than the one you started in. You'd still be limited to the DOS environment, but you could at least move around among the directories. Keep in mind also that directories with long names can still be referenced by shorter, mangled names, for example, "C:\Documents and Settings\" becomes "C:\DOCUME~1\" for DOS programs. If all else fails, you can put the Reports directory in the root directory, as "C:\Reports". At least I am hoping that should work.
Don't forget to check if the directory exists (using searchpath() , I think); if it doesn't, use mkdir() to create it before you use it.
For what it's worth, most commercial Windows software puts "hidden" data in %APPDATA%/<ProgramName>/whateverYouWant. User files, by default, are placed somewhere under "My Documents" (or "Documents and Settings/<user>" in XP). Search for SHGetSpecialFolderPath function on msdn.microsoft.com for more info on how to get the actual directory for constant-named conceptual folders.
I'm not a TurboC user, so I can't help with compiler-specific limitations.
As for how to obtain the text of the window to stay where you want to keep it, and scroll to where you want, you may have to code yourself. I am not a user of TC to all these functions are not part of standard C + +.