#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-15s%-15s%-12s%-12s%-18s%-16d%-15d%-15d%-14.2f\n"
#define DATA stu[i].num,stu[i].name,stu[i].sex,stu[i].add,stu[i].phone,stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].sum
//----------------------学生信息结构体----------------------
struct student
{
char num[15];//学号
char name[20];//姓名
char sex[10];//性别
char add[20];//家庭住址
char phone[20];//联系电话
int Chinese; //语文成绩
int Math; //数学成绩
int English; //外语成绩
float sum; //考试成绩
};
struct student stu [50];
struct Student
{
int huping;
int pinde;
int teacher;
float ceping;
};
struct Student data [10];
void menu(); //主菜单
void shuru(); //录入成绩
void charu(); //插入学生的信息
void xiugai(); //修改学生的信息
void shanchu(); //删除学生的信息
void xianshi(); //显示学生的信息
void stucomment();//学生综合测评
void chazhao(); //查找学生信息
//----------------------主函数----------------------
int main() //主函数
{
int n;
menu(); //主菜单
scanf("%d",&n); //输入要选择的功能的编号
while(n)
{
switch(n)
{
case 1: shuru();break;
case 2: charu();break;
case 3: xiugai();break;
case 4: shanchu();break;
case 5: xianshi();break;
case 6: stucomment();break;
case 7: chazhao();break;
default:break;
}
getch();
menu(); //执行完之后再次显示菜单界面
scanf("%d",&n);
}
}
//----------------------主菜单函数----------------------
void menu()
{
printf("\n");
printf("\t---------------学生信息管理系统---------------\n");
printf("\t \n");
printf("\t 1.录入学生信息 \n");
printf("\t 2.插入学生信息 \n");
printf("\t 3.修改学生信息 \n");
printf("\t 4.删除学生信息 \n");
printf("\t 5.显示所有学生信息 \n");
printf("\t 6.综合测评 \n");
printf("\t 7.查找学生信息 \n");
printf("\t 0.退出系统 \n");
printf("\t \n");
printf("\t----------------------------------------------\n");
printf("\t 请输入(0-7):");
}
//----------------------录入学生信息函数----------------------
void shuru()
{
int i,m=0; //m是记录的条数
char ch[2];
FILE *fp; //定义文件指针
if((fp=fopen("data.txt","a+"))==NULL) //打开指定文件
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
{
m++; //统计当前记录条数
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有记录!\n");
}
else
{
xianshi(); //调用函数xianshi,显示原有的信息
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在!\n");
return;
}
printf("是否要输入学生信息(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要录入新的信息
{
printf("number:");
scanf("%s",stu[m].num); //输入学生的学号
for(i=0;i<m;i++)
if(stu[i].num==stu[m].num)
{
printf("number已经存在了,按任意按键继续!");
getch();
fclose(fp);
return;
}
printf("name:");
scanf("%s",stu[m].name); //输入学生姓名
printf("sex:");
scanf("%s",stu[m].sex); //输入学生性别
printf("address:");
scanf("%s",stu[m].add); //输入学生家庭住址
printf("phone number:");
scanf("%s",stu[m].phone); //输入学生联系电话
printf("Chinese:");
scanf("%d",&stu[m].Chinese); //输入学生语文成绩
printf("Math:");
scanf("%d",&stu[m].Math); //输入学生数学成绩
printf("English:");
scanf("%d",&stu[m].English); //输入学生英语成绩
stu[m].sum=(stu[m].Chinese+stu[m].Math+stu[m].English)/3; //计算学生总成绩
printf("kaoshi_chengji:%.2f\n",stu[m].sum);
if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件
{
printf("不能保存!");
getch();
}
else
{
printf("%s 被保存!\n",stu[m].name);
m++;
}
printf("是否继续录入学生信息?(y/n):"); //询问是否继续
scanf("%s",ch);
}
fclose(fp);
printf("OK!\n");
}
//----------------------插入学生信息函数----------------------
void charu()
{
FILE *fp;
int i,j,k,m=0;
char snum[20];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("文件中没有记录!\n");
fclose(fp);
return;
}
printf("请输入要插入的学生信息数量:\n");
scanf("%d",&m);
printf("请输入要插入的位置: \n");
scanf("%s",snum);
for(i=0;i<m;i++)
{
if(strcmp(snum,stu[i].num)==0)
break;
for(j=m-1;j>i;j--)
stu[j+i]=stu[j]; //从最后一条记录开始均向内后移一位
printf("现在请输入要插入的学生信息:\n");
printf("number:");
scanf("%s",stu[i+1].num);
for(k=0;k<m;k++)
if(strcmp(stu[k].num,stu[m].num)==0)
{
printf("number已经存在,请按任意键继续!");
getch();
fclose(fp);
return;
}
printf("name:");
scanf("%s",stu[i+1].name);
printf("sex:");
scanf("%s",stu[i+1].sex);
printf("address:");
scanf("%s",stu[i+1].add);
printf("phone number:");
scanf("%s",stu[i+1].phone);
printf("Chinese:");
scanf("%d",&stu[i+1].Chinese);
printf("Math:");
scanf("%d",&stu[i+1].Math);
printf("English: ");
scanf("%d",&stu[i+1].English);
stu[i+1].sum=(stu[i+1].Chinese+stu[i+1].Math+stu[i+1].English)/3; //计算学生总成绩
printf("kaoshi_chengji:%.2f\n",stu[i+1].sum);
printf("插入成功!请按任意键返回主界面!");
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开!\n");
return;
}
for(k=0;k<=m;k++)
{
if(fwrite(&stu[k],LEN,1,fp)!=1) //将修改后的记录写入磁盘文件中
{
printf("不能保存!");
getch();
}
}
fclose(fp);
}
}
//----------------------修改学生信息函数----------------------
void xiugai()
{
FILE *fp;
struct student t;
int i=0,j=0,f=0,m=0,fix=0;
int a,n;
char snum[20];
char ch[2];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有记录!\n");
}
else
{
xianshi(); //调用函数xianshi,显示原有的信息
}
printf("请输入要修改的学生信息的学生的学号:");
scanf("%s",snum);
for(i=0;i<m;i++)
{//检索文件中是否有该学号
if(strcmp(snum,stu[i].num)!=0)
{
a=i;
break;
}
a=i;
}
if(a==n)
printf("不存在该学号,请重新输入!\n");
else if(a>=0 && a<n)
{
printf("找到了这名学生,可以修改他的信息!\n");
printf("是否要修改?(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("1----- 修改姓名 \n");
printf("2----- 修改性别 \n");
printf("3----- 修改家庭住址 \n");
printf("4----- 修改联系电话 \n");
printf("5----- 修改语文成绩 \n");
printf("6----- 修改数学成绩 \n");
printf("7----- 修改外语成绩 \n");
printf("请选择要修改的信息:");
scanf("%d", &fix);
switch (fix)//选择要修改该学生的哪个信息
{
case 1:
printf("请输入修改后的姓名:");
scanf("%s",stu[i].name);
break;
case 2:
printf("请输入修改后的性别:");
scanf("%s",stu[i].sex);
break;
case 3:
printf("请输入修改后的家庭住址:");
scanf("%s",stu[i].add);
break;
case 4:
printf("请输入修改后的联系电话:");
scanf("%d",stu[i].phone);
break;
case 5:
printf("请输入修改后的语文成绩:");
scanf("%d",&stu[i].Chinese);
break;
case 6:
printf("请输入修改后的数学成绩:");
scanf("%d",&stu[i].Math);
break;
case 7:
printf("请输入修改后的外语成绩:");
scanf("%d",&stu[i].English);
break;
default:
printf("输入有误,请重新输入!");
}
printf("修改成功!\n");
stu[i].sum=(stu[i].Chinese+stu[i].Math+stu[i].English)/3; //计算学生总成绩
printf("kaoshi_chengji:%.2f\n",stu[i].sum);
//将新修改的信息写入指定的磁盘文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("不能保存文件!");
getch();
}
else
{
printf("新数据被保存!\n");
m++;
}
printf("是否继续修改该学生信息?(y/n):");
scanf("%s",ch);
}
}
fclose(fp);
printf("OK!\n");
}
//----------------------删除学生信息函数----------------------
void shanchu()
{
FILE *fp;
int i,j,m=0;
int a,n;
char ch[2],snum[20];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
if(m==0)
{
printf("文件中没有记录!\n"); //data.txt文件存在,但里面没有内容
return;
}
printf("请输入学生学号:");
scanf("%s",snum);
for(i=0;i<m;i++)
{
if(strcmp(snum,stu[i].num)==0)
{
a=i;
break;
}
a=i;
}
if(a==n)
{
printf("没有找到这名学生,请重新输入!\n"); //不能找到要查找的信息
}
else if(a>=0 && a<n)
{
printf("找到了这条记录,是否删除?(y/n):");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否进行删除
{
for(j=i;j<m;j++)
stu[j]=stu[j+i]; ///将后一个记录移到前一个记录的位置
m--; //记录的总个数减1
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在\n");
return;
}
for(j=0;j<m;j++) //将更改后的记录重新写入指定的磁盘文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("can not save!\n");
getch();
}
fclose(fp);
printf("删除成功!\n");
}
else
{
printf("找到了记录,选择不删除!");
}
}
}
//----------------------显示学生信息函数----------------------
void xianshi()
{
FILE *fp;
int i,m=0;
fp=fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
printf("number name sex add phone Chinese Math English sum\n");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA); //将信息按照指定的格式打印
}
}
//----------------------/生综合测评 函数----------------------
void stucomment() //学生综合测评
{
FILE *fp;
int i,j,k,m=0;
int a,n;
double t; //测评数据输入
char ch[2],snum[20];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
if(m==0)
{
printf("文件中没有记录!\n"); //data.txt文件存在,但里面没有内容
return;
}
printf("请输入要测评的学生的学号:");
scanf("%s",snum);
for(i=0;i<m;i++)
{
if(strcmp(snum,stu[i].num)!=0)
{
a=i;
break;
}
a=i;
}
if(a==n)
printf("不存在该学号,请重新输入!\n");
else if(a>=0 && a<n)
{
printf("找到了这名学生,可以修对他进行测评!\n");
printf("是否要测评?(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("请输入同学互评成绩:\n");
scanf("%d",&data[i].huping);
while(data[i].huping<0 || data[i].huping>100)
{
printf("对不起你输入的数据不在0-100之间,请重新输入!\n");
printf("请输入同学互评成绩:\n");
scanf("%d",&data[i].huping);
}
printf("请输入学生品德成绩:\n");
scanf("%d",&data[i].pinde);
while(data[i].pinde<0 || data[i].pinde>100)
{
printf("对不起你输入的数据不在1-100之间,请重新输入!\n");
printf("请输入学生品德成绩:\n");
scanf("%d",&data[i].pinde);
}
printf("请输入认课老师评分:\n");
scanf("%d",&data[i].teacher);
while(data[i].pinde<0 || data[i].pinde>100)
{
printf("对不起你输入的数据不在1-100之间,请重新输入!\n");
printf("请输入认课老师评分:\n");
scanf("%d",&data[i].teacher);
}
data[i].ceping=(stu[i].sum*0.6+data[i].huping*0.1+data[i].pinde*0.1+data[i].teacher*0.2);
for(k=1;k<=i-1;k++) //冒泡
{
for(j=0;j<=i-k-1;j++)
{
t=data[i].ceping;
data[i].ceping=data[i+1].ceping;
data[i+1].ceping=t;
}
}
for(j=0;j<i;j++)
{
printf("%f",data[i].ceping);
}
//将新修改的信息写入指定的磁盘文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("不能保存文件!");
getch();
}
else
{
printf("新数据被保存!\n");
m++;
}
printf("是否继续输入测评数据该学生?(y/n):");
scanf("%s",ch);
}
}
fclose(fp);
printf("OK!\n");
}
//----------------------查找学生信息函数----------------------
void chazhao()
{
FILE *fp;
int i,m=0;
char snum[20];
if((fp=fopen("data.txt","rb"))==NULL)
{
printf("文件夹不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("文件中没有记录! \n");
return;
}
printf("请输入学号:");
scanf("%s",snum);
for(i=0;i<m;i++)
if(strcmp(snum,stu[i].num)==0) //查找输入的学号是否在记录中
{
printf("number name sex Chinese Math English sum\n");
printf(FORMAT,DATA); //将查找出的结果按照指定格式输出
break;
}
if(i==m)
printf("没有找到这名学生!\n"); //没有找到要查询的信息
}
能运行就调试,不能运行就看报错信息
看到这再没往下看了,细心点。 根据错误提示改
if(stu[i].num==stu[m].num)
还有int/int 结果还是int。