MFC之初*/!·#¥!

原创 2006年06月07日 13:14:00

       前段时间,下了点VC教程(主讲MFC加一点点API),决定在这学期把那些教程弄完,闲时,就看到了诸多人在漫骂微软用MFC来麻木程序员,使之只能停留在一个被禁锢的圈子里,不能长期进步下去,当然,之前在成都某书店里也看见了这样的文章,但久之就淡忘其影响了,就又开始弄了,不过又在网上看见了,仿佛加深了这种说法对我的影响,再加上一些惰性,停了下来,教程也放在那里吃着硬盘空间。
       现在也是很彷徨,但是,班主任叫把一个数据结构的内容放到面向对象的VC里面来弄一个程序出来,呵呵,没有理由不弄啊,呵呵,上课没听怎么懂,抄了个程序回来(没抄完),程序是用FLOYD算法求图中任意两点的最短路径,其中最短路径(长度)当然没问题(比较简单),但是,其路径,只抄了一点点,太复杂了。。。
     经过一阵子的思想暂停后,决定先不让我的程序显示路径,先只显示长度,不就行了啊,于是动工了!!
思考:因为城市之间的矩离得从文件读出,于是想出以下方案:
一、针对数据文件的录入:
                1.把书上的每个城市编上号,用一维数组存储城市间的距离(二维数组),
                2.为了能正确的读入数据,所以文件存储是:每个数据之后加‘*  ’以示 区别,
                3.本城市到本城市的长度为0,没有相邻的两个城市之间的距离初始值为1(因为1比32767容易输入)
                4.数据按第3步录入完毕之后,用WORD的替换功能,将’*1*’替换为’*32767’.
                5.进入数据检测阶段,作为一个写程序的人(而不敢说程序员,呵呵,还没考过呢),我当然没有一个一个去对照,而是采用程序检查的方法。使用双重循环检测点A。当i=j的时候,a[i][j]=0否则输出来以便更正。检测点B.a[i][j]==a[j][i]否则,输出以便更正。C,在整个程序中计数‘*’有多少个,若不为625,则更正。
                6.数据文件以“num.dat”存储起来。数据文件工作结束!(花了俺不少时间哦。。。)
二、程序阶段
         1.先选用读文件方法,我选用了最简单的顺序读入方法,代码如下
                Ch=fgetc(fp);
              While(ch!=EOF){
                Putchar(ch);
               Ch=fgetc(fp);}

         2.由于读入的是字符串,而计算中要求的是整型数字,因此,在读文件的操作中,得用一个字符数组保存读入的,至到读到一个‘*’的时候,在那个字符数组后面加‘/0’然后用函数int atoi(char *)把这个字符数组转成数据并存到相应的二维数组之中.
         3.在TC中调试通过FLOYD算法。


 准备工作已经差不多了。
        
进入VC调试阶段:
开始------>Microsoft Visual C++6.0--------->new------------->MFC AppWizard [exe]---->Shortpath---->....................
在一个对话框中加入两个COMBOX,一个是出发点,一个是目的点,去掉其排序属性,在其CONTENT按前面的编号依次输入城市
在此对话框中再加入一个EDITBOX,用来显示结果
CTRL+W为此对话框创建一个类,CCityDlg,再为其成员添加变量,两个COMBOX,为其添加变量的类型为int 型,而EDITBOX添加变量类型为Control。
在MENU里为其添加菜单,
回到对话框,双击OK,然后生成函数:
void CCityDlg::OnOK(){}
加入代码:
  UpdateData(TRUE);
    CString str,str0;
 str="从";
 int i= m_From;
 switch(i){
 case 0:str0=" 哈尔滨";break;
 case 1:str0="长春";break;
 case 2:str0="沈阳";break;
 case 3:str0="大连";break;
 case 4:str0="天津";break;
 case 5:str0="北京";break;
 case 6:str0="呼和浩特";break;
 case 7:str0="兰州";break;
 case 8:str0="乌鲁木齐";break;
 case 9:str0="西宁";break;
 case 10:str0="西安";break;
 case 11:str0="郑州";break;
 case 12:str0="徐州";break;
 case 13:str0="上海";break;
 case 14:str0="武汉";break;
 case 15:str0="成都";break;
 case 16:str0="昆明";break;
 case 17:str0="贵阳";break;
 case 18:str0="株州";break;
 case 19:str0="南昌";break;
 case 20:str0="福州";break;
 case 21:str0="深圳";break;
 case 22:str0="广州";break;
 case 23:str0="柳州";break;
 case 24:str0="南宁";break;
 case -1:MessageBox("请选择出发地!!");break;
 default:MessageBox("please input right!!");break;
 }
 str+=str0;
 str+="到";
 int j= m_To;
    switch(j){
 case 0:str0=" 哈尔滨";break;
 case 1:str0="长春";break;
 case 2:str0="沈阳";break;
 case 3:str0="大连";break;
 case 4:str0="天津";break;
 case 5:str0="北京";break;
 case 6:str0="呼和浩特";break;
 case 7:str0="兰州";break;
 case 8:str0="乌鲁木齐";break;
 case 9:str0="西宁";break;
 case 10:str0="西安";break;
 case 11:str0="郑州";break;
 case 12:str0="徐州";break;
 case 13:str0="上海";break;
 case 14:str0="武汉";break;
 case 15:str0="成都";break;
 case 16:str0="昆明";break;
 case 17:str0="贵阳";break;
 case 18:str0="株州";break;
 case 19:str0="南昌";break;
 case 20:str0="福州";break;
 case 21:str0="深圳";break;
 case 22:str0="广州";break;
 case 23:str0="柳州";break;
 case 24:str0="南宁";break;
 case -1:MessageBox("请选择目的地!!");break;
 default:MessageBox("please input right!!");break;
 }
 str+=str0;
 int len=ShortPpath(i,j);
 CString str2;
 str2.Format("%d",len);
 str+="的最短路径是:";
 str+=str2;
 m_Show.SetWindowText(str);
然后把先前准备的文件中的函数粘过来
#define MAXV 25
void floyd(int cost[][MAXV],int n,int a[MAXV][MAXV]){
 int i,j,k;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   a[i][j]=cost[i][j];
 for(k=0;k<n;k++)
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
    if(a[i][j]>a[i][k]+a[k][j]){
     a[i][j]=a[i][k]+a[k][j];

    }
}
int ShortPpath(int m,int n){
 FILE *fp=new FILE;
    char ch,s[128];
 int a[MAXV*MAXV],b[MAXV][MAXV],i,j,k,flag=0,c[MAXV][MAXV];
 if((fp=fopen("num.dat","r"))==NULL){
        AfxMessageBox("不能打开数据文件num.dat");
        exit(0);
    }
    else {
        i=0;
        j=0;
        ch=fgetc(fp);
        while(ch!=EOF){
       if(ch!='*')
       {
        s[i]=ch;
        i++;
       }
       else {
         s[i]='/0';
         i=0;
         a[j]=atoi(s);  //把从数据文件中读入的数据分别存储到一个数组中

        j++;
        }
         ch=fgetc(fp);
        }
    }
    fclose(fp);
    j=0;i=0;k=0;
    while(j<MAXV){     //把一维数组转存为二维数组
       b[j][i]=a[k];
       k++;
       if(i+1==MAXV) j++;
           i=(i+1)%MAXV;
       }
 floyd(b,MAXV,c);
 return c[m][n];
     //数组C中保存的是最短路径  */
}
到了这里,我们就得CTRL+F5  
调用对话框,在COMBOX1里面选择哈尔滨,在第二个里面选择长春,点击OK,于是EDITBOX里显示” 从 哈尔滨到长春的最短路径是:242”


呵呵,昨天晚上写到了2点,呵呵,今天中午还有点余兴,于是写了这个实验清单,还是比较HAPPY的
  

 

$$$$$$ 利用WSH实现关闭计算机功能 ¥¥¥¥¥¥¥¥¥

利用WSH实现关闭计算机功能利用WSH实现关闭计算机功能,其实很简单,采用下面的语句即可。把下面的语句保存为test.vbs,然后运行,就可以看到效果。Set objshell = wscript...
  • hejishan
  • hejishan
  • 2008年03月11日 12:25
  • 222

创业之初一般是怎么死的?写的非常好。。。。。

转自: http://xueyuan.cyzone.cn/gushi-ganwu/239865.html 我自己年轻的时候也创过业,条件很好,最后也失败了,后来做投资,看到...
  • ljz2009y
  • ljz2009y
  • 2013年03月06日 22:45
  • 1315

创业就像过河(献给那些想过河和正在过河的朋友们)

 看过N多创业公司的故事,结合自己的亲身体会,特写此文。创业过程特像过河的过程,我们小时候都有过河亲身体会,那今天就用此例来做个创业场景:一个河床,一帮人,一条河,下面将一帮人先分类:《1》建桥人,这...
  • changemyself
  • changemyself
  • 2009年12月14日 13:41
  • 3404

MFC学习之初体验

    学习MFC是从昨天晚上开始的,刚开始时我读的是《深入浅出MFC》,读了几篇,感觉上它讲的有那么一点太本质了。但是我还是从它那里获得了一个总体的认识。   当我看到了更多的MFC文章时,我真的想...
  • kevinlynx
  • kevinlynx
  • 2006年03月08日 13:04
  • 1421

创业之初你真的需要建立自己的网站吗?

怀着满腔的热情和计划已久的梦想,开始了充满激情和坎坷的创业之路,注册了公司建立了网站就这么开始了。也许很多企业就是这么兴致勃勃诞生的。曾几何时建立公司官网成为了公司必须,又是曾几何时我们的生意已经离不...
  • davade2046
  • davade2046
  • 2015年06月24日 10:07
  • 241

mybatis中的两种传参方式#{}和¥{}原理

之前没注意,最近公司测试提了个bug, 问题:输入框中输入单引号会报错, 原因:单引号截断了sql 总结:#{}速度快,能防止sql注入,是占位符方式,先预编译,然后填充参数,字符串格式,相当于...
  • Caide3
  • Caide3
  • 2017年08月28日 14:38
  • 284

mybatis中#和¥的区别

#相当于对数据 加上 双引号,$相当于直接显示数据   1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111...
  • jiongyi1
  • jiongyi1
  • 2015年08月01日 09:20
  • 1972

Qt UI 布局

关于UI 的一些小布局: #include "QGridLayout" #include "QHBoxLayout" QGridLayout *gridLayout = new QGrid...
  • cat8812
  • cat8812
  • 2016年01月12日 11:11
  • 850

¥%……&&

说好7月份出差的,爷爷的,又没音了,真是,姐姐我就等着这次出差能每天还有50的补贴呢,哎。。。真是人穷志短啊...
  • haishi12345
  • haishi12345
  • 2010年07月05日 13:40
  • 167

不要钱做实习程序员·!%¥!·#%#¥%#·……%#¥……

  姓名  王磊 ...
  • bohaijiyu1
  • bohaijiyu1
  • 2007年09月18日 10:04
  • 208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC之初*/!·#¥!
举报原因:
原因补充:

(最多只允许输入30个字)