文件,结构体作业

1.本章学习总结

1.1 思维导图

1474647-20190101143029498-181296642.png

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

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

2.大作业

1474647-20181230222357121-1817185444.png
先把5个用户存储在文件中(没有设计注册新用户的步骤)
1474647-20181230230032796-1457380904.png

2.1文件介绍:

1.头文件:

1474647-20181230221820294-522964540.png

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

2.其他文件介绍

1.main.c文件

1474647-20181230222342406-552603850.png

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

截图:
1474647-20181230223214453-1800834287.png

2.userschcck.c文件

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

截图:
1474647-20181230223938275-2077674024.png

3.CreateExp.c文件

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

把运算正确率,和练习的题目,存入结构体数组中,便于排序和写入文件。
1474647-20181230224429268-20229387.png
1474647-20181230225356353-36156173.png

4.ComputeExp.c文件

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

截图:
1474647-20181230224700742-1261692641.png

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

5.writeRank.c文件

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

截图:
1474647-20190101141325411-29032932.png

2.2.运行结果

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

1474647-20181230230407927-1586017943.png
根据用户文件用户1对应的密码是A,所以显示不合法。要求重新输入:
1474647-20181230230449931-1694373293.png
再次输入1和A符合用户和密码,启动运算软件。

用户1:
1474647-20181230232142735-1046362743.png

用户2:
1474647-20181230232222650-892750551.png

用户3:
1474647-20181230232248833-1013044055.png

用户4:
1474647-20181230232319166-2086687267.png

用户5:
1474647-20181230232409408-310054694.png

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

1474647-20181230232447223-385515734.png

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

改进这次大作业,基本上对文件的处理有个大体的了解了,可以熟练的掌握了文件的读写,还学习到了检验用户合法性,和结构体数组排序的方法,这2个种思路在处理结构体问题中,应该是比较常用。这次的大作业,还巩固了我对结构体数组的认识,而且考验了我对函数传参数的认识,由于这次的代码分了好几块,所以在处理上就必须考虑好每一块之间的连接问题,就是函数的传参数的问题。参数怎么传,传对了才可以连接好每一块的代码,在这个连接上,也是我这次处理大作业的最大困难。比如:
1474647-20190101132730959-1876808779.png
这个函数,我一开始是这样传:
1474647-20190101132851083-46282191.png
试了很多遍,运行不了,我去问了同学,同学告诉我要这样传:
1474647-20190101132949226-1458039477.png
我就有点不解。我记得结构体数组明明是可以直接传数组名,为啥这里要带上&符号?

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

1474647-20190101134009794-1575491264.png
为什么这里又是传s,不是&s。我很难理解,所以就直接取消了这个函数,直接在后面:
1474647-20190101133201999-303668004.png
这样也成功的把数据存到结构体了。
主要是这2个地方的连接,花了很长时间,其余的连接,还是很顺利。排序函数,打印文件函数简单的用结构体的数组名传入就行。

2.小结

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

转载于:https://www.cnblogs.com/zhouqb/p/10201000.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值