课程设计用c++设计一个排课程序
排课软件的设计c课程设计

排课软件的设计c 课程设计一、教学目标本课程旨在让学生了解和掌握排课软件的设计原理和基本方法,培养学生运用C语言进行程序设计的技能,提高学生解决实际问题的能力。
具体目标如下:1.知识目标:使学生了解排课软件的设计背景和意义,掌握C语言的基本语法、数据类型、运算符、控制结构等,了解软件开发的基本流程。
2.技能目标:培养学生使用C语言编写程序的能力,能独立完成简单的排课软件设计,提高学生的编程实践能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,激发学生创新思维和团队合作精神,使学生认识到排课软件在教育领域的重要性。
二、教学内容本课程的教学内容主要包括排课软件的设计原理、C语言的基本语法、数据类型、运算符、控制结构、函数等。
具体安排如下:1.排课软件的设计原理:介绍排课软件的作用、设计原则和基本流程。
2.C语言基础知识:讲解C语言的基本语法、数据类型、运算符、控制结构等。
3.函数:介绍函数的定义、声明和调用,讲解常用的库函数及其应用。
4.软件开发实践:以实际项目为案例,引导学生运用C语言进行排课软件的设计与实现。
三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解排课软件的设计原理、C语言的基本语法、数据类型、运算符、控制结构等理论知识。
2.案例分析法:分析实际项目案例,引导学生运用C语言进行排课软件的设计与实现。
3.实验法:安排实验室实践环节,让学生动手编写程序,培养学生的编程能力。
4.讨论法:课堂讨论,鼓励学生提问、发表见解,提高学生的思考能力和沟通能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《C程序设计语言》或《C Primer Plus》等。
2.参考书:《C语言编程实例教程》、《C语言常用算法解析》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习平台等。
4.实验设备:计算机、网络设备、编程软件等。
5.网络资源:相关在线教程、论坛、博客等。
学生选课系统c课程设计

学生选课系统c 课程设计一、教学目标本课程旨在让学生掌握学生选课系统C的基本原理和使用方法。
知识目标包括了解学生选课系统的功能、结构和常用技术,理解面向对象设计的基本概念和方法。
技能目标包括能够使用学生选课系统C进行课程选择和排课,能够进行简单的系统设计和优化。
情感态度价值观目标包括培养学生对编程和计算机科学的兴趣和热情,提高学生解决问题的能力和创新精神。
二、教学内容本课程的教学内容主要包括学生选课系统C的基本原理、系统结构和常用技术,面向对象设计的基本概念和方法,以及学生选课系统C的实践应用。
具体包括以下几个部分:1.学生选课系统C的基本原理:介绍学生选课系统C的定义、功能和特点,让学生了解学生选课系统C的基本概念。
2.学生选课系统C的系统结构:讲解学生选课系统C的组成部分,包括数据库、服务器和客户端等,让学生了解学生选课系统C的架构和运行机制。
3.学生选课系统C的常用技术:介绍学生选课系统C中常用的技术,如SQL、Java等,让学生掌握学生选课系统C的开发和实现方法。
4.面向对象设计的基本概念和方法:讲解面向对象设计的基本原则和方法,如封装、继承和多态等,让学生掌握面向对象设计的思维方式和实际应用。
5.学生选课系统C的实践应用:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
包括:1.讲授法:通过讲解学生选课系统C的基本原理、系统结构和常用技术,让学生掌握基本概念和知识。
2.讨论法:通过学生进行小组讨论,引导学生思考和探讨学生选课系统C的实际应用问题和解决方案。
3.案例分析法:通过分析典型案例,让学生了解学生选课系统C的实际应用场景和设计方法。
4.实验法:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供系统的学习资料。
c语言排序综合课程设计

c语言排序综合课程设计一、教学目标本课程的教学目标是使学生掌握C语言排序算法的原理和实现方法,能够运用排序算法解决实际问题。
具体目标如下:1.理解排序算法的基本概念和分类。
2.掌握常用的排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理和实现。
3.了解排序算法的性能分析(时间复杂度、空间复杂度等)。
4.能够使用C语言实现各种排序算法。
5.能够对给定的数据集进行排序,并分析排序结果。
6.能够根据实际问题选择合适的排序算法。
情感态度价值观目标:1.培养学生的逻辑思维能力和解决问题的能力。
2.培养学生对计算机科学的兴趣和热情。
3.培养学生团队合作精神和自主学习能力。
二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.排序算法的基本概念和分类。
2.冒泡排序、选择排序、插入排序、快速排序等常用排序算法的原理和实现。
3.排序算法的性能分析(时间复杂度、空间复杂度等)。
4.排序算法在实际问题中的应用。
第1周:排序算法的基本概念和分类。
第2周:冒泡排序和选择排序的原理和实现。
第3周:插入排序和快速排序的原理和实现。
第4周:排序算法的性能分析。
第5周:排序算法在实际问题中的应用。
三、教学方法为了达到本课程的教学目标,将采用以下教学方法:1.讲授法:通过讲解排序算法的基本概念、原理和实现方法,使学生掌握排序算法的基础知识。
2.案例分析法:通过分析实际问题,让学生了解排序算法在实际中的应用。
3.实验法:让学生通过动手实践,加深对排序算法的理解和掌握。
4.小组讨论法:鼓励学生之间进行讨论和交流,培养团队合作精神和自主学习能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《算法导论》、《数据结构与算法分析》。
3.多媒体资料:PPT课件、教学视频等。
4.实验设备:计算机、网络等。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
c语言排班系统课课程设计

c语言排班系统课课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,了解C语言编程的基本流程,能够运用C语言编写简单的程序。
2.技能目标:学生能够熟练使用C语言编写程序,解决实际问题,具备基本的编程能力和问题解决能力。
3.情感态度价值观目标:学生通过本课程的学习,能够培养对计算机编程的兴趣和热情,提高自我学习和探索的能力,培养良好的编程习惯和团队协作精神。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基础知识:介绍C语言的基本语法、数据类型、运算符、控制结构等。
2.函数和模块化编程:讲解函数的定义和调用、模块化编程的思想和技巧。
3.数组和字符串:介绍数组的基本概念和应用、字符串的操作和处理。
4.指针:讲解指针的概念、指针的运算和指针的应用。
5.结构体和文件操作:介绍结构体的定义和应用、文件的基本操作。
6.编程实践:通过实际项目的开发,让学生综合运用所学知识解决实际问题。
三、教学方法本课程的教学方法包括以下几种:1.讲授法:教师通过讲解和演示,向学生传授C语言的基本知识和编程技巧。
2.案例分析法:通过分析实际案例,让学生理解和掌握C语言编程的方法和思路。
3.实验法:学生通过动手实验,巩固所学知识,培养编程能力和问题解决能力。
4.小组讨论法:学生分组讨论和合作,培养团队协作精神和交流沟通能力。
四、教学资源本课程的教学资源包括以下几种:1.教材:《C程序设计语言》或《C Primer Plus》等。
2.参考书:《C语言编程思想》或《C语言实战》等。
3.多媒体资料:教学PPT、视频教程、在线课程等。
4.实验设备:计算机、编程环境、调试工具等。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过学生的课堂参与、提问、回答问题等方式评估学生的学习态度和积极性。
2.作业:通过学生提交的作业评估学生的编程能力和对知识的理解程度。
c语言排序课程设计

c语言排序课程设计一、教学目标本节课的教学目标是让学生掌握C语言中排序算法的原理和实现方法。
通过本节课的学习,学生应能理解排序算法的基本概念,了解常见的排序算法及其优缺点,并能运用C语言实现基本的排序算法。
1.了解排序算法的概念及其在计算机科学中的应用。
2.掌握冒泡排序、选择排序、插入排序等基本排序算法。
3.了解快速排序、归并排序等高级排序算法。
4.能够运用C语言实现冒泡排序、选择排序、插入排序等基本排序算法。
5.能够分析排序算法的的时间复杂度和空间复杂度。
情感态度价值观目标:1.培养学生对计算机科学的兴趣和好奇心。
2.培养学生解决问题的能力和团队合作精神。
二、教学内容本节课的教学内容主要包括排序算法的原理和C语言实现。
具体内容包括:1.排序算法的概念及其在计算机科学中的应用。
2.冒泡排序、选择排序、插入排序等基本排序算法的原理和实现。
3.快速排序、归并排序等高级排序算法的原理和实现。
4.排序算法的时间复杂度和空间复杂度的分析。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法,包括:1.讲授法:讲解排序算法的原理和实现方法。
2.案例分析法:分析具体的排序算法案例,让学生更好地理解排序算法的应用。
3.实验法:让学生动手编写C语言代码,实现排序算法,培养学生的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用权威、实用的C语言教材,为学生提供基础知识。
2.参考书:提供相关的排序算法参考书籍,为学生提供更多的学习资料。
3.多媒体资料:制作精美的PPT,直观地展示排序算法的原理和实现。
4.实验设备:准备计算机实验室,让学生能够进行实际的编程操作。
五、教学评估教学评估是检验学生学习成果和教学效果的重要手段。
本节课的教学评估将采用以下方式:1.平时表现评估:通过课堂表现、提问回答、小组讨论等方式,评估学生在课堂上的参与程度和理解程度。
c语言排序课程设计

c语言排序课程设计一、课程目标知识目标:1. 学生能够掌握C语言中的排序算法原理,包括冒泡排序、选择排序和插入排序。
2. 学生能够理解排序算法的时间复杂度和空间复杂度,并能够进行比较和分析。
3. 学生能够运用C语言编写并调试排序算法程序,实现对整数数组的排序操作。
技能目标:1. 学生能够运用所学知识独立设计并实现至少两种排序算法。
2. 学生能够通过分析问题,选择合适的排序算法解决实际问题。
3. 学生能够运用调试工具对排序算法进行测试和优化,提高程序的执行效率。
情感态度价值观目标:1. 学生通过学习排序算法,培养解决问题的逻辑思维能力和程序设计能力。
2. 学生在合作交流中,学会倾听他人意见,提高团队协作能力。
3. 学生在探索排序算法的过程中,培养对编程的兴趣和热情,树立正确的计算机科学价值观。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为C语言程序设计中的算法部分,旨在让学生掌握排序算法的基本原理和实现方法。
2. 学生特点:学生已具备C语言基础知识,有一定的编程能力,但对算法的理解和应用尚需加强。
3. 教学要求:教师应注重启发式教学,引导学生通过实例分析、动手实践和小组讨论,掌握排序算法的核心知识,提高编程技能。
同时,关注学生的情感态度价值观的培养,激发学生的学习兴趣和动力。
通过分解课程目标为具体学习成果,为教学设计和评估提供依据。
二、教学内容1. 排序算法原理:- 冒泡排序:介绍冒泡排序的基本思想和步骤,分析其时间复杂度和空间复杂度。
- 选择排序:讲解选择排序的原理和过程,分析其时间复杂度和空间复杂度。
- 插入排序:阐述插入排序的基本原理,分析其时间复杂度和空间复杂度。
2. 排序算法应用:- 编写冒泡排序、选择排序和插入排序的C语言程序。
- 通过实例演示,让学生了解排序算法在实际问题中的应用。
3. 算法分析与优化:- 对比分析冒泡排序、选择排序和插入排序的性能,探讨各种排序算法的优缺点。
c语言课程设计排序设计

c语言课程设计排序设计一、教学目标本节课的教学目标是让学生掌握C语言中的排序算法,理解各种排序算法的原理和实现方式,能够运用排序算法解决实际问题。
具体来说,知识目标包括:了解排序算法的概念和分类;掌握冒泡排序、选择排序、插入排序和快速排序等常见排序算法的原理和实现方法。
技能目标包括:能够使用C语言编写排序算法的程序;能够分析程序的性能和优化程序的效率。
情感态度价值观目标包括:培养学生的逻辑思维能力,提高学生解决问题的能力,培养学生对计算机科学的兴趣和热情。
二、教学内容本节课的教学内容主要包括排序算法的原理和实现。
首先,介绍排序算法的概念和分类,包括内部排序和外部排序,以及稳定排序和不稳定排序。
然后,分别介绍冒泡排序、选择排序、插入排序和快速排序等常见排序算法的原理和实现方法。
最后,通过实例分析,让学生掌握排序算法的应用和优化。
三、教学方法为了达到本节课的教学目标,采用多种教学方法相结合的方式进行教学。
首先,通过讲授法,向学生讲解排序算法的原理和实现方法。
然后,通过讨论法,让学生分组讨论排序算法的优缺点和适用场景,并进行小组交流。
接着,通过案例分析法,分析实际问题中的排序算法应用,让学生学会将理论知识应用于实际问题。
最后,通过实验法,让学生动手编写排序算法的程序,并分析程序的性能,从而加深对排序算法的理解和掌握。
四、教学资源为了支持本节课的教学内容和教学方法的实施,准备以下教学资源:教材《C语言程序设计》,用于讲解排序算法的原理和实现方法;参考书《数据结构与算法》,用于深入理解排序算法的思想和应用;多媒体资料,包括PPT和视频教程,用于辅助讲解和演示排序算法;实验设备,包括计算机和编程环境,用于学生动手实践和编写程序。
这些教学资源将丰富学生的学习体验,帮助学生更好地理解和掌握排序算法。
五、教学评估为了全面、客观地评估学生在本节课的学习成果,采用多种评估方式相结合的方法。
首先,通过平时表现评估,观察学生在课堂上的参与程度、提问和回答问题的积极性和表现,以及小组讨论中的表现。
c语言排序课课程设计

c语言排序课课程设计一、教学目标本课程的教学目标是使学生掌握C语言中的排序算法,包括冒泡排序、选择排序、插入排序和快速排序等。
学生应能理解排序算法的原理和实现方式,能根据实际情况选择合适的排序算法,并对排序算法的效率进行分析。
此外,学生还应掌握排序算法的应用场景和优缺点,能够运用排序算法解决实际问题。
通过本课程的学习,学生应能够提高自己的编程能力和问题解决能力,培养对计算机科学的兴趣和热情。
二、教学内容本课程的教学内容主要包括排序算法的原理和实现。
首先,将介绍排序算法的基本概念和重要性,然后详细讲解冒泡排序、选择排序、插入排序和快速排序等常见排序算法的原理和实现方式。
对于每种排序算法,将通过实例进行讲解,使学生能够清晰地理解其工作过程。
此外,还将介绍排序算法的应用场景和优缺点,使学生能够根据实际情况选择合适的排序算法。
最后,将通过编程实践使学生能够亲自动手实现排序算法,并分析其效率。
三、教学方法本课程将采用多种教学方法以激发学生的学习兴趣和主动性。
首先,将采用讲授法,以讲解排序算法的原理和实现方式。
通过清晰的讲解,使学生能够理解排序算法的概念和操作步骤。
其次,将采用讨论法,引导学生进行思考和讨论,培养学生的分析问题和解决问题的能力。
通过小组讨论和互动交流,使学生能够深入理解排序算法的原理和应用。
此外,还将采用案例分析法,通过分析实际案例使学生能够更好地理解排序算法的应用场景和优缺点。
最后,将采用实验法,使学生能够亲自动手实现排序算法,并通过实验分析其效率。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
教材将提供排序算法的原理和实现方式的详细讲解,使学生能够系统地学习排序算法。
参考书将提供更多的实例和练习题,帮助学生巩固所学知识。
多媒体资料将通过图像和动画的形式展示排序算法的工作过程,使学生能够更直观地理解排序算法。
实验设备将用于学生亲自动手实现排序算法,并通过实验分析其效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计论文题目:用c++设计一个排课程序学院:专业名称:电子科学与技术班级学号:学生姓名:指导教师:2013年 6月目录一、课题背景 (3)1.1选题的意义 (3)二、课题要求 (4)2.1设计功能要求 (4)2.2 报告要求 (5)三、系统总体方案: (5)3.1方案描述 (5)3.3各功能模块: (6)四、源程序代码 (7)五、测试数据及结果 (24)六、总结 (25)参考书籍 (26)致谢 (26)摘要:随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。
如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。
作为计算机应用的一部分,使用计算机对信息进行管理,具有与手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
关键词:计算机 c++程序语言排课系统一、课题背景1.1实际应用的需要近几年来,随着各高校办公自动化工作的推进,教务管理自动化也被摆上了日程。
在教务工作中占有很大比重的一项就是每学期的课程排定工作。
由于教工、教室和设备的相对紧张,如何进行合理地安排和分配,从而充分利用教学资源是我们不得不面对的问题。
而人工进行排课不仅任务重,效率低,而且易出错,难于维护,想要排出一张各方面都满意的课表非常困难。
并且随着高校规模的扩大手工排课的难度和工作量呈几何级数增长。
学校教务的管理作为高校教育信息化工作中的一项重要工作,如何构建一个具有开放性、实用性和灵活性的平台,是一个值得探讨的课题。
其中,作为学校教务重点环节之一的排课系统也尤为重要。
1.1选题的意义排课系统正是为了减轻教务人员的工作量,实现教务工作自动化,解决排课这一老大难问题的教务办公软件。
尤其针对高校的排课一直都没有很好的解决方法,但是此问题又是每个学校在每个学期都会碰到的必要行政作业。
本文在相关理论的指导下,在分析以往一些排课软件的基础上,提出一个高校通用排课系统的设计方法,并对一些具体的问题给出相应解决方案。
但是,由于技术、经验的有限和数据量过大,目前我们很难做出一个满足所有需要的排课系统。
因为它不仅要考虑到教室冲突问题和教师冲突问题,还要考虑到分段课、单双周课时的资源利用问题;另外由于高校的教学特点,还要处理合班课、分班课、体育课与选修课等特殊课程。
针对这些问题,在此专门对数据库设计作了一些探索,并于架构的选择和模块的划分上经过精心调整,在菜单的设计上也体现了人性化的操作。
该设计贴近用户需求,功能完整,架构合理,并用大量的框图模型体现了系统的规划。
该系统实现上机时间的安排,课程的安排,教室的安排,以及它们之间的不冲突和资源的高效利用;这更切合学院教学需要,降低了排课管理工作的工作量和节省了时间,同时课程安排完成后,学院可迅速获得课表情况信息,为教学工作带来方便。
本系统界面友好,操作简单,使用方便。
二、课题要求2.1设计功能要求程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。
为了公平起见,程序随机分配课程,如果10门课程都有优先级,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
测试数据:程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
2.2 报告要求1.封面2.课程设计报告:3.⑴系统总体方案⑵设计思路和主要步骤⑶各功能模块和流程图⑷设计代码⑸心得体会和参考资料三、系统总体方案:3.1方案描述某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2…,n,其中1是最高的期望值。
课程也有优先级,1,2…,n,用来决定将课程分给教师的顺序,其中1是高的优先级。
设计一个程序针对某些课程给某些教师进行排课。
要求:(一)程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。
(二)程序根据课程的优先级以及教师对课程的期望值进行排课。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
(三)可以实现对文件的修改。
(四)可以在各个界面中实现退出以及进入的循环。
(五)可以退出本系统。
(六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
3.2系统设计框图:3.3各功能模块:命令对应函数功能描述1 input_teacher 输入数据并写入文件2 input_course 输入数据并写入文件3 input_num 输入数据并写入文件4 arranging 排课5 print 输出排课结果6 print_help 帮助7 print_teacher 输出文件信息8 print_course 输出文件信息9 print_num 输出文件信息10 change 修改文件信息四、源程序代码Teacher.h:#include<iostream.h>#include<string.h>class teacher{ private:char name[11];int id;int work_load;int total;public:teacher();void set_teacher(char *pn,int i,int w);void set_total(int t){ total=t; }char *get_name(){return name;}int get_id(){return id;}int get_work_load(){return work_load;}int get_total(){return total;}void print();};teacher::teacher(){ strcpy(name,"无");id=0;work_load=0;total=0; }void teacher::set_teacher(char *pn,int i,int w) { strcpy(name,pn);id=i;work_load=w; }void teacher::print(){ cout<<"姓名:"<<name<<endl;cout<<"编号:"<<id<<endl;cout<<"工作量:"<<work_load<<endl;}Course.h:#include<string.h>class course{ private:char course_name[15];int course_id;int week_hour;int total_hour;int N;public:course(void);void set_course(char *pname,inti,int w,int t,intn) char *get_course_name(){return course_name;}int get_course_id(){return course_id;}int get_week_hour(){return week_hour;}int get_total_hour(){return total_hour;}int get_N(){return N;}void print();};course::course(void){ strcpy(course_name,"无");course_id=0;week_hour=0;total_hour=0;N=0; }void course::set_course(char *pname,int i,int w,int t,int n){ strcpy(course_name,pname);course_id=i;week_hour=w;total_hour=t;N=n; }void course::print(){ cout<<"课程名:"<<course_name<<endl; cout<<"编号:"<<course_id<<endl;cout<<"周学时:"<<week_hour<<endl; cout<<"总学时:"<<total_hour<<endl; cout<<"优先级:"<<N<<endl; }void course::print(){ cout<<"课程名:"<<course_name<<endl; cout<<"编号:"<<course_id<<endl;cout<<"周学时:"<<week_hour<<endl; cout<<"总学时:"<<total_hour<<endl; cout<<"优先级:"<<N<<endl;}{ x=0;y=0; }void set_x(int a){ x=a; }void set_y(int b){ y=b; }int get_x(){return x;}int get_y(){return y;}};排课.cpp:#include<iostream.h>#include <stdlib.h>#include<fstream.h>#include<iomanip.h>#include<stdio.h>#include"teacher.h"#include"course.h"#include"arrange.h"#include <time.h>//using namespace std;void input_teacher(teacher *t,int n,int m);void input_course(course *c,int m);void input_num(int **num,int n,int m);void arranging(int **num,teacher *t,course *c,arrang e *a,int n,int m);void print(teacher *t,course *c,arrange *a,int m); void print_help();void print_teacher();void print_course();void print_num();void change(int **num,teacher *t,course *c,arrange *a,int n,int m);void change_teacher(teacher *t,int n);void change_course(course *c,int m);void change_num(teacher *t,course *c,int **num,int n,int m);void main(){ int i,n,m;cout<<"==========================教师排课系统==========================="<<endl;cout<<"教师人数:";cin >>n;cout<<"课程数:";cin>>m;int** num=new int*[n];for(i=0; i<n; ++i){ num[i]=new int[m]; }teacher *t;course *c;arrange *a;t=new teacher[n];c=new course[m];a=new arrange[m];if(t==NULL||c==NULL||a==NULL){ cout<<"内存分配失败"<<endl;return}cout<<" 1. 输入教师基本数据\n";cout<<" 2. 输入课程基本数据\n";cout<<" 3. 输入教师对课程满意度\n";cout<<" 4. 排课\n";cout<<" 5. 输出排课结果\n";cout<<" 6. 帮助\n";cout<<" 7. 输出教师信息\n";cout<<" 8. 输出课程信息\n";cout<<" 9. 输出教师对课程满意度\n";cout<<" 10.修改文件数据\n";cout<<" 0. 退出\n";cout<<"\n 输入你的选择:";int ch;Do{ //cout<<"\n\n 请选择:\n";//cout<<" 1. 输入教师基本数据\n";//cout<<" 2. 输入课程基本数据\n";//cout<<" 3. 输入教师对课程满意度\n"; //cout<<" 4. 排课\n";//cout<<" 5. 输出排课结果\n";//cout<<" 6. 帮助\n";//cout<<" 0. 退出\n";//cout<<"\n 输入你的选择:";cin>>ch;switch(ch){ case 1 : input_teacher(t,n,m);break;case 2 : input_course(c,m);break;case 3 : input_num(num,n,m);break;case 4 : arranging(num,t,c,a,n,m);break; case 5 : print(t,c,a,m);break;case 6 : print_help();break;case 7 : print_teacher();break;case 8 : print_course();break;case 9 : print_num();break;case 10: change(num,t,c,a,n,m);break;case 0 : break;}}while(ch);for(i=0; i<n; ++i){ delete[] num[i]; }delete[] num;delete []t;delete []c;delete []a; }void input_teacher(teacher *t,int n,int m){ fstream teachers("d:\\teachers.txt",ios::out); teachers<<"姓名"<<setw(20)<<"编号"<<setw(20)<<"工作量<<endl;int i,j,work,id;char name[11],nn[11];cout<<"\n 请输入教师基本数据:"<<endl;while(1){ int total=0;for(i=0;i<n;i++){ cout<<"第"<<i+1<<"个教师:\n";cout<<"编号:";while(1){ if (cin >> id) break;else{ cout<<"编号应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();}}cout<<"姓名:";while(1){ cin>>name;for(j=0;j<11;j++){ if( ('!'<=name[j]&&name[j]<='@')||('['<=name[j]&&name[j] <='`')||'{'<=name[j]&&name[j]<='~' )nn[j]=0;elsenn[j]=1; }if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8] *nn[9]*nn[10]==1) break;else{cout<<"姓名应为字母,请重新输入”<<endl;cin.clear();cin.ignore();} }cout<<"工作量:";while(1){ if (cin >> work) break;else{ cout<<"工作量应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }total=total+work;if(total>m) {cout<<"总工作量大于课程数,请重新输入:"<<endl;break;}t[i].set_teacher(name,id,work);teachers<<name<<setw(20)<<id<<setw(20)<<work<<endl;}if(total==m) break;if(total>m) continue;}teachers.close(); }void input_course(course *c,int m){ fstream courses("d:\\courses.txt",ios::out);courses<<"课程名"<<setw(10)<<"课程号"<<setw(10)<<" 周学时"<<setw(10)<<"总学时"<<setw(10)<<"优先级 "<<endl;int week_hour,total_hour,d1,id,i,j;char name[11];char nn[11];for(i=0;i<m;i++){ cout<<"第"<<i+1<<"门课:\n";cout<<"课程号:";while(1){ if (cin >> id) break;else{ cout<<"课程号应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"课程名:";while(1){ cin>>name;for(j=0;j<11;j++){ if( ('!'<=name[j]&&name[j]<='@')||('['<=name[j]&&name [j]<='`')||'{'<=name[j]&&name[j]<='~' )nn[j]=0;elsenn[j]=1;}if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*nn[8]*nn[9]*nn[10]==1) break;else{ cout<<"课程名应为字母,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"周学时:";while(1){ if (cin >> week_hour ) break;else{ cout<<"周学时应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"总学时:";while(1){ if (cin >> week_hour ) break;else{ cout<<"周学时应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"总学时:";while(1){ if (cin >> total_hour ) break;else{ cout<<"总学时应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"优先级:";while(1){ if (cin>>d1) break;else{ cout<<"优先级应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }c[i].set_course(name,id,week_hour,total_hour,d1);courses<<name<<setw(10)<<id<<setw(10)<<week_hour<< setw(10)<<total_hour<<setw(10)<<d1<<endl;}courses.close(); }void input_num(int **num,int n,int m) //教师对课程满意度输入{ fstream nums("d:\\hope.txt",ios::out);nums<<setw(4)<<"满意度"<<setw(6);int nu,i,j,k;for(k=0;k<m;k++) {nums<<"第"<<k+1<<"门课程"<<setw(5);}nums<<endl;for(i=0;i<n;i++){ nums<<"第"<<i+1<<"名老师"<<setw(3);for(j=0;j<m;j++) {cout<<"第"<<i+1<<"位老师对第"<<j+1<<"门课程的满意度"<<endl;//cin>>nu;while(1){ if (cin >> nu) break;else{ cout<<"满意度应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();}}num[i][j]=nu;nums<<nu<<setw(13);}nums<<endl;}nums.close();}void arranging(int **num,teacher *t,course *c,ar range *a,int n,int m) //排课{ int h,s,i,j,b,k=1,min,min1,q=0;min=c[0].get_N();srand((unsigned)time(NULL));for(s=0;s<m;s++){ if(c[s].get_N()<min)min=c[s].get_N();}while(h){for(i=0;i<m;i++){if(c[i].get_N()==min) //判断课程优先级{ min1=num[0][i];for(j=0;j<n;j++){ if( num[j][i]<min1&&t[j].get_total()<t[j].get_work_lo ad() )min1=num[j][i];}while(1>0){ b=rand()%n;if(b>n)continue;else if(t[b].get_total()>t[b].get_work_load()) continue;else if(num[b][i]!=min1)continue;else{ a[q].set_x(b);a[q].set_y(i);q++;int w=t[b].get_total()+1;t[b].set_total(w);//k=0;cout<<"第"<<q<<"次排课"<<endl; }break; }}//if(i=m-1) min++;}min++;if(q<m) h=1;else h=0;} }void print(teacher *t,course *c,arrange *a,int m) //输出排课结果{ int i,a1,b1;for(i=0;i<m;i++){ a1=a[i].get_x();b1=a[i].get_y();cout<<"第"<<a1+1<<"位老师上第"<<b1+1<<"门课"<<endl;t[a1].print();c[b1].print();} }void print_help() //帮助函数{cout<<" 1. 输入教师基本数据\n";cout<<" 2. 输入课程基本数据\n";cout<<" 3. 输入教师对课程满意度\n";cout<<" 4. 排课\n";cout<<" 5. 输出排课结果\n";cout<<" 6. 帮助\n";cout<<" 7. 输出教师信息\n";cout<<" 8. 输出课程信息\n";cout<<" 9. 输出教师对课程满意度\n";cout<<" 10.修改文件数据\n";cout<<" 0. 退出\n"; }void print_teacher() //输出教师信息{ ifstream fin("d:\\teachers.txt",ios::nocreate);if(!fin){ cout<<"File open error!\n";return;}char c[80];while(!fin.eof()) //判断文件是否读结束{ fin.read(c,80);cout.write(c,fin.gcount());}fin.close();}void print_course() //输出课程信息{ ifstream fin("d:\\courses.txt",ios::nocreate); if(!fin){ cout<<"File open error!\n";return;}char c[80];while(!fin.eof()){ fin.read(c,80);cout.write(c,fin.gcount());}fin.close(); }void print_num() //输出教师对课程的满意度{ ifstream fin("d:\\hope.txt",ios::nocreate);if(!fin){ if(!fin){ cout<<"File open error!\n";return;}char c[80];while(!fin.eof()) //判断文件是否读结束}fin.read(c,80);cout.write(c,fin.gcount()); }fin.close(); }void change(int **num,teacher *t,course *c,arrange *a,int n,int m) //修改文件信息{ int ch;do {cout<<"\n\n 请选择:\n";cout<<" 1. 修改教师基本数据\n";cout<<" 2. 修改课程基本数据\n";cout<<" 3. 修改教师对课程满意度\n";cout<<" 0. 退出\n";cout<<"\n 输入你的选择:";cin>>ch;switch(ch){ case 1 : change_teacher(t,n);break;case 2 : change_course(c,m);break;case 3 : change_num(t,c,num,n,m);break;case 0 : break; } }while(ch); }void change_teacher(teacher *t,int n){ int i,aa,bb,k,j,ii;char na[11];char nn[11];cout<<"请输入要修改教师编号:";cin>>ii;for(i=0;i<n;i++)if(t[i].get_id()==ii){ cout<<"此教师原信息:"<<endl;t[i].print();k=i;}cout<<"请输入此教师新信息:"<<endl;cout<<"编号:";while(1){ if (cin >> aa) break;else{ cout<<"编号应为数字,请重新输入:"<<endl;cin.clear();cin.ignore(); }}cout<<"姓名:";while(1){ cin>>na;for(j=0;j<11;j++){ if( ('!'<=na[j]&&na[j]<='@')||('['<=na[j]&&na[j]<='`' )||'{'<=na[j]&&na[j]<='~' )nn[j]=0;elsenn[j]=1; }if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7] *nn[8]*nn[9]*nn[10]==1) break;else{ cout<<"姓名应为字母,请重新输入:"<<endl;"<<endl;cin.clear();cin.ignore();} }cout<<"工作量:";while(1){ if (cin >> bb) break;else{ cout<<"工作量应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }t[k].set_teacher(na,aa,bb);fstream teachers("d:\\teachers.txt",ios::out);teachers<<"姓名"<<setw(20)<<"编号"<<setw(20)<<"工作量"<<endl;for(j=0;j<n;j++){ if(j==k)teachers<<na<<setw(20)<<aa<<setw(20)<<bb<<endl;elseteachers<<t[j].get_name()<<setw(20)<<t[j].get_id()<< setw(20)<<t[j].get_work_load()<<endl;}teachers.close();}void change_course(course *c,int m) //修改课程信息{ int i,aa,bb,cc,dd,k,j,ii;char na[11]; char nn[11];cout<<"请输入要修改课程编号:";cin>>ii;for(i=0;i<m;i++)if(c[i].get_course_id()==ii){ cout<<"此课程原信息:"<<endl;c[i].print();k=i; }cout<<"请输入此课程新信息:"<<endl;cout<<"课程号:";while(1) {if (cin >>aa) break;else{ cout<<"课程号应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"课程名:";while(1){ cin>>na;for(j=0;j<11;j++){ if ( ('!'<=na[j]&&na[j]<='@')||('['<=na[j]&&na[ j]<='`')||'{'<=na[j]&&na[j]<='~' )nn[j]=0;elsenn[j]=1; }if(nn[0]*nn[1]*nn[2]*nn[3]*nn[4]*nn[5]*nn[6]*nn[7]*n n[8]*nn[9]*nn[10]==1) break;else{ cout<<"课程名应为字母,请重新输入:"<<endl;cin.clear();cin.ignore(); } }cout<<"周学时:";while(1){ if (cin >> bb ) break;else{ cout<<"周学时应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"总学时:";while(1){ if (cin >> cc ) break;else{ cout<<"总学时应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }cout<<"优先级:";while(1){ if (cin >> dd) break;else{cout<<"优先级应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }c[k].set_course(na,aa,bb,cc,dd);fstream courses("d:\\courses.txt",ios::out);courses<<"课程名"<<setw(10)<<"课程号"<<setw(10)<<"周学时"<<setw(10)<<"总学时"<<setw(10)<<"优先级"<<endl;for(j=0;j<m;j++){ if(j==k)courses<<na<<setw(10)<<aa<<setw(10)<<bb<<setw(10)<<cc<<s etw(10)<<dd<<endl;elsecourses<<c[j].get_course_name()<<setw(10)<<c[j].get_cour se_id()<<setw(10)<<c[j].get_week_hour()<<setw(10)<<c[j]. get_total_hour()<<setw(10)<<c[j].get_N()<<endl;}courses.close();}void change_num(teacher *t,course *c,int **num,int n,int m){ int ii,jj,i,j,k,nn,a1,b1,c1;cout<<"请输入要修改的教师的编号:";while(1){if (cin >> ii) break;else{ cout<<"满意度应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }for(i=0;i<n;i++){ if(t[i].get_id()==ii) a1=i; }cout<<"请输入要修改的课程的编号:";while(1){ if (cin >> jj) break;else{ cout<<"满意度应为数字,请重新输入:"<<endl;cin.clear();cin.ignore(); }}for(i=0;i<m;i++){ if(c[i].get_course_id()==jj) b1=i; } cout<<"请输入要修改的满意度:";while(1){ if (cin >> nn) break;else{ cout<<"满意度应为数字,请重新输入:"<<endl;cin.clear();cin.ignore();} }fstream nums("d:\\hope.txt",ios::out); nums<<setw(4)<<"满意度"<<setw(6);for(k=0;k<m;k++){ nums<<"第"<<k+1<<"门课程"<<setw(5); } nums<<endl;for(i=0;i<n;i++){ //cout<<"第"<<i+1<<"位老师对第"<<j+1<<"门课程的满意度"<<endl;//cin>>nu;if(i==a1&&j==b1){nums<<nn<<setw(13);num[a1][b1]=nn;}else{ c1=num[i][j];nums<<c1<<setw(13);} }nums<<endl; }nums.close();}五、测试数据及结果六、总结1、通过这次创新实践,锻炼了动手能力,同时也让我们把理论与实践结合起来对以后的学习及工作都有很大的帮助。