第一篇:ADO編程總結(一)
ADO編程總結
(一)1、在stdafx.h中添加代碼:
#import “C:Program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,“rsEOF”)
2、在APP.cpp的InitInstance中加入: ::CoInitialize(NULL);在ExitInstance()中加入:
::CoUninitialize();
3、工程目錄下用記事本新建一文件,另存為擴展名為.udl的文件,如這里保存為mydata.udl,雙擊出現數據鏈接屬性對話框,參考下圖進行設置,確定。
4、定義以下變量:
_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;
5、初始化連接函數
BOOL CADOTestDlg::InitConnection(){ HRESULT hr;try
{
①hr=m_pConnection.CreateInstance(_uuidof(Connection));
if(SUCCEEDED(hr))
{
②m_pConnection->ConnectionString=“File Name=mydata.udl”;
m_pConnection->ConnectionTimeout=20;
hr=m_pConnection->Open(“",”“,”“,adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox(_T(”打開連接失敗“));
return FALSE;
}
}
else
{
AfxMessageBox(_T(”實例化連接失敗“));
return FALSE;
}
return TRUE;} catch(_com_error e){
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(bstrSource+bstrDescription);
return FALSE;} } 對以上程序主要結果是一個try catch語句,其中 ①hr=m_pConnection.CreateInstance(_uuidof(Connection));實例化連接對象,固定格式 ②m_pConnection->ConnectionString=”File Name=mydata.udl“;設置連接串屬性為UDL文件
m_pConnection->ConnectionTimeout=20;連接等待時間為20秒
hr=m_pConnection->Open(”“,”“,”“,adConnectUnspecified);使用Connection對象打開連接,其中adConnectUnspecified表示同步模式,若為adAsyncConnect表示異步模式。
該函數是比較固定,可以在以后的應用中復制經少量修改即可應用。
6、查詢數據庫表中的信息并輸出:
void CADOTestDlg::OnBnClickedBtnShowAll(){ HRESULT hr;①_RecordsetPtr pShowAllRecordset;hr=pShowAllRecordset.CreateInstance(_uuidof(Recordset));if(FAILED(hr)){
AfxMessageBox(_T(”Create Instance of Recordset failed!“));return;} CString strSql;_variant_t var;CString strValue;int curItem=0;strSql=_T(”select * from emp“);try { ②hr=pShowAllRecordset->Open(_variant_t(strSql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(SUCCEEDED(hr)){
③while(!pShowAllRecordset->rsEOF)
{
curItem=m_DataList.GetItemCount();
④var=pShowAllRecordset->GetCollect(_T(”EMPNO“));
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_DataList.InsertItem(curItem,strValue);
var=pShowAllRecordset->GetCollect(_T(”ename“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,1,strValue);var=pShowAllRecordset->GetCollect(_T(”hiredate“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,2,strValue);var=pShowAllRecordset->GetCollect(_T(”sal“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,3,strValue);var=pShowAllRecordset->GetCollect(_T(”comm“));if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_DataList.SetItemText(curItem,4,strValue);
⑤pShowAllRecordset->MoveNext();
}
} } catch(_com_error* e){
AfxMessageBox(e->ErrorMessage());
return;} ⑥pShowAllRecordset->Close();pShowAllRecordset=NULL;} 該函數也比較固定,通過設置命令文本字符串,對數據庫進行操作,主要有以下幾步 ①_RecordsetPtr pShowAllRecordset;hr=pShowAllRecordset.CreateInstance(_uuidof(Recordset));定義Recordset對象,并實例化,格式固定。②hr=pShowAllRecordset->Open(_variant_t(strSql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);嘗試打開記錄,其中Open函數參數意義如下:
第1個參數:記錄源,可以是下列內容之一:Command對象變量,SQL語句,存儲過程,表名或完整的路徑名,這里是命令文本,一般也是用命令文本。
第2個參數:指定在哪個連接中打開記錄集。m_pConnection.GetInterfacePtr():Returns the encapsulated interface pointer,返回封閉接口指針,不懂。
第3、4個參數:詳細說明見《Visual C++6.0 開發指南》714,715頁,不懂。第5個參數:表示第1個參數的各類,這里是adCmdText,表示命令文本,其它取值見《Visual C++6.0 開發指南》715頁。③while(!pShowAllRecordset->rsEOF)循環。
當記錄未到末尾時,執行循環,這里有可能會報錯:
: “rsEOF”: 不是“_Recordset”的成員
請確認在stdafx.h中添加了以下代碼:rename(”EOF“,”rsEOF“)var=pShowAllRecordset->GetCollect(_T(”EMPNO“));
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_DataList.InsertItem(curItem,strValue);④var=pShowAllRecordset->GetCollect(_T(”EMPNO“));
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_DataList.InsertItem(curItem,strValue);比較固定的結構,從記錄中讀取列名為”EMPNO"的數據,保存到var結構中,再轉換到CString對象。
數據類型的轉換:
COM中的VARIANT、BSTR兩種數據類型與C++中CStrng類型的轉換分別通過兩個類來實現: _variant_t 和_bstr_t。⑤pShowAllRecordset->MoveNext();記錄指針向前移動。⑥pShowAllRecordset->Close();pShowAllRecordset=NULL;關閉記錄對象。
第二篇:ADO編程總結(二)(寫寫幫整理)
ADO編程總結
(二)Connection,Recordset,Command對象都可以對數據庫進行訪問,并對數據庫進行操作,以下是實驗例程,由以下例程可見,讀取數據庫都要用到Recordset對象,而Recordset和command雖然都可以不需要connection對象而獨自對數據庫訪問(例程在此為給出,可查我在《Visual c++6.0開發指南》上所夾的打印資料),但最方便的方法還是先用connection對象建立對數據庫的連接,然后以此conection對象作為Recordset和command的open參數,打開數據庫。
使用ConnectionPtr接口訪數據庫,并添加數據
1、創建_ConnetionPtr對象并實例化
2、調用Open方法訪數據庫
3、調用Execute方法,執行SQL命令
4、例程如下:
//1 建立連接
_ConnectionPtr pCon;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMessageBox(“Create Connection Instance Failed!”);
return;
}
pCon->ConnectionString=“File Name=mydata.udl”;
pCon->ConnectionTimeout=20;
hr=pCon->Open(“",”“,”“,adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox(”Open Connection Failed!“);
return;
}
//2 利用Connection對象,為數據庫添加數據CString strSQL=”insert into DVDData values(1006,'新聞聯播','2010-2-12',3)“;COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);pRecordset=pCon->Execute(_bstr_t(strSQL),&vtOptional,-1);pCon.Release();} catch(_com_error e){bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());
} return;
使用RecordsetPtr接口訪問數據庫
1、創建_RecordsetPtr對象并實例化
2、調用Open方法訪問數據庫,數據源來自已建立連接的Connetcion對象
3、調用GetCollect方法獲取數據庫中的數據
4、例程如下:
_ConnectionPtr pCon;
_RecordsetPtr pRecordset;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMessageBox(”Create Connection Instance Failed!“);
return;
}
pCon->ConnectionString=”File Name=mydata.udl“;
pCon->ConnectionTimeout=20;
hr=pCon->Open(”“,”“,”“,adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox(”Open Connection Failed!“);
return;
}
//2 利用Recordset對象,讀取數據庫數據
hr=pRecordset.CreateInstance(_uuidof(Recordset));
if(FAILED(hr))
{
AfxMessageBox(”Create Recordset Instance Failed!“);
return;
}
CString strSQL=”select * from DVDData“;
hr=pRecordset->Open(_variant_t(strSQL),pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(FAILED(hr))
{
AfxMessageBox(”Open Recordset Failed!“);
return;
}
_variant_t var;CString strValue;while(!pRecordset->rsEOF){c=m_datalist.GetItemCount();var=pRecordset->GetCollect(”編號“);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.InsertItem(c,strValue);var=pRecordset->GetCollect(”名稱“);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,1,strValue);
var=pRecordset->GetCollect(”日期“);
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_datalist.SetItemText(c,2,strValue);
var=pRecordset->GetCollect(”數目“);
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_datalist.SetItemText(c,3,strValue);
pRecordset->MoveNext();
}
}
catch(_com_error e)
{
bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(bstrSource+bstrDescription);
return;
}
pRecordset->Close();
pRecordset=NULL;
pCon.Release();
5、為數據庫添加數據
pRecordset->AddNew();
CString strNum;
strNum.Format(”%d“,m_number);
pRecordset->PutCollect(”編號“,_variant_t(strNum));
pRecordset->PutCollect(”名稱“,_variant_t(m_name));pRecordset->PutCollect(”日期“,_variant_t(m_date));pRecordset->PutCollect(”數目“,_variant_t(m_count));pRecordset->Update();
使用Command對象打開數據庫
1、定義_CommandPtr、_RecordsetPtr對象實例化_CommandPtr對象
2、使用Execute方法執行SQL命令,返回結果保存在Recordset對象中。
3、使用RecordsetPtr的GetCollect方法獲取數據
4、例程如下:
_CommandPtr pCommand;
_RecordsetPtr pRecordset;
_ConnectionPtr pCon;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMessageBox(”Create Connection Instance Failed!“);return;
}
pCon->ConnectionString=”File Name=mydata.udl“;
pCon->ConnectionTimeout=20;
hr=pCon->Open(”“,”“,”“,adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox(”Open Connection Failed!“);
return;
}
pCommand.CreateInstance(_uuidof(Command));
pCommand->ActiveConnection=pCon;
pCommand->CommandText=”select * from DVDData“;
pCommand->Parameters->Refresh();
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
int c;
_variant_t var;
CString strValue;
while(!pRecordset->rsEOF)
{
c=m_datalist.GetItemCount();
var=pRecordset->GetCollect(”編號“);
}if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.InsertItem(c,strValue);var=pRecordset->GetCollect(”名稱“);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,1,strValue);var=pRecordset->GetCollect(”日期“);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,2,strValue);var=pRecordset->GetCollect(”數目");if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,3,strValue);pRecordset->MoveNext();} } catch(_com_error e){bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());AfxMessageBox(bstrSource+bstrDescription);return;} pRecordset->Close();pRecordset=NULL;pCon.Release();
第三篇:ADO編程模型之VB數據庫操作小結
ADO編程模型之VB數據庫操作小結
使用ADO編程模型需添加ADO對象類庫的“引用”----“Microsoft ActiveX Data Objects 2.x Library” ADO之VB數據庫操作主要包括讀、寫、修改及刪除等操作,不論是進行什么數據庫操作都必須首先連接到數據庫。
一、連接到數據庫
1、連接到SQL數據庫:
通過ADO的Connection對象可實現VB與SQL數據庫的連接。一般方法如下:
Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象
cnn.ConnectionString = “Provider=SQLOLEDB.1;Password=密碼;User ID=用戶名;Initial Catalog=SQL數據庫文件;Data Source= localhost;”
'指定提供者,設置數據源 cnn.Open
‘打開到數據庫的連接 ……..cnn.Close
‘關閉到數據庫的連接 或者:
Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象
cnn.Open “Provider=SQLOLEDB.1;Password=密碼;User ID=用戶名;Initial Catalog=SQL數據庫文件;Data Source= localhost;”
‘打開到數據庫的連接 ……..cnn.Close
‘關閉到數據庫的連接
2、連接到ACCESS數據庫:
通過ADO的Connection對象可實現VB與ACCESS數據庫的連接。一般方法如下:
Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象
cnn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS數據庫文件.MDB” '指定提供者,設置數據源
cnn.Open
‘打開到數據庫的連接 ……..cnn.Close
‘關閉到數據庫的連接 或者: Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接 ……..cnn.Close
‘關閉到數據庫的連接
二、讀數據庫操作
讀數據庫操作一般可通過recordset對象實現。方法如下—以ACCESS數據庫為例:
Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設置記錄集相關屬性
text1.text= rs(“字段名稱1或索引”)
‘假設讀取出來的字段信息顯示在文本框中,三種讀取方法等價 text2.text=rs.fields(“字段名稱2或索引”)text3.text= rs!字段名稱3 …….rs.close
‘關閉記錄集對象 cnn.Close
‘關閉與數據庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 記錄源一般為一條SQL查詢語句,以實現查詢目的。
? Recordset對象還保持查詢返回的記錄的位置,它返回第一個檢索到的記錄,并允許你一次一項逐步掃描其他結果。Recordset對象的部分屬性及方法如下 Rs(i): 讀取第i個字段的數據,i從0開始 Rs(字段名): 讀取指定字段的數據 Rs.EOF:記錄指針指到記錄的尾部 Rs.BOF:記錄指針指到記錄的頭部 Rs.RecordCount: 游標中的數據記錄總數
Rs.PageSize:當對象設有分頁時,用于指定邏輯頁中的記錄個數 Rs.PageCount:返回記錄集中的邏輯分頁數 Rs.MoveNext: 將記錄指針移到下一個記錄 Rs.MovePrev: 將記錄指針移到上一個記錄 Rs.MoveFirst: 將記錄指針移到第一個記錄 Rs.MoveLast: 將記錄指針移到最后一個記錄 rs.Delete:將當前記錄刪除 rs.addnew:添加一條新記錄(行)
? 如果要讀取滿足條件的數據庫記錄,只要在SELECT語句中增加WHERE子句即可(例如:WHERE 性別=”男”),如果要讀取多條滿足條件的數據庫記錄,可通過循環語句來實現,并且每讀取一條記錄后使用Rs.MoveNext移動記錄指針以讀取下一條記錄。
三、寫數據庫操作
方法1:使用recordset對象(此方法一般初學者使用較多)。方法如下—以ACCESS數據庫為例: Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設置記錄集相關屬性 rs.addnew ‘告訴rs我們要添加一行
rs(“字段名稱1或索引”)=值1
‘給要添加的行的一個字段賦值,三種方法等價 rs.fields(“字段名稱2或索引”)=值2 rs!字段名稱3 =值3 …….rs.update
‘通知rs我們要把這個行寫入數據庫 rs.close
‘關閉記錄集對象 cnn.Close
‘關閉與數據庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? addnew使用方法后,如果要放棄添加的結果,應調用記錄集的CancelUpdate方法放棄。
方法2:使用Connection對象的Execute方法對表進行SQL記錄插入操作(要求要熟悉SQL命令)Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接
strSQL = “Insert Into 數據表(字段1, 字段2…..)Values(值1, 值2…..)
‘拼寫Insert插入語句 cnn.Execute strSQL
'執行Insert語句實現添加 …….cnn.Close
‘關閉與數據庫的連接
set cnn=Nothing ‘釋放Connection對象實例
四、修改數據庫操作
方法1:使用recordset對象(此方法一般初學者使用較多)。方法如下—以ACCESS數據庫為例: Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB“
‘打開到數據庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設置記錄集相關屬性 …….rs(”字段名稱1或索引“)=新值1
‘‘給要修改的行的一個字段賦一個新值,三種方法等價 rs.fields(”字段名稱2或索引“)=新值2 rs!字段名稱3 =新值3 …….rs.update
‘通知rs,我們要把修改好的記錄行寫入數據庫 rs.close
‘關閉記錄集對象 cnn.Close
‘關閉與數據庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 如果放棄修改結果,應調用記錄集的CancelUpdate方法放棄更新數據庫。
方法2:使用Connection對象的Execute方法對表進行SQL記錄更新操作(要求要熟悉SQL命令)Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB“
‘打開到數據庫的連接
strSQL = ”Update 數據表 Set 字段1=新值1, 字段2=新值2…..‘拼寫Update語句,以便進行修改 cnn.Execute strSQL
'執行Insert語句實現添加 …….cnn.Close
‘關閉與數據庫的連接
set cnn=Nothing ‘釋放Connection對象實例
五、刪除數據庫操作
方法1:使用recordset對象(此方法一般初學者使用較多)。方法如下—以ACCESS數據庫為例方法1:通過 Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設置記錄集相關屬性 …….rs.Delete
‘刪除當前記錄 …….rs.update
‘通知rs,我們要把修改好的記錄行寫入數據庫 rs.close
‘關閉記錄集對象 cnn.Close
‘關閉與數據庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 刪除數據庫記錄前應先找到(查詢)待刪除的記錄項(通過rs.Open來實現)。
方法2:使用Connection對象的Execute方法(要求使用者要熟悉SQL命令)例如:如果要將數據庫“成績.mdb”中的名字為“學生情況表”的數據表中,學號為'07001'的記錄刪除,可通過下列方法來實現。
Dim cnn As New ADODB.Connection ‘創建Connection對象cnn,關鍵字new用于創建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數據庫文件.MDB”
‘打開到數據庫的連接
sql=“delete from學生情況表where 學號='07001'”
‘拼寫delete語句,以便進行刪除
cnn.Execute strSQL
'執行elete語句實現刪除 …….cnn.Close
‘關閉與數據庫的連接
set cnn=Nothing ‘釋放Connection對象實例
附:分頁簡介---使用記錄集
一、.原理:
分頁其實是將數據庫中的記錄分割成若干段,并將各段記錄放在同一個“邏輯頁面”上“分屏顯示”出來,其實顯示的“邏輯頁面”只有1頁,只是每次顯示的頁面記錄不同罷了。通過控制各頁中數據庫顯示記錄的不同,來刷新頁面的顯示內容。
二、用到的幾個記錄集屬性
rs.pagesize:定義一頁顯示記錄的條數; rs.recordcount:統計數據庫記錄總數; rs.pagecount:統計總頁數;
rs.absolutepage:將數據庫指針移動到當前頁要顯示的數據記錄的第一條記錄;比如有20條記錄的一個數據庫,我們分為一頁顯示5條記錄,如將AbsolutePage屬性設為2,則當前記錄指針移至第2頁第1條記錄,也即將指針移動到第6條記錄處,依次類推....(AbsolutePage 屬性是以 1 為起始的)
第四篇:刀具和編程總結
① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價格便宜,但切削壽命短、吃刀量小、進給速度低、加工效率低,在數控加工中較少使用。
② 飛刀(即鑲嵌式刀具)主要為機夾式可轉位刀具,這種刀具剛性好、切削速度高,在數控加工中應用非常廣泛,用于模胚的開粗、平面和曲面粗精加工效果均很好。
③ 合金刀(通常指的是整體式硬質合金刀具)精度高、切削速度高,但價格昂貴,一般用于精加工。
數控刀具與普通機床上所用的刀具相比,有以下不同的要求。
(1)剛性好(尤其是粗加工刀具)、精度高、抗振及熱變形小。
(2)互換性好,便于快速換刀。
(3)壽命高,切削性能穩定、可靠。
(4)刀具的尺寸便于調整,以減少換刀調整時間。
(5)刀具應能可靠地斷屑或卷屑,以利于切屑的排除。(6)系列化、標準化,以利于編程和刀具管理。
① 刀具直徑越大,轉速越慢;同一類型的刀具,刀桿越長,吃刀量就要減小,否則容易彈刀而產生過切。
② 白鋼刀轉速不可過快,進給速度不可過大。
③ 白鋼刀容易磨損,開粗時少用白鋼刀。
① 以上的飛刀參數只能作為參考,因為不同的飛刀材料其參數值也不相同,不同的刀具廠生產的飛刀其長度也略有不同。另外,刀具的參數值也因數控銑床或加工中心的性能和加工材料的不同而不同,所以刀具的參數一定要根據工廠的實際情況來設定。
② 飛刀的剛性好,吃刀量大,最適合模胚的開粗。另外,飛刀精加工陡峭面的質量也非常好。③ 飛刀主要是鑲刀粒的,沒有側刃,① 合金刀剛性好,不易產生彈刀,用于精加工模具的效果最好。
② 合金刀和白鋼刀一樣有側刃,精銑銅公直壁時往往使用其側刃。
① 刀具的名稱一般根據刀具的直徑和圓角半徑來定義,例如,直徑為30,圓角半徑為5的飛刀,其名稱定義為D30R5;直徑為12的平底刀,其名稱定義為D12;半徑為5的球刀,其名稱定義為R5。
② 輸入刀具名稱時,只需要輸入小寫字母即可,系統會自動將字母轉為大寫狀態。③ 設置刀具參數時,只需要設置刀具的直徑和底圓角半徑即可,其他參數按默認即可。加工時,編程人員還需要編寫加工工藝說明卡,注明刀具的類型和實際長度。
機床坐標一般在工件頂面的中心位置,所以創建機床坐標時,最好先設置好當前坐標,然后在〖CSYS〗對話框中設置“參考”為WCS。
加工模具時,其開粗余量多設為0.5,但如果是加工銅公余量就不一樣了,因為銅公(銅公是火花機放電加工用的電極)最后的結果是要留負余量的。
模具加工要求越高時,其對應的公差值就應該越小。
進行實體模擬驗證前,必須設置加工工件和毛坯,否則無法進行實體模擬。
第五篇:編程題總結
C作業匯總
1.short a,b=32767;/*short類型在內存中占2B*/ a=b+1;問:a的值是多少?并分析原因。
2.有一4位數整數,假設用abcd表示,請把這個4位數的每個數位用表達式表示出來。3.從鍵盤輸入圓的半徑r,計算并輸出圓的面積s(要求:半徑r定義為float型;圓周率?定義為符號常量;面積s保留2位小數)#define PI 3.14159 #include
4.輸入m>=3的正整數,判斷m是否素數。畫出算法流程圖及NS圖
5.有一函數:
x?1 ?x ?y??2x?1 1?x?10
?3x-11 x?10 ?寫一段程序,輸入x,輸出y值。
要求x,y聲明為float類型,y保留2位小數。#include
if(x<1)
y=x;else
if(x<10)
y=2*x-1;
else
y=3*x-11;
}
printf(“y=%.2fn”,y);
x3x5x7x9?????,6.課后習題4.17(P159)利用泰勒級數sinx?x?計算sinx的3!5!7!9!值。要求最后一項的絕對值小于10,并統計出此時累加了多少項。#include
/*記錄每個項數*/ int n=1,count=0;/*count記錄累加了多少項*/
printf(“請輸入x值(弧度):n”);scanf(“%f”,&x);
term=x/n;while(fabs(term)>1e-5)
/* while循環*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}
/* do
/*do while循環*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);
*/
printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d項。n”,count);}
7.用牛頓迭代法求下面方程在1.5附近的根:
2x?4x?3x?6?0 32?5
牛頓迭代公式:
x1?x0?f(x0)f?(x0)
#include
/*y1記錄f(x0),y2記錄f(x0)的導數*/
do {
x0=x1;
y1=2*x0*x0*x0-4*x0*x0+3*x0-6;
y2=6*x0*x0-8*x0+3;
x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);
printf(“the root is:%.2fn”,x1);}
8.寫一函數,輸入一個16進制整數,輸出相應的10進制數。例:從鍵盤輸入2a,輸出結果是42。
要求:若輸入數據不合法,則輸出提示信息。如輸入了35g,輸出“您輸入的16進制數不合法!”。
#include
printf(“請輸入一個16進制數字:n”);
while((c=getchar())!='n'){
if(c>='0' && c<='9')
sum=sum*16+c-'0';
else
if(c>='a' && c<='f')
sum=sum*16+c-87;
else
if(c>='A' && c<='F')
sum=sum*16+c-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應的10進制數是:%dn”,sum);} 方法2:用字符串處理的方式 #include
printf(“請輸入一個16進制數字:n”);gets(str);
for(i=0;str[i];i++){
if(str[i]>='0' && str[i]<='9')
sum=sum*16+str[i]-'0';
else
if(str[i]>='a' && str[i]<='f')
sum=sum*16+str[i]-87;
else
if(str[i]>='A' && str[i]<='F')
sum=sum*16+str[i]-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應的10進制數是:%dn”,sum);} 方法3:用字符數組及指針處理的方式 #include
{ char str[20],*p=str;int sum=0;
printf(“請輸入一個16進制數字:n”);gets(p);
while(*p){
if(*p>='0' && *p<='9')
sum=sum*16+*p-'0';
else
if(*p>='a' && *p<='f')
sum=sum*16+*p-87;
else
if(*p>='A' && *p<='F')
sum=sum*16+*p-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
}
p++;}
printf(“相應的10進制數是:%dn”,sum);} 9.編寫一個小函數,其功能是計算兩個整數的平均值,該函數要在主函數中調用。
#include
avg=average(x,y);
printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}
float average(int x,int y)
{ return(x+y)/2.0;}
10.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,將這個整型數組中的值逆序存放。例如,原來5個元素的順序為8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include
printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); for(i=0;i t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;} printf(“n逆序之后數組的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n”);} 11.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,對該數組元素進行由小到大排序(要求,該功能用函數實現),輸出數組中各元素值。最后,從鍵盤隨機輸入一個整數,并把該整數插入上述數組中(該功能用函數實現),使得插入該整數后的數組仍然有序,輸出數組中各元素的值。#define N 5 #include int i,x;void sort(int array[],int n);void insert(int array[],int n,int x); printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); sort(a,N); /*調用sort對數組進行排序*/ printf(“n升序排序之后數組的值是:n”);for(i=0;i printf(“%d ”,a[i]); printf(“n輸入一個x值插入到數組中:n”);scanf(“%d”,&x); insert(a,N,x); printf(“n插入%d之后數組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”);} void sort(int array[],int n)/*用選擇法對數組array升序排序*/ { int i,j,t,min; for(i=0;i min=i; for(j=i+1;j if(array[j] min=j; if(min!=i) { t=array[i]; array[i]=array[min]; array[min]=t; } } } void insert(int array[],int n,int x){ int i,pos; for(i=0;i pos=i; for(i=n-1;i>=pos;i--) array[i+1]=array[i]; array[pos]=x;} 12.有一整型數組,N(N用宏定義為符號常量)個元素,該數組中各元素值從鍵盤隨機輸入。從鍵盤隨機輸入一個整數x,刪除該數組中值與x相同的所有元素(該功能用函數實現),輸出數組中各元素的值。#define N 5 #include printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n請輸入要刪除的值x:n”);scanf(“%d”,&x); n=delet(a,N,x); /*n值是刪除與x相同的元素后,數組剩余元素的個數。*/ printf(“刪除%d之后數組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”); } int delet(int a[],int n,int x){ int i,j; for(i=0,j=0;i if(a[i]!=x) a[j++]=a[i]; return j;} 13.從鍵盤隨機輸入一字符串,將所有ASCII值為偶數的字符輸出。例如:輸入abc123,輸出結果是b2(因為b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇數) #include printf(“輸入字符串:n”);gets(str); printf(“ASCII碼是偶數的字符有:”);for(i=0;str[i];i++) if(str[i]%2==0)putchar(str[i]); printf(“n”);} 14.從鍵盤輸入兩個字符串s1,s2,把s2連接到s1的末尾。不能用strcat函數 #include printf(“輸入兩個字符串,輸入回車鍵結束:n”);gets(str1);gets(str2); mystrcat(str1,str2); printf(“連接在一起的字符串是:n”);puts(str1); } void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2) *p1++=*p2++;*p1='
主站蜘蛛池模板:
国产伦子沙发午休系列资源曝光|
人妻熟女一区二区aⅴ千叶宁真|
亚洲鲁丝片一区二区三区|
天天天天做夜夜夜夜做无码|
99精品视频在线观看|
亚洲精品久久久久久中文字幕|
午夜性刺激免费看视频|
在线观看免费人成视频|
99久久婷婷国产综合精品青草漫画|
亚洲av无码乱码精品国产|
无遮挡1000部拍拍拍免费|
国产成人精品日本亚洲一区|
亚洲欧美熟妇自拍色综合图片|
国产成人无码久久久精品一|
人妻奶水人妻系列|
好日子在线观看视频大全免费动漫|
国产偷国产偷亚州清高app|
欧美乱码精品一区二区三区|
人妻激情偷乱视频一区二区三区|
思思99re6国产在线播放|
国产欧美精品一区二区三区四区|
亚洲群交|
国产在线精品一区二区高清不卡|
国产爆乳无码视频在线观看|
亚洲成av人在线视|
成人无码免费一区二区三区|
蜜芽久久人人超碰爱香蕉|
久久综合香蕉国产蜜臀av|
美女裸奶100%无遮挡免费网站|
人妻尝试又大又粗久久|
中文天堂网www新版资源在线|
成人无码一区二区三区|
色偷拍 自怕 亚洲 10p|
国产69精品久久久久9999|
久久久这里只有精品10|
亚洲乱码一区二区三区在线观看|
狠狠色丁香久久婷婷综合蜜芽五月|
国产肥熟女视频一区二区三区|
香蕉久久人人97超碰caoproen|
亚洲中文字幕无码av正片|
国产精品无码日韩欧|