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

1.本章学习总结

1.1思维导图

C语言博客作业06--结构体&文件_第1张图片

1.2本章学习体会

在这一章的学习中,我了解到了结构体在C语言中的初步运用,利用结构体来将多个变量统一起来,有利于变量之间的传递交互,也学会了将结构体与指针结合起来,提高函数之间的传递效率。
除此之外,还学习了文件方面的知识,懂得了如何将数据存储到文件里面,和从文件中读取数据,由此来实现更多有趣的功能,如游戏系统的排名,账户的登陆和注册等等。

2.大作业

2.1文件介绍

1.头文件

我将头文件的名字命名为counter.h,在这个头文件里,我定义了两个结构体类型

Details :该结构体用于最后排名的信息存储,其中包括用户的昵称,正确题目数量,选择的难度等级,正确率,以及作答的日期。

User :该结构体用于登陆系统的验证,其中包括用户的昵称,以及密码。

C语言博客作业06--结构体&文件_第2张图片

2.其他文件介绍

文件1:main.c

  • 文件功能:

    1.调用其他文件的函数,实现目标功能。
    2.定义变量,并通过指针的形式传送到各个函数中去,进行计算。

  • 思路:利用while循环不断重复表达式的制造与验证函数,达到重复做题的目的,再在中间插入一些功能性函数,丰富体验

  • 截图:

C语言博客作业06--结构体&文件_第3张图片

文件2:Login.c

  • 文件功能:

    1.对注册用户登记并写入user.txt文件
    2.对登陆用户验证

  • login函数思路:

    1.首先对文件进行检测,如果user.txt文件不存在,就引导用户注册,存在就以只读打开。
    2.读入用户输入的用户名以及密码,对输入长度的限制,原本想使用fgets来限制长度,后来发现当长度达不到规定长度时,会把回车也读进去,影响到后面排名的展示,所以干脆自己写了一段代码来使用。
    3.再从文件中逐个读取用户数据与先前用户输入的数据进行比较,判断是否正确,是就放行。

  • Register函数思路:

    1.该函数比较简单,采用同login一样的输入方式,将读取的数据追加在user.txt文件的末尾,直接以该用户登陆。
    2.在用户输入完昵称后,将在用户文件中进行查找,看是否用户名已存在。

  • menu函数思路:

    该函数主要是对前两个函数的整合,并调用Messagebox函数对用户的选择进行判断,这样做有一个好处就是规避了采用输入菜单时的不规范输入。
    对函数的返回值判断就可以知道用户的选择。

  • 截图:

C语言博客作业06--结构体&文件_第4张图片

C语言博客作业06--结构体&文件_第5张图片

C语言博客作业06--结构体&文件_第6张图片

文件3:ComputeExp.c

  • 文件功能:

    1.依照等级创作表达式,传入IsExp函数判断
    2.判断表达式是否正确,并去除前导零
    3.开始游戏,先计算结果并记录时间,在用户输入完毕后判断答案是否正确,是否超时。

  • ComputeExp函数思路:

    先将数字和字符全部提取出来,然后依据运算符的优先级分情况讨论,结果存储在number[0]并返回

  • GameStart函数思路:

    1.调用函数计算结果,在用户输入前后进行对比和判决。
    2.将正确与否的结果存储到right和total变量当中。
    3.在输入方面插入一些代码优化用户体验

  • IsExp函数思路:

    1.将所有数和运算符提取出来,对除法的情况进行判断,看有没有除以0或者除不尽的情况,有的话对除数进行重构。
    2.将修改完的数据存储到表示中。

  • 截图:

C语言博客作业06--结构体&文件_第7张图片

C语言博客作业06--结构体&文件_第8张图片

C语言博客作业06--结构体&文件_第9张图片

文件4:ranking.c

  • 文件功能:

    将用户最后的成绩与ranking.txt文件中的历史成绩进行排名,并将前10输出到控制台,然后把这些结果存储到ranking.txt文件中

  • rank函数思路:

    1.先将ranking.txt的数据读取出来存储到一个结构体数组里面。
    2.把用户成绩与历史成绩对比插入并输出到控制台。
    3.把数据存储到ranking.txt文件

  • 截图:

C语言博客作业06--结构体&文件_第10张图片

2.2运行结果

1.登录界面

C语言博客作业06--结构体&文件_第11张图片

C语言博客作业06--结构体&文件_第12张图片

C语言博客作业06--结构体&文件_第13张图片

2.排名结果

C语言博客作业06--结构体&文件_第14张图片

2.3改进大作业总结

1.碰到问题及解决办法

1.在读取昵称的时候,fgets会连同回车一并读取咋整?

动手写一个读取,只读六个字符,末尾补 \0 ,遇到回车就结束,将回车换为 \0 ,并且清除缓存区。

2.在将日期转换为字符串后,当下一个名次没有人时,会把这一行的回车当做上一行的字符输入到文件中,导致在不断的读取输入后,会出现排版错乱?

在读取数据时挨个读取,如果遇到空数据就直接跳出循环,不再从文件里读取数据。

3.获取系统日期时总是少了八个小时,这咋整?

经百度查询,需要矫正时区,但是我的方法比较简单粗暴,在时间变量上直接加上86060,这也只是缓兵之计,以后还是应该用矫正时区的函数来矫正。

2.小结

在今后的学习中,百度很重要,不管是遇到问题,还是自己想拓展功能,都可以先求助百度,在这个互联网高速发展的时代,尤其是作为计算机学子的我们,更应该运用好百度这个大数据搜索工具,来获取我们需要的知识,不管是CSDN还是博客园,都有大量资料。平时在vs上面出现错误提示时,都会有一段错误代码,像这种东西就是让我们在出现问题又不知道如何解决时,能有地方可以找。

C语言博客作业06--结构体&文件_第15张图片

你可能感兴趣的:(C语言博客作业06--结构体&文件)