现在我这个学生信息管理系统增加一组新数据,它会在我需要保存的地方重复出现几组,搞不明白
代码呢,不放代码鬼知道你做了什么骚操作了
无非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--;
}
}