数据结构课程设计
课程设计报告
题 目:教务管理系统
学 号: |
201801420205 |
专业班级: |
18软件工程本二班 |
姓 名: |
黄明 |
指导老师: |
黄玲 |
完成日期: |
2019年6月21日 |
湖南信息学院本科学生课程设计任务书
题 目 |
教务管理系统 |
1、课程设计的目的 1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 2) 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。 |
|
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) [问题描述]:实现教务管理的学生信息管理,教师管理,财务信息管理等几种操作功能。 [基本要求]:用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单请按下形式给出: ********************************************************************* * 教务管理系统 * * 1.学生信息管理 * * 2.教师管理系统 * * 3.财务信息管理 * * 4.班级管理系统 * * 5.课程信息管理 * * 6.成绩信息管理 * * 7.打印信息管理 * * 8.综合信息查询 * * 9.系统管理 * * 0.退出教务管理系统 * ********************************************************************* 请选择 0—9: 使用数字0~9来选择菜单项,其他输入则不起作用,并给出错误提示。 |
|
3、主要参考文献 [1]刘大有等,《数据结构》(C语言版),高等教育出版社 [2]严蔚敏等,《数据结构》(C语言版),清华大学出版社 [3]William Ford,William Topp,《Data Structure with C++》清华大学出版社 [4]苏仕华等,数据结构课程设计,机械工业出版社 |
|
4、课程设计工作进度计划 1) 分析题目,查阅相关资料:1天; 2) 算法设计、数据结构设计:1天 3) 编写代码并调试:1天 4) 完成课程设计报告:2天 |
摘要
数据结构课程设计对于训练学生掌握程序设计技术、使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
着重通过用单链表作存储结构实现教务管理系统设计。介绍了教务管理系统的各个方面,对于教务管理系统的设计思想和设计流程也做出了全面的叙述,并且做出了教务管理系统各个功能的实现过程以及详细设计过程,在绘制简单系统的流程图的同时,力求更加清晰地表明设计思想以及对整个程序设计的规划及具体实现。
根据课程要求,以及数据结构思想,在Windows操作系统环境下,运用 C++ 6.0编译程序,以C语言为开发语言,最终实现通讯录系统的主要功能。
关键字 数据结构,教务管理,C语言,课程设计
第一章 概述
为了训练自己掌握程序设计技术、熟练上机操作及程序调试等技能,培养自己正确的程序设计思想,使平时学习的理论联系实际。培养自己严肃认真、实事求是的科学态度和勇于探索的创新精神。培养自己综合运用所学知识与实践经验,分析和解决相应领域的工程技术问题或进行软件项目开发的能力。依照课程教学大纲和课程设计大纲提出了本次课程设计的题目及要求。
本课程是数据结构的一次运用,而使其各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法得以运用。
要求学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
本次课程设计题目是教务管理系统,教务管理是一个比较实用的小型管理系统。该设计采用菜单作文应用程序的主要界面,用控制语句来改变程序执行顺序,控制语句是实现结构化程序设计的基础。贯穿始终的是程序各项功能的实现。分为程序开始的主菜单和各实现部分几大部分。主菜单部分主要解决的问题是程序开始选择问题,以及循环选择问题,其余各部分根据其实现功能完成代码设计。
第二章 需求分析
2.1开发目的
数据结构是计算机软件工程专业的主干课程之一,它旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运算,把现实世界中的问题转化为计算机内部的表示和处理。
2.2设计目的
本课程设计的主要目的是使学生一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力,从而进一步提高了实际运用的能力。
2.3设计要求
实现教务管理的学生信息管理,教师管理,财务信息管理等几种操作功能。
用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单请按下形式给出:
*********************************************************************
* 教务管理系统 *
* 1.学生信息管理 *
* 2.教师管理系统 *
* 3.财务信息管理 *
* 4.班级管理系统 *
* 5.课程信息管理 *
* 6.成绩信息管理 *
* 7.打印信息管理 *
* 8.综合信息查询 *
* 9.系统管理 *
* 0.退出教务管理系统 *
*********************************************************************
请选择 0—9:
使用数字0~9来选择菜单项,其他输入则不起作用,并给出错误提示。
第三章 方案设计
3.1设计思路
本程序首先利用主函数设计菜单选择界面,主函数中根据用户选择项转入相应功能函数,如果输入错误,主函数给出相应提示。其中用到变量j=1控制其循环运行。
在主界面中输入数字来选择功能,则转入相应函数 (void),以实现用户的需求,输入完会提示用户是否继续录入信息然后根据用户选择继续运行;在除却建立通讯录链表和退出功能外,其余选择项均会先判断是否已经建立通讯录链表,如果没有则会提醒用户先建立通讯录链表并返回主菜单;选择“通讯者结点的插入” ,如果已经建立通讯录链表,录入信息转入其函数void InsertNode(LinkList head,ListNode *p);选择“通讯者结点的查询”,如果已经建立通讯录链表,则调用其函数ListNode *ListFind(LinkList head)进行查询,在此函数中,会先提示用户是按照何种方式查询,待用户选择查询方式后根据用户选择进行相应查找;选择“通讯者结点的删除”,如果已经建立通讯录链表,则转入删除函数void DelNode(LinkList head),在此函数中嵌套调用查找函数以便选择以何种方式进行删除;选择“通讯录链表的输出”,如果已经建立通讯录链表,,则会通过函数void PrintList(LinkList head)直接输出所有通讯者信息;选择“退出通讯录管理系统”则会提示用户是否退出,用户确认后变量j=0退出程序。
3.2 设计功能
程序运行后的功能有:
(1)菜单选择界面
(2)建立通讯录记录
(3)插入联系人记录
(4)查找联系人记录(名称和编号查询)
(6)删除联系人记录
(7)输出所有联系人记录
(8)退出程序
第四章 算法设计
为了方便了解程序的操作过程,特画出系统流程图。通讯录管理系统的程序结构如图所示:
|
程序算法流程图 |
Y |
第五章 详细设计
5.1 主函数设计
由于主函数设计的是菜单选择项,所以在程序未退出的的情况下要实现循环运行,并且要考虑到未建立通讯录链表的情况下其他功能无法实现的情况。故在实现循环运行的功能时定义一个变量j=1,在选择退出后再将j赋值为0,要考虑判定是否建表的情况定义了一个全局变量flag1=0,建链表后flag1赋值为1。
为了达到选择各功能,采用switch判定选择项并跳转入相应功能函数。
判定是否建表语句:
if(flag1!=1)
{printf("请先建立表!");
getchar();
system("cls");}
5.2 功能程序设计
为了达到程序各项功能的实现,以及满足菜单选择项的功能,对每个功能的实现分别用了不同函数,并且有用到函数的嵌套以减少代码的重复。
5.2.1建立通讯链表设计
要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下:
(1)使链表的头尾指针head、rear指向新生成的头结点(也就是尾结点);
(2)置结束标志为0(假);
(3)while(结束标志不为真)
{
(4)尾结点的指针域置空置NULL。
具体算法实现如下:
/*******尾插法建立带头结点的通讯录链表算法*******/
LinkList CreateList(void)
{
}
5.2.2 通讯者结点信息的插入
链表结点的插入,要求将一个通讯者记录的数据结点按其编号的次序插入有序通讯表相应位置,以保持通讯录的有序性。插入的基本思想是:使用两个指针变量p1和p2分别指向当前访问过的结点和下一个结点,循环顺序查找链表。寻找插入结点的位置,其中p1指向待插入位置的前一个结点。插入操作是非常简单的。具体实现算法如下:
(1)用p1指向原链表头结点,p2指向链表的第一个结点;
(2)while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)
{
}
(3)插入新结点。具体算法如下:
/*********在通讯录链表head中插入结点************/
void InsertNode(LinkList head,ListNode *p)
{
}
5.2.3通讯者结点信息的查找
通讯录结点查找的基本思想是:首先输入要查找的通讯者编号或姓名,从表头顺序访问表中结点。如果查找成功,则返回一个指向查找道德通讯者信息;若查找失败,则返回一个空的指针NULL。具体实现如下:
/**********有序通讯录链表的查找 ****************/
ListNode *ListFind(LinkList head)
{
}
5.2.4通讯者结点信息的删除
通讯录结点的删除,先调用查找函数,查询到要删除的结点,删除即可。其实现算法如下:
/********通讯录链表上的结点删除*****************/
void DelNode(LinkList head)
{
}
5.2.5通讯者结点信息的输出
通讯录链表的输出只要讲表头指针赋给一个指针变量p,然后用p向后扫描,直到表尾,p为空为止。因此,其输出链表的算法实现如下:
/********通讯录链表的输出函数 **********/
void PrintList(LinkList head)
{
5.3 程序源代码
第六章 程序调试
6.1 操作说明
双击“通讯录管理系统.exe”,根据屏幕菜单提示信息,选择任意可选项进行相关操作。
6.2 调试过程
6.2.1 可执行文件的生成
6.2.2 程序的运行过程
双击“通讯录管理系统.exe”
(1)出现菜单界面,如图所示
|
数据结构课程设计
课程设计报告
题 目:教务管理系统
学 号: |
201801420205 |
专业班级: |
18软件工程本二班 |
姓 名: |
黄明 |
指导老师: |
黄玲 |
完成日期: |
2019年6月21日 |
湖南信息学院本科学生课程设计任务书
题 目 |
教务管理系统 |
1、课程设计的目的 1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 2) 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。 |
|
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) [问题描述]:实现教务管理的学生信息管理,教师管理,财务信息管理等几种操作功能。 [基本要求]:用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单请按下形式给出: ********************************************************************* * 教务管理系统 * * 1.学生信息管理 * * 2.教师管理系统 * * 3.财务信息管理 * * 4.班级管理系统 * * 5.课程信息管理 * * 6.成绩信息管理 * * 7.打印信息管理 * * 8.综合信息查询 * * 9.系统管理 * * 0.退出教务管理系统 * ********************************************************************* 请选择 0—9: 使用数字0~9来选择菜单项,其他输入则不起作用,并给出错误提示。 |
|
3、主要参考文献 [1]刘大有等,《数据结构》(C语言版),高等教育出版社 [2]严蔚敏等,《数据结构》(C语言版),清华大学出版社 [3]William Ford,William Topp,《Data Structure with C++》清华大学出版社 [4]苏仕华等,数据结构课程设计,机械工业出版社 |
|
4、课程设计工作进度计划 1) 分析题目,查阅相关资料:1天; 2) 算法设计、数据结构设计:1天 3) 编写代码并调试:1天 4) 完成课程设计报告:2天 |
摘要
数据结构课程设计对于训练学生掌握程序设计技术、使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
着重通过用单链表作存储结构实现教务管理系统设计。介绍了教务管理系统的各个方面,对于教务管理系统的设计思想和设计流程也做出了全面的叙述,并且做出了教务管理系统各个功能的实现过程以及详细设计过程,在绘制简单系统的流程图的同时,力求更加清晰地表明设计思想以及对整个程序设计的规划及具体实现。
根据课程要求,以及数据结构思想,在Windows操作系统环境下,运用 C++ 6.0编译程序,以C语言为开发语言,最终实现通讯录系统的主要功能。
关键字 数据结构,教务管理,C语言,课程设计
第一章 概述
为了训练自己掌握程序设计技术、熟练上机操作及程序调试等技能,培养自己正确的程序设计思想,使平时学习的理论联系实际。培养自己严肃认真、实事求是的科学态度和勇于探索的创新精神。培养自己综合运用所学知识与实践经验,分析和解决相应领域的工程技术问题或进行软件项目开发的能力。依照课程教学大纲和课程设计大纲提出了本次课程设计的题目及要求。
本课程是数据结构的一次运用,而使其各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法得以运用。
要求学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
本次课程设计题目是教务管理系统,教务管理是一个比较实用的小型管理系统。该设计采用菜单作文应用程序的主要界面,用控制语句来改变程序执行顺序,控制语句是实现结构化程序设计的基础。贯穿始终的是程序各项功能的实现。分为程序开始的主菜单和各实现部分几大部分。主菜单部分主要解决的问题是程序开始选择问题,以及循环选择问题,其余各部分根据其实现功能完成代码设计。
第二章 需求分析
2.1开发目的
数据结构是计算机软件工程专业的主干课程之一,它旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运算,把现实世界中的问题转化为计算机内部的表示和处理。
2.2设计目的
本课程设计的主要目的是使学生一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力,从而进一步提高了实际运用的能力。
2.3设计要求
实现教务管理的学生信息管理,教师管理,财务信息管理等几种操作功能。
用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单请按下形式给出:
*********************************************************************
* 教务管理系统 *
* 1.学生信息管理 *
* 2.教师管理系统 *
* 3.财务信息管理 *
* 4.班级管理系统 *
* 5.课程信息管理 *
* 6.成绩信息管理 *
* 7.打印信息管理 *
* 8.综合信息查询 *
* 9.系统管理 *
* 0.退出教务管理系统 *
*********************************************************************
请选择 0—9:
使用数字0~9来选择菜单项,其他输入则不起作用,并给出错误提示。
第三章 方案设计
3.1设计思路
本程序首先利用主函数设计菜单选择界面,主函数中根据用户选择项转入相应功能函数,如果输入错误,主函数给出相应提示。其中用到变量j=1控制其循环运行。
在主界面中输入数字来选择功能,则转入相应函数 (void),以实现用户的需求,输入完会提示用户是否继续录入信息然后根据用户选择继续运行;在除却建立通讯录链表和退出功能外,其余选择项均会先判断是否已经建立通讯录链表,如果没有则会提醒用户先建立通讯录链表并返回主菜单;选择“通讯者结点的插入” ,如果已经建立通讯录链表,录入信息转入其函数void InsertNode(LinkList head,ListNode *p);选择“通讯者结点的查询”,如果已经建立通讯录链表,则调用其函数ListNode *ListFind(LinkList head)进行查询,在此函数中,会先提示用户是按照何种方式查询,待用户选择查询方式后根据用户选择进行相应查找;选择“通讯者结点的删除”,如果已经建立通讯录链表,则转入删除函数void DelNode(LinkList head),在此函数中嵌套调用查找函数以便选择以何种方式进行删除;选择“通讯录链表的输出”,如果已经建立通讯录链表,,则会通过函数void PrintList(LinkList head)直接输出所有通讯者信息;选择“退出通讯录管理系统”则会提示用户是否退出,用户确认后变量j=0退出程序。
3.2 设计功能
程序运行后的功能有:
(1)菜单选择界面
(2)建立通讯录记录
(3)插入联系人记录
(4)查找联系人记录(名称和编号查询)
(6)删除联系人记录
(7)输出所有联系人记录
(8)退出程序
第四章 算法设计
为了方便了解程序的操作过程,特画出系统流程图。通讯录管理系统的程序结构如图所示:
|
程序算法流程图 |
Y |
第五章 详细设计
5.1 主函数设计
由于主函数设计的是菜单选择项,所以在程序未退出的的情况下要实现循环运行,并且要考虑到未建立通讯录链表的情况下其他功能无法实现的情况。故在实现循环运行的功能时定义一个变量j=1,在选择退出后再将j赋值为0,要考虑判定是否建表的情况定义了一个全局变量flag1=0,建链表后flag1赋值为1。
为了达到选择各功能,采用switch判定选择项并跳转入相应功能函数。
判定是否建表语句:
if(flag1!=1)
{printf("请先建立表!");
getchar();
system("cls");}
5.2 功能程序设计
为了达到程序各项功能的实现,以及满足菜单选择项的功能,对每个功能的实现分别用了不同函数,并且有用到函数的嵌套以减少代码的重复。
5.2.1建立通讯链表设计
要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下:
(1)使链表的头尾指针head、rear指向新生成的头结点(也就是尾结点);
(2)置结束标志为0(假);
(3)while(结束标志不为真)
{
(4)尾结点的指针域置空置NULL。
具体算法实现如下:
/*******尾插法建立带头结点的通讯录链表算法*******/
LinkList CreateList(void)
{
}
5.2.2 通讯者结点信息的插入
链表结点的插入,要求将一个通讯者记录的数据结点按其编号的次序插入有序通讯表相应位置,以保持通讯录的有序性。插入的基本思想是:使用两个指针变量p1和p2分别指向当前访问过的结点和下一个结点,循环顺序查找链表。寻找插入结点的位置,其中p1指向待插入位置的前一个结点。插入操作是非常简单的。具体实现算法如下:
(1)用p1指向原链表头结点,p2指向链表的第一个结点;
(2)while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)
{
}
(3)插入新结点。具体算法如下:
/*********在通讯录链表head中插入结点************/
void InsertNode(LinkList head,ListNode *p)
{
}
5.2.3通讯者结点信息的查找
通讯录结点查找的基本思想是:首先输入要查找的通讯者编号或姓名,从表头顺序访问表中结点。如果查找成功,则返回一个指向查找道德通讯者信息;若查找失败,则返回一个空的指针NULL。具体实现如下:
/**********有序通讯录链表的查找 ****************/
ListNode *ListFind(LinkList head)
{
}
5.2.4通讯者结点信息的删除
通讯录结点的删除,先调用查找函数,查询到要删除的结点,删除即可。其实现算法如下:
/********通讯录链表上的结点删除*****************/
void DelNode(LinkList head)
{
}
5.2.5通讯者结点信息的输出
通讯录链表的输出只要讲表头指针赋给一个指针变量p,然后用p向后扫描,直到表尾,p为空为止。因此,其输出链表的算法实现如下:
/********通讯录链表的输出函数 **********/
void PrintList(LinkList head)
{
5.3 程序源代码
第六章 程序调试
6.1 操作说明
双击“通讯录管理系统.exe”,根据屏幕菜单提示信息,选择任意可选项进行相关操作。
6.2 调试过程
6.2.1 可执行文件的生成
6.2.2 程序的运行过程
双击“通讯录管理系统.exe”
(1)出现菜单界面,如图所示
|
图菜单界面
第七章 设计总结
7.1课程设计所得
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从数据结构这门课程开始,已发现程序设计的乐趣,基本理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法
7.2 课程设计心得
图菜单界面
第七章 设计总结
7.1课程设计所得
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从数据结构这门课程开始,已发现程序设计的乐趣,基本理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法
7.2 课程设计心得