本系统学生信息由链表
存储,账号由结构体数组
存储,在程序开始时从文件
中读入所有信息。如有信息变动即时保存到文件。文件为文本文件。再分为管理员端,教师端,学生端进行功能区分与权限管理。不足之处:仅仅区分了班级未区分专业
本系统不能直接注册账号,注册信息存到文件,管理员可见。未注册时仅可进行申诉
各端主要功能
学生端 | 教师端 | 管理员端 |
---|---|---|
成绩查询及分析 | 班级及个人成绩查询及分析、排序 | 全专业的教师成绩功能 |
查询当天课表 | 学生的添加及成绩的修改 | 学生账号的增删改查 |
成绩申诉 | 下载全专业成绩到指定目录 | 查看账号注册与申诉 |
密码修改 | 查看申诉 | 账号登录记录 |
密码修改 | 密码修改 |
上表中各功能对应的C语言知识
成绩查询、更改、排序输出—>链表的排序与查找与更改
学生的增删—>链表的增删更改与文件读写
账号的增删改查—>结构体数组的增删改查与文件读写
成绩、账号申诉与登录记录—>文件的读写
输入检查
方法一 函数的递归调用
将输入的获取写成一个函数。若在在函数内进行自身调用,则难以进行计数退出(达到一定错误次数后退出),除非传参计数。然而传参会使函数使用更加复杂,无需计数调用时此参数又更加鸡肋。若在函数外进行重复调用或计数,则更像第二种方法,且此时函数调用时又要裹一层壳,显得重复代码过多或不直观。然而我喜欢这种用法
方法二 while循环控制
在输入获取外包裹一层while,出口为合法输入或计数退出。缺点同上。
解决方法
写这样一个函数
void exam_input( //获取输入的函数的入口 ){
while(//计数||输入不合法 ){
//调用函数
}
}
好像并没有什么用
获取系统时间
一些辅助函数
rewind(stdin);//清空输入缓存区
Sleep(3000);//睡眠函数 停止程序3000ms
system("CLS");//清屏函数
system("color 70");//更改颜色设定
/*颜色属性由两个十六进制数字指定, 第一个为背景色, 第二个为前景色。
每个数字可以为下列值之一:
黑色 = 0 蓝色 = 1 绿色 = 2 湖蓝色 = 3
红色 = 4 紫色 = 5 黄色 = 6 白色 = 7
灰色 = 8 淡蓝色=9 淡绿色=A 白色=C
淡紫色=D 淡黄色=E 亮白色=F
*/
文件操作
1.读取文件内容到链表/数组
2.更改链表/数组内容后重新写文件 若不想修改生效,则重新读取文件到 链表/数组
3.清空文件 用w+等格式打开即可
链表的操作
2018/5/7