学生成绩信息管理系统实践类核心课程设计报告

编辑:阿文时间:2020-06-22 18:19:03
学生成绩信息管理系统实践类核心课程设计报告,成都电子科技大学计算机系,指导教师组周舸,项目需求分析,学生管理系统开始大量的涌入高校,成为了我们需要考虑的问题,本课题采用语言程序设计了一个学生信息管理系统。

成都电子科技大学计算机系

课程名称:编程实践2

设计主题:学生信息管理系统

指导教师组:周舸

组长学号:1540610103何金成

会员学号:1540610105唐真

1.0项目需求分析

随着学生管理的复杂度提高,单纯的文本管理已经无法满足学校教务的要求,学生管理系统开始大量的涌入高校,同时随着学生管理系统涌入我们的高校,如何更便利的对学生信息进行系统和有序的操作,成为了我们需要考虑的问题。

1.1设计内容

本课题采用c语言程序设计了一个学生信息管理系统。系统的功能主要有:学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览,系统密码管理,系统时间查询,以及在相应的硬盘上面进行存盘以防止部分数据的丢失。

系统功能模块图如图1所示。

图1。学生信息管理系统功能模块图

1.2 设计要求

需要具备系统功能:学生信息添加、学生信息修改、学生信息删除、学生信息查询、学生信息浏览等功能;

并且可以将学生信息存储在文件中,以便第二次打开时仍保存最后一次操作

2.1程序的功能分析

main() 主函数:调用动画函数,调用菜单函数,调用文件信息读入函数。

cartoon() 动画函数:打印进入动画,调用密码函数。

keyword() 密码函数:限制进入系统的人的权限。

menu() 菜单函数:打印系统功能,并选择执行功能,有打印提示使用者。

read() 文件读入函数:从数据文件读入数据,进入链表,并返回头节点。

save() 文件写入函数:将单链表中数据,写入文件中。

push() 压栈函数:将数据压栈。

pop() 出栈函数:将数据出栈并打印。

totle() 计算总分函数:自动计算当前链表所有节点的总分。

average() 计算平均分函数:自动计算当前链表所有结点的平均分。

addnode() 添加信息函数:在单链表最末端添加信息。

delet() 信息删除函数:找到需要删除的学生的结点,并删除该结点。

acquirerynode信息查询功能:查找需要查询信息的结点,并打印该结点的所有数据。

modifynode() 修改信息函数:找到需要修改的信息的结点,让使用者输入修改后的数据,输入当前链表的结点中。

browse() 浏览信息函数:对除头结点以外的所有结点进行访问,并打印数据。

sorttnode() 排序函数:依次将单链表中,各科成绩输入函数tree()中,建立二叉排序树。

tree() 二叉排序树建立函数:依次接受一个值,进行插入排序建立二叉排序树,并调用inview()函数。

inview() 二叉排序树的中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。

exit() 退出函数:调用文件写入函数,并退出程序。

time() 时间函数:调用windows api,实现获取系统时间,并保存。

2.2程序功能结构

addnode()

delet()

inquirynode()

modifynode()

browse()

time()

sort()

2.3存储结构设计

struct datadent//学生信息结构

;struct node//chain存储结构

; struct password //密码结构

pass[2];//密码结构体数组

struct time//time信息结构

time;

struct stack//stack结构

;struct tnode//二叉树结构

;int permissions=0;//权限级别

node*head;//全局变量

2.4功能及算法设计

main() 主函数:调用动画函数cartoon(),调用菜单函数menu(),调用文件写入函数read()完成主界面的设计。

cartoon() 动画函数:利用二维数组存储点,使用rand函数以及srand函数生成随机赋值给二维数组,printf打印二维数组,清屏,重复打印。调用密码函数keyword()。

keyword() 密码函数:采用了fopen,fread,fwrite等函数,完成了文件的写入与写出。在运行时,首先从文件中写出信息,并将用户输入的信息与之进行比较。如果正确,权限变量权限将分配给1。

menu() 菜单函数:首先判断权限变量是否为1,不为1则打印普通功能,为1则进入普通用户界面,否则进入高级用户界面。然后打印系统功能,提示用户选择功能,示用开关完成功能选择操作,选择执行相关功能。

read() 文件读入函数:采用了fopen,fread等函数,完成了文件的写入,定义新结点,将文件中写入的信息依次写入结点数据域,将结点挂载到链表上,重复以上操作,直到文件为空,返回链表头指针。

save() 文件写入函数:接收链表头指针,采用了fopen,fwrite等函数,完成了文件的写入。依次将列表中结点的数据字段中的信息写入文件,直到列表为空。

push() 压栈函数:将数据压栈。

pop() 出栈函数:将数据出栈并打印。

totle() 计算总分函数:自动计算当前链表所有节点的总分。

average() 计算平均分函数:自动计算当前链表所有结点的平均分。

addnode() 添加信息函数:接收单链表头指针 ,找到链表中最后一个结点,接收用户输入数据,将数据写入一个新结点,将结点挂载到链表上。

delet() 信息删除函数:接收单链表头指针,接收用户输入信息,依次查找单链表中信息是否有与之相匹配的,找到则询问用户是否删除,删除则孤立该结点,然后使用free释放掉。

inquirynode() 信息查询函数:接收单链表头指针,接收用户输入信息,查询是否存在,存在则打印该学号学生信息。

modifynode() 修改信息函数:接收单链表头指针,接收用户输入信息,在单链表中数据域比较是否有与之匹配的信息,有则提示用户输入想要修改的数据,将用户输入的信息重新赋值给该结点。

browse() 浏览信息函数:接收单链表头指针,对除头结点以外的所有结点进行访问,并打印数据域中信息。

sorttnode() 排序函数:接收单链表头指针,依次将单链表中结点的数据域输入函数tree()中,建立二叉排序树,调用inview函数,打印出排序结果。

tree() 二叉排序树建立函数:依次接受一个值,进行插入排序建立二叉排序树,并调用inview()函数。

inview() 二叉排序树的中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。

exit() 退出函数:接收链表头指针,调用文件写入函数save,并退出程序。

time() 时间函数:调用windows api,实现获取系统时间,并使用fropen,fread等函数写入文件保存。

2.5系统实施与测试

cartoon() 动画函数

此为动画界面,由于是动态,所以只截了一张图,后续**,将以此格式打印出来,但点的位置为随机,点的颜色依次从红,黄,蓝,绿,青,橙,紫变化。

keyword() 密码函数

密码输入界面,密码初始输入必须为1540610103,610103以及1540610105,610105。如果密码输入不正确,请进入正常用户界面。

main()主菜单函数

这是密码输入错误界面,只能搜索浏览学生信息,输入1、2、3号进行相关操作。

main()主菜单函数

密码输入界面,可以使用添加、删除、查询、修改、浏览、密码修改、时间查询等操作,输入相应的号码进行操作。

browse() 浏览信息函数

首次进入系统,使用浏览功能浏览信息。它是空的,证明文件不包含任何信息。

addnode() 添加信息函数

使用add函数,输入两个学生信息。

browse() 浏览信息函数

添加后,浏览发现添加学生信息成功,并成功打印出刚添加的学生信息。

inquirynode() 信息查询函数

使用查询功能查询刚添加的两个学生信息,查询成功后,打印出两个学生信息。

delet() 信息删除函数

使用删除功能,删除学号为***的学生信息。

inquirynode() 信息查询函数

使用浏览功能,删除后发现删除的学号为***的学生信息未打印出来,证明删除成功。

sorttnode() 排序函数

使用排序功能,我们成功地将分数从高到低打印出来。

time() 时间函数

使用查看系统时间功能,成功打印出最后一次进入系统的时间和当前系统时间。

2.6调试及解决方案