文件,结构体作业

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.小结

  分装文件,最主要的是连接问题,每个文件如何的接好,这个问题处理好,成功了一大半,这也是最难的。很多功能,由于一开始自己的能力有限,没有去思考,希望这次作业后,对文件结构体有所了解的基础上,以后的类似问题,能够扩展一些不一样的功能。
原文地址:https://www.cnblogs.com/zhouqb/p/10201000.html