C语言博客作业06--结构体&文件
1.本章学习总结
1.1思维导图
1.2.本章学习体会
(1)这次学习结构体和文件时事先没有预习,导致上课时候听课效率很低,与之前有所变化,所以在
课后的复习中所花费的时间也就越多,且复习过程更像是在预习,不解的地方会比较多,但之后老师布
置复习作业后跟进学习,知识也就有所跟进;
(2)指针完后的文件又是一大难题,这次文件学习主要参考老师博客园中建工程及课本知识相结合的学习方式,
学习到文件读写方式与平常读写有所不同,感觉代码变化也很大,陌生感会比较强烈,而文件读写后文件保存
也很重要,有一点就是关闭文件时系统会自动保存;
(3)学习了sprintf函数用于将浮点数转化为字符串形式;
2.大作业
2.1.文件介绍
1.头文件
- 头文件名为vanish.h,在其中定义了两个结构体
PASS:该结构体变量用于存放user文件中的号码和密码,并供调用和使用;
RANK:该结构体变量用于存放user文件中的用户名,做题数和正确率,供调用并进行排序和展示;
2.其他文件介绍
文件1:main.c
文件功能:包含登入界面,做题界面,以及可以输出排名表;
设计思路:设计一个登入界面的总函数用于用户登入;登入成功后进入做题界面,分别调用生成表达式的函数
和计算表达式的函数进行运算和作答,接着将做题数和正确率存入文件ranking.txt中,并且可以选择是否展示排行版;
最后输出是否继续做题页面供用户选择;
文件2:Login.c
文件功能:生成登入界面,用户可以选择直接登入或进行新用户注册;
设计思路:(1)设计一个ReadUserFile函数读取user.txt 文件中的用户个数,并赋给total;
(2)用户输入账号密码后,在user.txt文件中查重,当账号和密码都匹配时才显示登入成功(由Authentication函数实现);
(3)当要注册新账号和密码后,在user.txt 文件中查重,若账号已存在,进行相应提示,并重新注册,成功后进行提示并进入登入转态(由RegisteredUser实现)。
文件3:ComputeExp.c
文件功能:生成表达式及计算表达式;
设计思路:(1)生成相应的随机数和随机运算符并依次赋给exp字符数组,最后输出字符数组。(CreateExp函数)
(2)将字符数字转化为整型数字,并依次一步一步的计算并赋值给result,最后算出表达式结果,并将结果result返回。(ComputeExp函数)
文件4:Ranking.c
文件功能:将本次计算的数据通过正确率进行排序并存入文件中,用户可以选择查看排行榜;
设计思路:(1)设计一个函数用于读取ranking.txt 文件中的用户数;
(2)通过正确率来比较用户排名高低,遍历数组找到将新数据插入的位置,并将其余数据后移,完成后保存下来;(SortAndSave函数)
(3)通过结构体数组变量中的数据将排行榜展示出来;(PrintRanking函数)
2.2.运行结果
1.登录界面
2.排名结果
2.3改进大作业总结
1.碰到问题及解决办法
Q1:刚开始对于文件的掌握非常欠缺,导致不知该如何下手;
A1:参考老师上次的建工程博客及课本进行解读,再进行模仿写代码;
Q2:如果将想要将浮点数转化为字符串则,自己写代码则需要挺长的代码实现;
A2:通过上网查找发现sprintf函数可以直接实现;
Q3:在对数据排序时,总是会导致插入后,后面的数据发生了变化的情况;
A3:用到rewind函数重新定位文件首,并将数据保存下来后;
Q4:对于用户名(即账号)的传输;
A4:刚开始想通过函数将的进行传递,但是后来想到用户名在一开始登入后随即不在改变,则选择定义全局变量,在之后调用就很方便;
2.小结
1.通过这三次大作业,认识到C语言中有很多没有学过但是很实用的函数,而上网查找资料就非常重要了,可以学习到很多课本上没有看过的知识,
在使用新的函数是可以先编写一小段代码熟悉一下,在大作业这种打代码量中使用会减少错误率,大作业的各功能的实现也是一步步完善的,当然
时间付出的越多收获也就相应的越多。
2.打代码量工程中函数封装很重要,而这次的函数封装个数也非常多,且函数在文件中的分配也很重要,这会决定调用函数是的效率;没有明确规划,
会让自己在寻找函数存放的位置浪费时间;而这次还是老师进行归类,以后继续学习封装和分配;