⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addactivityform.cpp

📁 基于遗传算法的排课软件源码 根据需要安排合理的课程时间等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	activityChanged();}void AddActivityForm::activityChanged(){	QString s;	s+=QObject::tr("Current activity:");s+="\n";	for(uint i=0; i<selectedTeachersListBox->count(); i++){		s+=QObject::tr(QString("Teacher=%1").arg(selectedTeachersListBox->text(i)));		s+="\n";	}	s+=QObject::tr(QString("Subject=%1").arg(subjectsComboBox->currentText()));	s+="\n";	if(subjectTagsComboBox->currentText()!=""){		s+=QObject::tr(QString("Subject tag=%1").arg(subjectTagsComboBox->currentText()));		s+="\n";	}	for(uint i=0; i<selectedStudentsListBox->count(); i++){		s+=QObject::tr(QString("Students=%1").arg(selectedStudentsListBox->text(i)));		s+="\n";	}	if(splitSpinBox->value()==1){		s+=QObject::tr(QString("Duration=%1").arg(dur(0)->value()));		s+="\n";		if(par(0)->isChecked()){			s+=QObject::tr("Bi-weekly activity");			s+="\n";		}		if(prefDay(0)->currentItem()>0){			s+=QObject::tr("Preferred day=%1").arg(prefDay(0)->currentText());			s+="\n";		}		if(prefHour(0)->currentItem()>0){			s+=QObject::tr("Preferred hour=%1").arg(prefHour(0)->currentText());			s+="\n";		}		if(activ(0)->isChecked()){			s+=QObject::tr("Active activity");			s+="\n";		}		else{			s+=QObject::tr("Non-active activity");			s+="\n";		}	}	else{		s+=QObject::tr("This activity will be split into %1 lessons per week").arg(splitSpinBox->value());		s+="\n";		if(minDayDistanceSpinBox->value()>0){			s+=QObject::tr("The distance between any pair of subactivities must be at least %1 days").arg(minDayDistanceSpinBox->value());			s+="\n";		}		s+="\n";		for(int i=0; i<splitSpinBox->value(); i++){			s+=QObject::tr("Componenent %1:").arg(i+1);			s+="\n";			s+=QObject::tr(QString("Duration=%1").arg(dur(i)->value()));			s+="\n";			if(par(i)->isChecked()){				s+=QObject::tr("Bi-weekly activity");				s+="\n";			}			if(prefDay(i)->currentItem()>0){				s+=QObject::tr("Preferred day=%1").arg(prefDay(i)->currentText());				s+="\n";			}			if(prefHour(i)->currentItem()>0){				s+=QObject::tr("Preferred hour=%1").arg(prefHour(i)->currentText());				s+="\n";			}			if(activ(i)->isChecked()){				s+=QObject::tr("Active activity");				s+="\n";			}			else{				s+=QObject::tr("Non-active activity");				s+="\n";			}			s+="\n";		}	}	currentActivityTextEdit->setText(s);}void AddActivityForm::addActivity(){	//teachers	QStringList teachers_names;	if(selectedTeachersListBox->count()<=0){		QMessageBox::warning(this, QObject::tr("FET information"),			QObject::tr("Invalid teacher(s)"));		return;	}	else if(selectedTeachersListBox->count()>(uint)(MAX_TEACHERS_PER_ACTIVITY)){		QMessageBox::warning(this, QObject::tr("FET information"),			QObject::tr("Too many teachers for an activity. The current maximum is %1.\n"			"If you really need more teachers per activity, please talk to the author").			arg(MAX_TEACHERS_PER_ACTIVITY));		return;	}	else{		for(uint i=0; i<selectedTeachersListBox->count(); i++){			assert(gt.rules.searchTeacher(selectedTeachersListBox->text(i))>=0);			teachers_names.append(selectedTeachersListBox->text(i));		}	}	//subject	QString subject_name=subjectsComboBox->currentText();	int subject_index=gt.rules.searchSubject(subject_name);	if(subject_index<0){		QMessageBox::warning(this, QObject::tr("FET information"),			QObject::tr("Invalid subject"));		return;	}	//subject tag	QString subject_tag_name=subjectTagsComboBox->currentText();	int subject_tag_index=gt.rules.searchSubjectTag(subject_tag_name);	if(subject_tag_index<0 && subject_tag_name!=""){		QMessageBox::warning(this, QObject::tr("FET information"),			QObject::tr("Invalid subject tag"));		return;	}	//students	QStringList students_names;	if(selectedStudentsListBox->count()<=0){		QMessageBox::warning(this, QObject::tr("FET information"),			QObject::tr("Invalid students set(s)"));		return;	}	else{		for(uint i=0; i<selectedStudentsListBox->count(); i++){			assert(gt.rules.searchStudentsSet(selectedStudentsListBox->text(i))!=NULL);			students_names.append(selectedStudentsListBox->text(i));		}	}	if(splitSpinBox->value()==1){ //indivisible activity		int duration=duration1SpinBox->value();		if(duration<0){			QMessageBox::warning(this, QObject::tr("FET information"),				QObject::tr("Invalid duration"));			return;		}		int parity=PARITY_WEEKLY;		if(parity1CheckBox->isChecked())			parity=PARITY_BIWEEKLY;		int preferred_day=preferredDay1ComboBox->currentItem()-1;		if(preferred_day<-1 || preferred_day>=gt.rules.nDaysPerWeek){			QMessageBox::warning(this, QObject::tr("FET information"),				QObject::tr("Invalid preferred day"));			return;		}		int preferred_hour=preferredHour1ComboBox->currentItem()-1;		if(preferred_hour<-1 || preferred_hour>=gt.rules.nHoursPerDay){			QMessageBox::warning(this, QObject::tr("FET information"),				QObject::tr("Invalid preferred hour"));			return;		}		bool active=false;		if(active1CheckBox->isChecked())			active=true;		int activityid=0; //We set the id of this newly added activity = (the largest existing id + 1)		for(Activity* act=gt.rules.activitiesList.first(); act; act=gt.rules.activitiesList.next())			if(act->id > activityid)				activityid = act->id;		activityid++;		Activity a(gt.rules, activityid, 0, teachers_names, subject_name, subject_tag_name, students_names,			duration, duration, parity, active);		bool already_existing=false;		for(Activity* act=gt.rules.activitiesList.first(); act; act=gt.rules.activitiesList.next())			if((*act)==a)				already_existing=true;		if(already_existing){			int t=QMessageBox::question(this, QObject::tr("FET question"), 				QObject::tr("This activity already exists. Insert it again?"),				QObject::tr("Yes"),QObject::tr("No"));			assert(t==0 || t==1);			if(t==1) //no pressed				return;		}		bool tmp=gt.rules.addSimpleActivity(activityid, 0, teachers_names, subject_name, subject_tag_name,			students_names,	duration, duration, parity, active, preferred_day, preferred_hour);		if(tmp)			QMessageBox::information(this, QObject::tr("FET information"), QObject::tr("Activity added"));		else			QMessageBox::critical(this, QObject::tr("FET information"), QObject::tr("Activity NOT added - please report error"));	}	else{ //split activity		int totalduration;		int durations[8];		int parities[8];		int preferred_days[8];		int preferred_hours[8];		bool active[8];		int nsplit=splitSpinBox->value();		totalduration=0;		for(int i=0; i<nsplit; i++){			durations[i]=dur(i)->value();			parities[i]=PARITY_WEEKLY;			if(par(i)->isChecked())				parities[i]=PARITY_BIWEEKLY;			active[i]=false;			if(activ(i)->isChecked())				active[i]=true;			preferred_days[i]=prefDay(i)->currentItem()-1;			preferred_hours[i]=prefHour(i)->currentItem()-1;			totalduration+=durations[i];		}		//the group id of this split activity and the id of the first partial activity		//it is the maximum already existing id + 1		int firstactivityid=0;		for(Activity* act=gt.rules.activitiesList.first(); act; act=gt.rules.activitiesList.next())			if(act->id > firstactivityid)				firstactivityid = act->id;		firstactivityid++;		int minD=minDayDistanceSpinBox->value();		bool tmp=gt.rules.addSplitActivity(firstactivityid, firstactivityid,			teachers_names, subject_name, subject_tag_name, students_names,			nsplit, totalduration, durations,			parities, active, minD, preferred_days, preferred_hours);		if(tmp)			QMessageBox::information(this, QObject::tr("FET information"), QObject::tr("Split activity added"));		else			QMessageBox::critical(this, QObject::tr("FET information"), QObject::tr("Split activity NOT added - error???"));	}}void AddActivityForm::clearTeachers(){	selectedTeachersListBox->clear();	activityChanged();}void AddActivityForm::clearStudents(){	selectedStudentsListBox->clear();	activityChanged();}#undef prefDay#undef prefHour#undef subTab#undef activ

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -