c语言打开文件存储数据,C语言 文件I/O:实现结构体数据 存储到文件和从文件读取...

这是一个初步试验!是为了下一步的创建班级学生管理系统做准备

效果:

661ef010c10756649c7ef9e1a69656da.png

ClassInfo.h源码

#define MAX_STUDENT 50 //班级最大学生人数

#define MAX_NAME_SPACE 30 //学生名称最大空间

#define MAX_CLASS_NAME_SPACE 20 //班级名称最大空间

#define MAX_ID_SPACE 20 //班级ID最大空间

typedef struct student_

{

char classId[MAX_ID_SPACE];

char name[MAX_NAME_SPACE];

int age;

int id;

struct student_ * nextStu;

}Student,*PStudent;

typedef struct class_

{

char className[MAX_CLASS_NAME_SPACE];

char classId[MAX_ID_SPACE];

struct class_ * next_Class;

PStudent firstStu;

}Class,*PClass;

void viewClass(PClass rootClass)

{

PClass tc = rootClass;

if(tc==NULL)

{

printf("未创建任何班级,无法遍历");

return;

}

system("cls");

while(tc!=NULL)

{

printf("------------------------------------\n");

printf("班级ID:%s\n",(tc->classId));

printf("班级名称:%s\n",(tc->className));

tc=tc->next_Class;

}

printf("------------------------------------\n");

return;

}

main.c源码

#include #include #include #include #include #include #include "Class_Info.h"

#include int main()

{

//仅仅测试核心操作:存储和读取数据包

PClass newclass = (PClass)calloc(1,sizeof(Class));

printf("请输入班级编号(如:201309001):");

gets(newclass->classId);

printf("请输入班级名称(如:13软件2班):");

gets(newclass->className);

newclass->firstStu=NULL;

newclass->next_Class = NULL;

//查看结构体(对象)的内容

viewClass(newclass);

FILE * fp;

if((fp = fopen("./Class.dat","r+"))==NULL)

{

printf("找不到Class.dat文件!\n");

if((fp = fopen("./Class.dat","w+"))==NULL)

{

perror("fopen failed! ");

return -1;

}

printf("已自动生成Class.dat\n");

}

//写入链表的数据到文件 大小+数据

int slen = strlen(newclass->classId);

fwrite(&slen,sizeof(int),1,fp);

fwrite(newclass->classId,slen,1,fp);

slen = strlen(newclass->className);

fwrite(&slen,sizeof(int),1,fp);

fwrite(newclass->className,slen,1,fp);

fclose(fp);

getchar();

printf("读取文件数据到链表!\n");

//创建新的结构体对象

PClass readClass = (PClass)calloc(1,sizeof(Class));

readClass->firstStu=NULL;

readClass->next_Class=NULL;

slen=0;

if((fp = fopen("./Class.dat","r+"))==NULL)

{

perror("找不到Class.dat文件!");

return -1;

}

//读取Class.dat中的数据 格式 : 数据大小+数据

fread(&slen,sizeof(int),1,fp);

printf("\n第一个数据大小:%d\n",slen);

fread(readClass->classId,slen,1,fp);

printf("第一个数据内容:%s\n",readClass->classId);

fread(&slen,sizeof(int),1,fp);

printf("第二个数据大小:%d\n",slen);

fread(readClass->className,slen,1,fp);

printf("第二个数据内容:%s\n",readClass->className);

fclose(fp);

//释放链表头的指针(因为当前就一个数据)

free(newclass);

free(readClass);

getchar();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值