数据结构课程设
- 格式:doc
- 大小:209.04 KB
- 文档页数:12
数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。
2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。
3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。
技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。
2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。
3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。
2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。
3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。
在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。
2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。
3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。
4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。
5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。
6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。
7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。
《数据结构》课程标准一、课程性质与目标数据结构是计算机科学的核心课程,旨在培养学生掌握数据结构的基本概念、基本原理和基本方法,提高学生的程序设计能力和问题解决能力。
本课程的学习目标包括:1. 了解数据结构的基本概念,掌握常见数据结构的特性和实现方法;2. 掌握各种数据结构的运算和操作,能够灵活运用各种数据结构解决实际问题;3. 培养抽象思维和问题解决能力,提高编程技巧和团队合作能力。
二、课程教学内容与要求本课程的教学内容包括:线性结构(如数组、链表、栈、队列等)、树形结构(如二叉树、多叉树等)、图状结构(如邻接表、邻接矩阵等)、集合(如排序、查找等)以及动态规划、贪心算法等算法原理和应用。
在教学过程中,应注重以下要求:1. 强调基本概念和原理的理解,避免单纯记忆;2. 结合实际问题讲解数据结构的用途和应用,提高学生的兴趣和实际应用能力;3. 培养学生的创新思维和问题解决能力,鼓励学生运用多种方法解决问题;4. 强调团队合作,培养学生的协作精神和沟通能力。
三、课程教学方法与手段为了提高教学效果,可以采用多种教学方法和手段:1. 理论讲解与实践操作相结合,通过实例演示和代码实现帮助学生理解数据结构和算法原理;2. 课堂互动,鼓励学生提问和讨论,增强师生互动和交流;3. 引入案例教学和项目实践,通过实际问题的解决提高学生的应用能力和团队合作能力;4. 利用多媒体教学资源,包括视频、图片、课件等,丰富教学手段,提高教学效果。
四、课程评估标准与方式本课程的评估标准包括平时作业、项目实践、期末考试等形式。
具体要求如下:1. 平时作业:根据教学内容布置适量作业,检测学生对基本概念和原理的理解情况;2. 项目实践:要求学生分组完成一个实际问题的解决,锻炼学生的应用能力和团队合作能力;3. 期末考试:采用闭卷考试形式,检测学生对数据结构和算法原理的掌握情况。
五、课程资源与支持为了方便学生的学习和教师的教学,可以提供以下资源与支持:1. 课件、视频等多媒体教学资源;2. 习题库和答案解析,方便学生自学和练习;3. 答疑和辅导,为学生提供学习支持和问题解答;4. 课程网站和论坛,方便学生交流和讨论。
高职计算机专业《数据结构》课程教学设计【摘要】本文主要介绍了高职计算机专业《数据结构》课程的教学设计。
在引言部分中,背景介绍了数据结构在计算机领域的重要性,教学目标明确了学生需要掌握的知识和能力。
在详细介绍了课程内容安排、教学方法选择、教学资源支持、课程评价方式以及教学效果分析。
在总结了教学过程中的反思和教学效果的评估,展望了未来对课程教学的进一步优化和改进。
通过本文的介绍,读者可以更加全面地了解高职计算机专业《数据结构》课程的教学设计和实施,为提高教学质量和学生学习效果提供参考和借鉴。
【关键词】数据结构、高职计算机专业、课程设计、教学目标、课程内容安排、教学方法、教学资源、课程评价、教学效果、总结反思、未来展望。
1. 引言1.1 背景介绍数据结构是计算机科学与技术专业中非常重要的一门课程。
随着信息技术的飞速发展,数据结构的学习和应用变得愈发重要。
在当今社会,数据已经成为无法或缺的资源之一,对数据的处理和管理要求越来越高,而数据结构作为数据的存储、组织和管理方式的基础,因此越来越受到重视。
传统的数据结构课程主要包括线性表、树、图等基本数据结构的基本概念和操作,以及相关的算法设计和分析等内容。
通过学习数据结构,学生可以更好地理解数据的存储和组织方式,提高编程能力和解决问题的能力。
在高职计算机专业中,《数据结构》课程的教学具有重要意义。
通过本课程的学习,可以培养学生对数据结构的理解和运用能力,提高其分析和解决问题的能力,为其日后从事计算机相关工作打下扎实的基础。
高职计算机专业的《数据结构》课程教学设计应该紧跟时代发展的步伐,注重学生的实际需求和能力培养,为他们的学习和发展提供有力支持。
1.2 教学目标明确教学目标明确是《数据结构》课程设计的重要组成部分,通过对教学目标的明确制定,可以帮助教师和学生更好地理解课程的重点和方向,从而提高教学效果。
在设计高职计算机专业《数据结构》课程时,我们需要明确以下教学目标:1. 理解数据结构的基本概念和原理,包括各种数据结构的定义、特点、操作和应用场景。
数据结构的课程设计目的一、课程目标知识目标:1. 掌握数据结构的基本概念,包括线性结构(如数组、链表、栈、队列)和非线性结构(如树、图等)的特点与应用。
2. 学会分析不同数据结构在存储和处理数据时的效率,理解时间复杂度和空间复杂度的概念。
3. 掌握常见数据结构的具体实现方法,并能够运用到实际编程中。
技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够根据问题的特点选择合适的数据结构进行优化。
2. 提高学生的编程实践能力,使其能够熟练编写与数据结构相关的程序代码,并进行调试与优化。
3. 培养学生独立思考和团队协作的能力,通过项目实践和课堂讨论,提高问题分析、解决方案的设计与实现能力。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学生的学习热情和主动探究精神。
2. 培养学生严谨、细致、踏实的学术态度,使其认识到数据结构在计算机科学与软件开发领域的重要性。
3. 培养学生具备良好的团队合作精神,学会倾听、沟通、表达与协作,提高人际交往能力。
课程性质:本课程为计算机科学与技术及相关专业的基础课程,旨在培养学生的数据结构知识和编程技能,提高学生解决实际问题的能力。
学生特点:学生已具备一定的编程基础,具有一定的逻辑思维能力和问题解决能力,但可能对数据结构的应用和实现方法了解不足。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,以案例驱动、项目导向的教学方法,引导学生掌握数据结构知识,提高编程实践能力。
同时,注重培养学生的情感态度价值观,使其在学习过程中形成积极的学习态度和良好的团队协作精神。
通过具体的学习成果评估,确保课程目标的达成。
二、教学内容1. 线性结构:- 数组:数组的概念、存储方式、应用场景。
- 链表:单链表、双向链表、循环链表的概念及实现。
- 栈与队列:栈的概念、应用场景、实现方法;队列的概念、应用场景、实现方法。
2. 非线性结构:- 树:树的概念、二叉树、二叉查找树、平衡树(如AVL树)、堆的概念及其应用。
《数据结构》课程整体教学设计数据结构课程整体教学设计一、引言数据结构是计算机科学中的一门重要课程,它是计算机程序设计的基础。
本文旨在设计一套整体教学方案,以帮助学生全面理解数据结构的概念、原理和应用,并培养学生的问题分析和解决能力。
二、教学目标1. 理解数据结构的基本概念,如数组、链表、栈、队列、树、图等。
2. 掌握各种数据结构的实现方式,包括顺序存储和链式存储。
3. 熟悉数据结构的基本操作,如插入、删除、查找、排序等。
4. 理解算法与数据结构之间的关系,能够灵活地选择适合的数据结构解决实际问题。
5. 培养学生的团队协作和沟通能力,通过小组项目实践提升实际应用能力。
三、教学内容及安排1. 基础知识教学(2周)a) 介绍数据结构的定义、分类和基本概念。
b) 详细讲解数组、链表、栈和队列的基本原理和实现方法。
c) 引导学生通过编程实践掌握基础数据结构的使用。
2. 高级数据结构教学(3周)a) 介绍树、图等高级数据结构的定义和应用场景。
b) 分析树、图的特点和基本操作,包括遍历、搜索和最短路径等算法。
c) 引导学生通过实例理解和实现高级数据结构及其相关算法。
3. 算法与数据结构的关系(1周)a) 介绍算法的基础概念,如时间复杂度和空间复杂度。
b) 分析常用算法与数据结构之间的关系,如排序算法与数组、查找算法与树等。
c) 培养学生运用不同数据结构解决实际问题的能力。
4. 小组项目实践(4周)a) 学生自行组成小组,选定一个实际问题进行分析和解决方案设计。
b) 引导学生选择合适的数据结构和算法,实现项目需求。
c) 指导学生撰写项目报告,总结项目经验和收获。
四、教学方法与策略1. 合理运用多媒体技术,辅助教学内容的讲解和演示。
2. 结合示例和实践,引导学生进行课堂互动和编程实践。
3. 组织小组合作学习,促进学生的团队协作和沟通能力。
4. 鼓励学生积极参与讨论和提问,激发学习兴趣和思考能力。
5. 提供适当的学习资源和参考资料,帮助学生进行自主学习。
数据结构课程设计python一、课程目标知识目标:1. 理解数据结构的基本概念,掌握常用数据结构如列表、元组、字典和集合的特点及应用场景。
2. 学习并掌握栈和队列的操作原理及其在Python中的实现方法。
3. 掌握树和图的基本概念,了解二叉树、遍历算法及图的表示方法。
技能目标:1. 能够运用Python语言实现基本数据结构,并对其进行增、删、改、查等操作。
2. 能够利用栈和队列解决实际问题,如递归、函数调用栈、任务调度等。
3. 能够运用树和图解决实际问题,如查找算法、路径规划等。
情感态度价值观目标:1. 培养学生严谨的逻辑思维,提高分析问题和解决问题的能力。
2. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。
3. 引导学生认识到数据结构在实际应用中的重要性,增强学习热情和责任感。
课程性质:本课程为高年级数据结构课程,旨在使学生掌握Python语言实现数据结构的方法,提高编程能力和解决问题的能力。
学生特点:学生具备一定的Python编程基础,具有较强的逻辑思维能力,对数据结构有一定的了解。
教学要求:结合实际案例,采用任务驱动法,引导学生通过实践掌握数据结构的基本原理和应用方法。
注重培养学生的动手能力和团队协作精神,提高学生的综合素质。
通过本课程的学习,使学生能够具备独立设计和实现小型项目的能力。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,结合Python语言特点,分析各类数据结构在实际应用中的优势。
- 列表、元组、字典和集合的原理与应用- 栈与队列的操作原理及实现2. 线性表:讲解线性表的概念,重点掌握顺序表和链表的操作方法。
- 顺序表和链表的实现及操作- 线性表的查找和排序算法3. 树与二叉树:介绍树的基本概念,重点讲解二叉树的结构及其遍历算法。
- 树的基本概念和表示方法- 二叉树的性质、存储结构、遍历方法4. 图:讲解图的基本概念,掌握图的存储结构及遍历方法。
- 图的基本概念和表示方法- 图的遍历算法(深度优先搜索、广度优先搜索)- 最短路径和最小生成树算法5. 算法分析与设计:结合实例,分析算法性能,掌握基本的算法设计方法。
杭电数据结构课程设计一、课程目标知识目标:1. 学生能理解数据结构的基本概念,掌握线性表、栈、队列、树、图等常见数据结构的特点与应用。
2. 学生能描述各类数据结构的存储方式和操作方法,了解其时间复杂度和空间复杂度。
3. 学生能运用所学的数据结构知识解决实际问题,如排序、查找、最短路径等。
技能目标:1. 学生能运用编程语言(如C++、Java等)实现常见数据结构及其相关算法。
2. 学生能分析实际问题的数据特征,选择合适的数据结构进行问题求解。
3. 学生能通过课程项目实践,培养团队协作、沟通表达、问题解决等综合能力。
情感态度价值观目标:1. 学生对数据结构产生兴趣,认识到数据结构在计算机科学与软件开发中的重要性。
2. 学生在解决实际问题的过程中,培养积极探究、勇于创新的精神。
3. 学生通过团队协作,学会尊重他人、分享经验,提高沟通能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在培养学生掌握数据结构的基本知识、技能和素养。
学生特点:学生具备一定的编程基础和数学素养,具有较强的逻辑思维能力,但对数据结构的应用和实际操作能力有待提高。
教学要求:结合课程性质和学生特点,注重理论与实践相结合,强调动手实践和实际应用,提高学生的数据结构知识水平和问题解决能力。
通过课程目标分解,将知识、技能和情感态度价值观目标融入教学过程,为后续教学设计和评估提供依据。
二、教学内容1. 线性表:介绍线性表的定义、特点、存储结构(顺序存储、链式存储),以及线性表的相关操作(插入、删除、查找等)。
教材章节:第2章 线性表2. 栈与队列:讲解栈和队列的基本概念、存储结构及操作方法,分析其应用场景。
教材章节:第3章 栈与队列3. 树与二叉树:阐述树的基本概念、存储结构、遍历方法,重点讲解二叉树的性质、存储结构、遍历算法(前序、中序、后序)及二叉树的应用。
教材章节:第4章 树与二叉树4. 图:介绍图的定义、存储结构(邻接矩阵、邻接表),图的遍历算法(深度优先搜索、广度优先搜索),以及最短路径、最小生成树等算法。
数据结构课程设计实例100例1. 设计一个简单的栈数据结构。
2. 实现一个简单的队列数据结构。
3. 设计一个链表数据结构。
4. 实现一个二叉树数据结构。
5. 设计一个哈希表数据结构。
6. 实现一个图数据结构。
7. 设计一个堆数据结构。
8. 实现一个优先队列数据结构。
9. 设计一个有向图数据结构。
10. 实现一个循环链表数据结构。
11. 设计一个红黑树数据结构。
12. 实现一个字典数据结构。
13. 设计一个AVL树数据结构。
14. 实现一个散列表数据结构。
15. 设计一个双端队列数据结构。
16. 实现一个字典树数据结构。
17. 设计一个多叉树数据结构。
18. 实现一个最小生成树算法。
19. 设计一个并查集数据结构。
20. 实现一个图的遍历算法。
21. 设计一个迪杰斯特拉算法。
22. 实现一个Floyd算法。
23. 设计一个拓扑排序算法。
24. 实现一个最短路径算法。
25. 设计一个Kruskal算法。
26. 实现一个插入排序算法。
27. 设计一个快速排序算法。
28. 实现一个希尔排序算法。
29. 设计一个选择排序算法。
30. 实现一个冒泡排序算法。
31. 设计一个堆排序算法。
32. 实现一个归并排序算法。
33. 设计一个桶排序算法。
34. 实现一个基数排序算法。
35. 设计一个计数排序算法。
36. 实现一个递归算法。
37. 设计一个动态规划算法。
38. 实现一个回溯算法。
39. 设计一个哈夫曼编码算法。
40. 实现一个最大子序列和算法。
41. 设计一个最长递增子序列算法。
42. 实现一个最长公共子序列算法。
43. 设计一个贪婪算法。
44. 实现一个深度优先搜索算法。
45. 设计一个广度优先搜索算法。
46. 实现一个信号量算法。
47. 设计一个分治算法。
48. 实现一个枚举算法。
49. 设计一个置换算法。
50. 实现一个位运算算法。
51. 设计一个红黑树插入算法。
52. 实现一个二进制查找算法。
53. 设计一个最小堆插入算法。
数据结构课程思政课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、树、图等结构的特点和应用场景。
2. 使学生了解各类数据结构在解决问题中的优势与局限,并能运用相关知识对实际问题进行分析和描述。
3. 培养学生运用所学数据结构知识,解决实际编程问题的能力。
技能目标:1. 培养学生运用数据结构进行问题分析和算法设计的能力。
2. 提高学生编程实践能力,使其能熟练使用至少一种编程语言实现常见数据结构及相关算法。
3. 培养学生团队协作和沟通能力,通过小组讨论、项目实施等形式,提高解决实际问题的综合能力。
情感态度价值观目标:1. 培养学生对数据结构在计算机科学中的重要地位的认识,激发学习兴趣和探究精神。
2. 引导学生树立正确的价值观,认识到数据结构在解决实际问题中的积极作用,培养社会责任感和使命感。
3. 培养学生面对复杂问题时的耐心、细心和毅力,形成积极向上的学习态度。
本课程针对高中年级学生,结合数据结构课程的特点,注重理论与实践相结合,强调思政教育的融入。
在教学过程中,关注学生的个体差异,充分调动学生的积极性,引导他们主动参与课堂讨论和实践操作。
通过本课程的学习,期望学生能够掌握数据结构的基本知识和技能,培养良好的学习习惯和团队合作精神,形成积极向上的人生态度。
二、教学内容1. 线性表:包括线性表的定义、特点、实现方法及应用案例。
重点讲解顺序表、链表的结构特点及操作方法。
教材章节:第一章《线性表》2. 栈与队列:介绍栈与队列的基本概念、操作原理及在实际应用中的使用场景。
教材章节:第二章《栈与队列》3. 树与二叉树:讲解树的基本概念、二叉树的性质、遍历方法以及常见的树结构,如二叉排序树、平衡二叉树等。
教材章节:第三章《树与二叉树》4. 图:介绍图的基本概念、存储结构、遍历方法以及最短路径、最小生成树等算法。
教材章节:第四章《图》5. 查找与排序:讲解常见的查找算法(如二分查找、哈希查找等)和排序算法(如冒泡排序、快速排序等)的原理和实现。
数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。
2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。
3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。
技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。
2. 培养良好的编程习惯,提高代码编写和调试能力。
3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。
情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。
2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。
3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。
本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估。
通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。
二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。
- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。
- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。
2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。
- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。
- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。
3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。
- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。
- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。
一、需求分析1、程序功能介绍工资管理是一个单位最基本的一项财务管理,本程序利用双链表结构存储数据,完成工资管理。
其基本功能主要包括以下几点:程序初始化。
初始化就是把原有的信息全部清空,等待再次的信息输入。
输入。
对职工基本信息的输入,包括职工编号、职工姓名,职工基本工资。
显示。
对输入的职工信息的显示,在此页面中除了包含职工基本信息,同时还有新增的几项信息,其中有扣款、应发工资、需要缴纳的税金以及最后实发工资。
其中应发工资=基本工资-扣款,税金=(应发工资-1000)*税率,税率有相关的规定,实发工资=应发工资-税金。
单条显示。
是显示的一个分支,主要是按要求显示单个职工的信息。
删除。
按要求对已存在的职工进行删除操作,删除条件是职工编号。
查找。
按要求对职工信息进行查找,查找条件是职工姓名。
插入。
插入的信息为职工基本信息,与输入的条件相同。
主要就是以上的几个功能,当然设计中还包括一些其他的功能,比如追加,追加记录到文件尾;保存,保存记录到文件;读入,从文件中读取记录;计算工资、排序、索引、复制、分类统计以及退出等。
2、数据结构的设计本程序主要就是利用双链表结构存储数据,完成工资的管理。
单链表结构从任何一个结点通过其后继指针可以找到它的后继结点,但不能找到它的前趋结点,而双链表就解决了这样的一个问题,更灵活地实现查找数据功能,为每一个结点增添一个指向前趋的指针。
为此,本程序采用双链表结构实现动态管理,提高查找效率,当然是以在单链表的基础上为每一个结点增加一个指针的存储为代价的,同时管理也会更加复杂。
在双链表里分配给每个结点的存储单元分为三部分:指向前趋结点的指针prior、结点的数据data和指向后继结点的指针next。
所以定义表结点的结构如下:typedef struct z1{ char no[11];/*职工编号*/char name[15];/*职工姓名*/float jbgz;/*基本工资*/float koukuan;/*扣款*/float yfgz;/*应发工资*/float shuijin;/*税金*/float sfgz;/*实发工资*/struct z1 *prior;/*指向前趋结点的指针*/struct z1 *next;/*指向后继结点的指针*/}SALARY;/*结构体类型名*/程序采用模块化设计,各模块独立,可以分块调试,均由主函数调用。
运行工资管理程序,首先进入光带主菜单,光标定位在菜单的第一项,并以不同于背景色的颜色显示,通过键盘的光标上下移动键选中菜单,按回车键后进入相应的功能函数执行数据处理。
在调试程序时,因为程序中空格不好计算,所以应注意格式的调整。
二、概要设计系统基本功能模块图如下图所示:图2-1系统基本功能模块图三、详细设计1、main()主函数主程序是程序的入口,采用模块化设计,主函数不宜复杂,功能尽量在各模块中实现。
首先声明一些必要的变量,然后作一无限循环程序,循环体为一开关语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的各功能函数,同时设置一个出口,即当返回值为一条件时运行exit()函数结束程序,以免造成死循环。
2、menu_select()主菜单显示制作一个单边框的窗口,窗口背景为蓝色,在窗口中显示光带主菜单,字体颜色为黄色,同时光标默认定位在第一项菜单上,用光标的上下移动即可选中所需选项,选中项背景为绿色,按回车键后进入相应的功能函数,而不必输入数字,真正具有了窗口的特性,方便了操作。
利用函数bioskey()识别按了什么键,根据光标停留在窗口的行数换算成对应的菜单项,作为菜单函数的返回值。
程序最后应恢复原窗口,以保证其他函数在原窗口输出的正常显示,返回主函数。
3、init()初始化双链表设置一个头指针指向链表的第一个结点,一个尾指针指向链表的最后一个结点。
这样访问既可以从头指针开始,也可以从尾指针开始。
初始化双链表主程序初始化输入显示单条显示删除查找插入追加保存读入计算工资计算界面复制排序索引分类统计退出为空,空用NULL表示赋值为0。
4、create()创建双链表利用光标移动函数gotoxy()定位光标位置,在光标位置显示信息的方式设计成表格输入形式。
初始时,光标停留在no栏,输入后按回车跳到name栏,再按回车到jbgz栏,只输入这三项信息,其他信息通过计算得到。
在no栏中输入@结束输入返回主函数,双链表创建完毕。
5、list()显示双链表工资表创建好之后,更频繁的操作是显示和查找记录,本函数实现显示链表中所有数据的功能。
采用顺序访问的方式,定义一个结构体变量p,再依次访问所有记录并显示在窗口。
6、display()单条显示数据由于双链表既有头指针又有尾指针,且每一个结点包含两个指针域,一个指向前趋,一个指向后继,方便查找结点并且提高查找速度。
本模块由两个函数实现,display()实现指针移动,指向要显示的结点,print()实现显示功能。
7、calc()计算实发工资从头指针开始,每读一条记录,显示该记录的基本信息,然后输入扣款,系统自动计算应发工资=基本工资-扣款。
根据应发工资计算税金,再计算实发工资,继续处理下一条记录,直到所有记录处理完毕。
格式依然是表格形式,每9条换一页。
8、computer()计算票面数根据要发出的工资。
计算好所需要的票面张数,现行面值分别是100元、50元、20元、10元、5元以及1元。
设置一个数组a[6],初始为0,从头指针开始,每读一条记录将该记录处理,相应结果保存在相应数组中,直到所有记录处理完毕,输出结果,返回主函数。
9、del()删除结点首先输入要删除记录的编号,输入后,调用查找函数,查找函数根据编号顺序查找结点,利用strcmp(no,p->no)进行比较,如果相等则返回0,说明找到,将其删除。
否则没有找到,继续向后查找,如果所有记录都查找后还是没有则输出没有找到信息,返回空指针。
10、search()查找结点按照姓名查找,从头结点开始顺序查找,也可以从为指针开始,成功则将结点的指针作参数调用输出函数print(),显示该指针所指记录的信息;失败则显示没有找到。
11、insert()插入结点插入结点需要输入插入位置和新结点信息。
插入位置的确定通过输入结点的编号进行定位,新结点的信息通过申请空间存放,查找分不同的情况,每种情况按照不同的插入方式处理。
12、save()保存记录到文件按照文件读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名,默认是Turbo C所在的文件夹。
如果此文件没有建立或者文件打不开,则退出程序。
否则从链表的头指针开始,顺序将记录写入文件,直到所有记录写完,标志就是移动指针为空。
如果想倒排保存文件,则从尾指针开始,逐个向前移动指针。
13、load()从文件中读取记录按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的文件名,然后确定文件的打开方式。
如果文件不存在或者打不开,则退出程序;否则,选择读文件方式,打开一个二进制文件,从文件头开始。
直到文件尾。
14、append()追加记录到文件尾追加记录就是将数据写到文件的末尾。
首先输入新结点信息,然后输入文件名,按追加方式打开文件,将新信息写入文件。
15、copy()复制文件本函数是将文件读写功能结合到一起的应用。
先输入文件名,再输入目标文件名,然后利用文件读写函数从源文件中每读一条记录,就将其写到目标文件中,直到源文件中的记录全部读完。
16、sort()排序为了了解职工的工资情况,了解职工实际收入的高低,将工资表按实发工资从低到高排序,本函数采用的排序算法是直接选择排序。
用两重循环实现,外循环决定待排序位置,内循环查找当前最小结点。
17、index()索引索引是为了分类求合计的,实际也是排序,按照分类字段排序。
本函数是按照编号进行排序的。
排序方法用的是直接插入排序法。
这种方法首先将链表的头结点看作已经排好序的结点,然后取下一个结点作为待排序的结点,插入到已排好序的表中。
18、total()分类合计分类合计是按照不同的方式进行统计,工资往往是按部门发放的,而部门的区别主要表现在职工编号的设置上,所以在设置编号字段时要考虑编号各位的含义。
要进行分类合计要先按编号排序,所有部门相同的记录连续排列。
程序中用到两重循环,外循环处理代表不同的部门,内循环代表部门职工实发工资处理。
四、系统实现1、数据结构体定义以及变量定义typedef struct z1 /*定义数据结构*/{char no[11]; /*编号*/char name[15]; /*姓名*/float jbgz; /*基本工资*/float koukuan; /*扣款*/float yfgz; /*应发工资*/float shuijin; /*税金*/float sfgz; /*实发工资*/struct z1 *prior;/*前驱指针*/struct z1 *next;/*后继指针*/}SALARY; /*结构体类型名*/struct z1 *First; /*双链表头指针*/struct z1 *Last; /*双链表尾指针*/2、各函数原型void init(); /*初始化*/void create(); /*创建链表*/void calc(); /*计算应发工资*/void del(); /*删除*/void search(); /*查找*/void save(); /*保存文件*/void load(); /*读取文件*/void computer(); /*计算所需各种票面张数*/void insert(); /*插入*/void append(); /*追加*/void copy(); /*复制文件*/void sort(); /*排序*/void index(); /*索引*/void total(); /*分类合计*/void list(); /*显示所有数据*/void print(SALARY *p); /*输出单条记录*/void display(); /*随意逐条显示*/void inputs(char *s,int count);float fax(float x); /*计算税金*/int menu_select(); /*主菜单*/3、主要函数实现主函数main()switch(menu_select()) /*调用菜单函数返回一个整数值*/{case 0:init();break; /*初始化*/case 1:create();break; /*输入数据创建双链表*/case 2:list();break; /*显示所有数据*/case 3:display();break; /*单条显示*/case 4:calc();break; /*计算实发工资*/case 5:search();break; /*查找职工信息数据*/case 6:del();break; /*删除记录*/case 7:insert();break; /*插入记录*/case 8:append();break; /*追加记录*/case 9:save();break; /*保存文件*/case 10:load(); break; /*读取文件*/case 11:copy();break; /*复制文件*/case 12:sort();break; /*按实发工资升序排序*/case 13:computer();break; /*计算所需票面数*/case 14:index();break; /*按职工号索引*/case 15:total();break; /*按部门求合计*/case 16:exit(0); /*退出*/}创建链表create()printf("*************gongziguanli*************\n");gotoxy(1,4);printf(" ----Enter @ end---- \n"); gotoxy(1,5);printf("|------------------------------------|"); gotoxy(1,6);printf("| no |name |jbgz | ");for(;;){gotoxy(1,7+x);printf("|----------|----------------|--------|");info=(SALARY *)malloc(sizeof(SALARY)); /*申请空间*/inputs(info->no,10); /*输入新结点的编号,并校验*/if(info->no[0]=='@'){ flag=1;break;}printf("|----------|----------------|--------|");显示所有数据list()printf("*************************************SALARY***********************************\n");printf("| no |name | jbgz | koukuan| yfgz | shuijin| sfgz|\n");printf("|----------|---------------|---------|---------|---------|---------|---------|\n");while(p!=NULL){printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n",p->no,p->name,p->jbgz,p->koukuan,p->yfgz,p->shuijin,p->sfgz);p=p->next;i++;if(i%10==0)break;}printf("***************************************END******************* *****************\n");printf("Press any key continue.....\n");getch();删除del()if((p=find(s))!=NULL){if(First==p){First=p->next;if(First) First->prior=NULL;else Last=NULL;}else{ p->prior->next=p->next;if(p!=Last)p->next->prior=p->prior;else Last=p->prior;}free(p);插入insert()gotoxy(1,3);printf("*************gongziguanli*************");gotoxy(1,5);printf("--------------------------------------");gotoxy(1,6);printf("| no |name |jbgz |");gotoxy(1,7);printf("|----------|----------------|--------|");info=(SALARY *)malloc(sizeof(SALARY));查找search()p=First;while(strcmp(p->name,s)&&p!=NULL)p=p->next;if(p==NULL)printf("\nList don't have this no %s SALARY!\n",s);else{printf("\n\n");print(p);}五、系统测试1、主界面图5-1主界面2、创建双链表,输入职工基本信息图5-2职工基本信息表3、显示链表信息图5-3链表信息图5-4链表信息图5-5链表信息图5-6链表信息4、扣款并显示计算后的职工所有信息图5-7扣款后职工信息5、查找职工信息图5-8查找职工信息图5-9查找职工信息图5-10查找职工信息图5-11查找职工信息6、删除职工信息图5-12删除职工信息图5-13删除职工信息图5-14删除职工信息7、插入新职工信息图5-15插入新职工信息图5-16插入新职工信息图5-17插入新职工信息8、追加职工信息保存到文件图5-18追加职工信息保存文件图5-19保存结果9、对职工信息排序图5-20对职工信息排序5-21排序结果10、对职工工资总共所需各种票面值统计图5-22职工工资面值统计11、职工信息索引图5-23职工信息索引12、分类合计图5-24分类合计六、总结本次课程设计完成了网络机房计费系统的设计开发的全部过程,完成了预期的各种功能。