实验五--模板与异常处理(共23页)_第1页
实验五--模板与异常处理(共23页)_第2页
实验五--模板与异常处理(共23页)_第3页
实验五--模板与异常处理(共23页)_第4页
实验五--模板与异常处理(共23页)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上皖西学院信息工程学院School of Information and Engineering, West Anhui University面向对象方法与C+程序设计实验报告 专 业计算机科学与技术专业班 级计科1202班姓 名柯冬生学 号任课教师何富贵 实验五 模板与异常处理(2学时)学号: 姓名:柯冬生 班级:计科1202班 成绩:实验名称:模板与异常处理实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:(1)正确理解模板的概念。(2)掌握函数模板和类模板的声明和使用方法。(3)学习简单的异常处理方法。二、实

2、验内容:1.分析并调试下列程序,写出运行结果并分析原因。 (1) /test6_1_1.cpp #include <iostream> using namespace std; template<typename T> T max (T x,T y) return x>y? x:y;int max(int a,int b)return a>b? a:b;double max (double a,double b)return a>b? a:b;int main() cout<<”max(3,7) is “<<max(3,7)&l

3、t;<endl; return 0;(2)/test6_1_2.cpp #include <iostream>using namespace std;int max(int a,int b)return a>b? a:b;double max (double a,double b)return a>b? a:b;int main() cout<<”max(3,7) is “<<max(3,7)<<endl; return 0;代码:(1) #include<iostream> using namespace std;

4、 template <typename T> T max(T x,T y) return x>y?x:y; int max(int a,int b) return a>b?a:b; double max(double a,double b) return a>b?a:b; int main() cout<<"max('3','7') is "<<max('3','7')<<endl; return 0; (2)#include<iostre

5、am> using namespace std; int max(int a,int b) return a>b?a:b; double max(double a,double b) return a>b?a:b; int main() cout<<"max('3','7') is "<<max('3','7')<<endl; return 0; 实验结果:(1) 定义了一个求最大值的函数模板,定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两

6、个同名非模板函数与函数模板重载.3和7均是字符型,找不到与之匹配的函数,所以调用了函数模板,使其实例化,由T型转变为char型。(2)定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名函数重载.3和7均是字符型,找不到与之匹配的函数,所以得不出正确结果。2.编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。代码:#include <iostream> using namespace std; template<typename T> T max (T * x,int n) T max=x0; for(i

7、nt i=1;i<n;i+) max=max>xi? max:xi; return max; template<typename T> T min (T * x,int n) T min=x0; for(int i=1;i<n;i+) min=min<xi? min:xi; return min; int main() int a5= 1,4,2,3,5 ; double b5=1.1,4.4,2.2,3.3,5.5; cout<<"数组a5= 1,4,2,3,5的最大值is: "<<max(a,5)<<

8、;endl; cout<<"数组a5= 1,4,2,3,5的最小值is: "<<min(a,5)<<endl; cout<<"数组b5=1.1,4.4,2.2,3.3,5.5的最大值is: "<<max(b,5)<<endl; cout<<"数组b5=1.1,4.4,2.2,3.3,5.5的最小值is: "<<min(b,5)<<endl; return 0; 实验结果:3. 编写一个程序,使用类模板对数组元素进行排序、倒置、查

9、找和求和。【提示】设计一个类模板template <class Type>class Array .;具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。代码:#include<iostream> using namespace std; template <class Type> class Array1 public: Array1 (Type *a,int length) len=length; for(int i=0;i<len;i+) Array

10、i=ai; /template <class Type> void sort()/排序 Type a10 ,temp; for(int n=0;n<len;n+) an=Arrayn; for(int j=0;j<len;j+) for (int i=0;i<len-1-j;i+) if (ai>ai+1) temp=ai; ai=ai+1; ai+1=temp; cout<<"数组排序"<<endl; for(int m=0;m<len;m+) cout<<am<<" &q

11、uot; cout<<endl; /template <class Type> void invert()/倒置 Type invert10; for(int j=0;j<len;j+) invertj=Arraylen-1-j; cout<<"数组倒置"<<endl; for(int m=0;m<len;m+) cout<<invertm<<" " cout<<endl; void seek(Type y)/查找 int i=0; for(int j=0;j

12、<len;j+) if(Arrayj=y) cout<<"查找成功!"<<"在第"<<j<<"位置"<<endl; i=j; / break; if(i=0) cout<<"查找不成功!"<<endl; /template <class Type> void sum()/求和 Type sum=Array0; for(int j=1;j<len;j+) sum=sum+Arrayj; cout<<

13、"数组之和:"<<sum<<endl; private: int len; Type Array10; ; int main() int c5=1,8,2,7,9; double d4=3.1,8.9,56.9,2.9; Array1<int>a(c,5); Array1<double>b(d,4); cout<<"*int型数组*"<<endl; cout<<"原函数为:"<<endl; for(int i=0;i<5;i+) co

14、ut<<ci<<" " cout<<endl; a.sort(); a.invert(); a.seek(3); a.sum(); cout<<"*double型数组*"<<endl; cout<<"原函数为:"<<endl; for(int j=0;j<4;j+) cout<<dj<<" " cout<<endl; b.sort(); b.invert(); b.seek(8.9); b.

15、sum(); return 0; 实验结果:4.编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。代码:#include <iostream> #include <cmath> using namespace std; void main() double number; double result; cout << "请输入一个数: " cin >> number; try if (number < 0) throw exception("输入的数是负数! "); result

16、 = sqrt(number); cout << "平方根是:" << result << endl; catch (exception e) cout << e.what() << endl; 实验结果:3、 实验总结:1.在使用非模板函数时要注意输入的语句应符合函数的类型,或者定义一个函数模板使其实例化,否则无法得出正确结论。2.对异常处理有了一些理解,但不知道异常处理(如第4题)可以循环吗?3.对用类模板实现线性表不是很懂。 任课教师签名: 实验六 C+的流类库与输入输出(2学时)学号: 姓名:柯冬生 班级:

17、计科1202班 成绩:实验名称:C+的流类库与输入输出实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:(1)掌握C+格式化的输入输出方法。(2)掌握重载运算符“<<”和“>>”的方法。(3)掌握磁盘文件的输入输出方法。二、实验内容:1. 下面给出的test7_1_1.cpp程序用于打印九九乘法表,但程序中存在错误。请上机调试,使得此程序运行后,能够输出如下所示的九九乘法表。* 1 2 3 4 5 6 7 8 91 12 2 43 3 6 9 4 4 8 12 165 5 10 15 20 256 6 12 18

18、24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81/test7_1_1.cpp#include <iostream>#include <iomanip>using namespace std;int main() int i,j; cout<<”*”; for(i=1;i<=9;i+)cout<<i<<” ”; cout<<endl;for(i=1;i<=9;i+) cout<<i; for

19、(j=1;j<=i;j+) Cout<<i*j;return 0;代码:#include <iostream>#include <iomanip>using namespace std;int main()int i,j;cout<<setiosflags(ios:right)<<setw(4)<<"*"for(i=1;i<=9;i+)cout<<setiosflags(ios:right)<<setw(4)<<i;cout<<endl;for

20、(i=1;i<=9;i+) cout<<setiosflags(ios:right)<<setw(4)<<i;for(j=1;j<=i;j+)cout<<setiosflags(ios:right)<<setw(4)<<i*j;cout<<endl;return 0;实验结果:2.下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。 /test7_2_1.cpp #include<iostream> #include<fstream> using namespa

21、ce std; int main() char ch;int i=0;ifstream file;file.open(“xyz.txt”,ios:in);if( ) cout<<”xyz.txt cannot open”<<endl; abort();While (!file.eof() i+; cout<<”文件字符个数:”<<i<<endl; return 0;代码:#include<iostream>#include<fstream>using namespace std;int main()char c

22、h;int i=0;ifstream file;file.open("xyz.txt",ios:in);if(!file) cout<<"xyz.txt cannot open"<<endl;abort();while (!file.eof()file.get(ch);if(ch<=122&&ch>=97)|(ch<=90&&ch>=65)i+;cout<<"文件字符个数:"<<i<<endl; file.close()

23、;return 0;实验结果: 3.重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。商品的信息由编号、商品名和价格。假如商品类Merchandise的框架如下:class merchandisepublic: Merchandiss(); Merchandiss(); friend istream& operator>>(istream& in,Merchandiss& s); friend ostream&operator<<(ostream& out,Merchandiss

24、& s);private: int no; char *name; double price;要求实现该类,并编写以下的main函数对该类进行操作。int main() Merchandise mer; cin>>mer; cout<<mer; return 0;代码:#include<iostream.h>class Merchandisepublic:Merchandise();Merchandise();friend istream&operator>>(istream& in,Merchandise& s)

25、;friend ostream&operator<<(ostream& out,Merchandise& s);private:int no;char *name;double price;Merchandise:Merchandise()no=0;name = new char20;price = 0;Merchandise:Merchandise()delete name;istream&operator>>(istream& in,Merchandise& s)cout<<"input the

26、Merchandises:"<<endl;cout<<"no:"in>>s.no;cout<<"name:"in>>;cout<<"price:"in>>s.price;return in;ostream&operator<<(ostream& out,Merchandise& s)out<<"Merchandise:"<<endl;out<&l

27、t;"no:"<<s.no<<endl;out<<"name:"<<<<endl;out<<"price:"<<s.price<<endl;return out;int main()Merchandise mer;cin>>mer;cout<<mer;return 0;实验结果:4.编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。代码:#include&l

28、t;iostream>#include<fstream>using namespace std;int main()char ch;ifstream file1;ifstream file2;ofstream file3;file1.open("xyz.txt",ios:in);file2.open("qwe.txt",ios:in);file3.open("asd.txt",ios:out);if(!file1 | !file2) cout<<"xyz.txt cannot open"

29、;<<endl;abort();file1.seekg(0);file2.seekg(0);while(!file1.eof()file1.get(ch);if(ch<=122&&ch>=97)ch = ch-32;file3.put(ch);cout<<ch;while(!file2.eof()file2.get(ch);if(ch<=122&&ch>=97)ch = ch-32;file3.put(ch);cout<<ch;file1.close();file2.close();file3.clos

30、e();return 0;实验结果: 3、 实验总结:通过这次试验,我学习掌握了C+格式化的输入输出方法,掌握了重载运算符“<<”和“>>”的方法,掌握了磁盘文件的输入输出方法,能够更加熟悉地运用Visual C+ 6.0的系统。 任课教师签名: 实验七 Windows程序框架及MFC编程(2学时)学号: 姓名:柯冬生 班级:计科1202班 成绩:实验名称:Windows程序框架及MFC编程实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:1学习windows基于消息事件驱动方式的程序设计2学习一个完整的窗口编制的

31、四个操作步骤3了解Windows提供的窗口类4了解回调函数5学习MFC对话框和单文档编程的一般方法5学习使用MSDN帮助解决问题二、实验内容:1写一个Win32 Application应用程序,要求当点击关闭时,弹出对话框确定关闭,否则不关闭。运行初始时,在文档窗口显示“Hello”。代码:/-初始化BOOL CTestDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command ran

32、ge.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STR

33、ING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereSetDlgItemText(IDC_EDIT1, &q

34、uot;hello");return TRUE; / return TRUE unless you set the focus to a control/-提示对话框确定是否关闭void CTestDlg:OnOK() / TODO: Add extra validation hereint flag;flag = AfxMessageBox("是否确认关闭?",100,10);if(flag!=6)return;CDialog:OnOK();实验结果:2练习使用VC+的AppWizard(应用程序向导)生成一个最简单的基于MFC单文档或者基于对话框的应用程序。提

35、示:I.单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中,选择“Win32 Application”。在Location(位置)文本框中指定一个路径,在Preject Name(项目名称)文本框中为项目输入一个名字,单击OK(确定)。选择菜单命令Project | Add to Project | New,弹出New对话框。在new对话框的Files选项卡中选择C+ Source File,并填入文件名称,单击OK按钮,完成新建C+源程序文件。II.创建一个项目,单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中

36、,选择“MFC AppWizard(exe)”。在Location(位置)文本框中指定一个路径,在Preject Name(项目名称)文本框中为项目输入一个名字,单击OK(确定)。III.在出现的对话框中选择Single Document或者dialog based,单击Next(下一步)按钮。以后每步接受缺省,单击Finish(完成)按钮,AppWizard)显示一个摘要表,其中列出了所选的项目特征。单击OK(确定)创建项目。IV.编译、运行。查看各个生成的cpp文件,分析生成的,了解代码的执行过程。代码:/-确定按钮void CTestDlg:OnButton1() / TODO: Add

37、 your control notification handler code hereCString str = "您选择的商品有:n"if(CButton*)GetDlgItem(IDC_CHECK1)->GetCheck()=BST_CHECKED)str = str + "青椒肉丝" + "n"if(CButton*)GetDlgItem(IDC_CHECK2)->GetCheck()=BST_CHECKED)str = str + "鱼香肉丝" + "n"if(CButto

38、n*)GetDlgItem(IDC_CHECK3)->GetCheck()=BST_CHECKED)str = str + "圆葱大肠" + "n"if(CButton*)GetDlgItem(IDC_CHECK4)->GetCheck()=BST_CHECKED)str = str + "茂林小炒" + "n"if(CButton*)GetDlgItem(IDC_CHECK5)->GetCheck()=BST_CHECKED)str = str + "韭菜鸡蛋" + &quo

39、t;n"if(CButton*)GetDlgItem(IDC_CHECK6)->GetCheck()=BST_CHECKED)str = str + "西红柿鸡蛋汤" + "n"int flag;flag = AfxMessageBox(str,100,10);if(flag!=6)return;elseMessageBox("订购成功","订餐系统",0);CDialog:OnOK();/-关闭按钮void CTestDlg:OnOK() / TODO: Add extra validation

40、hereint flag;flag = AfxMessageBox("是否确认关闭?",100,10);if(flag!=6)return;CDialog:OnOK();实验结果:3、 实验总结: 通过这次试验,我学习了windows基于消息事件驱动方式的程序设计,一个完整的窗口编制的四个操作步骤,了解了Windows提供的窗口类,了解回调函数,学习到MFC对话框和单文档编程的一般方法,学习使用MSDN帮助解决问题。 任课教师签名: 实验八 数据库编程(2学时)学号: 姓名:柯冬生 班级:计科1202班 成绩:实验名称:数据库编程实验地点:综合楼207所使用的工具软件及环境

41、:Microsoft Visual C+ 6.0一、实验目的:1创建数据库unicom.mdb;2在视图类“DAO数据库View.cpp”文件前面的文件中导入另一个类CStudentInfoDlg,通过#include” StudentInfoDlg”;3控件变量的设置;4数据记录的显示。二、实验内容:(1)打开Microsoft Access 2003,创建数据库unicom.mdb(该数据库包含一个表unicom,表的结构和表的内容如表6.20所示)。(2)由于DAO要求与Microsoft Access 97数据库进行操作,因此必须将unicom.mdb换成Microsoft Acces

42、s 97文件格式,转换后的数据库文件名为unicomn,并存放在“桌面”上。转换步骤:打开用Microsoft Access 2003创建的数据库unicom.mdb并选中unicom表,选择“工具”“数据库使用工具”“转换数据库”“转为Access97文件格式”命令,在出现的对话框中的“文件名(N)”处重起文件名,如unicomn。保存并单击“确定”按钮,至此该数据库就转换成Microsoft Access 97文件格式了。注意:当打开转换好的unicomn数据库时,在出现的对话框中,选中“打开数据库”单击“确定”再单击“打开”à确定à双击数据表的名字,该数据库就打开了。

43、(3)创建一个单文档应用程序,名为:DAO数据库。在“MFC Appwizard-step 2 of 6”对话框中选择Database view without file support(查看数据库不使用文件支持)选项,单击Data Source按钮,出现图6.55所示的对话框。选择DAO单选按钮,单击按钮出现如图6.56所示的对话框,选择unicomn,单击“打开”按钮,发现处已有C:Documents and Settings Administrator桌面unicomn.mdb,如图6.57所示。单击OK按钮,出现如图6.58所示的对话框,从中选中unicom数据表,单击OK按钮回到“M

44、FC Appwizard-step 2 of 6”对话框,单击Finish按钮完成操作。(4)打开对话框资源编辑器IDD_DAO_FORM,在对话框上添加如图6.59布局,如表6.23所示的控件。(5)按Ctrl+W组合键,在出现的MFC ClassWizard对话框中打开Member Variables选项卡,为5个编辑框分别添加5个成员变量,如图6.60所示。 图6.55 选择数据源 图6.56 选择转换后的unicomn数据库 图6.57 选择了unicomn数据库 图6.58 选择unicom数据表 图6.59 对话框上添加的控件 图6.60 添加成员变量表6.23 添加控件列表控 件

45、ID标 题Group BoxIDC_STATIC学生信息Static TextIDC_STATIC学号Edit BoxIDC_EDIT_ID-Static TextIDC_STATIC姓名Edit BoxIDC_EDIT_NAME-Static TextIDC_STATIC性别Edit BoxIDC_EDIT_SEX-Static TextIDC_STATIC年龄Edit BoxIDC_EDIT_AGE-Static TextIDC_STATIC家庭住址Edit BoxIDC_EDIT_ADDRESS-ButtonIDC_BUTTON_ADD添加记录(&A)ButtonIDC_BUTT

46、ON_EDIT修改记录(&U)ButtonIDC_BUTTON_DELETE删除记录(&D)图6.61复制到IDD_DIALOG1 对话框上的控件(6)向项目中添加一个对话框资源,将IDD_DAO_FORM对话框上的“学生信息”组框以及“学生信息”组框内的各个控件复制到此对话框(IDD_DIALOG1)上,如图6.61所示。复制方法是:选中IDD_DAO_FORM对话框上的组框及组框内的各个控件,鼠标对准选中处右键单击,在弹出的快捷菜单中选择copy命令,然后双击项目工作区中的IDD_DIALOG1选项,出现IDD_DIALOG1对话框,鼠标对准对话框右键单击并选择Paste命

47、令,就把IDD_DAO_FORM对话框上的控件复制到IDD_DIALOG1对话框上了。说明:复制到IDD_DIALOG1对话框上的控件ID与原对话框IDD_DAO_FORM上的控件ID完全相同。(7)为添加的IDD_DIALOG1对话框资源建类,类名为:CStudentInfoDlg,并用ClassWizard为CStudentInfoDlg 类添加5个如表6.24所示的编辑框的成员变量。表6.24 添加成员变量列表类 名ID成员变量名成员变量类型CStudentInfoDlgIDC_EDIT_IDm_idshortCStudentInfoDlgIDC_EDIT_NAMEm_nameCStringCStudentInfoDlgIDC_EDIT_SEXm_sexCStringCStudentInfoDlgIDC_EDIT_AGEm_ageshortCStudentInfoDlgIDC_EDIT_ADDRESSm_addressCString(8)在视图类“DAO数据库View.cpp”文件前面的文件包含处写:#include "StudentInfoDlg.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论