课程设计用c++设计一个排课程序.docx

上传人:b****7 文档编号:9853375 上传时间:2023-02-07 格式:DOCX 页数:31 大小:204.56KB
下载 相关 举报
课程设计用c++设计一个排课程序.docx_第1页
第1页 / 共31页
课程设计用c++设计一个排课程序.docx_第2页
第2页 / 共31页
课程设计用c++设计一个排课程序.docx_第3页
第3页 / 共31页
课程设计用c++设计一个排课程序.docx_第4页
第4页 / 共31页
课程设计用c++设计一个排课程序.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

课程设计用c++设计一个排课程序.docx

《课程设计用c++设计一个排课程序.docx》由会员分享,可在线阅读,更多相关《课程设计用c++设计一个排课程序.docx(31页珍藏版)》请在冰豆网上搜索。

课程设计用c++设计一个排课程序.docx

课程设计用c++设计一个排课程序

 

课程设计论文

题目:

用c++设计一个排课程序

学院:

专业名称:

电子科学与技术

班级学号:

学生姓名:

指导教师:

2013年6月

 

摘要:

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。

随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。

如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。

作为计算机应用的一部分,使用计算机对信息进行管理,具有与手工管理所无法比拟的优点.例如:

检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

关键词:

计算机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 

#include

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<<"姓名:

"<

cout<<"编号:

"<

 cout<<"工作量:

"<

}

Course.h:

 

#include 

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<<"课程名:

"<

cout<<"编号:

"<

cout<<"周学时:

"<

cout<<"总学时:

"<

cout<<"优先级:

"<

void course:

:

print() 

{ cout<<"课程名:

"<

cout<<"编号:

"<

cout<<"周学时:

"<

cout<<"总学时:

"<

cout<<"优先级:

"<

{ 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 

#include  

#include 

#include 

#include 

#include"teacher.h" 

#include"course.h" 

#include"arrange.h" 

#include  

//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<<"==========================教师排课系统==========================="<

cout<<"教师人数:

";cin >>n;   

cout<<"课程数:

";cin>>m; 

  int** num=new int*[n];

for(i=0; 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<<"内存分配失败"<

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

{ 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<<"姓名"<

int i,j,work,id; 

 char name[11],nn[11]; 

 cout<<"\n  请输入教师基本数据:

"<

 while

(1)     

{ int total=0;  

for(i=0;i

{ cout<<"第"<

\n";     

cout<<"编号:

";  

while

(1) 

{ if (cin >> id) break;  

else   

{ cout<<"编号应为数字,请重新输入:

"<

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;          

else        

nn[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<<"姓名应为字母,请重新输入”<

cin.clear();        

cin.ignore();   

}  }

cout<<"工作量:

";  

while

(1)

{ if (cin >> work) break;  

else   

{ cout<<"工作量应为数字,请重新输入:

"<

cin.clear();

cin.ignore();  

}  } 

total=total+work;     

if(total>m) {cout<<"总工作量大于课程数,请重新输入:

"<

t[i].set_teacher(name,id,work); 

 teachers<

 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<<"课程名"<

int week_hour,total_hour,d1,id,i,j;  

char name[11];  

char nn[11];  

for(i=0;i

 { cout<<"第"<

\n";     

cout<<"课程号:

";  

while

(1)  

{ if (cin >> id) break;  

else   

{ cout<<"课程号应为数字,请重新输入:

"<

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;

 else       

 nn[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<<"课程名应为字母,请重新输入:

"<

cin.clear();        

cin.ignore();   

}  } 

cout<<"周学时:

";  

while

(1)  

{ if (cin >> week_hour ) break;  

else   

{ cout<<"周学时应为数字,请重新输入:

"<

cin.clear();   

cin.ignore();  

}  } 

 cout<<"总学时:

"; 

while

(1)  

{ if (cin >> week_hour ) break;  

else   

{  cout<<"周学时应为数字,请重新输入:

"<

cin.clear();  

 cin.ignore();  

}  }

cout<<"总学时:

";  

while

(1)  

{if (cin >> total_hour ) break;  

else   

{ cout<<"总学时应为数字,请重新输入:

"<

cin.clear();   

cin.ignore();  

}  }

cout<<"优先级:

";  

while

(1)  

{ if (cin>>d1) break;  

else   

{ cout<<"优先级应为数字,请重新输入:

"<

cin.clear(); 

cin.ignore();  

}  }    

c[i].set_course(name,id,week_hour,total_hour,d1); 

 courses<

 } 

  courses.close(); } 

void input_num(int **num,int n,int m)  //教师对课程满意度输入 

{ fstream nums("d:

\\hope.txt",ios:

:

out);  

nums<

int nu,i,j,k;  

for(k=0;k

 nums<<"第"<

}

nums<

 for(i=0;i

 { nums<<"第"<

for(j=0;j

   cout<<"第"<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1