📄 匈牙利法解分派问题dlg.cpp
字号:
strcat(num,"->第");
itoa(quan[i]+1,num1,10);
strcat(num,num1);
strcat(num,"人");
m_ListCtrl.SetItemText(i,quan[i]+1,num);
// }
}
show_select=false;
}
else {
p->SetWindowText("显示选择(&S)");
m_ListCtrl.DeleteAllItems();
for(int i=0;i<N;i++){
// sfile>>data;
char strdata[35];
//c[i][0]=a[i][0]=data;
char title[20];
strcpy(title,"任务");
char num[4];
itoa(i+1,num,10);strcat(title,num);
m_ListCtrl.InsertItem(i,title);
strcpy(strdata,"┋ ");
if(quan[i]==0) strcat(strdata,"*");
else strcat(strdata," ");
char strdata1[30];
gcvt(c[i][0],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,1,strdata);
for(int j=1;j<N;j++){
//sfile>>data;
//c[i][j]=a[i][j]=data;
strcpy(strdata,"┋ ");
if(quan[i]==j) strcat(strdata,"*");
else strcat(strdata," ");
char strdata1[30];
gcvt(c[i][j],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,j+1,strdata);
}
}
for(i=0;i<N+1;i++)
m_ListCtrl.SetColumnWidth(i,100);
show_select=true;
}
}
UpdateData(false);
}
void CMyDlg::OnCancel()
{
// TODO: Add extra cleanup here
for(int i=0;i<N;i++) {
delete[] a[i];
delete[] b[i];
delete[] c[i];}
delete[] zero_num;
delete[] quan;
delete[] h;
delete[] l;
delete[] h1;
delete[] l1;
delete []a;
delete []b;
delete []c;
CDialog::OnCancel();
}
void CMyDlg::Onfileload()
{
word=0;
// TODO: Add your control notification handler code here
fileload dlg;
dlg.m_static=".dat";
if(dlg.DoModal()==IDOK){/////==IDOK)
strcpy(newfilename,dlg.m_filename);
strcat(newfilename,".dat");
if(strcmp(filename,newfilename)!=0) {
m_sum=0;
calc=false;
strcpy(filename,newfilename);
for(int i=0;i<N;i++) {
delete[] a[i];
delete[] b[i];
delete[] c[i];
}
delete[] zero_num;
delete[] quan;
delete[] h;
delete[] l;
delete[] h1;
delete[] l1;
delete []a;
delete []b;
delete []c;
for( i=0;i<m_ListCtrl.GetItemCount()+1;i++)
m_ListCtrl.DeleteColumn(0);
m_ListCtrl.DeleteAllItems();
ifstream sfile(filename);
sfile>>N;
for( i=0;i<N;i++) a=new float* [N];
for(int j=0;j<N;j++) a[j]=new float [N];
for(i=0;i<N;i++) b=new float* [N];
for( j=0;j<N;j++) b[j]=new float [N];
for( i=0;i<N;i++) c=new float* [N];
for( j=0;j<N;j++) c[j]=new float [N];
for(i=0;i<N;i++){
zero_num=new int [N];
quan=new int [N];
h=new int [N];
l=new int [N];
h1=new int [N];
l1=new int [N];
}
float data;
for(i=0;i<N;i++)
for(int j=0;j<N;j++) {
sfile>>data;
c[i][j]=a[i][j]=data;
}
for(i=0;i<N+1;i++){
char title[10];
if(i==0)strcpy(title,"菜单");
else {
strcpy(title,"第");
char num[4];
itoa(i,num,10);
strcat(title,num);
strcat(title,"人");
}
lvColumn.iSubItem=i;
lvColumn.pszText=title;
m_ListCtrl.InsertColumn(i,&lvColumn);
}
char strdata[35];
for(i=0;i<N;i++){
// sfile>>data;
//c[i][0]=a[i][0]=data;
char title[20];
strcpy(title,"任务");
char num[4];
itoa(i+1,num,10);strcat(title,num);
m_ListCtrl.InsertItem(i,title);
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,1,strdata);
for(int j=1;j<N;j++){
//sfile>>data;
//c[i][j]=a[i][j]=data;
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,j+1,strdata);
}
}
for(i=0;i<N+1;i++)
m_ListCtrl.SetColumnWidth(i,100);
sfile.close();
}
}
UpdateData(false);
}
void CMyDlg::Onxieziban()
{
// TODO: Add your control notification handler code here
xiezibanload dlg;
if(dlg.DoModal()==IDOK){
m_sum=0;
calc=false;
for(int i=0;i<m_ListCtrl.GetItemCount()+1;i++)
m_ListCtrl.DeleteColumn(0);
m_ListCtrl.DeleteAllItems();
int max=dlg.m_hang>dlg.m_lie?dlg.m_hang:dlg.m_lie;
ofstream ofile(filename);
ofile<<max<<endl<<dlg.m_data<<endl;
ofile.close();
for(i=0;i<N;i++) {
delete[] a[i];
delete[] b[i];
delete[] c[i];}
delete[] zero_num;
delete[] quan;
delete[] h;
delete[] l;
delete[] h1;
delete[] l1;
delete []a;
delete []b;
delete []c;
N=max;
for(i=0;i<N;i++) a=new float* [N];
for(int j=0;j<N;j++) a[j]=new float [N];
for(i=0;i<N;i++) b=new float* [N];
for( j=0;j<N;j++) b[j]=new float [N];
for( i=0;i<N;i++) c=new float* [N];
for( j=0;j<N;j++) c[j]=new float [N];
for(i=0;i<N;i++){
zero_num=new int [N];
quan=new int [N];
h=new int [N];
l=new int [N];
h1=new int [N];
l1=new int [N];
}
for(i=0;i<N+1;i++){
char title[10];
if(i==0)strcpy(title,"菜单");
else {
strcpy(title,"第");
char num[4];
itoa(i,num,10);
strcat(title,num);
strcat(title,"人");
}
lvColumn.iSubItem=i;
lvColumn.pszText=title;
m_ListCtrl.InsertColumn(i,&lvColumn);
}
ifstream sfile(filename);
sfile>>max;
float data;
if(dlg.m_hang>=dlg.m_lie){
for(i=0;i<N;i++)
for(int j=0;j<dlg.m_lie;j++) {
sfile>>data;
c[i][j]=a[i][j]=data;
for(int k=dlg.m_lie;k<N;k++) c[i][k]=a[i][k]=0;
}
}
else {
for(i=0;i<dlg.m_hang;i++)
for(int j=0;j<dlg.m_lie;j++) {
sfile>>data;
c[i][j]=a[i][j]=data;
}
for(;i<N;i++)
for(int j=0;j<N;j++) c[i][j]=a[i][j]=0;
}
char strdata[35];
for(i=0;i<N;i++){
// sfile>>data;
//c[i][0]=a[i][0]=data;
char title[20];
strcpy(title,"任务");
char num[4];
itoa(i+1,num,10);strcat(title,num);
m_ListCtrl.InsertItem(i,title);
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,1,strdata);
for(int j=1;j<N;j++){
//sfile>>data;
//c[i][j]=a[i][j]=data;
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,j+1,strdata);
}
}
for(i=0;i<N+1;i++)
m_ListCtrl.SetColumnWidth(i,100);
sfile.close();
ofstream ofile1(filename);
ofile1<<N<<endl;
for(i=0;i<N;i++)
{
for(int k=0;k<N;k++)
ofile1<<c[i][k]<<" ";
ofile1<<endl;
}
ofile1.close();
}
UpdateData(false);
}
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CMyDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
for(int i=0;i<m_ListCtrl.GetItemCount();i++){
if(m_ListCtrl.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
{ select_num=i;
select dlg;
if(dlg.DoModal()==IDOK)
{
if(dlg.m_method==0)
{
bytext dlg1;
for(int j=0;j<N; j++)
{
char num[10];
double data=c[i][j];
gcvt(data,5,num);
dlg1.m_task+=num;
dlg1.m_task+=" ";
}
char edit[5000];
strcpy(edit,dlg1.m_task);
if(dlg1.DoModal()==IDOK)
{
if(strcmp(dlg1.m_task,edit)!=0){
calc=false;
ofstream ofile(filename);
ofile<<N<<endl;
for(int i=0;i<N;i++)
{
if(i!=select_num)
{
for(int k=0;k<N;k++)
ofile<<c[i][k]<<" ";
ofile<<endl;
}
else
ofile<<dlg1.m_task<<endl;
}
ofile.close();
ifstream sfile(filename);
sfile>>N;
for(i=0;i<N;i++)
for(int j=0;j<N;j++)
{sfile>>a[i][j];
c[i][j]=a[i][j];
}
sfile.close();
m_ListCtrl.DeleteAllItems();
char strdata[35];
for(i=0;i<N;i++){
// sfile>>data;
//c[i][0]=a[i][0]=data;
char title[20];
strcpy(title,"任务");
char num[10];
itoa(i+1,num,10);strcat(title,num);
m_ListCtrl.InsertItem(i,title);
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,1,strdata);
for(int j=1;j<N;j++){
//sfile>>data;
//c[i][j]=a[i][j]=data;
strcpy(strdata,"┋ ");
char strdata1[30];
gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
m_ListCtrl.SetItemText(i,j+1,strdata);
}
}
}
}
}
else
{
change_data=new char* [N];
for(int k=0;k<N;k++)
change_data[k]=new char [10];
bylist dlg2;
if(dlg2.DoModal()==IDOK){
if(changed==true){
calc=false;
for(int j=0;j<N;j++){
char changedata1[10];
strcpy(changedata1,"┋ ");
strcat(changedata1,change_data[j]);
m_ListCtrl.SetItemText(select_num,j+1,changedata1);
}
}
}
for(k=0;k<N;k++) delete []change_data[k];
delete [] change_data;
}
}
}
}
UpdateData(false);
*pResult = 0;
}
void CMyDlg::OnHelp()
{
// TODO: Add your control notification handler code here
help dlg;
dlg.m_contest+=" \t 本程序由matrix制作完成!!! \t\t 〖使用帮助〗\t\t\t\t\t①本程序用于分派问题最优化规划的解决。\t\t②可采用从外部文件中的数据加载到程序中,亦可自己书写写字板加载到程序中!@\t\t\t③如若想对数据进行修改只需双击要修改数据所在的行,然后根据需要可选择文本方式修改或列表方式修改。\t\t\t\t\t(文本方式主要用于对某一行数据的集体修改;列表方式是对某一行的某一个数据进行单个修改,同样只需双击即可修改其值)。\t\t\t\t\t翻版必究!谢谢";
dlg.DoModal();
}
void CMyDlg::OnSet()
{UpdateData();
// TODO: Add your control notification handler code here
for(int i=0;i<m_ListCtrl.GetItemCount()+1;i++) m_ListCtrl.SetColumnWidth(i,m_width);
UpdateData(false);
}
void CMyDlg::OnWord()
{
word=1;
// TODO: Add your control notification handler code here
fileload dlg;
dlg.m_static=".doc";
if(dlg.DoModal()==IDOK){
strcpy(newfilename,dlg.m_filename);
strcat(newfilename,".doc");
ofstream ofile(newfilename);
for(int i=0;i<N;i++){
for(int j=0;j<N-1;j++)
ofile<<c[i][j]<<"\t";
ofile<<c[i][j]<<endl;
}
ofile.close();
AfxMessageBox("导出Word中成功!!!",MB_ICONINFORMATION);
}
}
void CMyDlg::Onexcel()
{
// TODO: Add your control notification handler code here
word=2;
// TODO: Add your control notification handler code here
fileload dlg;
dlg.m_static=".xls";
if(dlg.DoModal()==IDOK){
strcpy(newfilename,dlg.m_filename);
strcat(newfilename,".xls");
ofstream ofile(newfilename);
for(int i=0;i<N;i++){
for(int j=0;j<N-1;j++)
ofile<<c[i][j]<<"\t";
ofile<<c[i][j]<<endl;
}
ofile.close();
AfxMessageBox("导出到Excel中成功!!!",MB_ICONINFORMATION);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -