关于C语言文件操作的有关问题

关于C语言文件操作的问题
我编写的一个关于C语言文件操作的程序段,但是运行却得不到预期结果,调试过感觉是输入输出文件操作那个地方出错,但是却不知道错在哪里,请大家帮忙看下,谢谢了!!
      其他操作函数我没写上,就下面这个程序段,大家帮忙看看!!

#include <stdio.h>
#include <stdlib.h>

struct   student                 /*   学生档案   */
{     char   num[10];             /*   学号   */
      char   name[12];           /*   姓名   */
      char   sex[4];               /*   性别   */
      char   tel[15];             /*   电话   */
      char   addr[50];
};

char   filename[30];             /*   学生信息表名   */
FILE   *fp;

void   ListCreate();             /*   建立信息表   */
void   ListAdd();                   /*   添加   */
void   ListSearch();             /*   查找   */
void   ListModify();             /*   修改   */
void   ListDelete();             /*   删除   */
void   ListPrint();               /*   输出   */
void   exit();                         /*   退出   */

/*------------------------------------主函数----------------------------------------*/
void   main()
{     struct   student   stu;             /*   链表结构体变量*/
      int   n;
      ListCreate();
      while(1)
      {     printf( "\nAdd         :(Please   enter   1) ");
            printf( "\nSearch:(Please   enter   2) ");
            printf( "\nUpdate:(Please   enter   3) ");
            printf( "\nDelete:(Please   enter   4) ");
            printf( "\nCount   :(Please   enter   5) ");
            printf( "\nOrder   :(Please   enter   6) ");
            printf( "\nOutput:(Please   enter   7) ");
            printf( "\nQuit     :(Please   enter   0) ");
            printf( "\nPlease   Choose: ");
            scanf( "%d ",&n);
            if((n> =0)&&(n <=5))
            {     switch(n)
  {   /*   case   1:   ListAdd();             break;         添加   */
                        case   2:   ListSearch();       break;       /*   查找   */
                        case   3:   ListModify();       break;       /*   修改   */