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

上传人:b****6 文档编号:5890175 上传时间:2023-01-01 格式:DOCX 页数:7 大小:18.73KB
下载 相关 举报
学生成绩信息管理系统实践类核心课程设计报告DOC.docx_第1页
第1页 / 共7页
学生成绩信息管理系统实践类核心课程设计报告DOC.docx_第2页
第2页 / 共7页
学生成绩信息管理系统实践类核心课程设计报告DOC.docx_第3页
第3页 / 共7页
学生成绩信息管理系统实践类核心课程设计报告DOC.docx_第4页
第4页 / 共7页
学生成绩信息管理系统实践类核心课程设计报告DOC.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

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

《学生成绩信息管理系统实践类核心课程设计报告DOC.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统实践类核心课程设计报告DOC.docx(7页珍藏版)》请在冰豆网上搜索。

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

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

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

实践类核心课程设计报告

课程名称:

程序设计实践2

设计题目:

学生信息管理系统

指导教师组:

周舸

组长学号姓名:

组员学号姓名:

计算机系制

2016年6月

1.0项目需求分析

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

1.1设计内容

本项目运用C语言程序设计一个学生信息管理系统。

系统的功能主要有:

学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览,系统密码管理,系统时间查询,以及在相应的硬盘上面进行存盘以防止部分数据的丢失。

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

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

1.2设计要求

需要有系统的功能:

学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览等功能;

并可以在文件中存储学生信息,使得第二次打开依旧会保存上次的操作

2.1程序的功能分析

Main()主函数:

调用动画函数,调用菜单函数,调用文件信息读入函数。

Cartoon()动画函数:

打印进入动画,调用密码函数。

Keyword()密码函数:

限制进入系统的人的权限。

Menu()菜单函数:

打印系统功能,并选择执行功能,有打印提示使用者。

Read()文件读入函数:

从数据文件读入数据,进入链表,并返回头节点。

Save()文件写入函数:

将单链表中数据,写入文件中。

Push()压栈函数:

将数据压栈。

Pop()出栈函数:

将数据出栈并打印。

Totle()计算总分函数:

自动计算当前链表所有节点的总分。

Average()计算平均分函数:

自动计算当前链表所有结点的平均分。

AddNODE()添加信息函数:

在单链表最末端添加信息。

Delet()信息删除函数:

找到需要删除的学生的结点,并删除该结点。

InquiryNODE信息查询函数:

找到所查询的信息所在结点,并打印该结点的所有数据。

modifyNODE()修改信息函数:

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

Browse()浏览信息函数:

对除头结点以外的所有结点进行访问,并打印数据。

SortTNODE()排序函数:

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

Tree()二叉排序树建立函数:

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

Inview()二叉排序树的中序遍历函数:

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

Exit()退出函数:

调用文件写入函数,并退出程序。

Time()时间函数:

调用WindowsAPI,实现获取系统时间,并保存。

2.2程序功能结构

AddNODE()

Delet()

InquiryNODE()

ModifyNODE()

Browse()

Time()

Sort()

2.3存储结构设计

structdatadent//学生信息结构体

{

charname[20];//姓名

charsex[5];//性别

intdata_num;//学号

intMath;//数学成绩

intEnglish;//英语成绩

intC_language;//C语言成绩

inttelphone;//电话

inttotle;//总分

intaverage;//平均分

};

structNODE//链式存储结构

{

datadentdata;

NODE*next;

};

structPassword//密码结构体

{

intAcc;

intPas;

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

structTime//时间信息结构体

{

intyear;//年

intmonth;//月

intday;//日

inthour;//时

intminute;//分

intsecond;//秒

}TIME;

structSTACK//栈结构体

{

ints[SIZE];//数组

inttop;//栈底指针

};

structTNODE//二叉树结构体

{

intdata;//数据域

structTNODE*Lchild;//左孩子

structTNODE*Rchild;//右孩子

};

intPermissions=0;//权限等级

NODE*HEAD;//全局变量

2.4功能及算法设计

Main()主函数:

调用动画函数Cartoon(),调用菜单函数Menu(),调用文件写入函数Read()完成主界面的设计。

Cartoon()动画函数:

利用二维数组存储点,使用rand函数以及srand函数生成随机赋值给二维数组,printf打印二维数组,清屏,重复打印。

调用密码函数Keyword()。

Keyword()密码函数:

采用了fopen,fread,fwrite等函数,完成了文件的写入与写出。

运行时,先从文件写出信息,将用户输入的信息与之比对,正确则将权限变量Permissions赋值为1。

Menu()菜单函数:

首先判断权限变量是否为1,不为1则打印普通功能,为1则进入普通用户界面,否则进入高级用户界面。

随后打印系统功能,提示用户选择功能,利用switch完成功能的选取操作并选择执行相关功能函数。

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()时间函数:

调用WindowsAPI,实现获取系统时间,并使用fropen,fread等函数写入文件保存。

2.5系统实现及测试

Cartoon()动画函数

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

Keyword()密码函数

Main()主菜单函数

此为密码输错界面,只可进行学生信息的查找以及浏览,输入数字1,2,3进行相关操作。

Main()主菜单函数

密码输对界面,可使用添加,删除,查询,修改,浏览,密码修改,时间查询等操作,输入对应数字进行操作。

Browse()浏览信息函数

第一次进入系统,使用浏览函数浏览信息,发现为空,证明文件内未包含任何信息。

AddNODE()添加信息函数

使用了添加功能,输入了两个学生信息。

Browse()浏览信息函数

添加完进行浏览,发现添加学生信息成功,成功的打印出了刚添加的学生信息。

InquiryNODE()信息查询函数

使用查询函数,查询刚才添加的两个学生信息,发现查询成功,打印出了这两个学生信息。

Delet()信息删除函数

InquiryNODE()信息查询函数

SortTNODE()排序函数

使用了排序功能,成功由高到低依次打印出了各项成绩。

Time()时间函数

使用查看系统时间功能,成功打印出了上一次进入系统的时间,以及现在的系统时间。

2.6调试及解决方案

在动画函数的运行时,由于采用的是二维数组,以随机数方式打印“.”,达到动画效果,发生了堆栈溢出的情况,随后XX以及检查代码,发现是数组的使用越界

在输入数据时,发现会自动跳过,于是采用了scanf_s("%d"),的方式(在%前方加空格),但是发现效果不如人意,随后便在scanf_s前面加fflush(stdin);清除标准输入输出缓冲区

在用scanf_s接收字符数组时,会出现失败的现象,后采用get_s解决此问题

在文件的写入时,开始会报错,错误提示为stream为空,后发现是指针的指向问题,以及指针未能及时的释放。

在排序过程中,因为二叉排序树的建立中根结点的建立与,其他子树的不同,根结点在建立时,并没有赋值,采取在sortTNODE()函数中,先给根结点赋值,解决问题。

在把组内成员的写好的代码拿来拼接的时候,多次调试,无法拼接成功,采用函数形参相同的方式,定义一个全局变量的头指针,方解决。

3总结及心得体会

此次实践课编写的是一个应用程序,相对于以前我们见的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在共同的努力的下,我们一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。

可是毕竟是第一次独立完成这样的大程序,结果还不是太理想。

由于时间很短,在选题报告中设想到的好多功能都没有实现。

已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。

如:

再录入数据时,没有设计数据输入出错的提示,如果成绩输的是负值程序也继续执行,这就给运用上带来一些不便;没有设计按各科成绩排序的功能。

2.在设计过程中的感受:

本次数据结构课程设计让我们对计算机语言的学习又有了更深入的了解,也让我们更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,课程安排的这次设计让我们这些实践知识匮乏的大学生增添了许多经验,为我们将来走上工作岗位其了不小的铺垫作用。

本次课程设计中我们遇到了很多以前没有遇到过的问题,也曾想要放弃,但看到其他组同学都在那认真的写程序,给了我们继续的信心。

共同的努力下,我们顺利的结束了本次课程设计,让我们知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我们知道了友谊和团结的重要性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1