上一周,我们完成了个人项目编程。看过我队友的源码之后,我感触颇深,觉得非常有必要来写一篇文章分析一下队友的代码。他的代码是用C++写的,兼顾性能和可读性,下面是我对我队友源码的一些思考。
一、数据结构:
他设置了一个全局的数据结构teacher,teacher保存着用户的姓名、状态。状态有四种,分别是unload、xiao_xue、chu_zhong、gao_zhong。
他使用C++中的#define unload 0使得设置状态时直接将这几个字段赋值给老师的状态,代码非常清晰易读。
二、登录的处理:
首先我们面临着登录的问题,他非常巧妙的用一个函数模拟了请求登录、访问数据库、返回登录状态的过程。
设置了一个专门的文件”账号密码.dat”来保存用户们的账号密码信息,登录函数用来访问这个文件判断是否能够登录、登陆成功就设置老师的信息并返回登录成功。
三、登录后的一系列初始化:
登录成功后根据teacher的name自动设置teacher的状态,之后改小学初中高中就只需要改一下teacher的状态。
四、登录成功后的功能界面:
功能界面的需求是:1、可以随时切换老师的状态,2、输入一个10~30内的数字能生成有对应数量题目的试卷,3、输入-1可以退出登录状态并重新请求登录
他的功能页面是不断的输入字符串,判断字符串是否为数字,数字则进入生成试卷界面,非数字则进入其他功能页面。
五、修改密码:
他不但实现了上面的所有功能,他还加了一个修改密码的功能,用户可以在命令行输入“修改密码”,进入修改密码的界面,然后对“账号密码.dat”进行修改,以此实现真实的修改密码。
六、生成试卷:
生成试卷是在之前生成的题库里找出对应数量的题目,然后输出到新文件里。他巧妙地设置了一个index.dat 用于记录上次从题库读取题目的位置,下次就从index开始读,这样就避免了题目的重复,题库本身也是经过了查重处理的,这样就保证了生成的试卷一定是不重样的。
七、代码风格:
他在所有的文件读写时都会严谨的判断,避免不可预知的错误。他编码时所有的函数名几乎都是一眼就能看懂这个函数是干嘛的。代码的模块化很强便于维护。