『壹』 vc++6.0操作方法
VC++6.0上機操作指南
貴州大學計算機科學與技術學院
張志明
2006年9月
目錄
1. Visual C++ 控制台應用程序上機實現步驟
2. MFC對話框應用程序實現舉例
3. MFC單文檔應用程序實現舉例
4. 用32位調試程序了解類和對象的內存映象
1. Visual C++控制台應用程序(Win32 Console Application Project)
上機實現步驟
一. 單文件程序的實現
本教材中的程序在Visual C++環境下都是以Win32 Console Application 項目實現,而且都是單文件程序,即只含有一個源程序(.cpp)文件的C++程序。
一個單文件程序在Visual C++ IDE中的實現主要步驟是:(1)建立新項目(2)建立新文件(3)輸入源代碼(4)編譯、連接,生成可執行程序文件。以上步驟均可在Visual C++的Wizard指導下通過對話框交互輸入完成。
1. 建立新項目:
每個C++程序的實現都要建立一個項目。所謂項目是一個文件生成過程的管理單位,項目名稱就是最後實現的可執行文件的名稱,一個項目就是與生成這個可執行程序文件相關的所有源文件和中間文件的集合,存放在以項目名稱命名的文件夾中。
圖1 Microsoft Visual C++ 6.0系統初始界面
執行菜單命令File>New,打開New對話框:
圖2 打開New對話框
在New對話框的Project選項卡中選擇Win32 Console Application選項,然後輸入項目存放位置項目名稱後確定。
圖3 輸入項目位置和名稱
在Win32 ConsoleApplication-Step 1 of 1對話框中選擇An empty project,完成後返回。系統彈出新建項目信息報告對話框。
圖4 Win32 ConsoleApplication-Step 1 of 1對話框
圖5 新建項目信息報告
2. 建立新文件:
再一次執行菜單命令File>New,打開New對話框,在File選項卡中選擇C++ Sourse File選項,然後輸入源程序文件名。完成後系統打開源程序(.cpp)文件編輯窗口。
圖6 在New對話框輸入源程序文件名
3. 輸入源代碼:
此時即可在源程序(.cpp)文件編輯窗口輸入源程序代碼。
圖7 源程序(.cpp)文件編輯窗口
4. 生成和運行可執行程序文件:
11從源程序文件生成可執行文件,需要經歷編譯,連接兩步,在VC++6.0編程環境中可以有以下幾種操作方式:
(1)打開Build (編譯)菜單,先執行Compile命令,接著再執行Build命令。
(2)打開Build (編譯)菜單,執行Rebuilde All命令。
(3)打開Build (編譯)菜單,直接發出Execute 執行命令,一次性完成編譯、連接和啟動程序執行的任務。
(4)直接單擊「!」(BuildExecute)命令按鈕,一次性完成編譯、連接和啟動程序執行的任務。
圖8 Build (編譯)菜單
圖9 程序運行結果
打開工程文件夾可以找到該工程的所有工作文件。
打開工程文件夾中的Debug子文件夾,可以找到生成的可執行(.exe)文件。
二. 多文件程序的實現
一個較大型C++程序,有時需要包含多個源程序文件。一種常見的情況是將類的定義放在頭(.h)文件中,將類的實現或對類的訪問放在源(.cpp)文件中。
多文件程序的實現與單文件程序的實現方式需要經歷同樣的步驟,不同的是,在編譯之前需要利用新建文件對話框逐一將所有需要的文件追加到項目中。
1. 建立新項目:
2. 建立新文件:
(1)加入和編輯頭文件:
在New對話框,在File選項卡中選擇C/C++ Header File選項,然後輸入頭文件名。完成後系統將打開源程序(.h)文件編輯窗口。
(2)加入和編輯源程序文件
打開New對話框,在File選項卡中選擇C++ Sourse File選項,然後輸入源程序文件名。完成後系統打開源程序(.cpp)文件編輯窗口。
注意:在源程序文件中應該用文件包含命令將頭文件包含進來。如下例源程序文件s719.cpp的第一行:#include"h719.h"
3. 生成和運行可執行程序文件:
步驟同單文件程序的生成和執行。
#
2.MFC對話框應用程序實現舉例
本指導書給出3個MFC對話框應用程序的實現實例,例1為求三科平均成績的簡單程序,例2為實現一個具有四則運算功能的簡單計算器,例3為一個彩票機程序(提供手動搖號和自動搖號兩個彩票機程序版本)。
通過這些程序可以達到以下目的:
掌握AppWizard的使用方法。
掌握Workshop中各種視圖的使用和在不同視圖之間切換的方法。
學會利用控制項工具箱中的控制項定製對話框界面。
學會控制項變數及其他類成員變數的設置。
學會消息映射的概念和操作方法。
學會查看和編輯代碼。
學習編譯、運行和調試對話框應用程序。
例1.實現一個求三科平均成績的MFC對話框應用程序。假設運行時的界面如下:
實現步驟:
1. 在Visual C++ 6.0工作開發環境中,New對話框中選擇MFC AppWizard [exe]項目,輸入項目名稱並指定存放位置。
2. 在MFC Wizard Step1選擇Dialog(基本對話)程序類型,在MFC Wizard Step2中輸入對話框標題「求平均成績」。
AppWizard對話結束後打開對話框編輯窗口如下:
3. 定製界面:添加控制項、設置屬性
刪除對話框模板中原有的「確定」按鈕和內容為「TODO: 在這里設置對話控制。」的Static Text控制項。
在控制項工具箱中取一個Group Box控制項,調整適當大小,滑鼠右鍵單擊該控制項邊框,在彈出的下拉菜單中打開屬性對話框。將Group Box控制項標題由「Static」改為「求平均分」。
在Group Box中添加4個Static Text控制項,按同樣方法修改它們的標題屬性為「成績1」、「成績2」、「成績3」和「平均分」。
在Group Box中添加4個Edit Box控制項,打開屬性對話框的Extended Styles選項卡中將它們設置為文本右對齊(Right Aligend Text)方式。其中第4 個Edit Box控制項的Styles屬性設置為Read-only。
在Group Box中添加一個按鈕Button1,打開屬性對話框將按鈕的標題屬性改為 「計算平均分」。
滑鼠右鍵單擊「取消」按鈕邊框,在彈出的下拉菜單中打開屬性對話框。將按鈕標題改為「退出」。
設計完成的界面如圖,其中控制項屬性列表如下:
控制項
ID號
標題
屬性
Group Box
IDC_STATIC
求平均分
Static Text
IDC_STATIC
成績1
Static Text
IDC_STATIC
成績2
Static Text
IDC_STATIC
成績3
Static Text
IDC_STATIC
平均分
Edit Box
IDC_EDIT1
Align text:Right
Edit Box
IDC_EDIT2
Align text:Right
Edit Box
IDC_EDIT3
Align text:Right
Edit Box
IDC_EDIT4
Align text:Right;Read-only
Button
IDC_BUTTON1
計算平均分
Button
IDCANCEL
退出
4. 添加成員變數
單擊View(查看)>ClassWizard(建立類向導)菜單進入ClassWizard,打開Member Variables選項卡:為4 個Edit Box控制項設置對應的變數:
同樣的方法為其它3個Edit Box控制項設置變數:
控制項ID
變數名
變數類型
數值范圍
IDC_EDIT1
m_S1
int
0~100
IDC_EDIT2
m_S2
int
0~100
IDC_EDIT3
m_S3
int
0~100
IDC_EDIT4
m_Sav
CString
5. 添加消息映射(兩條消息)
進入ClassWizard,打開Messages Maps選項卡,在Object Ids中選擇CAverageDlg,在Messages中滑鼠單擊WM_INIDIALOG,在Member functions中出現生成的消息映射成員函數OnInitDialog提示:
在Object Ids中選擇IDC_BUTTON1,在Messages中滑鼠單擊BN_CLIKED,在彈出對話框中單擊OK按鈕:在Member functions中出現第二個生成的消息映射成員函數OnButton1。
6. 添加代碼
在ClassWizard中雙擊OnInitDialog函數,打開代碼編輯器中的OnInitDialog()函數代碼,找到其中的 // TODO: Add extra initialization here,加入下面的黑體字給出的3行代碼:
BOOL CDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
…;
// TODO: Add extra initialization here
m_Sav="0.00";
m_S1=m_S2=m_S3;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
在ClassWizard中雙擊OnButton1()函數,打開代碼編輯器中的OnButton1()函數代碼,找到其中的 // TODO: Add extra initialization here,加入下面的黑體字給出的4行代碼:
void CDlgDlg::OnButton1()
{
// TODO: Add extra initialization here
UpdateData();
double ave=(double)(m_S1+m_S2+m_S3)/3.0;
m_Sav.Format("%6.2f",ave);
UpdateData(FALSE);
}
7. 編譯運行程序:
注釋:
UpdateData()函數的作用是允許更新控制項變數,
UpdateData(FALSE) 禁止更新控制項變數的值。
例2.設計MFC對話框應用程序,實現一個具有四則運算功能的簡單計算器。
1. 新建項目:
2. 定製界面:
(1) 修改MFC AppWizard自動創建的對話框項目模板。刪除模板上自動創建的三個控制項。
(2) 加入「簡單計算器」、「請輸入數據:」、「結果」三個靜態文本框和相應的3個編輯框。
(3) 加入一個Group Box,標題修改為「請選擇運算符:」,並在其中放入4個Radio Button將標題分別改為「+」、「-」、「*」、「/」。
(4) 繼續用滑鼠從工具箱中向對話框添加和3個按鈕控制項,更改按鈕的標題為「計算」、「清除」、「關閉」。
3. 添加變數
本例中用到以下4個CSimpleCalcDlg類的成員變數:
變數類型
名稱
float
m_N1
float
m_N2
float
m_ Result
char
Operator
用ClassWizard為編輯框添加變數:m_N1, m_N2, m_Result
變數char Operator的添加方法:
在WorkSpace中進入ClassView視圖, 滑鼠右鍵單擊CSimpleCalcDlg, 在菜單中選擇「Add Member Variable…」
然後在彈出的對話框的輸入變數類型和名稱:
4. 添加消息映射
用ClassWizard為按鈕控制項添加消息映射:
繼續用ClassWizard為Radio Button控制項添加消息映射:
5. 加入單擊按鈕時的事件響應代碼
在實現文件(cpp文件)中加入單擊按鈕時的事件響應代碼。(雙擊一個按鈕可直接進入函數編輯)
//選擇運算符
void CSimpleCalcDlg::OnRadio1()
{ Operator='+'; }
void CSimpleCalcDlg::OnRadio2()
{ Operator='-'; }
void CSimpleCalcDlg::OnRadio3()
{ Operator='*'; }
void CSimpleCalcDlg::OnRadio4()
{ Operator='/'; }
//計算
void CSimpleCalcDlg::OnButton1()
{
UpdateData();
switch(Operator)
{
case '+':
m_Result=m_N1+m_N2;
break;
case '-':
m_Result=m_N1-m_N2;
break;
case '*':
m_Result=m_N1*m_N2;
break;
case '/':
if(m_N2 == 0 )
MessageBox("除數不能為零!");
else
{
m_Result = m_N1/m_N2;
break;
}
default:
m_Result=m_N1+m_N2;
}
UpdateData(FALSE);
}
//清除
void CSimpleCalcDlg::OnButton2()
{
UpdateData();
m_N1=0;
m_N2=0;
m_Result=0;
UpdateData(FALSE);
}
//關閉
void CSimpleCalcDlg::OnButton3()
{ CDialog::OnOK(); }
6. 編譯運行程序
例3. 彩票機程序:
本例給出手動搖號和自動搖號兩個彩票機程序版本。
1. 彩票機界面:
定製含有7個Edit Box 、1個Progress(進度條)和3偵探按鈕控制項的對話框界面如下:
2. 設置變數:
(1) 設置進度條變數:
(2) 設置7個編輯框變數:
(3)添加類成員變數m_x:
3. 消息映射:
在ClassWizard中產生OnInitDialog、OnButton1、OnButton2、OnOK四個消息映射函數:
4. 添加代碼:
//初始化
BOOL CLotusDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
// TODO: Add extra initialization here
m_x=0;
m_pProg.SetRange(0,70);
srand((unsigned)time(NULL));
return TRUE; // return TRUE unless you set the focus to a control
}
(一)手動搖號
//手動搖號,每按一次搖號按鈕出一個號
void CLotusDlg::OnButton1()
{
// TODO: Add your control notification handler code here
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
}
UpdateData(FALSE);
}
void CLotusDlg::OnButton2()
{
// TODO: Add your control notification handler code here
m_x=0;
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos(1);
}
void CLotusDlg::OnOK()
{
CDialog::OnOK();
}
(二)自動搖號
將前面實現的手動搖號程序修改為自動定時搖號。
添加OnTimer消息映射函數:
//按搖號按鈕啟動搖號
void CLotusDlg::OnButton1()
{
SetTimer(1,2000,NULL);
}
void CLotusDlg::OnButton2()
{
m_x=0;
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos(0);
KillTimer(1);
}
void CLotusDlg::OnTimer(UINT nIDEvent)
{
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
}
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
void CLotusDlg::OnOK()
{
KillTimer(1);
CDialog::OnOK();
}
5. 注釋:
(1)產生隨機數的方法
函數unsigned int rand() 產生隨機數。
函數void srand(unsigned int seed) 設定隨機數產生器的種子,其中seed為隨機數產生器的種子,本例中用系統時鍾當前值作隨機數種子:
srand((unsigned)time(NULL));函數的
表達式rand()%36+1產生1-36之間的隨機數
(3) 定時器的使用方法
定時器的使用涉及OnTimer、SetTimer、KillTimer三個函數。
SetTimer用於設定定時時間和啟動定時器,其中第一個參數是定時編號,第二個參數是定時的毫秒數。本例中將1號定時器定時時間設定為2秒:
SetTimer(1,2000,NULL);
定時器啟動以後將持續工作,每到達一次定時時間即啟動一次OnTimer消息函數的執行。KillTimer的作用是停止指定定時器的工作。
3.
MFC單文檔應用程序實現舉例
創建單文檔應用程序的一般步驟:
利用AppWizard創建單文檔應用程序框架。
在文檔類中聲明保存文檔數據所需要數據對象。
完成文檔類的OnNewDocument函數,初始化新文檔。
完成文檔類的Serialize函數,保持和載入文檔數據。
完成視類的OnInitialUpdate函數,初始化顯示。
完成視類的OnDraw函數,顯示當前文檔內容。
在視類中加入可以使用戶編輯文檔數據所需的代碼。
本實驗指導通過以下4 個實驗循序漸進演示創建單文檔應用程序的基本操作,在前一個例子中演練過的操作,在後面的中出現時不再重復描述。
例1 一個簡單的單文檔應用程序——記事本程序
例2 簡單文本和圖形輸出
例3 利用定時器輸出滾動字幕
例4 文檔串列化編程
例1.
一個簡單的單文檔應用程序——記事本程序
1. 只要在AppWizard的Step 6將Base Class設置為EditView,AppWizard就自動完成了一個記事本程序的設計:
2. 運行程序,即可測試記事本的各種功能:
3.說明:
(1)打開Workshop中的Class視圖,可以看到,一個簡單的單文檔應用程序向導自動建立五個類:
向導自動建立的類
相應源文件
其他源文件
相應頭文件
其他頭文
『貳』 用記事本怎麼編輯、運行C語言
1、首先要配置環境變數,在系統變數path中添加MSDevBin 和 VC98Bin路徑。是你所安裝vc6.0的bin目錄。以及設置環境變數include為 ...VC98Include 。是你所安裝vc6.0的路徑的include目錄。不理解的話自己可以網路一下。學過java的話一般都配置過環境變數。
2、然後再在桌面上,新建記事本重命名為hello.c
3、打開記事本輸入如下代碼,保存並關閉。
#include <stdio.h>
int main(){
printf("hello world!");
return 0;
}
4、打開命令行界面,用cd指令定位到桌面,如下圖所示。你的可能輸入的命令不一樣。此時,輸入dir可以看到你桌面的說有文件和目錄。
『叄』 如何使用vc6,編譯多個工程
比如你有2個工程吧
這2個工程分別為在a, b目錄, 工程名為a, b
a裡面有個a.dsw
b裡面有個b.dsw
你把這個兩個目錄放在一個c目錄下
把a.dsw和b.dsw剪切到c目錄下
用記事本打開a.dsw和b.dsw
把b.dsw中 與工程有關的那幾行
類似於以下的
###############################################################################
Project: "b"=.\b\b.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
復制到a中的中間位置, 也就是在
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
前面
保存後 雙擊a.dsw, 裡面就有2個工程了
當然這是整合工程的方法, 新建多工程時, 直接在選項里選添加到xx工程就行了
『肆』 電腦怎麼編程序程序員如何在電腦上編程的
❶ 電腦程序編制怎麼弄啊
編寫程序需要用軟體,一般的軟體有VB,還有C語言等很多類型。如果你只是編寫一些簡單的啟動程序,你可以打開記事本輸入代碼,然後保存,再修改一下文件的格式就可以了,可以改成BAT等。不如說移動磁碟里的autorun.inf
文件就是一個簡單的程序文件,你可以用記事本
打卡
裡面的文件看看
❷ 電腦怎麼寫程序
以在 Windows 操作系統下,編寫一個 C 語言源程序為例,首先必須要在電腦上安裝一個 C語言編譯器(例如:Microsoft Visual Studio C++),然後進入該編譯環境,在該環境中編寫 C 語言源程序、編譯 C 語言源程序、調試該程序、直到最後生成可執行的二進制文件(*.EXE)。
❸ 電腦怎麼編寫簡單程序
這是最簡單的了~~
❹ 程序員如何在電腦上編程的
說到如何在電腦上編程。首先需要知道下面這個問題的答案:「程序到底是什麼?」計算機程序是指令集,它告訴計算機如何執行特殊的任務。VB~VC~VF~C~C#~C++~JAVA~.NET~這些都是編程 ASP~CGI~PHP~JSP這些是WEB編程。。 雖然都是編程,但編出來的程序可是不一樣的。 目標是什麼?開發?創業?還是去公司上班?還是業余愛好? 如果想業余編小程序,推薦VB~VC~容易上手。簡單。也蠻強大。 如果想學好了去企業上班,推薦C++~~~.net~~~JAVA之類的大型項目開發。 如果想做網站,就學ASP~CGI~PHP~JSP,這4個就JSP最最最難,先學ASP。現在是人工智慧時代,國家出台了很多政策鼓勵人工智慧發展,無人超市、無人駕駛、無人銀行、AI人臉識別層出不窮,我覺得以後人工智慧滲透的領域肯定也會越來越多,所以我推薦讓孩子學習python語言,python語言適合做人工智慧的開發。簡單容易上手,學好了以後對學習、出國留學、就業什麼的也會有好處。首先,工程師根據你的需求給你一個合適的方案,這個方案包括硬體搭建、軟體架構。 然後,在你滿意的方案下為你選用設備 最後,程序員按照你的要求編寫軟體 各種設備有自己的命令解釋器,程序員寫出來的軟體是可以按照機器能解讀的編碼編寫的,這些不需要用戶知道,用戶只要知道怎麼使用,怎麼維護就可以了,如果知道的更多,那就可以成了開發者
❺ 電腦怎麼打開編程
編輯程序讓電腦執行的過程就叫編程。
編程語言很多,具有代表性的計算機語言有Java,BASICC,C++,VB,VF,SQL,網頁編程JSP,ASP,PHP。Java是目前應用最廣泛的編程語言之一,大學中則常常以C語言作為編程的入門語言。
很多軟體都可以編程,主要有eclipse,MicrosoftVisualStudio,MicrosoftVisualBasic,MicrosoftSQLServer等等。
❻ 怎麼去報電腦編程序
題主是想問怎麼去編寫電腦程序吧?編寫程序簡單步驟如下:
1、桌面空白處右擊2,新建3,文本文檔,4,新建文本文檔的圖標。
2、修改txt文件的擴展名,右鍵-重命名。將.txt改為.vbs,修改成.vbs後看到圖標變了,這就說明你的系統能夠識別他成一個vbs腳本程序。
3、根據需要在裡面寫代碼了,右鍵-編輯文件,直接就可以像編寫文本文件一樣在裡面寫代碼了。
4、然後在裡面輸入一句彈出簡單對話框的代碼。
5、之後關閉文件並且保存,可以在編輯的時候直接按CTRL+S保存再關閉,然後去直接雙擊剛才新建的文件,就會彈出一個對話框來了。這只是系統自帶的一個腳本語言。
6、這只是系統只帶的一個腳本語言,如果要編一些其他的程序就需要裝對應的代碼編輯器了。例如C#就得裝visualstudio,java的、、eclipse等等。
❼ 筆記本電腦如何編程
筆記本電腦要想編程,首先要先選擇編程語言,然後安裝上編程語言工具軟體就可以了,如果沒有學過編程,可以用中文的"易語言"。
❽ 如何在電腦編寫一個小程序,輸出字元串
在電腦編寫一個小程序,輸出字元串,就找相應的軟體開發工具。
例如:在這里我們藉助的軟體是Visual C++6、0。打開軟體,先新建一個工程,在新建一個C++源文件,這些你聽起來可能有點陌生,不要擔心,你只需要按照下面操作就好。在建好文件之後,在源文件處,輸入下列代碼#includeusing namespace std;voidmaincout<<"我的第一個程序!"<<endl;然後編譯這個程序,點擊右上角有紅色邊框的按鈕。最後運行這個程序,點擊右上角的紅色框里的按鈕,看看運行結果。
❾ 你怎麼在電腦上編程,而不用任何軟體
40267">
我從編程寫軟體學到的 7 件事,其實學習編程不難,寫軟體也不你那,就看我們如何看待了!
我正在一點一點的從一個工程師轉型為管理者。別弄錯了,雖然我在轉管理,但我仍然在每天寫代碼。不過我發現自己在會議和電話中會花越來越多的時間去分析討論,試著去組織團隊,並且為全局部署而不是具體戰術而煩惱。
當然這不是一件壞事。高層次的決策往往比單個的類和函數的細節更有影響。讓一個團隊更有效率,比僅僅讓自己更有生產力有更高的杠桿作用。但我想我已經從我多年來的編程中吸取到了一些經驗。我希望大部分經驗可以應用於管理方面。
1、沒有規定(rules),只有公案(koans)
譯註:公案(Koan)有五種重要的涵義: 作悟禪的工具; 作考驗的方法; 作權威的法范; 作印證的符信; 作究竟的指點。)
舉個例子:DRY,意思是「不要重復你自己」。作為軟體的基本規則這很好理解,因為很多話可以證明:「我做 X 是因為它沒有重復。」這說得通,不是嗎?如果你有兩個或者兩個以上部分的代碼在做相同的事情,說明你正在浪費。而且如果當你需要改變它們其中一個的時候,你可能也需要改變其他的,並且你很可能會忘記這么做。當它們不同步時,你會得到一個怪異的 bug。因此很顯然你不能重復你自己。
然而,在使用了幾年之後,人們開始懷疑它的普遍適用性。假如你的兩個方法中包含相同的代碼塊,所以你將其拿出來形成一個單獨的函數。通常那些方法會開始朝不同的方向發展…接著你發現自己要在函數中加入更多的參數,很可能為結果立了更多 flags……然後下一個接手的程序員會因為分離出來的函數以及它所帶的特定的參數和結果,而出現認知負載。你會意識到如果當初允許自己重復,並讓兩塊代碼自然的發展為不同的個體,你生成的代碼將會更簡單直觀。
這意味著 DRY 不好嗎?當然不是!通常在合適的環境下使用 DRY 是正確的…好吧,也許。我個人的經驗是:「重復一次是可以的,超過一次就不太好了…當然這取決於所處的環境。」因為所有事都取決於環境。DRY 的目的並不是為了 DRY。如果你迷信於此,小孩兒,那你還有太多要學。DRY 的目的為了讓你了解 DRY。那當然不是規定,僅僅是公案。
(讓我重申一遍:我在討論的是軟體。在我的經驗中,硬體規定的確更傾向於是我們所理解中的規定。這就是我為什麼要從電氣工程轉到軟體的原因)
細想我最喜歡的兩個計算機科學「定律」。第一:「計算機科學中沒有一個問題是不能通過添加另一層抽象來解決的!」這句話完全正確嗎?當然不。這在現象學上是正確的嗎?實際上,的確是。這是否意味著抽象是解決任何問題的正確途徑?不,不是。它是一個公案,可以啟發思想。
還有我歷來最喜歡的:「第一優化定律:不要這樣做。第二優化定律(對專家而言):不要又這樣做。」這顯然是一個公案,卻稱自己為法規。是時候讓你的代碼運行的更快嗎?不。是時候讓你的代碼運行的更快嗎?還不是。什麼意思?意思是要考慮到時間,復雜性,認知負載,具體結果,生活意義,人類存在的意義。並且三思而後行,小孩兒。但不要花太長時間,我們還有工作要做。
2、要想得到他人的信任,先信任他人
這不僅僅針對於管理者。雖然它對管理者尤其重要。信任是你真正擁有的唯一價值。如果你的公正、判斷、理解、誠實不被信任。接下來你組織的成員將把你視為禍害並繞著你走。然而,如果你是個有能力但不被信賴的開發者,你可能還有一些價值。雖然你在每個決定上做的努力都會被大大消減。
不過更重要的一點是:一個團隊的成員需要互相信任。當 Natascia 說:「我來解決那個問題單(ticket)」,你必須相信她會去做。當你說:「Peter 能在截止時間前完成的。」,你必須相信那會實現。當某人說,「我有一個瘋狂的點子」,他們必須信任他們會被尊重和認真對待,盡管那點子的確很瘋狂。
你是如何建立和得到信任的?答案很簡單:你去信任他人。你相信那個說他可以學會這個新庫並且在周一前會整合完的人。你相信那個說他需要提前離開,因為家裡有事而會錯過明天工作的人。你相信那些想在截止日期前一個月休假的人,因為他們覺得自己已經開始筋疲力盡了。你相信說想要解決難題的初級程序員。
但你不總是正確的。有些時候人在工作上存了壞心。你需要揭露這些人的真面目,讓他們盡早離開。有時候你要信任那些真心想成功的人,雖然他們會失敗。但違反常識的是,長遠來看這通常是個勝利。因為那些人會記住你的信任,他們會盡一切努力來報答你。
3、簡單比優雅重要的多
我也喜歡緊湊優雅的代碼。我喜歡靈活的框架,有如此多抽象層次隨時待命,無論拋出什麼改變的需求都能解決。我喜歡使用位向量、位位移、略微復雜的數據結構和不太流行且古怪的小語言特性,但在特定環境下十分實用。
然而你並不只是為了你自己寫代碼。即使它只是個「原型」。(我已經記不清我有多少「原型」在多次對層操作和潤色的過程中出現問題。)而且你不僅僅是為了解決當前的問題編寫它。你正在為了下一個接手的開發者可以使用它來解決下一個問題而編寫。把你寫到那五行代碼擴充為十行可以增強其可讀性,你知道嗎,也許擴展為十五行效果會更好。
你可以提前嘗試並用靈活且充滿抽象的框架解決它們。但是也許預言不是你的強項,也許你關於下一個問題的概念的想法完全是錯誤的。也許僅僅編寫足夠簡單的代碼才是最佳選擇。有一個命名約定和一個編碼風格,讓它讀起來像英語一樣。也許不是添加一個類,而是下一個開發者在試圖跟隨你的控制流程時必須保持另一個文件的開放。你應該用愚蠢的方式,不雅的方式,簡單的方式。
4、動力比大多數事都重要
我們都曾見過這種情況。一周里每個人都在檢查代碼,構建顯而易見的雛形,每天不斷增加特性,測試覆蓋率越來越高。疏忽也隨著生產的想法和解決方案而出現。不知怎麼的下一周所有事都變得緩慢起來。關於 A 的決定,會影響到 B、C和 D。當人們可以運行D、E 和 F 時,它們不是邏輯序列發展上的一部分。於是需要做更多的假設,認知負載加重,你不得不模擬出一堆東西來寫出非模仿代碼。一些人需要做這個決定。
或許不是決定會癱瘓,是你上周所做的一切都在錯誤的基礎上,是一個「地震多發區」的技術負債。你需要停止所有事返回並重構它。而且你必須馬上開始,因為等的時間越長,事情會變得越糟糕。沒人想看到這種事發生 。但他們寧願現在面對也比下個月知道的好。讓暴風雨來的更猛烈些吧。
也許上周每個人都拼勁全力,現在實在撐不住了。你知道該怎樣嗎?得讓他們休息一下,每個人,休息一整天。我保證,這會給你接下來的「長跑」節省時間。
I我們很難定義、衡量以及說明動力。但它在軟體開發中是真實存在的東西。而且它的缺失會成為造成首要影響,導致我們需要去解決很多根本問題。別忽略它,也別期望或假裝它會神奇地回來。察覺警報並迅速採取行動。
5、與和你互補而不是像你一樣的人一起工作
每當我看到人們根據「文化契合度」來找人的時候,我就會拚命翻白眼。你知道大多單一栽培會發生什麼嗎?他們遭遇了他們不知如何解決的病原體,然後嗝屁死翹翹了。
你不會希望你的所有開發者、設計者、 QA人員、產品人員、銷售人員和執行官是彼此的克隆人。你肯定不想。每個人都有自己的長處和短處、優點和缺點。你想要僱傭的是他們的長處,讓其他人的長處彌補他們的短處。
比如說我,寫代碼非常快,擅於溝通,讀寫文章都奇快。我在任何時候都能熟悉很多編程語言和框架。我理解東西透徹且迅速,有豐富的經驗。然而我還是一個在特定領域、框架和語言缺乏深刻專研、精通掌握的全才。我是一個真正從別人身上獲益的建築師,跟蹤所有需要,在骨骼構建好之後添加肉體和潤色。我還是個 UX 盲(等一下,你說那些還沒對齊?),這一直被當作同事之間的玩笑。
像我這樣的人非常難找到也是及其被需要的。但一個由我和九個像我一樣的克隆人組成的公司是從一開始就註定要失敗的。唔,我們會把很多事情做好,但只需要一個集中的盲點,一個災難性的空隙就足以毀滅公司。大多數人承認有些事情他們做不好,另一些人可能需要照應。這些人往往是尋找「文化契合度」的人,並試圖僱傭和他們一樣的人。真令人哭笑不得。
6、任何決定都比沒決定強
別猶豫,當你拿不準主意時,去做就好了。當然,這可能不適用在生產代碼的時候。但它可以應用於除此之外在軟體開發里的任何方面。我們在歷史上發展最快的行業里工作。我們生活在以指數形式發展的世界裡。時間不等人,別浪費它。
這與低級決策的高級討論一樣真實。在高水平的討論里,比如「我們應該實現特性 A 還會說 B?我們要用哪種方式實現呢,X 還是 Y?「,常常會產生這樣的對話,」讓我們先跳過這個…下周再對它進行討論…「,或者更陰險的,」讓我們先研究一下其他人做了什麼再來討論一次。「這樣的問題極少情況下會有正確答案。大多時候,像這么說才是正確的,」我會在今天之前決定嘗試哪一個,這樣我們就可以明天開始行動了。
甚至 A 選項基本上是錯誤選擇,開始進行 A 大概也比啥都不做強。這和直覺是相悖的,但它通常也是正確的。以實際上手的方式去理解 A 的本質是一個更好的辦法,這個道理始終是正確的。這樣的理解可能會引導你做出更好的決定。
對於低級決策,那就更應該如此了。「規范沒有說明我們應該如何處理錯誤條件 X,或者錯誤信息應該是什麼。」(規范似乎是為一個有抱負的烏托邦寫的,在這種烏托邦中,錯誤條件和獨角獸一樣罕見。)「我知道,我只是想插一句,回去問問他們在這種情況下想做什麼!」
這非常誘人。如果你這么做,沒人能指責你哪裡做錯了。但這么做是錯誤的。寧願繼續自己做決定,盡管有些魯莽,也不要什麼都不做等著問別人。讓它們在你做已經寫好的程序和你學到的教訓里迭代,雖然你知道這並不完美,也好過從頭開始錯誤認知。它們和項目將會變得更好。快速嘗試,快速改變方向。
7、保持謙虛,但要自信
你不需要所有的答案。甚至是我也不得不勉強承認我不會有全部的答案。可惡,我甚至連它們的大多數也沒有,不過我有自信,只要給我足夠的時間和精力,我能弄清楚大部分。並且你也可以。
我們無法都成為 Jeff Dean(谷歌大牛)、中本聰(比特幣創始人) 或是 Margaret Hamilton(登月計劃中的女程序員)。我們在一個充斥著真正的天才和自稱天才的地方工作。沒人知道所有的事情,每個人都敏銳地意識到他們所不知道的一切。幸運的是,大多數情況下,我們不是科學家。我們的工作不是去尋找新突破。我們的工作是實踐他人的發現,使東西運轉,希望服務於人們真正想要的東西。也許你永遠不會發明任何東西,像是布隆過濾器或默克爾樹。不過大多與你共事的人們也不會。而且這不是重點,重點是使用布隆過濾器和默克爾樹,亦或是在它們之上建個抽象層,來實際的完成它們。
所以假設你懂的會比在座的人都多是錯誤的,就算你覺得他們違背直覺的想法很瘋狂,他們的語言選擇很糟糕。假設人家比你懂的多也是錯誤的,即使真是那樣,也沒關系。世界上多的是聰明人因為一些不可思議的原因什麼實際東西也沒做出來。(開個廉價的玩笑╮(╯▽╰)╭:這就是為什麼我們有學術界的原因。)
如果你真的做出了一些東西,在面對那些令人眼花繚亂的理論知識,或是和你相似甚至比你做的更糟糕的人時大可不必謙虛。在一天結束之時,正是那些在戰壕中的開發者——構建、測試和開發了代碼的人,真正做了事情。話說那些發現自己遠離戰壕的人,那些沒有和你一起並肩作戰的逃兵,你有權利鄙視他們。並且向你的夥伴致敬,而不是上司。
原文標題:做好這7件事 讓你學編程寫軟體不在難
原文鏈接:http://www.epx365.cn/peixun/software/201840267.html
『伍』 可以用記事本進行編程嗎
跟我學做記事本-編程實例
用VB做一個記事本實在不很復雜,我們完全可以通過向導來很方便地做出來。但本文只打算討論用手動方法製作記事本,旨在向VB初學者展示:學VB原來是如此容易!
通過閱讀、研究本文並按本文所述進行嘗試,初學者將學到很多東西,如怎樣使用RichText控制項來打開和保存文件,怎樣製作菜單、工具欄和狀態欄以及如何對其編寫代碼等。
第一章 讓我們的記事本馬上運行
急於求成是初學者共有的心願。那好,請按如下三個步驟做,我們的願望立即就可以實現!
步驟一:繪制界面。
新建一個標准EXE工程,將其Caption屬性改為「超級記事本」,點擊Icon屬性給它找個合適的Icon圖標。單擊菜單「工程」-「部件」,在彈出的「部件」對話框里找到Microsoft
RichText Box 6.0和公共對話框Microsoft Common Dialog 6.0並選中它們,單擊「確定」按鈕。這時左邊的工具欄上出現了我們剛才新添的兩個控制項了。在窗體上繪制RichText
Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我們將在代碼中處理它,當然,有必要把它的ScrollBar屬性設為2-rtfVertical,這樣在打開和編輯文件時垂直滾動條才可用。
步驟二:編輯菜單。
按Ctrl+E調出菜單編輯器,我們來做如下幾個菜單:
一.文件菜單:
文件(第一層) mnuFile
新建(第二層) mnuNew
打開(第二層) mnuOpen
保存(第二層) mnuSave
- (第二層) mnuFileSep (分隔線)
退出(第二層) mnuExit
二.編輯菜單:
編輯(第一層) mnuEdit
復制(第二層) mnuCopy
剪切(第二層) mnuCut
粘貼(第二層) mnuPaste
- (第二層) mnuEditSep (分隔線)
全選(第二層) mnuSelecAll
三.搜索菜單:
搜索(第一層) mnuSearch
查找(第二層) mnuFind
查找下一個(第二層) mnuFindOn
四.幫助菜單:
幫助(第一層) mnuHelp
使用說明(第二層) mnuUsage
關於(第二層) mnuAbout
(註:各菜單項的快捷鍵請自行設置)
好了,其它的菜單項以後再根據需要添加。現在進入:
步驟三:編寫代碼。
'聲明查找變數
Dim sFind As String
'聲明文件類型
Dim FileType, FiType As String
'初始化程序
Private Sub Form_Load()
'設置程序啟動時的大小
Me.Height = 6000
Me.Width = 9000
End Sub
'設置編輯框的位置和大小
Private Sub Form_Resize()
On Error Resume Next '出錯處理
RichTextBox1.Top=20
RichTextBox1.Left=20
RichTextBox1.Height = ScaleHeight-40
RichTextBox1.Width = ScaleWidth-40
End Sub
'新建文件
Private Sub mnuNew_Click()
RichTextBox1.Text = "" '清空文本框
FileName = "未命名"
Me.Caption = FileName
End Sub
'打開文件
Private Sub mnuOpen_Click()
CommonDialog1.Filter = "文本文檔(*.txt)|*.txt|RTF文檔(*.rtf)|*.rtf|所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
RichTextBox1.Text = "" '清空文本框
FileName = CommonDialog1.FileName
RichTextBox1.LoadFile FileName
Me.Caption = "超級記事本:" & FileName
End Sub
'保存文件
Private Sub mnuSave_Click()
CommonDialog1.Filter = "文本文檔(*.txt)|*.txt|RTF文檔(*.rtf)|*.rtf|所有文件(*.*)|*.*"
CommonDialog1.ShowSave
FileType = CommonDialog1.FileTitle
FiType = LCase(Right(FileType, 3))
FileName = CommonDialog1.FileName
Select Case FiType
Case "txt"
RichTextBox1.SaveFile FileName, rtfText
Case "rtf"
RichTextBox1.SaveFile FileName, rtfRTF
Case "*.*"
RichTextBox1.SaveFile FileName
End Select
Me.Caption = "超級記事本:" & FileName
End Sub
'退出
Private Sub mnuExit_Click()
End
End Sub
'復制
Private Sub mnuCopy_Click()
Clipboard.Clear
Clipboard.SetText RichTextBox1.SelText
End Sub
'剪切
Private Sub mnuCut_Click()
Clipboard.Clear
Clipboard.SetText RichTextBox1.SelText
RichTextBox1.SelText = ""
End Sub
'全選
Private Sub mnuSelectAll_Click()
RichTextBox1.SelStart = 0
RichTextBox1.SelLength = Len(RichTextBox1.Text)
End Sub
'粘貼
Private Sub mnuPaste_Click()
RichTextBox1.SelText = Clipboard.GetText
End Sub
'查找
Private Sub mnuFind_Click()
sFind = InputBox("請輸入要查找的字、詞:", "查找內容",
sFind)
RichTextBox1.Find sFind
End Sub
'繼續查找
Private Sub mnuFindOn_Click()
RichTextBox1.SelStart = RichTextBox1.SelStart + RichTextBox1.SelLength + 1
RichTextBox1.Find sFind, , Len(RichTextBox1)
End Sub
'使用說明
Private Sub mnuReadme_Click()
On Error GoTo handler
RichTextBox1.LoadFile "Readme.txt", rtfText '請寫好Readme.txt文件並存入程序所在文件夾中
Me.Caption = "超級記事本:" & "使用說明"
Exit Sub
handler:
MsgBox "使用說明文檔可能已經被移除,請與作者聯系。",
vbOKOnly, " 錯誤信息"
End Sub
'關於
Private Sub mnuAbout_Click()
MsgBox "超級記事本 Ver1.0 版權所有(C) 2001 土人",vbOKOnly,"關於"
End Sub
'設置彈出式菜單(即在編輯框中單擊滑鼠右鍵時彈出的動態菜單)
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then
PopupMenu mnuEdit, vbPopupMenuLeftAlign
Else
Exit Sub
End If
End Sub
'防止在切換輸入法時字體自變(感謝王必成先生提供此方案)
Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then
RichTextBox1.SelFontName = CommonDialog1.FontName
End If
End Sub
至此,我們的記事本可以編譯使用了。點擊菜單「文件」-「生成XXX.EXE」,回到桌面運行我們的記事本看看,是不是頗有成就感?
當然,這樣的記事本還比較粗糙,我們還需要做些工作,請看下一章。
第二章 美化程序界面
多數字處理軟體都有工具欄和狀態欄。工具欄和狀態欄除了能美化我們的程序使其更具有專業性質外,還給用戶帶來操作上的便利。現在我們就來做一做這兩樣東西。
一.工具欄
(一)製作工具欄
單擊「工程」-「部件」,選中Microsoft Windows Common Control 6.0並確定。這時,我們要用到的控制項就出現在左邊的工具欄上了。
要做工具欄,首先需要一個叫ImageList的控制項來裝載圖像。在程序界面上添加它,然後右鍵單擊此控制項,左鍵單擊「屬性」,彈出「屬性頁」對話框的「圖像」,再單擊「插入圖片」就可以一次性裝載圖片了(如不滿意,以後還可以添加)。圖片可在C:Microsoft
Visual _W95下選擇(這里假設你的VB安裝在C盤下)。注意了:在插入圖片時給每一張圖片註明關鍵字,以便在引用圖片時不至於混亂。如插入「新建」的圖片,我們在「關鍵字」欄註明「New」。
圖片有了,接下來在程序界面添加工具欄(ToolBar)。添加後工具欄就出現在菜單下面,右鍵單擊它,選擇「屬性」,在彈出的「屬性頁」對話框中的「通用」項作些設置,主要如下兩項:
1.「圖像列表」:選擇ImageList1
2.「樣式」:根據喜愛選擇1-trbStandard或者2-trbFlat
繼續點擊「屬性頁」的「按鈕」選項,插入若干按鈕。按鈕有多種樣式,請根據需要設置。這里請一定注意:每一個與用戶操作有關的按鈕都必須註明關鍵字、裝載圖片,如「新建」按鈕,在「關鍵字」項註明「新建」,在「圖像」項鍵入「New」(即ImageList1中的圖片關鍵字),需要的話還可以在「工具提示文本」項填入適當的提示語。
(二)編寫工具欄的按鈕代碼
工具欄按鈕的代碼編輯很簡單,可以按照下面的格式去編寫:
Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button)
On Error Resume Next '出錯處理
Select Case Button.Key '按關鍵字選擇
Case "新建"
mnuNew_Click '等於菜單項「新建」被單擊
Case "打開" '等於菜單項「打開」被單擊
mnuOpen_Click
'......(繼續編寫其它按鈕的代碼)
End Select
End Sub
完成後試運行一下我們的程序,我們發現,有了工具欄之後,程序變得漂亮多了,只是有一個問題:打開一個較長的文檔後,編輯框的下拉滾動條向上的箭頭不見了。原因是:工具條佔用一定的空間。解決方法:將「設置編輯框的位置和大小」中的RichTextBox1.Top
= 20 和 RichTextBox1.Height = Me.ScaleHeight - 40分別改為RichTextBox1.Top =
380,RichTextBox1.Height = Me.ScaleHeight - 400即可。
二.狀態欄
(一)製作狀態欄
狀態欄的英文名字叫StatusBar,在窗體上添加它後會默認出現在窗體的最下方。用滑鼠右鍵點擊它,調出「屬性頁」對話框,單擊「窗格」項,插入一些窗格,可以將各個窗格的「樣式」設置為:
0-sbrText 顯示文本,需編寫代碼
1-sbrCaps 顯示大小寫狀態,無需編程
2-sbrNum 顯示NumLock鍵開關狀態,無需編程
3-sbrIns 顯示Insert鍵狀態,無需編程
4-sbrScr1
5-sbrTime 顯示時間,不編程時時間不會隨系統時鍾變化
6-sbrDate 顯示日期,無需編程
注意:加進狀態欄後需將Form_Resze中的RichTextBox1.Height =
Me.ScaleHeight - 400改為RichTextBox1.Height = Me.ScaleHeight - 600。
(二)狀態欄根據其「樣式」屬性決定用不用編寫代碼(如上文所述)。下面舉些例子,讀者可以認真揣摩,從而達到舉一反三的效果。
例一:用戶選取了「新建」後,讓第一個窗格顯示:「目前狀態:正在打開文件《……》」。請將下面代碼寫進「打開」菜單裡面:
StatusBar1.Panels(1).Text = "目前狀態:正在打開文件"
& "《" &CommonDialog1.FileTitle & "》"
例二:讓第三個窗格顯示時間並讓時間跟隨系統時鍾變化。
首先,給程序加一個Timer控制項,將其Interval屬性設為1000。然後:
在Form_Load過程加入:StatusBar1.Panels(1).Text = Time;然後給Timer控制項編寫代碼:
Private Sub Timer1_Timer()
If StatusBar1.Panels(3).Text <> CStr(Time) Then
StatusBar1.Panels(3).Text = Time
End If
End Sub
例三:當編輯框的文本發生變化時讓第一個窗格顯示:「正在編輯文檔:文件名」。
Private Sub RichTextBox1_Chang()
StatusBar1.Panels(1).Text = "正在編輯文檔:" &
CommonDialog1.FileName
End Sub
辛苦了那麼久,我們現在已經擁有一個象模象樣的記事本了。這個記事本由於用了RichText控制項,理論上它能打開和編輯任意大的文檔,使用起來的確比Windows自帶的記事本方便得多。當然,還有一些其它的功能需要添加和完善,這就靠你慢慢去完成了。
『陸』 在什麼軟體下可以編寫makefile,比如編寫c語言可以在VC6.0下編寫,那麼makefile可以在那裡寫呢。
vc6直接就可以直接導出你正在編輯的工程的make文件。
菜單:Project->ExportMakefile...打開導出makefile對話框,選擇你要導出makefile的工程,點OK,就會在你工程目錄下生成工程名.mak文件,如圖:
你可以用文本編輯器直接修改.mak文件,但一般情況下沒必要自己去修改,直接在vc6里配置好工程的相關信息,導出成.mak文件即可。
執行.mak文件的話,打開命令提示符,cd到.mak文件所在位置,然後輸入:
nmake/fmak文件名回車
即可開始編譯鏈接程序,效果和你在VC6里build是一樣的。