我的C语言源码应该怎样改进才能实现如下的所有功能?

学生学籍信息管理系统

学生的学籍信息包括:学号,姓名,性别,出生年月,籍贯,系别,专业,班级,电话。学生的学籍变化信息包括:学号,学籍变化内容(比如入学,转专业,退学,降级,休学,毕业等)、时间。学籍信息管理系统的功能要求:
(1) 系统以菜单方式工作,执行一次操作后重新显示一次菜单;
(2)
学生学籍信息和学生学籍变化信息利用文件保存;(3) 学生学籍信息的录入;
(4) 修改学生学籍信息:
(5) 删除学生学籍信息:
(6)
查找已知学号的学生学籍信息;(7) 查找已知姓名的学生学籍信息;
(8)按专业,班级浏览学生学籍信息;(9)录入学生的学籍变化信息;
(10)按学号查询学生学籍变化信息。

#include<stdio.h>
#include<stdlib.h>//定义杂项函数及内存分配函数 
#include<string.h>//字符串处理 
#include<conio.h>//定义控制台 
struct student
{
    char xuehao[100];//输入学号
    char name[100];//输入姓名
    char sex[100];//输入性别
    int born;//输入出生年月 
    char jiguan[100];//输入籍贯   
    char xibie[100];//输入系别
	char zhuanye[100];//输入专业 
    char banji[100];//输入班级
    char dianhua[100];//输入电话
    char xueji[100];   //学籍状态 
    char change_time;//变化时间 
} stu[1000];

void menu()//菜单
{
    system("cls"); //清屏 
    printf("*------------------欢迎使用学生学籍信息管理系统---------------------------*\n");
    printf("\n");
    printf("1.录入学生信息    2.删除学生信息     3.浏览学生信息\n");
    printf("4.修改学生信息    5.查询学生信息     6.查询学生学籍变化信息\n");
    printf("0.退出系统\n");
    printf("\n");
    printf("*-------------------------------------------------------------------------*\n");
}
void save_student(int m)
{
    int i;
    FILE *fp;  /*定义文件指针*/
    if ((fp=fopen("xuesheng.txt","w"))==NULL)
    {
        printf ("文件打开失败\n");
        exit(0);
    }
    for (i=0; i<m; i++){
        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
            printf("文件打开失败\n");
        if(i<m-1)  printf("\n");
     }
    if(fclose(fp)){
       printf("关闭文件失败\n");
	   exit(0);
	}
}
void save_change(int m)
{
	int i;
    FILE *fp; 
    if ((fp=fopen("xuejibianhua.txt","w"))==NULL)
    {
        printf ("文件打开失败\n");
        exit(0);
    }
    for (i=0; i<m; i++){
        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
            printf("文件打开失败\n");
        if(i<m-1)  printf("\n");
     }
    if(fclose(fp)){
       printf("关闭文件失败\n");
	   exit(0);
	}
}
int read_student()//打开文件,读取数据
{
    FILE *fp;    
    int i=0;
    if((fp=fopen("xuesheng.txt","r"))==NULL)
    {
        printf ("文件打开失败\n");
        exit(0);
    }
    else
    {
        do
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            i++;
        }
        while(feof(fp)==0);  /*检查文件结束*/ 
    }
    fclose(fp);
    return(i-1);
}
void read_change()//读取学籍变化信息
{
	FILE *fp;    
    int i=0;
    if((fp=fopen("xuejibianhua.txt","r"))==NULL)
    {
        printf ("文件打开失败\n");
        exit(0);
    }
    else
    {
        do
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            i++;
        }
        while(feof(fp)==0);  /*检查文件结束*/ 
    }
    fclose(fp);
    return(i-1);
}

int menuchoose()//选择菜单
{
    int n;
    menu();
    printf("请选择菜单0~6:");
    scanf("%d",&n);
    while( n<0 || n>6 )
    {
        menu();
        printf("选择菜单错误,请重新选择(0 ~ 6):");
        fflush(stdin);//清空输入缓冲区
    }
    return n;
}
void add()//添加学生信息
{
    int i,m,q,s=1;
    system("cls");
    printf("---------------输入学生信息---------------\n");
    printf("请输入需要添加学生的总人数:\n");
    scanf("%d",&m);
    for (i=0; i<m; i++)
    {
        printf("\n输入第%d个学生学籍信息.\n",i+1);
        printf("请输入学号:");
        scanf("%s",&stu[i].xuehao);
        for(q=0; q<m; q++)
        {
            if(strcmp(stu[q].xuehao,stu[i].xuehao)==0&&q!=i)  /*strcmp在两个字符串相同时返回0*/ 
            {
                printf("该学号已经存在,请重新输入:\n");
                printf("请输入学号:\n");
                s=1;
                scanf("%s",&stu[q].xuehao);
            }
        }
        printf("请输入姓名:");
        scanf("%s",&stu[i].name);
        printf("请输入性别:");
        scanf("%s",&stu[i].sex);
        printf("请输入出生年月:");
        scanf("%d",&stu[i].born);
        getchar();
        printf("请输入籍贯:");
        scanf("%s",&stu[i].jiguan);
        printf("请输入系别:");
        scanf("%s",&stu[i].xibie);
        printf("请输入专业:");
        scanf("%s",&stu[i].zhuanye);
        printf("请输入班级:");
        scanf("%s",&stu[i].banji);
        printf("请输入电话:");
        scanf("%s",&stu[i].dianhua);
        printf("请输入学籍变化:");
        scanf("%s",&stu[i].xueji);
    }
    save_student(m);
}
void show()  //(按专业或班级)浏览学生信息 
{
    system("cls");
    int i;
    char major[20];
    int m=read_student();  //读取学生信息 
    if(m==0) 
    {
        printf("\n暂无学生信息!\n");
        printf("是否添加学生信息?\n    是:1    否:2\n");
        int z;
        scanf("%d",&z);
        if(z==1)
            add();
        else
            menu();
    }
    else
    {
    	printf("\n输入查询的专业:");
        scanf("%s",&major);
        
        printf("----------------------%s专业学生的信息如下:--------------------------\n",major);
        printf("\n");
        printf("\t\t\t\t\t\t\t\n");
        for(i=0; i<m; i++)
        {
          if (!strcmp(stu[i].zhuanye,major))
          {
             printf("***************************************************************************************************************\n");
	         printf("* 学号*  姓名\t*  性别\t* 出生年月* 籍贯    * 系别\t\t*专业\t      * 班级 *电话\t*  学籍变化   *\n");
	         printf("***************************************************************************************************************\n");
	         printf("* %s *  %s *  %s\t*  %d * %s  * %s*%s * %s  *%s\t*  %s\t      *\n",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].born,stu[i].jiguan,stu[i].xibie,stu[i].zhuanye,stu[i].banji,stu[i].dianhua,stu[i].xueji);
	         printf("***************************************************************************************************************\n");
          }
        }
        system("pause");  /*系统命令行调用*/ 
    }
}
void del()//删除学生信息 
{
 
    int m=read_student();
    int i,j,n,t,flag;
    char xuehao[20];
    printf("\n 原有的学生信息为:\n");
    show();
    printf("\n");
    printf("请输入要删除的学生的学号:\n");
    scanf("%s",xuehao);
    for(flag=1,i=0; flag&&i<m; i++)
    {
        if(strcmp(stu[i].xuehao,xuehao)==0)  /*输入的学号与已知学生学号相同*/ 
        {
            printf("学号:%s\n",stu[i].xuehao);
            printf("姓名:%s\n",stu[i].name);
            printf("性别:%s\n",stu[i].sex);
            printf("出生年月:%d\n",stu[i].born);
            printf("籍贯:%s\n",stu[i].jiguan);
            printf("系别:%s\n",stu[i].xibie);
            printf("专业:%s\n",stu[i].zhuanye);
            printf("班级:%s\n",stu[i].banji);
            printf("电话:%s\n",stu[i].dianhua); 
            printf("学籍变化:%s\n",stu[i].xueji);
            printf("是否要删除此人信息?\n是请按1,否请按0:\n");
            scanf("%d",&n);
            if(n==1)
            {
                for(j=i; j<m-1; j++)
                {
                     /*调用字符串复制函数,使下一位学生信息覆盖上一位学生信息*/ 
                    strcpy(stu[j].xuehao,stu[j+1].xuehao);
                    strcpy(stu[j].name,stu[j+1].name);
                    strcpy(stu[j].sex,stu[j+1].sex);
                    stu[j].born=stu[j+1].born;
                    strcpy(stu[j].jiguan,stu[j+1].jiguan);
                    strcpy(stu[j].xibie,stu[j+1].xibie);
                    strcpy(stu[j].zhuanye,stu[j+1].zhuanye);
                    strcpy(stu[j].banji,stu[j+1].banji);
                    strcpy(stu[j].dianhua,stu[j+1].dianhua);
                    strcpy(stu[j].xueji,stu[j+1].xueji);
                }
                flag=0; /*已无学生信息存在*/ 
            }
        }
    }
    if(!flag)   /*学生信息被删除*/ 
        m=m-1;
    else
        printf("\n无此人信息!\n");
    save_student(m);
    printf("\n是否继续删除信息\n 继续请按1\n 退出请按0\n");
    scanf("%d",&t);
    switch(t)
    {
    case 1:
        del();
        break;
    case 0:
        menu();
        break;
    default :
        break;
    }
}
void xiugai()//修改学生信息
{
    system("cls");
    FILE *fp;
    int n,i,j,c,x,y;
    char m[10];
    n=read_student();
    show();
    printf("请输入要修改学生的学号或姓名:");
    scanf("%s",&m);
    do
    {
        printf("\n请选择要修改的选项:\n\n1.学号  2.姓名  3.性别  4.出生年月  5.籍贯  6.系别  7.专业  8.班级  9.电话  10.学籍变化  11.变化时间  12.取消并返回\n");
        printf("请选择:\n ");
        scanf("%d",&c);
        if(c>10||c<1)
        {
            menu();
            puts("\n选择错误!请重新选择!");
            fflush(stdin);//清空输入缓冲区
        }
    }
    while(c>10||c<1);
    for (i=0; i<n; i++)
    {
        if (!strcmp(stu[i].xuehao,m)||!strcmp(stu[i].name,m)) /*学号或姓名与已知学号或姓名相同时,执行操作*/ 
        {
            switch (c)
            {
            case 1:
                printf("学号:");
                scanf("%s",stu[i].xuehao);
                break;
            case 2:
                printf("姓名:");
                scanf("%s",stu[i].name);
                break;
            case 3:
                printf("性别:");
                scanf("%s",stu[i].sex);
                break;
            case 4:
                printf("出生年月:");
                scanf("%d",&stu[i].born);
                break;
            case 5:
                printf("籍贯:");
                scanf("%s",stu[i].jiguan);
                break;
            case 6:
                printf("系别:");
                scanf("%s",stu[i].xibie);
                break;
            case 7:
            	printf("专业:");
				scanf("%s",stu[i].zhuanye);
            case 8:
                printf("班级:");
                scanf("%s",stu[i].banji);
                break;
            case 9:
                printf("电话:");
                scanf("%s",stu[i].dianhua);
                break;
            case 10:
                printf("学籍变化:");
                scanf("%s",stu[i].xueji);
                break;
            case 11:
                printf("变化时间:");
                scanf("%s",stu[i].change_time);
                break;
            case 12:
                menu();/*返回主菜单*/
            }
            printf("是否保存?\n");
            printf("是:1\n否:2\n");
            scanf("%d",&x);
        }
    }
    if(x==1)
    {
        save_change(n);
        printf("保存成功!\n");
        printf("是否继续修改?继续:1  否:2\n");
        int p;
        scanf("%d",&p);
        if(p==1)
        {
            xiugai();
        }
        else
        {
            menu();
        }
    }
    else
    {
        printf("退出请按0,继续修改请按1\n");
        scanf("%d",&y);
        switch(y)
        {
        case 0:
            break;
        case 1:
            xiugai();
            break;
        }
    }
}
void shuchu(int c) //输出学生的信息
{
        printf("学号:%s\n",stu[c].xuehao);
        printf("姓名:%s\n",stu[c].name);
        printf("性别:%s\n",stu[c].sex);
        printf("出生年月:%d\n",stu[c].born);
        printf("籍贯:%s\n",stu[c].jiguan);
        printf("系别:%s\n",stu[c].xibie);
        printf("专业:%s\n",stu[c].zhuanye);
        printf("班级:%s\n",stu[c].banji);
        printf("电话:%s\n",stu[c].dianhua);
        printf("学籍变化:%s\n",stu[c].xueji);
        
}
void chazhao()//查询学生的信息
{
    system("cls");
    FILE *fp;
    int a1,b1,n,i;
    char t[10];
    n=read_student();
    printf("请输入要查找的学生的学号或姓名:");
    scanf("%s",&t);
    for(i=0; i<n; i++)
    {
        if (!strcmp(stu[i].xuehao,t)||!strcmp(stu[i].name,t))
        {
             printf("学号:%s\n",stu[i].xuehao);
             printf("姓名:%s\n",stu[i].name);
             printf("性别:%s\n",stu[i].sex);
             printf("出生年月:%d\n",stu[i].born);
             printf("籍贯:%s\n",stu[i].jiguan);
             printf("系别:%s\n",stu[i].xibie);
             printf("专业:%s\n",stu[i].zhuanye);
             printf("班级:%s\n",stu[i].banji);
             printf("电话:%s\n",stu[i].dianhua);
             printf("学籍变化:%s\n",stu[i].xueji);
             printf("是否继续查找?继续:1   返回主菜单:2\n");
             scanf("%d",&a1);
            switch(a1)
            {
            case 1:
                chazhao();
                return;
            case 2:
                system("cls");
                menu();
                return;
            }
        }
    } 
    if (strcmp(stu[i].xuehao,t)||strcmp(stu[i].name,t))
    {
        printf("无该学生信息!\n");
        printf("是否继续查找?   继续:1    返回主菜单:2\n");
        scanf("%d",&b1);
        switch(b1)
        {
        case 1:
            chazhao();
            return;
        case 2:
            menu();
            return;
        }
    }
}
void Student_changes()//查询学籍变化信息
{
	system("cls");
    FILE *fp;
	int i,n,c1;
	char k[10];
	n=read_change();
	printf("请输入要查找的学生的学号:");
	scanf("%s",&k);
	for(i=0; i<n; i++)
    {
        if (!strcmp(stu[i].xuehao,k))
        {
        	 printf("\n%s的学籍变化情况如下:\n",stu[i].xuehao);
             printf("学号:%s\n",stu[i].xuehao);
             printf("姓名:%s\n",stu[i].name);
             printf("性别:%s\n",stu[i].sex);
             printf("出生年月:%d\n",stu[i].born);
             printf("籍贯:%s\n",stu[i].jiguan);
             printf("系别:%s\n",stu[i].xibie);
             printf("专业:%s\n",stu[i].zhuanye);
             printf("班级:%s\n",stu[i].banji);
             printf("电话:%s\n",stu[i].dianhua);
             printf("学籍变化:%s\n",stu[i].xueji);
             printf("变化时间:%s\n",stu[i].change_time);
             printf("是否继续查找?继续:1   返回主菜单:2\n");
             scanf("%d",&c1);
            switch(c1)
            {
            case 1:
                Student_changes();
                return;
            case 2:
                system("cls");
                menu();
                return;
            }
        }
    } 
    if (strcmp(stu[i].xuehao,k))
    {
        printf("无该学生的学籍变化信息!\n");
    }
        menu();
             
 } 
int main()
{
    int test=1;
    while(test)
    {
        switch(menuchoose())
        {
        case 0:
            test=0;
            printf("\n          ^-^谢谢使用!^-^         \n");
            break;
        case 1://增加学生学籍信息
            add();
            break;
        case 2://删除学生学籍信息
            del();
            break;
        case 3://显示学生学籍信息
            show();
            break;
        case 4://修改学生学籍信息
            xiugai();
            break;
        case 5://查询学生学籍信息
            chazhao();
            break;
        case 6://查询学籍变化信息 
		    Student_changes();
		    break;
        
        }
    }
    return 0;
}

 

大佬能帮解决一下吗