ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言合作项目——学生信息管理系统

2021-05-03 00:02:25  阅读:180  来源: 互联网

标签:文件 成绩 读写 学生 密码 合作项目 信息管理系统 C语言 内存


C语言合作项目——学生信息管理系统

​ 学习c语言以来第一次接触的团队合作项目,虽然这个项目规模比较小而且功能比较简单,但是对我这个零项目经验的新手来说意义非凡,不仅复习和实践了之前不熟悉的知识,也在编写中学习了很多有用的知识,也培养了团队合作的能力。

项目需要实现的目标:

学生:
姓名 性别 学号 密码 语文 数学 英语
1、第一次登录强制修改密码。
2、查询成绩
排名 不显示姓名和学号。
平均分
最高分
最低分
3、修改密码
4、查看个人信息
5、三次密码错误锁定帐号,由教师解锁

教师:
姓名 性别 工号 密码
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
批量导入
3、删除学生
输入两次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、显示所有在校学生信息
9、显示所有退出学生信息
10、三次密码错误锁定帐号,由校长解锁

校长:
admin
1、第一次登录强制修改密码。
2、能重置自己的密码
3、能重置教师密码
4、添加教师
5、删除教师
6、显示所有在职教师
7、显示所有离职教师

设计文档
文件 结构 成员 全局变量 函数名

前期分工:

​ 我和三个同学大致划分了一下各自的工作内容。组长负责编写界面、工具函数,组员1负责编写教师模块内容,组员2负责编写校长模块内容,

我负责编写学生模块内容以及文件读写模块的功能。

前期准备:

​ 我们大致统一了一下各身份结构体中的内容,然后统一了一些可能需要用到的变量名。我主要负责学生模块,这个模块与其他模块联系较少,只需要单独实现数据的查询,没有涉及到增删改查等功能,所以比较简单。我主要的精力也是放在对于文件读写功能的实现上。对于三个身份模块,我们定义了三个结构体来存储信息,同时定义了两个宏来替换学生和教师的最大人数。

项目过程中的心得:

​ 1.学生模块我就简单说一下吧,重点主要是对于成绩排名函数的编写。第一个单科成绩排名,比如说语文成绩。设计中是对内存中所有学生的语文成绩进行遍历,然后与当前学生语文成绩进行对比,当前学生语文成绩小于遍历内存学生的语文成绩,则这门成绩的排名+1 ,否则不变;第二个总成绩排名也是一样的思路,把三门单科成绩相加,再与内存中所有学生单科成绩相加进行遍历比较,得到排名。

可以改进的地方:对于总成绩相同的学生,可以按单科成绩进行再次排序,从而得到不同的名次,这样就不会因为同分而出现相同名次了。

​ 2.读写函数的实现。由于没有文件读写函数运用的经验,所以一上手感觉很生疏,没有什么思绪。我也是一边学习一边编写,试验了很多方法,也走了不少弯路。本着边练边学的态度,我就从最简单方式先实现目标,再不断改进或者换用更好的方式。

​ 早期的第一版代码中,我们使用的是栈内存,而且没有文件读写功能,简单实现了增删改查目标。栈内存是计算机自动释放的,一旦程序关闭,所有数据就消失了。因为栈内存非常小,所以对于大量信息读入肯定是不能实现的,因此要使用堆内存。

​ 第二版设计中起初我使用了文本形式读写文件,而且读写形式是将指定文件和内存中所有内容整体读写。这种方法实现起来容易,但是效率非常低下,每对结构体中的信息进行改动(哪怕只是很小的一点改动),都要重新整体写入一次文件,这就导致了写入时间很长,而且如果写入人数较少,文件中依然存储了大量没有使用到的无效数据,无法正常打开。同时,这种方式有致命缺陷,当你越界写入以后,下一次读取文件会导致之后的数据全部都是乱码,直接破坏了文件的存储信息。

​ 第三版我申请了堆内存来存储文件读入的数据,而且改用二进制方式读写文件,同时运用了fseek函数来操作文件指针实现指定位置的读写。这一版是最终版的文件读写函数,也是运行效率最高,最简洁的一版。因为每一个结构体变量名中存储的信息数据是连续的,所以相比于文本形式读写,二进读写比较方便。首先,定义一个结构体指针指向对应的结构体,再把指针指向申请的堆内存。比如说学生有500人,那么对应的堆内存大小则为500*sizeof(struct Student),即500个相同大小的结构体的总字节数。我们可以把他想象成一个500个元素的一维数组。这样把指针当做数组使用,通过加法就能指定位置存取相应结构体的信息。

未来改进的地方:

​ 1.修复一些界面切换当中存在的小bug

​ 2.对于数据的存储,可以考虑使用链式结构

​ 3.对于数据输入增加边界判定,保证输入的规范性

​ 4.对于密码设定,可以考虑使用更加复杂的规则,密码的存储也能使用加密算法,保证密码的安全性

标签:文件,成绩,读写,学生,密码,合作项目,信息管理系统,C语言,内存
来源: https://blog.csdn.net/weixin_45038591/article/details/116358403

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有