zoukankan      html  css  js  c++  java
  • 文件,结构体作业

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    这一章的内容,可以说是学习c语言以来,最懵逼的一章的学习。结构体的知识,上课的时候听不懂,还是在练习了几道pta题目才有点了解,尤其是对结构体数组的应用,定义结构体后,如何把数据存入结构体数组中,在练习了题目,以及反复分析书上代码,才知道了如何去存放。文件这一节,我刚开始学习的时候不知道它有什么作用,感觉他好像没什么用处,学习的时候也觉得看上去好像非常简单,就是开文件,对文件进行操作,关文件这几个步骤。实际上运用起来感觉很麻烦,这次的大作业,也是问了好几个同学,关于文件这方面的知识,还有参考书本上的东西,才完成的。过程可以说有点困难,但是后面还是大体上完成了。这次的作业让我明白了书本的代码的重要性,真的很多东西都可以学习书本,比如结构体数组的排序问题,书本上也有类似的代码,文件用户的检验问题,书本上也有,这2部分就解决了这次大作业最难的2部分,所以参考书本,这次的大作业其实也不怎么难完成。再者,我懂得要多问优秀同学,他们很多的东西都学的比我们好,分享他们的学习经验,自己虽然可以简化自己思考过程,但是刚刚开始的时候,如果不多请教,一个人懵懵懂懂的开始工作,效率会很低。我问了他们一些文件的知识,以及参考了他们在构建这个大作业的思路,本来我是想在处理排名的问题上,一个用户写完,就排一次,就写入。问了几个同学,他们都是先写完所有的用户,最后在处理排名,我想了下,后面这种方法,书上也好像有类似的对结构体数组的排序问题,所以就改变了我的排名处理方法。如果用一开始我的想法,可能这次大作业处理起来,没这么顺利了。

    2.大作业


    先把5个用户存储在文件中(没有设计注册新用户的步骤)

    2.1文件介绍:

    1.头文件:

    介绍:
    1.头文件主要定义了结构体student,其中4个变量分别存储用户名,密码,和训练的题目量,还有练习的正确率,
    2.还有定义了6个函数,每个函数的作用分别写在了函数后面。

    2.其他文件介绍

    1.main.c文件

    主函数中
    1.定义了结构题数组。分别存放5个用户的数据。
    定义等级变量rank,用户练习变量num,循环变量I,以及算术式数组exp;
    2.设计思路:输入用户名,密码,调用函数checkUsers,根据返回值1/0判断用户是否合法,不合法一直提醒用户输入。
    输入合法后,调Begin函数,生产友好界面,并提醒用户输入等级和练习数量,之后用户输入等级和练习题目数量。
    把结构体的地址,算术式数组地址,等级,练习数量,传入生成运算符,计算函数CreateExp中。
    3.等所有用户都完成练习后,调用Rank函数把上面所有的结构体数组中的数据进行排序。
    4.最后把排序后的结构体调用一个printfRank函数,写入文件中。

    截图:

    2.userschcck.c文件

    这个文件主要放了判断用户合法性和放了一个生成界面的函数。
    判断合法性函数参考书本:
    1.定义3个字符数组,把输入的用户和密码,分别存入,并且用函数去连接起来,
    2.在把原来use文件中的用户和密码用fgets读到一个字符数组中。
    3.把这2个字符数组比较,相同就返回1;不同就说明用户不合法,返回0;

    截图:

    3.CreateExp.c文件

    根据上次大作业生成运算符并且其中调用计算函数计算出结果,代码都一样没有变化;
    这次这个文件函数加了一步赋值:

    把运算正确率,和练习的题目,存入结构体数组中,便于排序和写入文件。

    4.ComputeExp.c文件

    代码还是上次作业的代码:
    判断是否为数字字符,是进行m语句的运算。
    否则就一定是运算符,分情况进行运算。

    截图:

    由于结果其余函数要用,所以设计了返回值,

    5.writeRank.c文件

    这个文件放了2个函数,排序函数,和把结果读入文件中的函数;
    排序函数主要运用选择法,把之前存好的结构体数组的地址传入,用选择法根据正确率的大小排序。
    读入文件的函数:
    定义文件指针,开文件,用循环fprintf写入排序好的结构体数组。

    截图:

    2.2.运行结果

    登录:判断用户合法性的运行截图:


    根据用户文件用户1对应的密码是A,所以显示不合法。要求重新输入:

    再次输入1和A符合用户和密码,启动运算软件。

    用户1:

    用户2:

    用户3:

    用户4:

    用户5:

    2.所有用户运算结束,打开排名文件:

    2.3改进大作业总结和碰到问题及解决办法:

    改进这次大作业,基本上对文件的处理有个大体的了解了,可以熟练的掌握了文件的读写,还学习到了检验用户合法性,和结构体数组排序的方法,这2个种思路在处理结构体问题中,应该是比较常用。这次的大作业,还巩固了我对结构体数组的认识,而且考验了我对函数传参数的认识,由于这次的代码分了好几块,所以在处理上就必须考虑好每一块之间的连接问题,就是函数的传参数的问题。参数怎么传,传对了才可以连接好每一块的代码,在这个连接上,也是我这次处理大作业的最大困难。比如:

    这个函数,我一开始是这样传:

    试了很多遍,运行不了,我去问了同学,同学告诉我要这样传:

    我就有点不解。我记得结构体数组明明是可以直接传数组名,为啥这里要带上&符号?

    还有赋值这里,我一开始是想用过一个函数:把这几个数据通过函数参数传进去,从函数里面去赋值,但是在传参数的时候又遇见了问题:


    为什么这里又是传s,不是&s。我很难理解,所以就直接取消了这个函数,直接在后面:

    这样也成功的把数据存到结构体了。
    主要是这2个地方的连接,花了很长时间,其余的连接,还是很顺利。排序函数,打印文件函数简单的用结构体的数组名传入就行。

    2.小结

      分装文件,最主要的是连接问题,每个文件如何的接好,这个问题处理好,成功了一大半,这也是最难的。很多功能,由于一开始自己的能力有限,没有去思考,希望这次作业后,对文件结构体有所了解的基础上,以后的类似问题,能够扩展一些不一样的功能。
  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/zhouqb/p/10201000.html
Copyright © 2011-2022 走看看