教师排课系统课程设计报告(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语言的基本语法、数据结构、算法和编程思想,培养学生具备基本的编程能力和良好的编程习惯。
具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、结构体等基本知识。
2.技能目标:学生需要能够运用C语言编写简单的程序,解决实际问题,培养学生的编程能力和问题解决能力。
3.情感态度价值观目标:通过本课程的学习,使学生认识到编程的重要性,培养学生的学习兴趣和自信心,培养学生具有良好的编程习惯和团队协作精神。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和数据类型:变量、常量、数据类型、运算符等。
2.控制结构:条件语句、循环语句等。
3.函数:函数的定义、调用、参数传递等。
4.数组和指针:一维、二维数组、指针的概念和应用等。
5.结构体和文件操作:结构体的定义和使用、文件的读写操作等。
6.算法和编程思想:排序算法、查找算法、编程原则等。
三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:通过讲解C语言的基本语法、数据类型、运算符、控制结构、函数等知识,使学生掌握基本概念。
2.案例分析法:通过分析实际案例,使学生了解C语言在实际编程中的应用。
3.实验法:安排实验课,让学生动手编写程序,培养学生的编程能力和问题解决能力。
4.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队协作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)等。
2.参考书:《C Primer Plus》、《C和指针》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络环境等。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面反映学生的学习成果。
具体评估方式如下:1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的20%。
教务系统c课程设计

教务系统c 课程设计一、课程目标知识目标:1. 让学生掌握教务系统C的基本功能与操作流程,理解其在我国教育体系中的应用意义。
2. 使学生了解教务系统C的数据结构,能够分析并描述系统中的数据关系。
3. 帮助学生掌握教务系统C中的查询、统计、分析等操作方法,提高数据处理能力。
技能目标:1. 培养学生运用教务系统C进行自主查询、报名、选课等操作的能力。
2. 培养学生通过教务系统C进行成绩分析、学业规划的能力。
3. 提高学生运用信息技术解决实际问题的能力,例如在教务系统C中解决课程冲突、时间安排等问题。
情感态度价值观目标:1. 培养学生积极、主动地使用教务系统C进行学习管理,提高自我管理能力和责任心。
2. 增强学生对信息技术在教育领域应用的兴趣,激发学习信息技术的热情。
3. 培养学生团队协作精神,学会在教务系统C中与同学分享信息、交流经验。
课程性质:本课程为实用操作型课程,结合学生年级特点,强调理论与实践相结合,注重培养学生的实际操作能力和解决问题的能力。
学生特点:学生具备一定的信息技术基础,对教务系统C有一定了解,但操作能力参差不齐,需要针对不同水平的学生进行分层教学。
教学要求:教师应充分了解学生需求,采用任务驱动、案例分析、小组合作等教学方法,引导学生掌握教务系统C的操作技巧,提高实际应用能力。
同时,关注学生个体差异,实施差异化教学,确保每位学生都能达到课程目标。
通过课程学习,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 教务系统C概述:介绍教务系统C的发展历程、功能特点及其在教育行业中的应用。
- 教材章节:第一章 教务系统C简介2. 教务系统C的基本操作:包括登录、查询课程、选课、退课、查看成绩等。
- 教材章节:第二章 教务系统C的基本操作3. 教务系统C的高级应用:涉及成绩分析、学业规划、课程推荐等。
- 教材章节:第三章 教务系统C的高级应用4. 教务系统C的数据结构及管理:介绍教务系统C中的数据表结构,学会使用系统管理功能。
c课程设计报告

c 课程设计报告。
一、课程目标知识目标:1. 学生能理解并掌握本章节的核心概念,如XX、XX及XX,建立扎实的学科知识基础。
2. 学生能运用所学知识解释现象,解决实际问题,提高知识运用能力。
技能目标:1. 学生通过课堂讨论、小组合作等形式,提升沟通协作能力。
2. 学生能运用批判性思维分析问题,提高问题解决能力。
情感态度价值观目标:1. 学生培养对学科的兴趣和热情,形成积极的学习态度。
2. 学生在学习过程中,树立正确的价值观,认识到学科知识在现实生活中的重要性。
课程性质分析:本课程为XX学科的教学内容,旨在帮助学生建立系统的学科知识体系,提高实际操作能力。
课程注重理论与实践相结合,强调培养学生的创新精神和实践能力。
学生特点分析:针对所教年级的学生,他们在认知水平、兴趣爱好、个性特点等方面具有多样性。
因此,课程目标设定需兼顾不同学生的需求,激发学生的学习兴趣和潜能。
教学要求:1. 教师应关注学生的个体差异,实施差异化教学,确保每个学生都能达到课程目标。
2. 教师要注重课堂互动,引导学生主动参与,提高课堂教学效果。
3. 教学过程中,教师要关注学生的情感态度,培养其积极向上的价值观。
二、教学内容根据课程目标,本章节的教学内容主要包括以下几部分:1. 知识点讲解:- XX概念及其应用- XX原理与XX现象- XX技能的实践操作2. 教学大纲制定:- 第一课时:导入与XX概念介绍,教材第X章第X节- 第二课时:XX原理学习与实例分析,教材第X章第X节- 第三课时:XX技能的实践操作,教材第X章第X节3. 教学内容安排与进度:- 第一周:学习XX概念,了解其在实际中的应用- 第二周:深入研究XX原理,分析XX现象- 第三周:实践操作XX技能,提高学生的动手能力4. 教学内容列举:- XX概念:定义、特点、应用场景- XX原理:基本原理、公式、实例- XX现象:分类、原因、影响- XX技能:操作方法、注意事项、实际应用教学内容的选择和组织确保了科学性和系统性,有利于学生系统地掌握学科知识。
c教务系统课程设计

c 教务系统课程设计一、教学目标本课程旨在让学生了解教务系统的功能和结构,掌握教务系统的基本操作,培养学生运用教务系统进行教学管理的能力。
具体目标如下:1.知识目标:使学生了解教务系统的基本概念、功能和结构,理解教务系统在教学管理中的重要性。
2.技能目标:培养学生熟练操作教务系统,进行课程安排、学生管理、成绩统计等教学活动的能力。
3.情感态度价值观目标:培养学生对教务系统的兴趣,认识到教务系统在提高教学管理水平、促进教育教学改革中的作用,树立正确的信息技术应用观念。
二、教学内容1.教务系统概述:介绍教务系统的定义、功能、结构及其在教学管理中的重要性。
2.教务系统操作:讲解教务系统的安装、配置、登录等基本操作,以及课程安排、学生管理、成绩统计等功能的详细操作方法。
3.教务系统管理:阐述教务系统在教学管理中的应用,如教学计划管理、课程管理、学生管理等。
4.教务系统与教育教学改革:探讨教务系统在教育教学改革中的作用,以及如何利用教务系统提高教学管理水平。
三、教学方法1.讲授法:通过讲解教务系统的概念、功能、操作方法等,使学生掌握基本知识。
2.案例分析法:分析实际教学中运用教务系统的案例,使学生更好地理解教务系统在教学管理中的应用。
3.实验法:安排上机实验,让学生亲自动手操作教务系统,提高实际操作能力。
4.讨论法:学生就教务系统在使用过程中遇到的问题进行讨论,促进学生思考和解决问题。
四、教学资源1.教材:选用内容新颖、实用的教务系统教材,为学生提供理论指导。
2.参考书:推荐相关的教务系统参考书籍,拓展学生的知识视野。
3.多媒体资料:制作教学PPT、视频等多媒体资料,提高课堂教学效果。
4.实验设备:配置足够的计算机等实验设备,保证学生上机实验的需要。
五、教学评估本课程的教学评估采用多元化方式,全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、回答问题等环节,评估学生的学习态度和积极性。
c课程设计报告模板

c课程设计报告模板一、课程目标知识目标:1. 让学生掌握课程核心概念,如XXX(具体概念),并能够准确描述其定义及特点。
2. 使学生了解课程相关知识点,如XXX(具体知识点),并能够运用这些知识点分析和解决实际问题。
3. 帮助学生建立知识体系,将本课程内容与之前所学的知识进行有效衔接,形成完整的知识网络。
技能目标:1. 培养学生运用XXX技能(如分析、计算、实验等)解决实际问题的能力。
2. 提高学生团队协作和沟通能力,能够就课程相关问题进行有效讨论和分享。
3. 培养学生自主学习能力,能够通过查阅资料、网络搜索等方式,拓展课程相关知识。
情感态度价值观目标:1. 培养学生对学科的兴趣和热情,激发他们主动探索学科知识的欲望。
2. 培养学生具有积极向上的学习态度,面对困难和挑战时,能够保持坚持不懈的精神。
3. 通过课程学习,使学生认识到所学知识在实际生活中的应用价值,培养他们的社会责任感和创新精神。
课程性质:本课程为XXX学科的基础课程,旨在帮助学生建立扎实的学科基础,为后续学习奠定基础。
学生特点:本年级学生具有较强的求知欲和自主学习能力,但在知识体系搭建和实际应用方面仍有待提高。
教学要求:结合学生特点,注重启发式教学,引导学生主动探究和思考,将理论知识与实际应用相结合,提高学生的学科素养。
在教学过程中,关注学生个体差异,因材施教,使每个学生都能在课程中取得良好的学习成果。
通过多元化的教学评估手段,确保课程目标的达成。
二、教学内容根据课程目标,本课程教学内容主要包括以下几部分:1. 知识点讲解:涵盖教材第X章至第X章,重点讲解XXX(具体知识点)、XXX(具体知识点)等核心概念,以及它们在实际应用中的体现。
2. 技能训练:结合教材第X章,开展XXX(具体技能)训练,如实验操作、数据分析等,以提高学生的实际操作能力。
3. 案例分析:选取教材第X章的典型案例,分析其中涉及的知识点和技能,让学生深入了解学科知识在实际生活中的应用。
c课程设计排课系统

c 课程设计排课系统一、教学目标本课程旨在让学生掌握排课系统的基本原理和操作方法,理解排课系统的核心概念,培养学生运用排课系统解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解排课系统的起源、发展及其在我国的应用现状。
(2)掌握排课系统的基本原理,包括课程安排、时间分配、教室资源管理等。
(3)理解排课系统中各个模块的功能及其相互关系。
2.技能目标:(1)能够熟练操作排课系统,进行课程安排和调整。
(2)能够根据实际需求,运用排课系统进行教室资源管理和调度。
(3)能够分析排课系统中存在的问题,并提出相应的优化方案。
3.情感态度价值观目标:(1)培养学生对排课系统的兴趣,提高学生运用信息技术解决实际问题的意识。
(2)培养学生团队协作、创新思维和责任意识,提高学生在排课系统使用过程中的综合素质。
二、教学内容本课程的教学内容主要包括以下几个部分:1.排课系统概述:介绍排课系统的起源、发展及其在我国的应用现状。
2.排课系统基本原理:讲解排课系统的工作原理,包括课程安排、时间分配、教室资源管理等。
3.排课系统各个模块功能:详细介绍排课系统中各个模块的功能及其相互关系。
4.排课系统操作方法:讲解如何熟练操作排课系统,进行课程安排和调整。
5.教室资源管理:讲解如何运用排课系统进行教室资源管理和调度。
6.排课系统优化:分析排课系统中存在的问题,并提出相应的优化方案。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
具体方法如下:1.讲授法:用于讲解排课系统的基本原理、各个模块功能和操作方法。
2.讨论法:学生针对排课系统使用过程中遇到的问题进行讨论,培养学生的团队协作和创新思维。
3.案例分析法:分析实际案例,让学生了解排课系统在实际应用中的优势和局限。
4.实验法:安排实验室实践环节,让学生动手操作排课系统,提高实际操作能力。
四、教学资源本课程所需教学资源包括:1.教材:《排课系统教程》2.参考书:《现代排课系统设计与实现》、《教室资源管理策略》3.多媒体资料:排课系统使用说明书、实际应用案例视频等。
课程设计用C设计一个排课程序

控制结构(条件、循环)
01 02
条件语句
if语句用于根据条件执行不同的代码块。if...else语句用于在条件不满足 时执行另一个代码块。switch语句用于根据表达式的值选择不同的代码 块执行。
循环语句
for、while和do...while循环用于重复执行一段代码,直到满足特定条 件为止。
03
参与实际项目开发
积极参与实际项目的开发工作,将所 学知识应用到实践中去,不断积累经 验和提高自己的能力。
THANKS FOR WATCHING
感谢您的观看
break和continue语句
用于在循环中提前结束或跳过当前循环,进入下一次循环。
函数定义与调用
函数定义
C语言中的函数是一段可重用的代 码块,用于执行特定任务。函数 定义包括函数名、参数列表和函 数体。
函数调用
通过函数名和参数列表调用已定义 的函数,执行相应任务并返回结果 (如果有返回值的话)。
排课问题是一个经典的组合优化问题 ,通过课程设计可以深入探究排课算 法的实现和优化方法。
适用范围及对象
适用范围
本课程设计适用于计算机科学与技术、软件工程等相关专业 的学生。
适用对象
本课程设计适用于已掌握C语言基本语法、数据结构与算法等 基础知识的学生。通过本课程设计,学生可以进一步巩固和 拓展所学知识,提高编程能力和解决问题的能力。
运算符与表达式
01
02
03
04
算术运算符
C语言支持基本的算术运算符 ,如+、-、*、/和%,用于执
行基本的数学运算。
关系运算符
用于比较两个值的大小关系, 如==、!=、<、>、<=和>=
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象技术与C++课程设计任务书一.系统总体方案:某学校每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2…,n,其中1是最高的期望值。
课程也有优先级,1,2…,n,用来决定将课程分给教师的顺序,其中1是最高的优先级。
设计一个程序针对某些课程给某些教师进行排课。
要求:(一)程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级),教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中。
(二)程序根据课程的优先级以及教师对课程的期望值进行排课。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
(三)可以实现对文件的修改。
(四)可以在各个界面中实现退出以及进入的循环。
(五)可以退出本系统。
(六)程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
方法:为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。
2.设计思路和主要步骤:我们使用面向对象程序设计方法的思路进行分析,得出了整个系统应该涉及三个类的信息和操作,分别是教师类,课程类,排课类。
各类信息以文件方式的储存以及实现各种功能和界面的实现是在main函数中体现。
(一)教师类 teacher:包括私有数据成员姓名 name,编号 id ,工作量work_load ,已有工作量 total(方便判断是否排满课)。
成员函数包括设置和得到私有成员值的成员函数与输出教师信息的成员函数。
(2)课程类 course:私有成员有课程名 course_name,课程号 course_id,周课时 week_hour,总课时 total_hour,优先度 N。
(3)由于考虑到这应该是一个完整的排系统,加上我们希望这个系统的界面能够做到清晰、明了,我们经讨论后决定采用一个总操作界面,一个分操作界面。
总操作界面应该包括(分别对应 1.输入教师信息 2.输入课程信息 3输入教师对课程期望度 4.排课 5.输出排课结果 6.显示操作菜单 7.输出教师文件信息 8.输出课程文件信息 9.输出教师期望度文件信息 10.修改文件信息 0.退出)修改文件信息界面中又因该包括 1.修改教师文件 2.修改课程文件 3.修改教师期望度信息 0.退出3.各功能模块与流程图:说明:以下是对应上面系统功能模块实图的系统流程图,因为制图的不便,故只将成功完成一次操作的流程给出,而“各个流程中中途如果输入了菜单中没有的项以及数据保存文件中没有的数据而被强制退出”的流程因为过于复杂(每步都要进行判断)而没有给出,实际情况读者朋友一试便知。
在此我们对此表示深深的歉意,我们以后一定会努力完善我们各方面的工作的。
各功能模块:(五)程序代码: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,int i,int w,int t,int n);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;}Arrange.h:class arrange{private:int x;int y;public:arrange(void){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,arrange *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]<='`')||'{'<=na me[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]<='`')||'{'<=na me[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 >> 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,arrange *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_load() )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){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;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].ge t_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]*nn[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<<setw(10)<<dd<< endl;elsecourses<<c[j].get_course_name()<<setw(10)<<c[j].get_course_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++){ nums<<"第"<<i+1<<"名老师"<<setw(3);for(j=0;j<m;j++){//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();}6.总结、心得与体会通过这次课题设计,我觉得做好一个程序,灵活运用是关键。