数据被重复保存在文本文档中

现在我这个学生信息管理系统增加一组新数据,它会在我需要保存的地方重复出现几组,搞不明白

代码呢,不放代码鬼知道你做了什么骚操作了
无非2种原因:
1.新增一组你就应该保存一组,你如果无脑循环添加那肯定是添加很多组
2.无脑添加如果你每次把文件清空重新添加那也没问题,但是如果你每次往后面追加那肯定是追加很多条

可以把代码贴出来下哟

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include<conio.h>
#define N 100//最大学生数 
#define LEN 15

int n=56; 
struct student {  //定义一个结构体数组 
    char no[11];  //学生学号 
    char name[30];//学生姓名 
    char sex[10];//学生性别 
    char clname[10];//学生班级 
    int age;//学生年龄 
    int scoremath;//数学 
    int scoreEnglish;//英语 
    int scorephysics;//物理 
    int scoreprocedure;//程序 
    int scoresixiu;//思修 
    int scorezhongchuan;//中传 
} stu[N];//N为宏定义,最大学生数 

void MainMenu();  
void add();
void dlt(); 
void modify(); 
void search(); 
void display(); 
void exit();
int read(struct student []);
int write(student&stu);


int main()
{ 
    read(stu);
    while(1)
    {
        MainMenu();
    }
    system("pause");
    return 0;
}

void MainMenu()//主菜单 
{
    printf("******************************\n");
    printf("\n     学生成绩管理系统      \n\n");
    printf("******************************\n");
    printf("****1、添加新学生信息     ***\n");
    printf("******************************\n");
    printf("****2、删除学生信息       ***\n");
    printf("******************************\n");
    printf("****3、修改学生信息       ***\n");
    printf("******************************\n");
    printf("****4、查找学生信息       ***\n");
    printf("******************************\n");
    printf("****5、显示学生信息       ***\n");
    printf("******************************\n");
    printf("****6、退出系统           ***\n");
    printf("******************************\n"); 
    int num;
    while(1)
    {
        printf("请输入您的选项:\n");
        scanf("%d",&num);
        switch(num)
        {
            case 1:
                printf("添加记录\n");
                add();
                break;
            case 2:
                printf("删除记录\n");
                dlt();
                break;
            case 3:
                printf("修改记录\n");
                modify();
                break;
            case 4:
                printf("查找记录\n");
                search();
                break;
            case 5:
                printf("显示记录\n");
                display();
                break;
            case 6:
                printf("按任意键退出系统\n");
                exit(0); 
            default:
                printf("输入错误,请重新输入!\n");
                break;
            }                                 
    }
}

int read(struct student stu[])//读取文件
{
    //定义文件指针,操作文件
    FILE *fp;
    int i = 0;      //定义读取文件的行数
    if ((fp = fopen("F:\\student\\infor.txt", "r")) == NULL)
    {
        printf("文件未打开\n");
        return 0;
    }
    while (!feof(fp))
    {
        fscanf(fp,"%s",stu[i].no);
        fscanf(fp,"%s ",stu[i].name);
        fscanf(fp,"%s ",stu[i].sex);
        fscanf(fp,"%d",&stu[i].age);
        fscanf(fp,"%s",stu[i].clname);
        fscanf(fp,"%d",&stu[i].scoremath);
        fscanf(fp,"%d",&stu[i].scoreEnglish);
        fscanf(fp,"%d",&stu[i].scorephysics);
        fscanf(fp,"%d",&stu[i].scoreprocedure);
        fscanf(fp,"%d",&stu[i].scoresixiu);
        fscanf(fp,"%d",&stu[i].scorezhongchuan);
        printf("\n");
        
        i++;
    }
    fclose(fp);//关闭文件
    return i;
}

void add()//添加信息 
{ 
    int i=0;
    int num=0;//添加学生总数 
    printf("请输入需要添加的学生总数:\n");
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        printf("请输入第%d个学生的信息",i+1);
        printf("\n请输入学生学号:\n");
        scanf("%s",stu[n+i].no); 
        printf("\n请输入学生姓名:\n");
        scanf("%s",stu[n+i].name);
        printf("\n请输入学生性别:\n");
        scanf("%s",stu[n+i].sex);
        printf("\n请输入学生年龄:\n");
        scanf("%d",&stu[n+i].age);
        printf("\n请输入学生班级:\n");
        scanf("%s",stu[n+i].clname);
        printf("\n请输入数学成绩:\n");
        scanf("%d",&stu[n+i].scoremath);
        printf("\n请输入外语成绩:\n");
        scanf("%d",&stu[n+i].scoreEnglish);
        printf("\n请输入物理成绩:\n");
        scanf("%d",&stu[n+i].scorephysics);
        printf("\n请输入程序成绩:\n");
        scanf("%d",&stu[n+i].scoreprocedure);
        printf("\n请输入思修成绩:\n");
        scanf("%d",&stu[n+i].scoresixiu);
        printf("\n请输入中传成绩:\n");
        scanf("%d",&stu[n+i].scorezhongchuan);
        write(stu[n+i]); 
    }
    for(i=0;i<num;i++)
    {
        printf("\n学生学号:%s\n",stu[n+i].no);
        printf("\n学生姓名:%s\n",stu[n+i].name);
        printf("\n学生性别:%s\n",stu[n+i].sex);
        printf("\n学生年龄:%d\n",stu[n+i].age);
        printf("\n学生班级:%s\n",stu[n+i].clname);
        printf("\n数学成绩:%d\n",stu[n+i].scoremath);
        printf("\n外语成绩:%d\n",stu[n+i].scoreEnglish);
        printf("\n物理成绩:%d\n",stu[n+i].scorephysics);
        printf("\n程序成绩:%d\n",stu[n+i].scoreprocedure);
        printf("\n思修成绩:%d\n",stu[n+i].scoresixiu);
        printf("\n中传成绩:%d\n",stu[n+i].scorezhongchuan);
        printf("**************\n");
    }
    n +=num;//更新n的数量 
}

void dlt()//删除信息 
{
    int flag,i,j=0;
    char s1[100]; 
    printf("请输入要删除学生信息的学生学号:\n");
    scanf("%s",s1);
    flag=0;//标识变量 ,用以判断该信息是否存在 
    for(i=0;i<n;i++)//判断输入的数据正误,即文件中是否存在该信息 
    {
        if(strcmp(stu[i].no,s1)==0)
        { 
            flag=1;
            for(j=i;j<n-1;j++)
            {
                strcpy(stu[j].no,stu[j+1].no);//删除之后,下一组数据代替上一组 
                strcpy(stu[j].name,stu[j+1].name);
                strcpy(stu[j].sex,stu[j+1].sex);
                stu[j].age=stu[j+1].age;
                strcpy(stu[j].clname,stu[j+1].clname);
                stu[j].scoremath=stu[j+1].scoremath;
                stu[j].scoreEnglish=stu[j+1].scoreEnglish;
                stu[j].scorephysics=stu[j+1].scorephysics;
                stu[j].scoreprocedure=stu[j+1].scoreprocedure;
                stu[j].scoresixiu=stu[j+1].scoresixiu;
                stu[j].scorezhongchuan=stu[j+1].scorezhongchuan;            
            }
            break;
        }
    } 
    if(flag==0)
    {
        printf("未找到该学生!\n");
    }
    else
    {
        printf("删除成功!\n");
        n--;
    }
}