成绩管理系统-中期报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中科技大学电子科学与技术系
课程设计报告
( 20 -- 20 年度第学期)
名称:软件课程设计
题目:学生成绩管理程序
院系:电子科学与技术系
班级:
学生姓名:
指导教师:
设计周数:
成绩:
日期:年月日
目录
1. 设计任务 (1)
2. 基本思路 (1)
3. 方案设计 (2)
3.1 功能需求 (2)
3.2 相关函数说明 (2)
4. 程序的源代码 (6)
5. 调试过程中出现的问题及相应解决办法 (9)
6. 个人体会及建议 (10)
7. 参考文献 (10)
1.设计任务
本系统对任何人、任何时候访问系统,都要进行身份验证,以便判断该用户是否合法、若为合法用户,将给予相应的访问权限;否则将给出相应的出错信息。
本系统主要分为两个部分:管理员部分和学生部分。管理员部分主要完成身份管理、编辑信息、查询信息、显示信息等功能。学生部分主要完成验证身份和查询信息等功能。
我们组已经对整个程序的框架有了很清晰的认识,对每个部分要做什么也有了很清晰的认识。现在我们已经完成其中一部分函数的代码。其中遇到了不少的困难,有一些还是没有解决,有待后面讨论和解决。
2. 基本思路
本系统中主要采用的结构体的数据结构。每个学生信息资料用一个StuInfo结构来保存,用StuInfo数组全局变量records来保存一批学生的信息资料。宏定义INITIAL_SIZE表示数组初始大小,当已分配的数组大小不够用时,将增加数组大小,INCR_SIZE为当每次增加的大小。全局变量numStus表示数组中记录的学生数,arraySize是为数组分配的空间大小。全局变量savedTag是信息是否已保存的标志,当数组内容被保存至文件后,设为”已保存”状态,当数组内容被修改之后,设为”未保存”状态。
程序执行后,进入主界面如下,用户可以分别以管理员或者是学生身份进入系统或退出系统。
进入主界面后若选1,输入管理员用户名和密码(若是第一次进入系统,则要先设置管理员用户名和密码),如果正确进入管理员界面,用户可以编辑信息、查询信息、显示信息、和修改密码(如图)。若不正确,则输出错误信息并返回。
进入主界面后若选2,输入学生姓名和学号,如果正确则进入学生操作界面,如图3,学生可以进行显示自己的信息、显示全班的信息、显示班级及格学生的信息、显示不及格学生的信息、显示按学号排序显示所在班级的学生信息和按名次排序显示所在班级学生信息
3.方案设计
3.1 功能需求
3.2 相关函数说明
本课程设计对模块设计如下:
(1)使用多文件方式实现设计;
(2)在各个文件内实现结构化设计;
(3)每个模块作为一个单独的c文件,每个文件内的函数如表1所示,表中给出了各个函数的功能说明;
(4)宏和数据结构等放在头文件中,并使用条件编译。
本设计由6个c文件(23个函数)和一个头文件组成,每个c文件都代表着某种特定的功能,它们的关系如表-1所示。
程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文
件,可以重新建立一个文件;如果已经有记录,可以先把文件内容读入,然后把新记录
追加
到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。表-1:文件及函数组成
3.3 主要函数的程序框架设计举例
3.3.1管理员身份验证
管理员身份验证的算法如图所示(学生身份验证类似)
说明:1.首先打开文件stuinfo,如成功,将文件中的姓名和密码信息分别读出到变量na[20],co[20]中,输入要验证的姓名和密码到变量na1[20],co1[20]中。
2.比较na[20],co[20]和na1[20],co1[20]是否相等,如相等则身份验证通过,进入管理员角色,否则输入出错信息并返回用户选择菜单。
3.如打开文件stuinfo失败,则对名字和密码进行初始化,输入初始化姓名和密码到na[20],co[20]中,然后写入到文件stuinfo中。
3.3.2编辑信息
下面举编辑信息中的初始化信息为例,其他删除信息、添加信息、修改信息等都类似,如下图。
说明:1.若信息不存在,自动生成文件来存放该班级的信息,输入要初始化的学生数ycount及科目count1,输入学生的姓名和学号到临时变量a[20]和b中,调用checknum 函数检验该学生是否存在,若存在,i--,重新输入;否则继续输入各科的成绩。
2.可直接输入信息吗,对相应的科目成绩求和,得到total。算出平均分。
3.判断初始化是否结束,如果没有结束,继续输入;如果结束调用save函数保存到初始化信息中。
还要强调下,排序的程序框图稍有差别,它主要用冒泡法来实现排序的功能。
4. 关键程序的源代码
主函数的程序如下
void main()
{
FILE *fp;
char na[20],na1[20].co[20],co1[20];/*管理员姓名密码及管理员要验证的姓名和密码*/
int i,sign=0; /*返回标志位*/
struct sstudent *stu;
switch(menu_select())/*模式选择菜单*/
{
case 1:
{
sign=checkcode();/*验证管理员姓名和密码*/
if(sign==1);break;/*如不正确,退出*/
else
switch(managermenu())/*管理者菜单*/
{
case 1:
{switch(editmenu())/*编辑菜单*/
case 1:newrecord();break;/*信息初始化*/
case 2:add();break;/*信息添加*/
case 3:dele();break;/*删除信息*/
case 4:copy();break;/*信息备份*/
case 5:modify();break;/*信息修改*/
case 6:resume();break;/*信息恢复*/
case 0:exit(0);/*退出*/
}