数据结构c语言课程设计报告1
c语言数据结构课程设计报告
课程设计说明书学号:班级: 姓名:设计题目: 学生信息管理系统设计地点:设计时间: 至成绩评定:1、工作量: A(),B(),C(),D(),F( )2、难易度:A(),B(),C(),D(),F( )3、答辩情况:A(),B(),C(),D(),F( )4、报告规范度:A(),B(),C(),D(),F( )5、学习态度:A(),B(),C(),D(),F( )总评成绩:___________________________指导教师:___________________________一、设计题目与要求1、设计目的:编写一个学生信息管理系统,实现对学生信息的基本管理。
把所学数据结构知识应用到实际软件开发中去。
设计内容:本系统应完成一下几方面的功能:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。
(3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。
(4)按学号对所有学生信息排序,并输出结果;(5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。
2、设计要求:(1)用菜单调用(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)上机能正常运行,并写出课程设计报告二、概要设计1. 功能需求分析学生信息管理系统设计学生信息包括:学号,姓名,性别,出生年月,电话使之提供以下功能:1.系统以菜单方式工作2.插入新的学生信息3.删除某学号的学生信息4.查找某学号的学生信息5.对学生信息排序6.统计学生人数7.输出学生信息2 总体设计功能结构图设计依据程序的功能需求,描述该系统功能的结构图如下:图1 系统功能结构图模块简介依据程序的功能模块的划分,各模块定义如下:(1)增加学生信息模块名:void addstu(LinkList *&L)模块描述:通过此模块可以在学生链表中添加新的学生信息。
课程设计报告模板c语言
课程设计报告模板c语言一、课程目标知识目标:1. 理解C语言的基本语法结构,掌握变量定义、数据类型、运算符等基础知识;2. 学会使用控制结构,如顺序结构、分支结构和循环结构;3. 掌握函数定义、声明和调用的方法,理解局部变量和全局变量的概念;4. 了解数组、字符串和指针的使用,并能运用它们解决实际问题。
技能目标:1. 能够运用C语言编写简单的程序,解决问题;2. 培养良好的编程习惯,如规范命名、合理注释、代码缩进等;3. 学会使用编译器进行程序编译、调试和运行;4. 能够阅读和分析简单的C程序代码,提高编程能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情;2. 培养学生的逻辑思维能力,提高问题解决能力;3. 培养学生的团队协作意识,学会与他人分享编程经验;4. 培养学生严谨、细心的学习态度,养成良好的编程习惯。
课程性质:本课程为初中年级的信息技术课程,旨在让学生掌握C语言编程的基本知识和技能。
学生特点:初中学生具有较强的逻辑思维能力和学习兴趣,但对编程知识了解较少。
教学要求:结合学生特点,注重理论与实践相结合,通过实例分析、编程实践等方式,使学生能够掌握C语言的基本知识,提高编程能力。
在教学过程中,关注学生的情感态度,激发学习兴趣,培养良好的编程习惯。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. C语言基础知识- 变量定义、数据类型和运算符- 输入输出函数的使用- 顺序结构程序设计2. 控制结构- 分支结构(if、if-else、switch)- 循环结构(for、while、do-while)3. 函数- 函数定义、声明和调用- 局部变量和全局变量- 递归函数4. 数组、字符串与指针- 数组的使用和操作- 字符串的基本操作- 指针的概念和用法5. 编程实践- 编写简单程序,解决问题- 分析实例代码,提高编程能力- 调试程序,找出并修复错误教学内容安排与进度:第一周:C语言基础知识,顺序结构程序设计第二周:控制结构(分支、循环)第三周:函数的定义和调用,递归函数第四周:数组、字符串与指针第五周:编程实践与总结教材章节关联:教学内容与教材相应章节紧密关联,确保学生能够在学习过程中系统地掌握C 语言知识。
数据结构课程设计(C语言实现)
引言概述:数据结构是计算机科学中的重要课程之一,它研究如何在计算机中存储和组织数据,以及如何高效地访问和操作这些数据。
为了提高学生对数据结构的理解和实践能力,课程设计是必不可少的一部分。
本文将详细介绍数据结构课程设计的C语言实现,包括设计目标、实现过程、关键算法和数据结构的选择。
正文内容:一、设计目标在进行数据结构课程设计时,我们首先要明确设计目标。
设计目标应该具有一定的挑战性,既能够提高学生的编程能力,又能够深入理解数据结构。
例如,可以设计一个简单的图书管理系统,其中包含图书的增加、删除、排序和查找等功能。
这样的设计目标既能够涉及到常见的数据结构,如链表和树,又能够让学生理解不同数据结构的优缺点和实现方法。
二、实现过程在实现数据结构课程设计时,我们需要一定的实践和思考。
首先,学生应该对设计目标有清楚的了解,并制定一份详细的设计方案。
设计方案应该包括算法的描述、数据结构的选择和实现的步骤。
之后,学生可以按照设计方案一步一步地进行编程实现。
在实现的过程中,学生可以利用调试工具进行调试和优化,并在遇到问题时进行合适的解决方法。
三、关键算法在数据结构课程设计中,选择合适的算法是非常关键的。
对于图书管理系统的例子,可以使用二叉搜索树实现图书的插入和查找功能,使用链表实现图书的删除功能。
此外,还可以利用递归算法实现树的遍历和排序算法实现图书的排序功能。
学生需要对这些算法进行深入的理解,并进行合适的实现和优化。
四、数据结构的选择在进行数据结构课程设计时,选择合适的数据结构非常重要。
对于图书管理系统的例子,可以选择使用链表、树和数组等数据结构。
链表可以用来实现图书的链表和排序;树可以用来实现图书的搜索和遍历;数组可以用来实现图书的统计和排序等功能。
学生需要充分理解每种数据结构的特点和适用场景,并进行合适的选择和实现。
五、小点详细阐述1. 算法复杂度分析:学生应该能够对所选择的算法进行复杂度分析,包括时间复杂度和空间复杂度。
数据结构课程设计c
数据结构课程设计c一、课程目标知识目标:1. 让学生掌握C语言实现常见数据结构(如线性表、栈、队列、二叉树等)的基本原理和操作方法。
2. 使学生了解各类数据结构在实际应用中的优缺点,并能根据问题特点选择合适的数据结构。
技能目标:1. 培养学生运用C语言编写数据结构相关程序的能力,能够实现基本的数据结构操作。
2. 培养学生分析问题、设计算法和数据结构的能力,提高解决问题的实际操作能力。
情感态度价值观目标:1. 激发学生对数据结构学习的兴趣,培养良好的学习习惯和自主学习能力。
2. 培养学生的团队合作意识,让学生在讨论和分享中学会尊重他人,提高沟通能力。
3. 使学生认识到数据结构在计算机科学中的重要性,培养其创新精神和实践能力。
课程性质分析:本课程为高年级计算机科学与技术专业的核心课程,旨在让学生深入理解数据结构的基本原理,掌握C语言实现数据结构的方法,提高编程能力和解决问题的能力。
学生特点分析:学生已具备一定的C语言基础和编程能力,但可能对数据结构的应用和实现尚不熟悉。
因此,课程设计应注重理论与实践相结合,引导学生从实际问题出发,培养其解决复杂问题的能力。
教学要求:1. 结合课本内容,设计具有实际意义的数据结构案例,让学生在实践中掌握理论知识。
2. 注重启发式教学,引导学生主动思考、分析和解决问题,提高学生的创新能力和实践能力。
3. 强化团队合作,鼓励学生相互讨论、分享经验,提高课程教学效果。
二、教学内容1. 线性表- 教材章节:第2章 线性表- 内容安排:介绍线性表的定义、性质和实现方法,包括顺序存储和链式存储;实现线性表的基本操作,如插入、删除、查找等。
2. 栈和队列- 教材章节:第3章 栈和队列- 内容安排:讲解栈和队列的基本概念、性质及操作;实现栈和队列的存储结构和基本算法;探讨栈和队列在实际应用中的使用场景。
3. 串- 教材章节:第4章 串- 内容安排:介绍串的定义、存储结构及模式匹配算法;掌握KMP算法及其应用。
数据结构(C语言版) 实验报告
数据结构(C语言版) 实验报告实验报告1·实验目的本实验的目的是通过使用C语言实现各种数据结构,包括链表、栈、队列和树等,以加深对这些数据结构的理解,并学习其基本操作和应用场景。
2·实验环境和工具●操作系统:Windows 10●开发工具:Code::Blocks●编程语言:C语言3·实验内容3·1 链表3·1·1 定义链表结点的结构体3·1·2 创建链表3·1·3 插入结点3·1·4 删除结点3·1·5 遍历链表3·1·6 查找链表中的某个结点3·2 栈3·2·1 定义栈的结构体3·2·2 初始化栈3·2·3 入栈操作3·2·4 出栈操作3·2·5 判断栈是否为空3·2·6 获取栈顶元素3·3 队列3·3·1 定义队列的结构体3·3·2 初始化队列3·3·3 入队操作3·3·4 出队操作3·3·5 判断队列是否为空3·3·6 获取队头元素3·4 树3·4·1 定义树的结构体3·4·2 创建树3·4·3 插入结点3·4·4 删除结点3·4·5 遍历树3·4·6 查找树中的某个结点4·实验结果通过实验,我们成功实现了链表、栈、队列和树的基本操作,并对其进行了测试,验证了其正确性和效果。
5·总结与讨论本次实验使我对数据结构有了更深的理解,通过实际编写代码,加深了对链表、栈、队列和树等数据结构的认识。
数据结构C语言版课设报告样本
目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、调试分析 (8)五、用户手册 (9)六、测试数据 (9)七、附录 (10)一、需求分析要求:本节是需求分析的部分,该节主要说明课程设计题目的具体要求,如:程序应具备的功能、程序设计时必须使用的数据结构(数组、动态链表、文件等)、程序运行时对输入输出格式的要求以及对程序运行性能的要求等,在撰写本节的文档时,对于以上的具体要求应详细地给出明确的说明。
⒈用栈的基本操作完成迷宫问题的求解,其中栈的基本操作作为一个独立的模块存在。
⒉以二维数组M[m+2][n+2]表示迷宫,M[i][j] 表示迷宫中相应(i,j)位置的通行状态(0:表示可以通行,1:表示有墙,不可通行),完成迷宫的抽象数据类型,包括出口、入口位置等。
⒊用户从屏幕上输入迷宫,完成对应迷宫的初始化。
⒋迷宫的入口位置和出口位置在合法范围内由用户而定。
⒌程序完成对迷宫路径的搜索,如果存在路径,则以长方形形式将迷宫打印出来,用特定符号标出迷宫的物理状态,其中字符“#”表示不可行,“*”表示出口和入口,空格表示没有经过的部分,“◆”标记出可行的路径;如果程序完成搜索后没有找到通路,则提示用户“can’t find one way!”。
⒍程序执行的命令:⑴创建初始化迷宫;⑵搜索迷宫;⑶输出搜索结果。
二、概要设计要求:概要设计是在理解程序的各项需求以后,对程序的结构和模块进行设计的环节。
该节主要说明的内容包括对程序中所使用数据结构的介绍(如数组、数组表示的意义、数组的名称、结构体的名称,结构体成员表示的意义,文件的名称等)、对程序中主要模块以及模块之间关系的介绍(即程序由哪些模块组成,模块之间有何种关系等),在撰写本节的文档时,对于以上的具体内容给出详尽的说明。
⒈设计栈的抽象数据类型定义:ADT Stack {数据对象:D={ai:|ai∈PositionSet,i=1…n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈d,i=2,…n}基本操作:操作结果InitStack(&S) 构造一个空栈,完成栈的初始化SDestoryStack(&S) 撤消一个已经存在的栈SClearStack(&S) 将栈S重新置空StackLength(S) 返回栈的长度GetTop(S,&e) 用e返回栈S的栈顶元素StackEmpty(S) 若S为空返回1,否则返回0Push(&S,e) 将新的元素e压入栈顶Pop(&S,e) 删除栈顶元素,并用e返回其值StackTraverse(s) 将栈S的所有元素输出}ADT Stack;⒉迷宫的抽象数据类型定义:ADT Maze{数据对象:D:={aij,Start,end|aij,Start,end∈{} 0≤i≤m+2,0≤j≤n+2,m,n≥0}数据关系:R={ROW.COL}Row={<ai-1j,aij>|ai-1,aij∈D i=1,…,m+2,j=1,…,n+2}Col={<aij-1,aij>|aijaij-1∈D}基本操作:SetMaze(&Maze)初始条件:Maze已经定义,Maze的下属单元二维数组Maze.M[row+2][d+2]已存在,Maze.start,Maze.end也已作为下属存储单元存在操作结果:构成数据迷宫,用数值标识迷宫的物理状态,以0表示通路,以1表示障碍,由终端读取迷宫空间大小,各点处的具体物理状态及Start和End点位置,完成迷宫构建Pass(&Mazem,&Nposition,Position,di)初始条件:已知目前迷宫状态及当前位置、下一步探索方向di操作结果:完成相应的搜索任务,如果可行,则用Nposition返回下一步位置,并将Maze状态改变为相应点已走过情况PrintMaze(Maze)操作结果:输出字符标示的迷宫FindWay(Maze,&way)操作结果:利用Pass搜索迷宫,用way返回搜索所得路径。
数据结构(C语言版) 实验报告
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告第一章引言本实验报告主要介绍了在C语言环境下进行数据结构实验的相关内容。
数据结构是计算机科学中最基础的一门课程,它主要涉及到如何将数据组织和存储以便高效地访问和操作。
本实验报告将按照以下章节进行详细介绍。
第二章实验目的本实验的主要目的是通过实践操作,加深对数据结构的理解,并运用C语言编写相应的数据结构代码。
第三章实验环境1.操作系统:________Windows 102.编程语言:________C语言3.开发工具:________Visual Studio Code第四章实验内容1.线性表1.1 顺序表的实现1.1.1 初始化线性表1.1.2 插入操作1.1.3 删除操作1.1.4 查找操作1.2 链表的实现1.2.1 单链表的创建和遍历1.2.2 单链表的插入和删除操作 1.2.3 单链表的反转1.3 栈1.3.1 栈的实现1.3.2 栈的应用1.4 队列1.4.1 队列的实现1.4.2 队列的应用2.树2.1 二叉树的实现2.1.1 二叉树的创建和遍历2.1.2 二叉树的查找操作2.1.3 二叉树的插入和删除操作2.2 平衡二叉树2.2.1 平衡二叉树的实现2.2.2 平衡二叉树的插入和删除操作 2.3 堆2.3.1 堆的实现2.3.2 堆的操作2.4 哈夫曼树2.4.1 哈夫曼树的构建2.4.2 哈夫曼编码和解码3.图3.1 图的表示方法3.1.1 邻接矩阵3.1.2 邻接表3.2 图的遍历算法3.2.1 深度优先搜索(DFS)3.2.2 广度优先搜索(BFS)3.3 最小树3.3.1 Kruskal算法3.3.2 Prim算法3.4 最短路径3.4.1 Dijkstra算法3.4.2 Floyd算法第五章实验结果本实验通过编写相关的数据结构代码和算法,成功实现了线性表、树和图的基本功能。
经测试,各功能模块能正常运行,并能给出正确的结果。
C语言课程设计报告
目录(一)设计目的 (3)(二)设计内容 (3)(三)总体设计 (4)(四)详细设计…………………………………5-10(五)调试与测试 (11)(六)设计总结 (12)《C语言课程设计》如:通讯录管理系统一、课程设计目的(涉及到的知识点和能力要求)1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2、通过课程设计,学会设计数据结构。
其中包括对结构数组、数据文件等知识的运用。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容及任务要求:(题目或问题的简要描述分析)设计一个实用的通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:(1)录入:联系人信息包括:姓名,地址,电话。
以结构数组或数据文件的形式存放通讯录信息。
(2)更新:能插入、修改、删除通讯录信息。
(3)浏览:按录入先后为序进行通讯录信息浏览。
(4)查询:能实现指定联系人信息查询或指定电话号码查询功能。
(5)系统以菜单方式工作,界面友好,易于操作,容错性好。
三、总体设计1、模块化设计为实现系统功能,本程序主要分为六个模块。
它们分别为:录入联系人信息、删除联系人信息、查询联系人信息、增加联系人信息、浏览所以联系人信息、退出该程序。
这六个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:Enter函数用于录入通讯录中学生的信息;Delet函数用于对通讯录中指定信息的删除;Search函数用于对通讯录中指定信息的查询;Add函数用于在通讯录中插入信息;Modify函数用于对联系人进行修改;Load函数用于对通讯录中所有信息进行浏览;Quit函数用于退出系统。
c语言课程设计报告
c语言课程设计报告一、引言计算机科学与技术是当今社会中非常热门的学科之一,在这个时代,掌握一门计算机编程语言是极其重要的。
而C语言作为一种高度通用的编程语言,被广泛应用于软件开发、嵌入式系统等领域。
在本次C语言课程设计中,我们小组选择了某个特定领域的应用,对其进行分析、设计和实现。
二、问题定义本次课程设计的目标是设计一个简单的汽车租赁管理系统。
该系统需要实现的功能包括:汽车信息的录入和查询,租车和还车的订购和确认,用户信息的管理及租赁记录的统计等。
三、设计思路1. 数据结构的设计为了实现汽车租赁管理系统,我们需要设计适当的数据结构。
首先,需要定义汽车的信息,包括车型、颜色、日租金等。
其次,我们需要存储用户的信息,如姓名、手机号码等。
此外,还需要记录租赁的相关信息,如租赁时间、预计还车时间等。
2. 功能模块的划分根据设计思路,我们可以将汽车租赁管理系统划分为以下几个功能模块:(1)汽车信息模块:负责录入汽车信息和查询汽车信息。
(2)用户信息模块:负责管理用户的信息,包括用户的注册、修改和删除等操作。
(3)租赁模块:负责汽车的租赁和还车操作,包括租赁信息的录入、修改和查询等。
(4)统计模块:负责统计租赁记录,包括某一时间段内的租赁次数、总租金等。
四、系统设计与实现1. 数据结构的定义根据前面的设计思路,我们可以定义如下的数据结构:(1)汽车信息结构体:包括车型、颜色、日租金等。
(2)用户信息结构体:包括姓名、手机号码等。
(3)租赁信息结构体:包括租赁时间、预计还车时间等。
2. 功能模块的实现(1)汽车信息模块的实现:通过调用相应的函数,实现汽车信息的录入和查询。
(2)用户信息模块的实现:通过用户注册功能,实现用户的信息录入和管理。
(3)租赁模块的实现:实现汽车的租赁和还车操作,并更新租赁信息。
(4)统计模块的实现:根据租赁记录,实现针对某一时间段内的租赁次数和总租金的统计功能。
五、使用与测试在系统的实现过程中,我们需要进行充分的测试。
数据结构C语言版 实验报告
数据结构C语言版实验报告《数据结构 C 语言版实验报告》一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念和操作的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019三、实验内容1、线性表顺序表的实现链表的实现(包括单向链表、双向链表)2、栈和队列栈的实现(顺序栈、链栈)队列的实现(顺序队列、循环队列、链队列)3、数组和字符串数组的基本操作字符串的操作(字符串的存储、字符串的比较、字符串的连接等)4、树和二叉树二叉树的遍历(前序、中序、后序)二叉树的创建和基本操作5、图图的存储(邻接矩阵、邻接表)图的遍历(深度优先遍历、广度优先遍历)四、实验步骤1、线性表顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除、查找等操作。
编写测试程序,对顺序表的各种操作进行测试。
链表的实现定义单向链表和双向链表的数据结构,包括节点结构体。
实现链表的创建、插入、删除、查找等操作。
编写测试程序,验证链表操作的正确性。
栈的实现定义顺序栈和链栈的数据结构。
实现栈的入栈、出栈、栈顶元素获取等操作。
进行栈的操作测试。
队列的实现定义顺序队列、循环队列和链队列的数据结构。
实现队列的入队、出队、队头队尾元素获取等操作。
对队列的操作进行测试。
3、数组和字符串数组的操作实现数组的初始化、元素访问、数组元素的修改等。
测试数组的基本操作。
字符串的操作定义字符串的存储方式。
实现字符串的比较、连接、复制等操作。
编写测试用例,验证字符串操作的准确性。
二叉树的遍历采用递归方式实现二叉树的前序、中序、后序遍历。
输出遍历结果进行验证。
二叉树的创建和基本操作构建二叉树的数据结构。
实现二叉树的节点插入、删除等操作。
5、图图的存储分别用邻接矩阵和邻接表来存储图。
实现图的初始化操作。
图的遍历用深度优先遍历和广度优先遍历算法对图进行遍历。
c数据结构课程设计
c 数据结构课程设计一、教学目标本课程的目标是让学生掌握 C 语言中的数据结构基础知识,包括线性表、栈、队列、串、树、图等,理解数据结构在程序设计中的应用和重要性。
具体目标如下:1.理解数据结构的基本概念和术语。
2.掌握 C 语言中常用的数据结构及其实现方法。
3.理解数据结构在程序设计中的作用和意义。
4.能够运用数据结构解决实际问题。
5.能够编写使用数据结构的 C 程序。
6.能够对程序进行性能分析和优化。
情感态度价值观目标:1.培养学生对计算机科学的兴趣和热情。
2.培养学生解决问题的能力和创新精神。
3.培养学生团队合作和自主学习的意识。
二、教学内容本课程的教学内容主要包括C 语言中的数据结构基础知识,具体包括以下内容:1.线性表:数组、链表、顺序表、栈和队列。
2.非线性结构:树、图、散列表。
3.算法和程序设计:排序算法、查找算法、递归算法。
4.数据结构基本概念和术语。
5.线性表的实现和应用。
6.栈和队列的实现和应用。
7.串的实现和应用。
8.树的实现和应用。
9.图的实现和应用。
10.排序算法和查找算法的设计和应用。
11.递归算法的原理和应用。
三、教学方法本课程采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解数据结构的基本概念、原理和算法,使学生掌握数据结构的基础知识。
2.讨论法:通过分组讨论和问题解答,引导学生主动思考和探索,提高学生的解决问题的能力。
3.案例分析法:通过分析实际案例,使学生理解数据结构在程序设计中的应用和重要性。
4.实验法:通过编写程序和实验操作,培养学生的动手能力和实际应用能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料、实验设备等。
1.教材:选用《数据结构与算法分析:C 语言描述》作为教材,系统地介绍数据结构的基本概念、原理和算法。
2.参考书:推荐《算法导论》、《数据结构与算法》等参考书,供学生自主学习和深入研究。
大一数据结构c语言课程设计报告书
.XI`AN TECHNOLOGICAL UNIVERSITY课程设计报告课程名称:C语言程序设计专业:班级:姓名:学号:指导教师:成绩:2017年1月5日题目:学生成绩管理系统思路:先建立一个链表然后以链表为基础进行各种操作,设计学生成绩管理系统,通过主页显示,根据自己需求按主页中所显示步骤输入,删除,查找,插入,修改,统计学生信息。
算法:核心算法为链表的生成,插入,查找,排序算法。
函数模块介绍:void xuanze();//选择功能void shuchu(struct student*h);//输出void tianjia(struct student*h);//添加void shanchu(struct student*h);//删除void chaxun(struct student*h);//查询void genggai(struct student*h); //更改主void gxuehao(struct student*p);//改学号void gname(struct student*p);//改void ggaoshu(struct student*p);//改高数成绩void gyingyu(struct student*p);//改英语成绩void gc(struct student*p);//改c语言成绩void tongji(); //统计主void max_average(struct student*h);//统计平均分最高void max_gaoshu(struct student*h);//统计高数最高void max_yingyu(struct student*h);//统计英语最高void max_c(struct student*h);//统计c语言最高void bujige_average(struct student*h);//统计平均分不及格学生信息void bujige_gaoshu(struct student*h);//统计高数不及格学生信息void bujige_yingyu(struct student*h);//统计英语不及格学生信息void bujige_c(struct student*h);//同意c语言不及格学生信息struct student*creat(int n);//创建链表void order_two(struct student*p,struct student*q);//调换位置void order(struct student*h);//排序源程序#include"stdio.h"#include"string.h"#include"conio.h"#include <stdlib.h>. #define N 30#define M 3typedef struct student{char number[10];char name[20];float score[M];float aver;float total;}STU;STU stu[N];int n;void inputscore(void);void savescore(void);void avergescore(void);void total(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void savescore(void);void menu(void);int main(){short int flag=0;menu();do{flag=1;switch(getch()){case'1':inputscore();break; /* 输入成绩*/ case'2':lookscore();break; /*查看成绩*/ case'3':searchscore();break; /*查找成绩*/ case'4':statistic();break; /*成绩统计*/ case'5':modify();break; /*修改成绩*/ case'6':add();break; /*添加成绩*/ case'7':delscore();break; /*删除成绩*/ case'8':savescore();break; /*保存成绩*/ case'9':exit(0); /*退出成绩*/default:printf("输入有误\n");}printf("按任意键继续\n");getch();menu();}while (flag==1);}void menu(void){system("cls");printf("\t\t \n");printf("\t\t 学生信息管理系统 \n"); printf("\t\t \n");printf("\t\t \n");printf("\t\t 1. 输入成绩 2. 查看成绩并排序 \n");printf("\t\t \n");printf("\t\t 3. 查询学生成绩 4. 成绩统计 \n");printf("\t\t \n");printf("\t\t 5. 修改成绩 6. 添加成绩 \n");printf("\t\t \n");printf("\t\t 7. 删除成绩 8. 保存成绩 \n");printf("\t\t \n");printf("\t\t 9. 退出系统 \n");printf("\t\t \n"); printf("\t\t请您选择(0-9)\n");}/************输入各个同学的学生信息***********/void inputscore(void){int i,j ;system("cls");printf("请输入学生总数:\n");scanf("%d",&n);for(i=0;i<n;i++){printf("请输入第%d个学生的学号 :\n",i+1);scanf("%s",stu[i].number);scanf("%s",stu[i].name);printf("请输入学生成绩:\n");printf("高数\tC语言\t大英\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);}printf("成功输入\n");}/***************计算各个同学的总分************/void total(void){int i,j;for(i=0;i<n;i++){stu[i].total=0;for(j=0;j<M;j++){stu[i].total+=stu[i].score[j];}}}/********************计算各个同学的平均分*************/ void avergescore(void){int i,j;for(i=0;i<n;i++){stu[i].aver=0;for(j=0;j<M;j++){stu[i].aver+=stu[i].score[j];}stu[i].aver=stu[i].aver/M;}}/************查看学生成绩及根据平均分对学生排序************/ void lookscore(void){int i,j,k;STU t;total();avergescore();system("cls");for(i=0;i<n-1;i++){for(k=i,j=i+1;j<n;j++)if(stu[j].aver>stu[k].aver)k=j;if(k!=j){t=stu[k];stu[k]=stu[i];stu[i]=t;}}printf("名次\t学号\t\t\t高数\tC语言\t大英\t总分\t平均分\n");for(i=0;i<n;i++){printf("%d\t%s\t\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]); //输出成绩printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");}}/**********************通过输入学号查找学生成绩**********************/void searchscore(void){char a[10];int i,j;system("cls");printf("请输入需查询的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0) //比较两个字符串{printf("名次\t学号\t\t\t高数\tC语言\t大英\t总分\t平均分\n");printf("%d\t%s\t\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");break; /*找到该学生成绩信息后跳出for循环*/}elseprintf("未找到该学生信息\n");}}/************统计学生成绩信息,平均分及格率,优秀率*************/ void statistic(void){STU*p=stu;int i,j;float count=0.0,sum=0.0;system("cls");for(i=0;i<n;i++){sum+=(p+i)->aver ;}printf("该班级平均分为%4.2f\n",sum/n); /*平均分计算*/for(i=0;i<n;i++){ if((p+i)->aver>=60)count++;}printf("该班级及格率为%4.2f%%\n",count/n*100);/*及格率计算*/ count=0.0;for(i=0;i<n;i++){ if((p+i)->aver>=90)count++;}printf("该班级的优秀率为%4.2f%%\n",count/n*100);/*优秀率计算*/ printf("平均分低于60的学生\n");for(i=0;i<n;i++){if(stu[i].aver<60)printf("%s\n",stu[i].name);} /*统计不及格学生*/}/****************修改学生成绩*************/void modify(void){ char a[10];int i,j;system("cls");printf("请输入需要修改成绩的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0){ printf("名次\t学号\t\t\t高数\tC语言\t大英\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");printf("请重新输入该学生的学号:\n");scanf("%s",stu[i].number);scanf("%s",stu[i].name);printf("请重新输入学生成绩:\n");printf("高数\tC语言\t大英\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行后进行修改,跳出for循环*/printf("修改成功\n");break;}elseprintf("请确认该学生是否为本班学生!\n");}}/**********************添加学生成绩*************************/ void add(void){int a,i,j;system("cls");printf("请输入新增加的学生人数:\n");scanf("%d",&a);n=n+a;for(i=n-a;i<n;i++){ printf("请输入学生%d的学号:\n",i+1);scanf("%s",stu[i].number);scanf("%s",stu[i].name);printf("请输入学生成绩:\n");printf("高数\tC语言\t大英\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);printf("添加成功\n");}}/*******************删除学生成绩********************/void delscore(void){ int i,j,c;char m,a[10];system("cls");printf("请输入学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0){ printf("名次\t学号\t\t\t高数\tC语言\t大英\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");c=i;break;}elseprintf("未找到该学生信息\n");}printf("是否删除该学生成绩(y/n)\n");scanf("%s",&m);if(m=='y'){for(i=c;i<n-1;i++)stu[i]=stu[i+1]; /*结构体整体赋值将最后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/n=n-1; /*删除该学生信息后学生总数减一*/ printf("删除成绩成功\n");}elseprintf("删除成绩失败\n");}/***********************保存学生成绩*************************/void savescore(void){FILE*fp;int i,flag=1;char m;system("cls");puts("是否保存学生成绩(y/n)");scanf("%s",&m);if(m=='y'){ if((fp=fopen("score.dat","wb"))==NULL){ printf("文件打开失败\n");return;}for(i=0;i<n;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) {printf("保存失败\n");flag=0;}if(flag==1)printf("保存成功!\n");fclose(fp);}elsereturn;。
c语言课程设计报告书3篇
c语言课程设计报告书3篇c语言课程设计报告书1我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理。
简单界面程序。
高级界面程序。
程序的添加修改。
用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的.语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
C语言与数据结构课程设计报告要_...
C语言与数据结构课程设计报告
学号
姓名
课程设计题目
年月
目录
1 需求分析
1.1 功能与数据需求
1.1.1 题目要求的功能
1.1.2 扩展功能
1.2 界面需求
1.3 开发环境与运行需求
2 概要设计
2.1主要数据结构
2.2程序总体结构
2.3各模块函数说明
3 详细设计
3.1算法分析与设计
3.2主要程序段设计
4 测试
5 使用说明
5.1应用程序功能的详细说明
5.2应用程序运行环境要求
5.5输入数据类型、格式和内容限制
6 总结提高
6.1课程设计总结
6.2开发中遇到的问题和解决方法
6.3 对自己完成课设完成情况的评价
6.4《C语言与数据结构课程设计》课程的意见与建议
附录:程序源代码。
C语言课程设计报告
C语言课程设计报告一、课程设计目的目的:掌握结构体类型变量的定义和使用,掌握结构体类型数组的概念和应用。
考察我们对函数调用的掌握情况,增强我们自己动手设计程序的能力,同时也让我们感受程序设计魅力之所在,为接下来的数据结构课程学习做准备。
二、课程设计内容1、课程设计的题目及简介题目:职工档案管理系统简介:职工档案管理系统是对职工基本信息进行录入、显示、删除、修改、查询等操作的管理系统。
本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:工号,姓名,性别,出生年月,所在部门,职称,工资级别,电话。
2、设计说明总体上程序分为两大模块:主函数和功能模块,其中在主函数内设置菜单选项,用do……while结构实现循环,同时在主函数内定义功能函数。
功能模块又分为以下模块:录入模块:职工信息录入,可以完成工号,姓名,性别,出生年月,所在部门,职称,工资级别,电话等若干条记录的输入。
显示模块:能显示所录入职工的基本信息,自己定义void xianshi()函数删除模块:先找到要删除职工的姓名,然后删除此职工的基本信息,自己定义void shanchu()函数。
修改模块:根据职工姓名找到要修改的职工信息,并输入正确的职工基本信息,自己定义void xiugai()函数。
查询模块:根据职工姓名查询并显示职工的基本信息,自己定义void chaxun()函数。
退出系统模块:无需定义函数,在主函数的switch结构中,设置一个退出系统的case。
3、程序流程图4、程序清单(源程序要多加注释)#include <stdio.h>#include <string.h>#define N 10struct stuff // 定义结构体类型{int num;char name[10];char sex[2];char birth[10];char szbm[20];char zc[10];int salary;char tel[10];};struct stuff stu[N]; //定义结构体变量void input(int *); //定义录入函数void xianshi(int); //定义显示函数void shanchu(int *); //定义删除函数void xiugai(int); //定义修改函数void chaxun(int); //定义查询函数void main() //主菜单函数{int choose;int count=0; //count为计数器,记录录入数据的个数do {printf("\n\n\n\n\n\n");printf(" | ------------------------你好欢迎使-------------|\n");printf(" | 输入选项编(0~6) |\n");printf(" |------------------------------------------------|\n);printf(" | (1)职工基本信息的录入 |\n");printf(" | (2)职工基本信息的显示 |\n");printf(" | (3)职工基本信息删除 |\n"); printf(" | (4)职工基本信息修改) |\n");printf(" | (5)职工基本信息查询) |\n");printf(" | (6)退出系统 |\n");printf(" |------------------------------------------------|\n");scanf("%d",&choose);switch(choose) //用switch结构实现函数的调用{case 1:input(&count);break;case 2:xianshi(count);break;case 3:shanchu(&count);break;case 4:xiugai(count);break;case 5:chaxun(count);break;case 6:break;}}while(choose>=1&&choose<6);}void input(int *count){int i,number;if (*count==N){ printf("空间已满!");return;}printf("工号:");scanf("%d",&number);for(i=0;i<*count;i++)if(stu[i].num==number){ printf("已经有相同的编号:");return;}stu[i].num=number;printf("姓名:");scanf("%s",stu[i].name);printf("出生年月:");scanf("%s",stu[i].birth);printf("性别:");scanf("%s",stu[i].sex);printf("所在部门:");scanf("%s",stu[i].szbm);printf("职称:");scanf("%s",stu[i].zc);printf("工资级别:");scanf("%d",&stu[i].salary);printf("电话:");scanf("%s",stu[i].tel);(*count)++;}void xianshi(int count){int i;printf("工号姓名出生年月所在部门职称工资级别电话"); for(i=0;i<count;i++){ printf("\n");printf("%d\t", stu[i].num);printf("%s\t", stu[i].name);printf("%s\t", stu[i].birth);printf("%s\t", stu[i].szbm);printf("%s\t", stu[i].zc);printf("%d\t", stu[i].salary);printf("%s\t", stu[i].tel);}void shanchu(int *count){int i,j,flag=1;char name[10];printf("请输入要删除的职工姓名:");scanf("%s",&name);for(i=0;i<*count&&flag;i++){if(strcmp(stu[i].name,name)==0){for(j=i;j<*count-1;j++)stu[j]=stu[j+1];flag=0;(*count)--;printf(“成功删除数据!!”) }else printf("没有查询到可删除的数据!!");}}void xiugai(int count){int i,flag=1;char name[10];printf("请输入要修改数据的职工姓名:");scanf("%s",&name);for(i=0;i<count&&flag;i++)if(strcmp(stu[i].name,name)==0){printf("修改姓名:");scanf("%s",stu[i].name);printf("修改出生年月:");scanf("%s",stu[i].birth);printf("修改性别:");scanf("%s",stu[i].sex);printf("修改所在部门:");scanf("%s",stu[i].szbm);printf("修改职称:");scanf("%s",stu[i].zc);printf("修改工资级别:");scanf("%d",&stu[i].salary);printf("修改电话:");scanf("%s",stu[i].tel);flag=0;}void chaxun(int count){int i,j,flag=1;char name[10];printf("请输入要查询的职工姓名:");scanf("%s",&name);for(i=0;i<count&&flag;i++)if(strcmp(stu[i].name,name)==0){printf("工号:%d",stu[i].num);printf("姓名:%s",stu[i].name);printf("出生年月:%s",&stu[i].birth);printf("性别:%s",stu[i].sex);printf("所在部门:%s",&stu[i].szbm);printf("职称:%s",stu[i].zc);printf("工资级别:%d",stu[i].salary);printf("电话:%s",stu[i].tel);flag=0;}else printf("没有查询到!!");}5、运行结果(界面截图)5.课程设计总结:本报告介绍一个用c语言开发的用于职工档案管理系统,通过该系统可以对职工的工号、姓名、出生年月、职称、工资级别、电话号码等信息进行系统管理。
数据结构(C语言版) 实验报告
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告1:引言1.1 问题描述在本实验中,我们需要设计一个基于C语言的数据结构,用于解决特定问题。
1.2 目的本实验的目的是通过设计和实现数据结构,加深对数据结构和C语言的理解,并应用所学的知识解决实际问题。
1.3 相关工作在这一章节中,我们将介绍与本实验相关的先前工作,并分析其优缺点,为我们的设计提供参考。
2:需求分析2.1 功能需求本节将详细描述所设计的数据结构需要实现的功能。
2.2 性能需求在这一节中,我们将明确数据结构的性能需求,例如时间复杂度和空间复杂度限制。
3:数据结构设计3.1 数据结构定义在这一节中,我们将给出所设计数据结构的定义,并详细说明每个字段的含义和作用。
3.2 数据结构操作在这一节中,我们将详细描述每个数据结构操作的实现。
这些操作包括插入,删除,查找等。
4:算法设计4.1 算法描述在这一节中,我们将给出在实现数据结构过程中使用的算法的详细描述。
我们将分析算法的时间复杂度,并讨论其优缺点。
4.2 算法优化在这一节中,我们将分析并设计优化算法,以提高数据结构的性能。
5:实验结果在这一节中,我们将给出实验结果,并分析实验数据。
我们还将展示实验中所涉及的示例输入和输出。
6:结论在这一节中,我们将总结本实验的设计和实现,并讨论所得实验结果的意义和潜在的改进方向。
7:附录本文档附带以下附件:- 代码实现:包含所设计数据结构的C语言源代码。
- 实验数据文件:包含用于测试数据结构的示例输入和输出文件。
8:法律名词及注释本文档中涉及的法律名词及注释见附件。
数据结构c语言课程设计报告
存储结构:首先用二维指针存储迷宫数据,迷宫数据由用户输入。
一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。
求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东、南、西、北四个方向所用代表数字,自行定义)。
1.从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。
假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。
迷宫的入口点的下标为(1,1),出口点的下标为(m,n)。
为处理方便起见,可在迷宫的四周加一圈障碍。
对于迷宫的任一位置,均可约定有东、南、西、北四个方向可通。
经过的位置把0变为-1,带输出迷宫路径后在恢复迷宫院士为止2. 本程序有三个模块:⑴主程序模块⑵三个类模块即其对象:实现栈链表抽象数据类型;⑶迷宫二维指针单元模块:存储迷宫,,寻路径,输出迷宫,恢复迷宫。
(二)流程图四.详细设计(一).基本算法:首先用二维指针存储迷宫数据,迷宫数据由用户输入。
一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。
求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东、南、西、北四个方向所用代表数字,自行定义)。
迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、南、西、北4个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果4方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。
每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。
用一个二维指针数组迷宫表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。
迷宫的入口点在位置(1,1)处,出口点在位置(m,n)处。
C语言课程设计报告
C语言课程设计报告1. 实验题目:职员信息管理系统2. 数据结构:整型int,字符型char,长整型long,结构体及结构体数组3. 源代码:#include"stdio.h"#include"string.h"#define N 20 /*符号常量的定义*/struct employee /*定义结构体类型employee*/{char name[15];char sex;long num; /*职工工号可能较长,定义为长整型*/char debt[15];int salary;char office[15];char tel[15];}emp[N]; /*定义结构体数组,并将其作为全局变量*/void menu(){int i;printf("请选择您的操作:\n");printf("\t\t1. 增加职工信息\n");printf("\t\t2. 查找职工信息\n");printf("\t\t3. 显示所有职工信息\n");printf("\t\t4. 删除职工信息\n");printf("\t\t0. 退出\n");printf("请选择按键!(0-4):\n");scanf("%d",&i); /*从键盘输入数据并将其值赋给i*/void input();void search();void show();void omit(); /*被调函数定义出现在主调函数之后,应对其进行原型说明*/ switch(i) /*使用switch语句,根据i的数值,进入相应的操作环境*/ {case 1:input();break;case 2:search();break; /*在switch语句中掌握对break的使用*/case 3:show();break;case 4:omit();break; /*实现函数的调用*/case 0:{printf("\t\t------------------------------------\n");printf("\t\t谢谢您对本公司职工信息管理程序的使用\n");printf("\t\t------------------------------------\n");}break;default:printf("您输入的数据有误,请确认后重新输入!\n");menu();}}void fun(int i) /*search()函数和omit()函数都对此函数进行调用,输出相应职工信息*/ {printf("职工信息找到!!!信息如下:\n");printf("姓名\t工号\t性别\t部门\t工资\t职位\t电话\n");printf("%s\t%ld\t%c\t%s\t%d\t%s\t%s\n",emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,e mp[i].salary,emp[i].office,emp[i].tel);}void input() /*定义input()函数,实现职工信息的录入功能*/{int i,j,k,a;for(i=0;i<N;i++)if(emp[i].num==0) /*使用条件语句,防止原有的职工信息被覆盖*/{printf("增加职工信息时:\n");printf("请输入职工姓名:");fflush(stdin); /*刷新缓冲区,下同*/gets(emp[i].name); /*使用gets()函数实现字符串的输入,下同*/do{printf("请输入职工号:");scanf("%d",&a);for(k=0;k<N&&emp[k].num!=a;k++);if(k<N) /*判断所输入工号是否已存在*/printf("该工号已存在,请重新输入!\n");}while(k<N); /*do-while语句控制本层循环*/emp[i].num=a;printf("请输入职工性别,男(M)女(F):");fflush(stdin);emp[i].sex=getchar(); /*使用getchar()函数实现字符的输入*/printf("请输入职工部门:");fflush(stdin);gets(emp[i].debt);printf("请输入职工工资:");scanf("%d",&emp[i].salary);printf("请输入职工职位:");fflush(stdin);gets(emp[i].office);printf("请输入职工联系电话:");fflush(stdin);gets(emp[i].tel);printf("职工添加成功!!!\n");printf("还继续增加吗?继续请输入1否则输入0:\n");scanf("%d",&j);if(j==0) break; /*使用break语句,在条件成立时跳出for循环*/ }menu(); /*不再添加职工信息时,返回到目录函数menu()*/}void search() /*定义search()函数,实现职工信息的查找功能*/{int i,j,number;printf("请输入要查找的职工号:");scanf("%d",&number);for(i=0;number!=emp[i].num&&i<N;i++);if(i<N)fun(i); /*i<N时,职工信息存在,调用fun函数对其输出*/ elseprintf("无对应信息,请重新查找!!!\n");printf("还继续查找吗?继续请输入1否则输入0:\n");scanf("%d",&j);if(j==1) search(); /*函数的递归调用*/else menu(); /*不再查找职工信息时,返回到目录函数menu()*/}void show() /*定义show()函数,实现职工信息的显示功能*/{int i;printf("所有职工信息如下:\n");printf("姓名\t工号\t性别\t部门\t工资\t职位\t电话\n");for(i=0;i<N;i++) /*利用for循环输出所有职工信息*/printf("%s\t%ld\t%c\t%s\t%d\t%s\t%s\n",emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,e mp[i].salary,emp[i].office,emp[i].tel);menu(); /*输出所有信息后,返回到目录函数menu()*/}void omit() /*定义omit()函数,实现职工信息的删除功能*/{int i,j,a,number;printf("请输入要删除的职员号:");scanf("%d",&number);for(i=0;number!=emp[i].num&&i<N;i++);if(i<N){fun(i); /*i<N时,职工信息存在,调用fun函数对其输出*/printf("确定删除吗?确定请输入1否则请输入0:\n");scanf("%d",&a);if(a==1){strcpy(emp[i].name,""); /*确定删除后,还原结构体成员*/emp[i].num=0;emp[i].sex=' ';strcpy(emp[i].debt,"");emp[i].salary=0;strcpy(emp[i].office,"");strcpy(emp[i].tel,"");printf("删除成功!!!\n");}}elseprintf("无对应信息,请重新查找!!!\n");printf("还继续删除吗?继续请输入1否则输入0:\n");scanf("%d",&j);if(j==1) omit(); /*函数的递归调用*/else{printf("删除成功后");show(); /*调用show()函数,输出删除成功后所有职工信息*/ }}void main() /*程序由主函数开始运行*/{int i;for(i=0;i<N;i++){strcpy(emp[i].name,""); /*利用for循环语句对结构体数组赋初值*/emp[i].num=0;emp[i].sex=' ';strcpy(emp[i].debt,"");emp[i].salary=0;strcpy(emp[i].office,"");strcpy(emp[i].tel,"");}printf("\t\t----------------------------\n");printf("\t\t欢迎进入公司职工信息管理程序\n");printf("\t\t----------------------------\n");menu();}4. 每种情况下的运行结果截图1. 判断输入数据是否有误的运行结果截图2. 增加职工信息并确保工号不重复时的运行结果截图3. 查找职工信息时的运行结果截图4. 显示所有职工信息时的运行结果截图5. 删除职工信息,并通过显示所有职工信息验证该信息是否确实被删除时的运行结果截图6. 继续添加职工信息时的运行结果截图7. 显示最后的所有职工信息时的运行结果截图8. 退出该系统时的运行结果截图5. 学习心得体会:学习C语言程序设计这门课一个学期了,这是我所学的第一门计算机课程,作文一名当代的大学生,我认为这十分重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言与数据结构课程设计报告学号姓名课程设计题目迷宫求解2011 年 12 月目录1 需求分析1.1 功能与数据需求1.1.1 题目要求的功能1.1.2 扩展功能1.2 界面需求1.3 开发环境与运行需求2 概要设计2.1主要数据结构2.2程序总体结构2.3各模块函数说明3 详细设计3.1算法分析与设计3.2主要程序段设计4 测试5 使用说明5.1应用程序功能的详细说明5.2应用程序运行环境要求5.5输入数据类型、格式和内容限制6 总结提高6.1课程设计总结6.2开发中遇到的问题和解决方法6.3 对自己完成课设完成情况的评价6.4《C语言与数据结构课程设计》课程的意见与建议附录:程序源代码1 需求分析1.1 功能与数据需求迷宫求解问题描述:以一个m×n的长方形表示迷宫,0和1分别表示迷宫中的通路和障碍。
设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
1.1.1 题目要求的功能基本要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。
求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。
如:对于下列数据的迷宫,输出的一条通路为:(1,1,1), (1,2,2), (2,2,2)(3,2,3), (3,1,2),…。
测试数据:迷宫的测试数据如下:左上角(1,1)为入口,右下角(9,8)为出口。
1.1.2 扩展功能(1)编写递归形式的算法,求得迷宫中所有可能的通路;(2)以方阵形式输出迷宫及其通路1.2 界面需求请求输入进入程序请求输入起始位置请求输入终点位置输出方阵迷宫输出路径输出方阵路径1.3 开发环境与运行需求Visual C++6.02 概要设计2.1主要数据结构int top;int base;}Stack; //新建结构体void initStack(Stack *p)//初始化栈Push(Stack *p,int x,int y,int d) //入栈具体操作 Pop(Stack *p,int read[2],int d) //出栈并读出前一步的坐标 initMaze(int Maze[10][9])//建立迷宫Ways(Stack *p,int Maze[10][9],int rukou_x,int rukou_y,int chukou_x,int chukou_y,int d) //具体路径的求解 menu();//调用菜单函数 main();//实现迷宫求解的主函数3 详细设计迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按左、右、上、下4个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果4方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。
每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条合适的通路;若退回到了入口处,则说明不存在合法的通路到达出口。
用一个二维指针数组迷宫表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。
迷宫的入口点在位置(1,1)处,出口点在位置(m,n)处。
设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。
二维数组的第0行、第m+1行、第0列、第m+1列元素全置成“1”,表示迷宫的外墙;第1行第1列元素和第m行第m列元素置成“0”,表示迷宫的入口和出口;假设当前所在位置是(x,y)。
沿某个方向前进一步,它可能到达的位置最多有4。
4 测试5 使用说明5.1应用程序功能的详细说明按提示输入数字1进入迷宫,输入迷宫入口,迷宫出口5.2应用程序运行环境要求Microsoft Visual C++6.05.5输入数据类型、格式和内容限制输入的数据都是整型(int),输入迷宫的数据间要用空格或回车隔开6 总结提高6.1课程设计总结要能很好的掌握编程,仅仅通过简单的程序的编写是无法达成的,需要大量积累和深入研究才有可能。
就从这个迷宫问题求解来说,在迷宫求路径就需要使用链表的栈,靠出栈和进栈来存取路径数据.在程序的编写中也不能一味的向已有的程序进行模仿,而要自己摸索,去寻找最好的解决方法,只有带着问题去反复进行实践,才能更熟练的掌握和运用,当然,对现有的程序也要多去接触,因为有些程序是我们无法在短时间内想出来的.最重要的一点是持之以恒,要经常性的复习原来接触的程序,这样才能保证我们有足够的经验去面对程序问题.6.2开发中遇到的问题和解决方法问题:在开始时迷宫求解的路径无法显示寻找路径所走的方向等问题。
解决方法:在栈中增加一个变量d来表示方向,在寻找路径的时候判断下一个坐标点和本坐标点的关系。
在(x)行不变的情况下:(y+1)列加一则表示坐标往右走了一步记为1、(y-1)列减一则表示坐标往左走了一步记为3;在(y)不变的情况下:(x+1)行加一则表示坐标往下走了一步记为2、(x-1)行减一则表示坐标往上走了一步记为4;6.3 对自己完成课设完成情况的评价经过本次课程设计,我深刻地明白了理论与实践应用相结合的重要性,并努力克服自己在分析复杂问题的弱点。
这次课程设计同时也考验我的综合运用所学知识的能力和操作能力。
参考用书:《数据结构(C 语言)》,严蔚敏、吴伟民等,清华大学出版社,2010 年《数据结构与算法分析(c++语言描述)》第2 版,黄达民编著,清华大学出版社2006.116.4《C语言与数据结构课程设计》课程的意见与建议希望老师能指导我们把所有的课程设计题目都做一遍,因为每一道题目所能体现的知识点是有限的,而且要想提高我们的编程能力还需要大量的练习。
附录:程序源代码#include <stdio.h>#include <malloc.h>#include<stdlib.h>#include<conio.h>#define length 50#define d direction //用d代表所走路径的方向int n=-1;int step=0; //记录步骤数typedef struct{int pos_x[length];//进栈坐标int pos_y[length];int top;int base;}Stack; //新建结构体void initStack(Stack *p){p->top=p->base=0;}//初始化栈.Push(Stack *p,int x,int y,int d) //入栈具体操作{step++;d=0;n=n+1;p->top=p->top+1;p->pos_x[n]=x;p->pos_y[n]=y;}Pop(Stack *p,int read[2],int d) //出栈并读出前一步的坐标{step++;d=0;n=n-1;p->top=p->top-1;read[0]=p->pos_x[n];read[1]=p->pos_y[n];}initMaze(int Maze[10][9])//建立迷宫函数.{int i;for (i=0;i<=9;i++) {Maze[0][i]=1;}for (i=0;i<=10;i++) {Maze[i][0]=1;}for (i=0;i<=9;i++) {Maze[10][i]=1;}for (i=0;i<=10;i++) {Maze[i][9]=1;}Maze[1][1]=0;Maze[1][2]=0;Maze[1][3]=1;Maze[1][4]=0;Maze[1][5]=0;Maze[1 ][6]=0;Maze[1][7]=1;Maze[1][8]=0;Maze[2][1]=0;Maze[2][2]=0;Maze[2][3]=1;Maze[2][4]=0;Maze[2][5]=0;Maze[2 ][6]=0;Maze[2][7]=1;Maze[2][8]=0;Maze[3][1]=0;Maze[3][2]=0;Maze[3][3]=0;Maze[3][4]=0;Maze[3][5]=1;Maze[3 ][6]=1;Maze[3][7]=0;Maze[3][8]=1;Maze[4][1]=0;Maze[4][2]=1;Maze[4][3]=1;Maze[4][4]=1;Maze[4][5]=0;Maze[4 ][6]=0;Maze[4][7]=1;Maze[4][8]=0;Maze[5][1]=0;Maze[5][2]=0;Maze[5][3]=0;Maze[5][4]=1;Maze[5][5]=0;Maze[5 ][6]=0;Maze[5][7]=0;Maze[5][8]=0;Maze[6][1]=0;Maze[6][2]=1;Maze[6][3]=0;Maze[6][4]=0;Maze[6][5]=0;Maze[6 ][6]=1;Maze[6][7]=0;Maze[6][8]=1;Maze[7][1]=0;Maze[7][2]=1;Maze[7][3]=1;Maze[7][4]=1;Maze[7][5]=1;Maze[7 ][6]=0;Maze[7][7]=0;Maze[7][8]=1;Maze[8][1]=1;Maze[8][2]=1;Maze[8][3]=0;Maze[8][4]=0;Maze[8][5]=0;Maze[8 ][6]=1;Maze[8][7]=0;Maze[8][8]=1;Maze[9][1]=1;Maze[9][2]=1;Maze[9][3]=0;Maze[9][4]=0;Maze[9][5]=0;Maze[9 ][6]=0;Maze[9][7]=0;Maze[9][8]=0;}Print( )//打印出迷宫界面{int m,n,j,sum;int Maze[10][9];printf("迷宫(1代表墙即不通,0代表可通过)\n");printf(" ");for(j=1;j<=8;j++) { printf("%4d",j);}printf("\n");for(m=0;m<=10;m++){for(n=0;n<=9;n++){printf("%4d",Maze[m][n]);sum++;if(sum%10==0) printf("\n");}}}Ways(Stack *p,int Maze[10][9],int rukou_x,int rukou_y,int chukou_x,int chukou_y,int d) //具体路径的求解函数{int x,y;int read[2];x=rukou_x;y=rukou_y;printf("第%d步:",step);printf("(%d,%d,%d)\n",x,y,d);if(x==chukou_x&&y==chukou_y){printf("到达出口坐标共走了%d步\n",step);return 0;}else if(Maze[x][y+1]==0) {y=y+1;d=1;Push(p,x,y,d);Maze[x][y-1]=1;Maze[x][y]=1;}else if(Maze[x+1][y]==0) {x=x+1;d=2;Push(p,x,y,d);Maze[x-1][y]=1;Maze[x][y]=1;}else if(Maze[x][y-1]==0) {y=y-1;d=3;Push(p,x,y,d);Maze[x][y+1]=1;Maze[x][y]=1;}else if(Maze[x-1][y]==0){x=x-1;d=4;Push(p,x,y,d);Maze[x+1][y]=1;Maze[x][y]=1;}else{Pop(p,read,d);x=read[0];y=read[1];if(p->top==p->base) {printf("找不到出口\n");return 0;}}Ways(p,Maze,x,y,chukou_x,chukou_y,d);return 1;}menu(){printf("\t\t************************************\n");printf("\t\t* 欢迎进入课程设计*\n");printf("\t\t* 迷宫求解程序*\n");printf("\t\t* 菜单: *\n");printf("\t\t***进入迷宫***请输入1 *\n");printf("\t\t***退出迷宫***请输入2 *\n");printf("\t\t************************************\n");}int main(){Stack *p;Stack S;int Maze[10][9]; //定义迷宫int elem_1[1],elem_2[1],a,j;int rukou_x,rukou_y,d=0;int chukou_x,chukou_y;int sum=0;p=&S;initMaze(Maze);system("color 5f");//dos窗口背景颜色函数menu();//调用菜单函数printf("请输入您的选择:");scanf("%d",&a);if(a==1){Print( ) //打印迷宫图.;printf("请输入入口坐标:");scanf("%d",&elem_1[0]);scanf("%d",&elem_1[1]);rukou_x=elem_1[0];rukou_y=elem_1[1];printf("请输入出口坐标:"); //迷宫入口坐标.scanf("%d",&elem_2[0]);scanf("%d",&elem_2[1]);chukou_x=elem_2[0];chukou_y=elem_2[1];//迷宫出口坐标.if(elem_1[0]>10||elem_1[1]>9||elem_2[0]>10||elem_2[1]>9||elem_1[0]<0||elem_1[1]<0||elem_2[0]<0||elem_2[1]<0){printf("输入的入口或出口坐标错误\n");} //首先判断输入坐标是否正确else{ printf("\n");printf("说明(x,y,z)x,y代表坐标点;\n");printf("z代表上个坐标到达这个坐标所走的方向,0为初始值,1234分别代表向右、下、左、上方向\n");printf("查找路径的具体步骤:\n");initStack(p);Push(p,rukou_x,rukou_y,d);Ways(p,Maze,rukou_x,rukou_y,chukou_x,chukou_y,d);}system("pause");system("cls");return main();}else{printf("欢迎您的再次光临,再见!\n");}system("pause");}。