Ending a case block with a recursive call back into main is a very bad idea. Trust me on this; you definitely do not want to do that. What I mean is this:
Code:
case 1:
  // some code (skipped)
  main();
  break;
Instead what you need is a loop construct, for example:
Code:
for (int exitflag=0; !exitflag; )
{
  // display the menu here
  switch (choice)
  {
    case 1:
      // case 1 stuff
      break;

    case 2:
      // case 2 stuff
      break;

    // other cases

    case 5:
      // case 5 stuff
      break;

    case 6:
      exitflag=1;
      break;
  }
}
This will loop until exitflag is set to 1, which is done in case 6. When case 6 is selected, the loop will terminate. After the other cases have run, because of the loop they will return to the point where the menu is displayed, which I think is what you want.

Try simplifying the code until you've got the structure sorted out. There is a lot of clutter in the program, and with the lack of formatting it's no surprise you can't figure it out. *I* wouldn't be able to figure it out given the state of the code, and my first step would be to reformat the code. (Actually my first step would be to get an exact spec of the project and find out what the code is supposed to do.)