C语言博客作业06——结构体&文件

1.本章学习总结

1.1思维导图

1475011-20181230204629154-1481362781.png

1.2本章学习体会

这两周,我们学习了结构体和文件,相对于文件来说,我认为结构体是简单的,可能也是因为学习文件的时候老师上课的进度快,再加上这几周都没了课前预习的题集,也没有课后在进行复习,也有一种得过且过的态度在那里,对文件就不是很了解。课前老师有让我们看视频预习,当时视频是看了一半,有一半没看,所以只对看了视频的那部分熟悉一点。

2.大作业

本次作业要求对小学四则运算程序功能扩展。 扩展功能:小学生用户登录进系统做题。结束答题后,能把该学生答题情况写入文件,并实现排名。

2.1文件介绍

1.头文件

  • user.h
    头文件中包含了两个结构体变量:USER 和 DETAIL。还有主函数中调用的所有函数声明。
    USER:包含了用户名和用户密码,主要用于用户登录和注册时的判断与写入文件。
    DETAIL:包含了用户名、正确题数、所选等级和正确率,用来储存用户数据,读取和写入ranking.txt文件数据。
  • 代码截图
    1475011-20190105233442292-1330490137.png

2.其他文件介绍

文件1:main.c
  • 文件功能
调用各个函数,将各个函数进行关联,实现函数功能。
  • 设计思路
开头和结尾分别调用两个函数Register(登陆、注册用户)和 Ranking(实现排名) 。中间则是原来指针版的程序稍作改进。运行一次实现一个用户刷题。
  • 截图
    1475011-20190105234248014-1214353957.png
文件2:functions.c
  • 介绍文件功能
1.登陆后,进入游戏界面,选择游戏难度;
2.创建表达式的字符数组,判断表达式是否合法后,输出表达式;
3.计算user.txt 和 ranking.txt 两个文件中的用户数量。
  • 设计思路
    • CreateExp函数思路
     根据用户输入的等级进行表达式的随机生成,并存入数组exp中,返回指针exp。
    • IsExp函数思路
     根据判断除数是否为0及除法是否能整除这两个条件,判断算术表达式是否合法
    • ComputeExp函数思路
    利用课堂派上做过的一道题的思路,进行计算随机产生的字符表达式,并返回正确结果,用于判断用户输入的答案是否正确。
    • getCount函数思路
    借助了书本上的相关例题,该函数主要用于计算文件user.txt 和 ranking.txt 这两个文件中的用户数量
  • 截图
    1475011-20190106000413057-1439877149.png
    1475011-20190106000425246-357939058.png
    1475011-20190106000437013-2078263246.png
    1475011-20190106000454097-2077093134.png
    1475011-20190106000511297-933563981.png

文件3:login.c

  • 介绍文件功能
1.用户的登陆与注册
2.用户的答题情况及成绩
  • 设计思路
    • Register函数
    当初写这个函数代码的时候,想着user.txt这个文件又要可读,又要可写,还不能消除用户信息,然后想着直接在程序中创建文件,就直接用了 a+ 的读写方式打开创建文件。然后头尾不可少的打开和关闭文件,中间则是空文件时直接注册用户,不是空文件时,可选择是登陆已有账号,或者重新注册新的账号。
    • Ranking函数思路
    该函数主要用于用户游戏存档,并将存档内的所有用户进行排名。
  • 截图
    1475011-20190106001955751-1064414778.png
    1475011-20190106002007276-100586860.png
    1475011-20190106002022690-894866975.png
    1475011-20190106004709742-632371951.png
    1475011-20190106004724544-1285653899.png

2.2运行结果

1.登陆界面

1475011-20190106002848157-879382874.png

2.排名结果

1475011-20190106002952368-866061816.png

2.3改进大作业总结

1.碰到的问题及解决办法

这次的大作业其实遇到了很多的问题,解决了一小部分,但依然还有一部分的问题没有解决

  • 写完所有代码,第一次进行运行的时候非常的完美,什么问题都没有出现,用户信息很好的保存在了两个文件中,排名框也有显示。但是当我再次运行的时候,因为文件不是空文件了,就执行我所写的下一段代码,发现用户登陆无法登陆已有用户,注册了的用户无法再写入文档。后来调试的时候发现,我定义用来计算用户数量的全局变量Count在程序结束后就消失了并不会保存。于是我就借用书本上的方法,用文件大小除以结构体大小的方法求得了用户的数量(也就是functions,c文件中的getCount函数)然后发现我的文件读取出了点小错误,改正后这个函数就又可以正常运行了。(后来为什么注册信息可以写入文档我也不知道)。
  • 正当我为消灭掉一个bug而感到开心的时候,Register函数又出了毛病,他只能判断出文件中的第一个用户数据,若输入一个文件中已有的用户,但该用户不在第一个,则会判断不出来。然而这个bug我试了无数种办法,都没有解决。然后这时候,注册的用户突然又不能写入文档。1475011-20190106005118023-89932483.png
  • 接着就是Ranking函数他每次只有一个用户信息的输出,在我的大改特改之下,他可以读取文件,可以输出表格,写入文档的数据也是对的,但是只有表格的第一行是正确的。其余的都出错了(如下图)几番改动无果,然后我只好把代码改回原来那样(虽然只有当前用户输出,但至少是对的)
    1475011-20190106005504159-1434420336.png

2.小结

  • 其实吧,我觉得总体上,我的大作业算是没完成的,错误、bug一堆堆。1475011-20190106005118023-89932483.png
  • 关于游戏上的代码并没有多大的改动,只是稍作调整,使其能够更好的与文件相关联。
  • 做完这充满错误的大作业,我对文件还是不够了解。有一种道理我都懂,用法也能看懂,但是用起来都是错的无力感。被bug烦得没思路的时候确实去借鉴了其他同学的代码,然并卵。我觉得我的用法并没有错,可是程序运行出来就是错的,我也很绝望。不过还是得好好研究文件得相关知识点,毕竟还有课设也要用到文件。加油!!

转载于:https://www.cnblogs.com/Lay-549/p/10134834.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值