| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:C语言文件操作这一块的几个问题 求解决
只看楼主 加入收藏
蔡瑞圣
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
C语言文件操作这一块的几个问题 求解决
         我先简单的说明一下问题
        
                我写了一个学生管理系统  其中 有 添加 , 删除 ,查看所有学生  这几个功能
  
                       我想把所有数据保存到二进制文件当中
                   我先是定义了一个学生信息的结构体
            然后我声明了一个结构体数组 stu[LEN];
           1.  添加功能 我以追加(ab) 的形式打开了二进制文件   然后遇到一个问题  我使用追加的话  我再输出时发现  前面有一个空的结构体信息   而我所添加的学生信息 都从第二行开始显示  第一行的值是 0             这可能是因为我以追加的形式打开了文件    那么我如何解决这个问题  因为我添加学生的时候 我要追加到后面
               
           2  看所有学生功能
                首先我添加完之后  比如我添加了N个学生     我想用for循环 将其全部读取到一个结构体中 然后将其输出   那么我如何确定我要读取多少个   也就是for循环走几次  因为我只想读取学生的信息  如果我使用LEN 的话  for会走 LEN 次  会读出一些空值  
              3.  删除功能
                          这个功能我是这样想的       把文件中的数据 全部读到一个结构体数组中  然后用for循环删除这个数组中的某一学生  然后再将这个数组中的数据全部写入到二进制文件中
                                  但是这个过程中 我想直接把文件中原本的信息覆盖了  具体该怎么做 求指点
  下面是源代码 求指点
  头文件
struct student{
    char name[20];
    int age;
    char xingbie[20];
    char address[100];
    int chengji;
    int jifen;
};
struct student stu[LEN];
struct student stu1[LEN];
struct student stu2[LEN];

      功能文件  
#include "tou.h"
void tianjia(struct student stu[]){
    FILE *fp;
    int i;
    char ch;
    for(i=0;i<LEN;i++){
        p=i;
        printf("请输入学生的姓名\n");
        scanf("%s",stu[i].name);
        fflush(stdin);
        printf("请输入学生的年龄\n");
        scanf("%d",&stu[i].age);
        fflush(stdin);
        printf("请输入学生的性别\n");
        scanf("%s",stu[i].xingbie);
        fflush(stdin);
        printf("请输入学生住址\n");
        scanf("%s",stu[i].address);
        fflush(stdin);
        printf("请输入学生的成绩\n");
        scanf("%d",&stu[i].chengji);
        fflush(stdin);
        printf("请输入学生的积分\n");
        scanf("%d",&stu[i].jifen);
        fflush(stdin);
        fp=fopen("学生数据","ab+");
        if(fp==NULL){
            printf("文件操作失败");
        }
        rewind(fp);
        fwrite(&stu[i],sizeof(struct student),1,fp);
        fclose(fp);
        printf("是否继续添加(y/n)\n");
        fflush(stdin);
        ch=getchar();
        if(ch=='n'||ch=='N'){
            break;
        }
    }
    printf("\n");
    printf(" _按回车键返回主菜单!\n");
    getchar();
}
void chakan(struct student stu1[]){
    int i=0;
    FILE *fp;
    fp=fopen("学生数据","rb");
    if(fp==NULL){
        printf("文件操作失败\n");
        return;
    }
    rewind(fp); //重置文件指针位置
    for(i=0;i<5;i++){
        fread(&stu1[i],sizeof(struct student),1,fp);
    }
        AA;
    for(i=0;i<5;i++){
        BB;
    }
    printf("\n");
    printf(" _按回车键返回主菜单!\n");
    getchar();
    fclose(fp);
}
void chazhao(struct student stu1[]){
    int i,a=0;
    FILE *fp;
    char ch[20];
    fp=fopen("学生数据","rb");
    if(fp==NULL){
        printf("操作失败\n");
    }
    for(i=0;i<LEN;i++){
        fread(&stu1[i],sizeof(struct student),1,fp);
    }
    printf("请输入要查找的学生姓名\n");
    scanf("%s",&ch);
    for(i=0;i<LEN;i++){
        if(strcmp(ch,stu1[i].name)==0){
            AA;
            BB;
            getchar();
        break;
        }else{
            a++;
        }
    }
    if(a==LEN){
        printf("未找到!\n");
    }
    fclose(fp);
    printf("\n");
    printf(" _按回车键返回主菜单!\n");
    getchar();

}
void shanchu(struct student stu2[]){
    int i,j,a=0;
    FILE *fp;
    char ch[20];
    fp=fopen("学生数据","ab+");
    if(fp==NULL){
        printf("操作失败\n");
    }
    rewind(fp);
    for(i=0;i<LEN;i++){
        fread(&stu2[i],sizeof(struct student),1,fp);
    }
    printf("请输入你要删除的学生姓名\n");
    scanf("%s",ch);
    for(i=0;i<LEN;i++){
        if(strcmp(ch,stu2[i].name)==0){
            for(j=0;j<LEN;j++){
                stu2[j]=stu2[j+1];
            }
        }
    }
    rewind(fp);
    fwrite(&stu2[i],sizeof(struct student),1,fp);
    fclose(fp);
    for(i=0;i<LEN;i++){
        printf("\t%s\t%d\t%s\t%s\t%d\t%d\n",stu2[i].name,stu2[i].age,stu2[i].xingbie,stu2[i].address,stu2[i].chengji,stu2[i].jifen);
    }
    printf("\n");
    printf(" _按回车键返回主菜单!\n");
    fflush(stdin);
    getchar();
}
   
搜索更多相关主题的帖子: 管理系统 二进制 C语言 结构体 信息 
2015-11-01 21:54
蔡瑞圣
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-1
收藏
得分:0 
求高人解决啊
2015-11-01 21:57
蔡瑞圣
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-1
收藏
得分:0 
  头文件
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define AA printf("\t姓名\t年龄\t性别\t住址\t成绩\t积分\t\n\n");
#define BB printf("\t%s\t%d\t%s\t%s\t%d\t%d\n",stu1[i].name,stu1[i].age,stu1[i].xingbie,stu1[i].address,stu1[i].chengji,stu1[i].jifen);
#define CC printf("\t%s\t%d\t%s\t%s\t%d\t%d\n",stu[i].name,stu[i].age,stu[i].xingbie,stu[i].address,stu[i].chengji,stu[i].jifen);
#define LEN 100
2015-11-01 21:58
蔡瑞圣
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-1
收藏
得分:0 
为什么人都是来来往往 不回帖啊
2015-11-01 22:09
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:10 
把你遇到的问题说明白。

贴出这么多代码, 一句有用的注释都没有,别人怎么知道你到底想问什么问题?

代码测试环境:  WinXP+C-Free5.0.
2015-11-01 22:36
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:10 
编译信息呢

一片落叶掉进了回忆的流年。
2015-11-01 22:42
快速回复:C语言文件操作这一块的几个问题 求解决
数据加载中...
 
   



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

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