第一篇: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.有一函数:
x1 x y2x1 1x10
3x-11 x10 写一段程序,输入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)利用泰勒级数sinxx计算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附近的根:
2x4x3x60 325
牛顿迭代公式:
x1x0f(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=' ';} 15.从键盘输入一个字符串,把其中最长的单词输出。单词定义为连续的一串英文字母。如输入I am a student.输出结果为student #include { char str[80];int i,start,len=0,lenthest=0,lenstart=0;int word=0; printf(“input a string:n”);gets(str); for(i=0;str[i];i++){ if(str[i]>='a' && str[i]<='z' || str[i]>='A'&&str[i]<='Z') if(!word) { word=1; start=i; } else { len++; } else if(word) { word=0; } } if(len>lenthest){ lenthest=len;lenstart=start;} len=0; printf(“the lenthest word is:n”);for(i=lenstart;i<=lenstart+lenthest;i++) putchar(str[i]); printf(“n”);} 16.有一整型数组,N(N用宏定义为符号常量)个元素,该数组中各元素值从键盘随机输入。编写函数calculate,计算出所有元素的最大值、最小值、平均值,结果在主函数中输出。#define N 5 #include printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); calculate(a,&max,&min,&avg); printf(“数组中所有元素的最大值、最小值、平均值分别是:n”);printf(“最大值max=%d,n”,max);if(word)if(len>lenthest){ lenthest=len; lenstart=start;} printf(“最小值min=%d,n”,min);printf(“平均值avg=%.2f,n”,avg); } void calculate(int a[],int *pmax,int *pmin,float *pavg){ int i;int sum; *pmax=*pmin=sum=a[0]; for(i=1;i if(a[i]>*pmax) *pmax=a[i]; if(a[i]<*pmin) *pmin=a[i]; sum=sum+a[i];} *pavg=(float)sum/N;}