标题:关于写入文件的问题
只看楼主
魏林诚
Rank: 2
等 级:论坛游民
帖 子:8
专家分:32
注 册:2012-2-29
 问题点数:0 回复次数:1 
关于写入文件的问题
#include<stdio.h>
#include<string.h>
//记录总数
int num=0;
//结构体定义
struct Student
{
    char id[10];
    char name[20];
    float mark1;//语文
    float mark2;//数学
    float mark3;//外语
    float average;//平均
}stu[1000];
//显示学生记录
void fp_show(int i)
{
printf("\t学号\t姓名\t语文\t数学\t外语\t平均成绩\n");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",stu[i].id,stu[i].name,
              stu[i].mark1,stu[i].mark2,stu[i].mark3,stu[i].average);
}
//1增加学生记录
void fp_add()
{
 while(1)
 {
 printf("\n请输入学号:\n");
 scanf("%s",stu[num].id);
 printf("\n请输入姓名:\n");
 scanf("%s",stu[num].name);
 printf("\n请输入语文成绩:\n");
 scanf("%f",&stu[num].mark1);
 printf("\n请输入数学成绩:\n");
 scanf("%f",&stu[num].mark2);
 printf("\n请输入英语成绩:\n");
 scanf("%f",&stu[num].mark3);
 stu[num].average=(stu[num].mark1+stu[num].mark2+stu[num].mark3)/3;
 num++;
 getchar();
 printf("\n是否继续添加(y/n)\n");
 if(getchar()=='n') break;
 }
}
//2修改学生记录
void fp_modify()
{   char a[20];
    int i,t;
    while(1)
    {
    printf("\n请输入学生学号:\n");
    scanf("%s",a);
    for(t=0;t<num;t++)
    {
        if(strcmp(stu[t].id,a)==0)
        i=t;
    }
    if(i>=0){
        fp_show(i);
        printf("\n请输入修改后的学号\n");
        scanf("%s",stu[i].id);
        printf("\n请输入修改后的姓名\n");
        scanf("%s",stu[i].name);
        printf("\n请输入修改后的语文\n");
        scanf("%f",&stu[i].mark1);
        printf("\n请输入修改后的数学\n");
        scanf("%f",&stu[i].mark2);
        printf("\n请输入修改后的外语\n");
        scanf("%f",&stu[i].mark3);
        stu[i].average=(stu[i].mark1+stu[i].mark2+stu[i].mark3)/3;}
    else
    printf("失败");
    getchar();
    printf("\n是否继续修改(y/n)?\n");
    if(getchar()=='n') return;
    }
}
//3删除学生记录
void fp_delete()
{int i,t,a[20];
while(1){
    printf("\n请输入删除的学生学号:\n");
    scanf("%s",a);
    for(t=0;t<num;t++)//返回下标;
    {
        if(strcmp(stu[t].id,a)==0)
        i=t;
    }
    if(i>=0)
    {
      fp_show(i);
      getchar();
      printf("\n是否真的要删除?(y/n)\n");
      if(getchar()=='y')
      {
       for(t=i;t<num-1;t++)
           stu[t]=stu[t+1];
       num--;
      }
    }
    else
    printf("失败");
    getchar();
    printf("\n是否继续删除(y/n)?\n");
    if(getchar()=='n') return;
}
}
//4按姓名查询学生记录
void fp_search()
{ void fp_show(int);
  char a[20];
  int i,t;
  while(1)
  {
  printf("\n请输入学生姓名:\n");
  scanf("%s",a);
  for(i=0;i<num;i++)
  {
   if(strcmp(stu[i].name,a)==0)
       t=i;
  }
  if(t>=0)
  fp_show(t);
  else
  printf("失败");
  getchar();
  printf("\n返回/继续 y/n\n");
  if(getchar()=='y') break;
  }
}
//5按成绩排序
void fp_grades()
{int i,j;
 struct Student temp;
 for(i=0;i<num-1;i++)//冒泡法排序
  for(j=0;j<num-1-i;j++)
   if(stu[i].average>stu[i+1].average)
   { temp=stu[i];
     stu[i]=stu[i+1];
     stu[i+1]=temp;
   }
  //输出成绩排序
   
   printf("\t学号\t姓名\t语文\t数学\t外语\t平均成绩\n");
   printf("-------------------------------------------------------------\n");
   for(i=num-1;i>=0;i--){
   printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",stu[i].id,stu[i].name,
              stu[i].mark1,stu[i].mark2,stu[i].mark3,stu[i].average);
   }
   getchar();
   printf("\n请输入y返回\n");
   if(getchar()=='y') return;

}
//打开文件
void fp_open()
{ FILE *fp;
  int i;
  if((fp=fopen("database.txt","rb"))==NULL)
  {
      printf("打开文件失败;\n");
      return;
  }
  if(fread(&num,sizeof(int),1,fp)!=1)
  {
      num=0;
  }else
  {
   for(i=0;i<num;i++)
       fread(&stu[i],sizeof(struct Student),1,fp);
  }
  fclose(fp);
}
//写进数据
void fp_write()
{
  FILE *fp;
  int i;
  if((fp=fopen("database.txt","wb"))==NULL)
  {
      printf("打开文件失败;\n");
      return;
  }
  if(fwrite(&num,sizeof(int),1,fp)!=1)
  {
      printf("写入错误;\n");
  }
  {for(i=0;i<num;i++)
    if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
        printf("写入错误\n");
  }
  fclose(fp);

}
//主程序
int main()
{   int choice;
    //打开文件
    fp_open();
    while(1)
    {
       printf("\n\n◇◇◇◇◇◇◇◇成 绩 管 理 小 程 序◇◇◇◇◇◇◇◇\n\n\n");
       printf("\t☆\t1.   增加学生信息\t☆\n");
       printf("\t☆\t2.   修改学生信息\t☆\n");
       printf("\t☆\t3.   删除学生信息\t☆\n");
       printf("\t☆\t4.   查询学生信息\t☆\n");
       printf("\t☆\t5.   平均成绩排序\t☆\n");
       printf("\t☆\t6.   保存  并退出\t☆\n\n");
       printf("◇请选择(1-6)◇ \n");
       scanf("%d",&choice);
       switch(choice)
       {
         case 1 : fp_add(); break;
         case 2 : fp_modify(); break;
         case 3 : fp_delete(); break;
         case 4 : fp_search(); break;
         case 5 : fp_grades(); break;
         default: exit(0);break;
       }
    //关闭并写入数据
    fp_write();
    }
return 0;
}
//为什么在写入文件的时候,文件记录有错误呢?
搜索更多相关主题的帖子: include average 数学 记录 结构体 
2012-03-02 23:04
ljk694145447
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:114
注 册:2011-11-29
得分:0 
等高人
2012-03-03 14:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362087-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058860 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved