逢山gui泣 2021-09-08 15:47 采纳率: 70%
浏览 31

C语言将文件写入磁盘后,出现再次打开程序无法读取文件内容问题。


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

#define SIZE_STU 10

//界面函数声明//
void stu_operate(void);

void home(void);

//学生信息函数声明
void input_stu(void);
void search_stu(void);
void search_stu_id(void);
void show_stu(void);
void edit_stu(void);
void renew_stu(void);
void delete_stu(void);


//学生信息结构体//
struct student_info {
    char stu_ID[9];
    char stu_name[9];
    char sex[9];
    char age[9];
}stu[SIZE_STU];

int i = -1;//学生

int main(void)
{
    home();
    return 0;
}

//欢迎界面//
void home(void)
{
       printf("\n-------------------------欢迎进入选课系统!----------------------");
       int h;
       printf("\n\n                        请选择你要进行的操作:");
       printf("\n\n                             1.学生操作");
       scanf("%d",&h);
       system("cls");
       switch(h){
           case 1:
               stu_operate();
               break;
          
     
             default:
        system("cls");
        printf("BYE!");
        break;
         }
}



//对学生记录进行操作
void stu_operate(void) {
    printf("\n-------------------------欢迎进入选课系统!----------------------");
    printf("\n\n                 请选择你要对学生记录进行的操作:");
    printf("\n\n                             1.添加");
    printf("\n                             2.查询");
    printf("\n                             3.显示");
    printf("\n                             4.返回主页面");
    printf("\n                                                      ");
    printf("\n                        请输入:");
    int i;
    scanf("%d",&i);
    system("cls");
    switch(i){
        case 1://添加学生信息
            input_stu();
            break;
        case 2://查询学生信息
            search_stu();
            break;
        case 3://显示所有学生信息
            show_stu();
            break;
        case 4:
            home();
            break;
    }
}

//学生信息录入
void input_stu(void){
    char flag;
    FILE * fp;
    if ((fp=fopen("student.dat","wb"))==NULL);
    flag = fgetc(fp);
    if(flag==EOF){
        fprintf(fp, "学号\t姓名\t性别\t年龄\n");
    }
    fclose(fp);
    fp=fopen("student.dat", "a+");
    if (fp==NULL) {
        printf("打开失败!");
        system("cls");
        stu_operate();
    }
    printf("学号\t姓名\t性别\t年龄\n");
    while (1) {
        i++;
        scanf("%s %s %s %s",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
//判断是否重复//
        int h;
        for(h=0;h<i;h++){
            if(i==0)
                break;
            //判断两字符串大小,相同返回0
            if (strcmp(stu[h].stu_ID, stu[i].stu_ID)==0) {
                printf("该学号已存在!\n");
                scanf("%s %s %s %s",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
                h=-1;
            }
        }
        fprintf(fp,"%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
        printf("录入完成,继续请按a\n");
        printf("按任意键继续!\n");
        fflush(stdin);
        scanf("%c",&flag);
        fclose(fp);
        if(flag!='a')break;
        fp=fopen("student.dat", "a");
    }
    renew_stu();
    system("cls");
    stu_operate();
}
//学生信息查询
void search_stu(void){
    system("cls");
    char id[9];
    printf("\n请输入学号:");
    fflush(stdin);
    scanf("%s",id);
    int h;
        for(h = 0;h<=i;h++){
        if(strcmp(stu[h].stu_ID, id)==0){
            system("cls");
            printf("查找成功!");
            printf("\n\n\t学号\t姓名\t性别\t年龄");
            printf("\n\t-----------------------------------------------------------------");
            printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
            system("pause");
            system("cls");
            stu_operate();
        }
    }
    system("cls");
    printf("没有此学号!\n");
    system("pause");
    system("cls");
    stu_operate();
}
//显示所有学生信息
void show_stu(void){
    int h;
    if(i == -1){
        printf("\n还没有录入信息!\n");
        system("pause");
        system("cls");
        stu_operate();
    }
    system("cls");
    printf("\n\n\t学号\t姓名\t性别\t年龄");
    printf("\n\t---------------------------------------------------------");
    for(h = 0;h <= i;h++){
    printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
    }
    fflush(stdin);
    printf("\n\t1.修改");
    printf("\n\t2.删除");
    printf("\n\t3.返回");
    printf("\n\n  选择要进行的操作:");
    int flag;
    fflush(stdin);
    scanf("%d",&flag);
    switch(flag){
        case 1:
            edit_stu();
            break;
        case 2:
            delete_stu();
            break;
        default:
            system("cls");
            stu_operate();
            break;
    }
}
//编辑学生信息
void edit_stu(void){
    printf("\n输入需要编辑的学生的学号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
            system("cls");
            printf("\n\n\t学号\t姓名\t性别\t年龄");
            printf("\n\t---------------------------------------------------------");
            printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
            printf("\n这是修改前的数据,请依次输入修改值:\n\t");
            fflush(stdin);
            scanf("%s %s %s %s",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
            int k;
            for(k = 0;k <= i;k++){
                if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){
                    if(k==h){
                        continue;
                    } else {//学号不唯一
                        printf("\n此学号已存在!重新输入学号:");
                        fflush(stdin);
                        scanf("%s",stu[h].stu_ID);
                        k = -1;
                    }
                }
            }
            //将修改信息写入文件//
            renew_stu();
            system("cls");
            printf("修改成功!\n");
            system("pause");
            system("cls");
            stu_operate();
        }
    }
    printf("\n此学号不存在!\n");
    system("pause");
    system("cls");
    stu_operate();
}
//删除学生信息
void delete_stu(void){
    printf("\n输入需要编辑的学生的学号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
            system("cls");
           //检查是否选课了
            int a;
            for(a = 0;a <= x;a++){
                if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1
                    delete_sel(a);
                    a = -1;
                    x--;
                    continue;
                }
            }
            //如果只有一条记录
            if(i==0){
                i = -1;
                renew_stu();
                printf("修改成功!\n");
                system("pause");
                system("cls");
                stu_operate();
            }
             int k;
             for(k = h+1;k <= i;k++,h++){//将数组直接向前移动
                strcpy(stu[h].stu_ID,stu[k].stu_ID);
                strcpy(stu[h].stu_name,stu[k].stu_name);
                strcpy(stu[h].sex,stu[k].sex);
                strcpy(stu[h].age,stu[k].age);
            }
            renew_stu();
            i--;
            system("cls");
            printf("修改成功!\n");
            system("pause");
            system("cls");
            stu_operate();
        }
    }
    printf("\n此学号不存在!\n");
    system("pause");
    system("cls");
    stu_operate();
}

void renew_stu(void){
    FILE * fp;
    fp = fopen("student.dat","w+");
    if(fp == NULL){
        printf("\n打开文件失败,无法保存至文件。\n");
        fclose(fp);
        return ;
    }
    fprintf(fp,"学号\t姓名\t性别\t年龄\n");
    if(i == -1){
        fclose(fp);
        return;
    }
    int h;
    for(h = 0;h <= i;h++){
            fprintf(fp,"%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
    }
    fclose(fp);
}

  • 写回答

1条回答 默认 最新

  • Pliosauroidea 2021-09-08 15:50
    关注

    img


    我怎么复制完直接报错,是我的问题还是你的问题

    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日

悬赏问题

  • ¥15 数据库原理及应用上机练习题
  • ¥30 征集Python提取PDF文字属性的代码
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?