问题的引入:

这学期C语言项目我选择做一个理财管理系统,数据存储使用链式映象,也在此基础上实现数据显示功能块。在完成了数据的统计显示,按时间段显示,按类别显示等功能后,才开始考虑数据的读写的文件操作功能块,因为自己之前几乎没有使用过C语言的文件操作函数。

2.如何解决:

有同学早早就完成了项目,我就抱大腿去学习下别人是如何实现的, 以下是同学做的学生成绩管理系统的读写操作函数(不过他是用顺序存储,惊了)

void IO_ReadInfo()

{

FILE *fp;

int i;

if ((fp=fopen("Database.txt","rb"))==NULL)

{

printf("error \n");

return;

}

if (fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i

{

fread(&students[i],sizeof(struct student),1,fp);

}

}

fclose(fp);

}

void IO_WriteInfo()

{

FILE *fp;

int i;

if ((fp=fopen("Database.txt","wb"))==NULL)

{

printf("error\n");

return 0;

}

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

for (i=0;i

{

fwrite(&students[i],sizeof(struct student),1,fp);

}

fclose(fp);

}

可看得我云里雾里,所以自己动手去实现功能之前,得需了解C语言的文件操作是通过哪些函数进行的,具体如何实现。

///1.打开操作

fopen(const char *, const char *);

///第一参数为文件名(绝对路径或相对路径),第二个参数为打开模式

/**********************************

打开模式 (打开二进制文件的模式需之前加一个'b')

"r":只能从文件中读数据,该文件必须先存在,否则打开失败

"w":只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件

"a":向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾

"r+":可读/写数据,该文件必须先存在,否则打开失败

"w+":可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据

"a+":可读/写数据,原来的文件不被删去,位置指针移到文件末尾

*********************************/

///2.读写操作

fprintf(FILE *, const char *, ...);

fscanf(FILE *, const char *, ...);

///与printf和scanf的使用类似

///3.关闭操作

fclose(FILE *);

///关闭后将缓存区的信息写入磁盘

以上便是我需要使用到的函数。它们包含于stdio.h这个头文件中

3.问题解决:

既然有了工具,实现具体的链表读写操作就so easy了

void SaveJournal(LinkList* Inc,LinkList* Exp)///保存账目为txt文件到当前目录

{

FILE* Incomefile=fopen("Income.txt","w");

FILE* Expendfile=fopen("Expend.txt","w");

Link t_p=Inc->head;

while(t_p!=NULL)

{

fprintf(Incomefile,"%f %d %d %d %d ",t_p->mymoney[t_p->type],t_p->type,t_p->year,t_p->month,t_p->day);

t_p=t_p->next;

}

fclose(Incomefile);

t_p=Exp->head;

while(t_p!=NULL)

{

fprintf(Expendfile,"%f %d %d %d %d ",t_p->mymoney[t_p->type],t_p->type,t_p->year,t_p->month,t_p->day);

t_p=t_p->next;

}

fclose(Expendfile);

}

LinkList* LoadData(int opt) ///载入收入或支出账目

{

LinkList* L=(LinkList*)malloc(sizeof(LinkList));

L->len=0;

L->tail=L->head=NULL;

Link t_pr;

Link t_nx;

float t_money;

int t_type;

int t_year;

int t_month;

int t_day;

FILE* Incomefile=NULL;

FILE* Expendfile=NULL;

switch(opt)

{

case 1:

{

Incomefile=fopen("Income.txt","r");

while(fscanf(Incomefile,"%f %d %d %d %d ",&t_money,&t_type,&t_year,&t_month,&t_day)!=EOF)

{

t_pr=(Link)malloc(sizeof(DuLNode));

t_pr->type=t_type;

t_pr->mymoney[t_type]=t_money;

t_pr->year=t_year;

t_pr->month=t_month;

t_pr->day=t_day;

if(L->len>0)

{

t_pr->prior=t_nx;

t_nx->next=t_pr;

t_pr->next=NULL;

L->tail=t_pr;

t_nx=t_pr;

}

else

{

t_pr->prior=NULL;

t_pr->next=NULL;

L->head=L->tail=t_pr;

t_nx=t_pr;

}

L->len++;

}

fclose(Incomefile);

break;

}

case 2:

{

Expendfile=fopen("Expend.txt","r");

while(fscanf(Incomefile,"%f %d %d %d %d ",&t_money,&t_type,&t_year,&t_month,&t_day)!=EOF)

{

t_pr=(Link)malloc(sizeof(DuLNode));

t_pr->type=t_type;

t_pr->mymoney[t_type]=t_money;

t_pr->year=t_year;

t_pr->month=t_month;

t_pr->day=t_day;

if(L->len>0)

{

t_pr->prior=t_nx;

t_nx->next=t_pr;

t_pr->next=NULL;

L->tail=t_pr;

t_nx=t_pr;

}

else

{

t_pr->prior=NULL;

t_pr->next=NULL;

L->head=L->tail=t_pr;

t_nx=t_pr;

}

L->len++;

}

fclose(Expendfile);

break;

}

}

return L;

}

我将收入与支出信息分开来保存和读取,因为自己也是用两个双向链表存储收入和支出记录的。

4.拓展:

如何才能将收入和支出信息保存到同一文件中?如何区分呢?

c语言作业雇人写,C语言作业的链表数据的读写相关推荐

  1. 代写php代码作业,代写phpmyadmin留学生作业、代做SQL语言作业、SQL程序设计作业调试、代做PHP script作业...

    代写phpmyadmin留学生作业.代做SQL语言作业.SQL程序设计作业调试.代做PHP script作业 日期:2019-04-20 01:17 Overview:In this assignme ...

  2. java c语言 for_Java能写C语言编译器吗

    用java是可以写语言编译器的,用任何语言工具写都可以.各语言开发工具间只有开发效率的差异,没有可行不可行的区别. 编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指 ...

  3. 怎么用centos7运行c语言程序_写C语言程序,如何提升程序运行效率?我的一点经验分享给你们!...

    在编写C语言程序后,经常需要对源码进行优化,以提高程序的运行效率,下面简述几个常用的优化技巧以供大家参考: 1.C于代码在程序中的优化 现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码 ...

  4. 下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...

    MKAN1-UC 5103作业代写.代做Analytics作业.Java,Python,c/c++程序语言作业代做 日期:2020-05-21 11:08 Marketing Analytics Sp ...

  5. 代写python代码一般多少钱_代写CO 353课程作业、代做Python程序设计作业、代写Python语言作业...

    代写CO 353课程作业.代做Python程序设计作业.代写Python语言作业 日期:2020-03-17 11:22 CO 353 - Homework assignment 4 Winter ' ...

  6. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...

    TensorFlow作业代写.代做Python程序语言作业.代写github课程作业.Python实验作业代写 日期:2019-07-10 10:34 Python Practical Examine ...

  7. 代写python作业 费用_代写dither method作业、代做python程序设计作业、代写python语言作业、代做Image Dithering作...

    代写dither method作业.代做python程序设计作业.代写python语言作业.代做Image Dithering作 日期:2019-10-07 04:39 ? Implement the ...

  8. 代写python作业 费用_代写Python or R作业、代做Python语言程序作业、代写Longitude留学生作业...

    代写Python or R作业.代做Python语言程序作业.代写Longitude留学生作业 日期:2018-11-13 10:19 Your task is to run some analysi ...

  9. python程序设计作业_CS602留学生作业代做、代写Programming课程作业、代做Python语言作业、Python编程设计作业调试...

    CS602留学生作业代做.代写Programming课程作业.代做Python语言作业.Python编程设计作业调试 日期:2019-12-06 10:50 CS602 - Data-Driven D ...

最新文章

  1. matlab创建二叉树(二维数据)
  2. MongoDB 分布式部署教程
  3. Sonar-project.properties配置
  4. 生成FaceBook所需的散列哈希值
  5. 使用Spring Data的Apache Ignite
  6. 高斯卷积核如何生成 C语言实现
  7. NOIP 2011 聪明的质检员-二分答案
  8. 软件工程复习提纲——第三章
  9. 安卓mqtt调试工具_MOTT工具调试阿里云物联网平台
  10. 分布式自增ID算法---雪花算法 (snowflake,Java版)---算法001
  11. msys2编译器的配置
  12. excel图片变成代码_有趣的EXCELvba作图
  13. HFSS19 官方中文教程系列 L06
  14. p2p服务器系统,先锋P2P高清点播服务器(XfServer)
  15. linux 生成p12证书,Linux下使用openssl制作CA及证书颁发
  16. 解决eclipse安装Darkest Dark Theme报错
  17. 天擎终端安全管理系统未授权访问SQL注入漏洞
  18. Yandex-好用的以图搜图网站
  19. 计算机艺术未来发展趋势,数字媒体艺术未来的发展趋势探讨
  20. 华三交换机配置access命令_华三交换机查看配置命令是什么

热门文章

  1. springboot 利用configureMessageConverters add FastJsonHttpMessageConverter 实现返回JSON值 null to ...
  2. 对象④for in 循环
  3. js判断display隐藏显示
  4. 原型链Object的一些方法
  5. Spring之数据库操作
  6. eclipse运行WordCount
  7. perl6之'Hello World'
  8. 在一般处理程序(handler)中获取session的方法
  9. Happy birthday! Hubble
  10. 移动端,input输入框被手机输入法解决方案