《实验五--模板与异常处理.doc》由会员分享,可在线阅读,更多相关《实验五--模板与异常处理.doc(120页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date实验五-模板与异常处理实验五-模板与异常处理皖西学院信息工程学院School of Information and Engineering, West Anhui University面向对象方法与C+程序设计实验报告 专 业计算机科学与技术专业班 级计科1202班姓 名柯冬生学 号2012013854任课教师何富贵 实验五 模板与异常处理(2学时)学号:201201
2、3854 姓名:柯冬生 班级:计科1202班 成绩:实验名称:模板与异常处理实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:(1)正确理解模板的概念。(2)掌握函数模板和类模板的声明和使用方法。(3)学习简单的异常处理方法。二、实验内容:1.分析并调试下列程序,写出运行结果并分析原因。 (1) /test6_1_1.cpp #include using namespace std; template T max (T x,T y) return xy? x:y;int max(int a,int b)return ab? a:b;dou
3、ble max (double a,double b)return ab? a:b;int main() cout”max(3,7) is “max(3,7)endl; return 0;(2)/test6_1_2.cpp #include using namespace std;int max(int a,int b)return ab? a:b;double max (double a,double b)return ab? a:b;int main() cout”max(3,7) is “max(3,7)endl; return 0;代码:(1) #include using names
4、pace std; template T max(T x,T y) return xy?x:y; int max(int a,int b) return ab?a:b; double max(double a,double b) return ab?a:b; int main() coutmax(3,7) is max(3,7)endl; return 0; (2)#include using namespace std; int max(int a,int b) return ab?a:b; double max(double a,double b) return ab?a:b; int m
5、ain() coutmax(3,7) is max(3,7)endl; return 0; 实验结果:(1) 定义了一个求最大值的函数模板,定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名非模板函数与函数模板重载.3和7均是字符型,找不到与之匹配的函数,所以调用了函数模板,使其实例化,由T型转变为char型。(2)定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名函数重载.3和7均是字符型,找不到与之匹配的函数,所以得不出正确结果。2.编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。代码:#includ
6、e using namespace std; template T max (T * x,int n) T max=x0; for(int i=1;ixi? max:xi; return max; template T min (T * x,int n) T min=x0; for(int i=1;in;i+) min=minxi? 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)endl; cout数组a5=
7、 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. 编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。【提示】设计一个类模板template class Array .;具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。代码:#includ
8、e using namespace std; template class Array1 public: Array1 (Type *a,int length) len=length; for(int i=0;ilen;i+) Arrayi=ai; /template void sort()/排序 Type a10 ,temp; for(int n=0;nlen;n+) an=Arrayn; for(int j=0;jlen;j+) for (int i=0;iai+1) temp=ai; ai=ai+1; ai+1=temp; cout数组排序endl; for(int m=0;mlen;m
9、+) coutam coutendl; /template void invert()/倒置 Type invert10; for(int j=0;jlen;j+) invertj=Arraylen-1-j; cout数组倒置endl; for(int m=0;mlen;m+) coutinvertm coutendl; void seek(Type y)/查找 int i=0; for(int j=0;jlen;j+) if(Arrayj=y) cout查找成功!在第j位置endl; i=j; / break; if(i=0) cout查找不成功!endl; /template void s
10、um()/求和 Type sum=Array0; for(int j=1;jlen;j+) sum=sum+Arrayj; cout数组之和:sumendl; private: int len; Type Array10; ; int main() int c5=1,8,2,7,9; double d4=3.1,8.9,56.9,2.9; Array1a(c,5); Array1b(d,4); cout*int型数组*endl; cout原函数为:endl; for(int i=0;i5;i+) coutci ; coutendl; a.sort(); a.invert(); a.seek(3
11、); a.sum(); cout*double型数组*endl; cout原函数为:endl; for(int j=0;j4;j+) coutdj ; coutendl; b.sort(); b.invert(); b.seek(8.9); b.sum(); return 0; 实验结果:4.编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。代码:#include #include using namespace std; void main() double number; double result; cout number; try if (number 0) th
12、row exception(输入的数是负数! ); result = sqrt(number); cout 平方根是: result endl; catch (exception e) cout e.what() endl; 实验结果:三、 实验总结:1.在使用非模板函数时要注意输入的语句应符合函数的类型,或者定义一个函数模板使其实例化,否则无法得出正确结论。2.对异常处理有了一些理解,但不知道异常处理(如第4题)可以循环吗?3.对用类模板实现线性表不是很懂。 任课教师签名: 实验六 C+的流类库与输入输出(2学时)学号:2012013854 姓名:柯冬生 班级:计科1202班 成绩:实验名称
13、: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 24 30 367 7 14 21 28 35 42 498 8 1
14、6 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81/test7_1_1.cpp#include #include using namespace std;int main() int i,j; cout”*”; for(i=1;i=9;i+)couti” ”; coutendl;for(i=1;i=9;i+) couti; for(j=1;j=i;j+) Couti*j;return 0;代码:#include #include using namespace std;int main()int i,j;coutsetiosflags(ios:righ
15、t)setw(4)*;for(i=1;i=9;i+)coutsetiosflags(ios:right)setw(4)i;coutendl;for(i=1;i=9;i+) coutsetiosflags(ios:right)setw(4)i;for(j=1;j=i;j+)coutsetiosflags(ios:right)setw(4)i*j;coutendl;return 0;实验结果:2.下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。 /test7_2_1.cpp #include #include using namespace std; int main() cha
16、r 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”文件字符个数:”iendl; return 0;代码:#include#includeusing namespace std;int main()char ch;int i=0;ifstream file;file.open(xyz.txt,ios:in);if(!file) coutxyz.txt cannot openendl;abort
17、();while (!file.eof()file.get(ch);if(ch=97)|(ch=65)i+;cout文件字符个数:iendl; file.close();return 0;实验结果: 3.重载运算符“”,使其能够输入一件商品的信息和输出这件商品的信息。商品的信息由编号、商品名和价格。假如商品类Merchandise的框架如下:class merchandisepublic: Merchandiss(); Merchandiss(); friend istream& operator(istream& in,Merchandiss& s); friend ostream&oper
18、atormer; coutmer; return 0;代码:#includeclass Merchandisepublic:Merchandise();Merchandise();friend istream&operator(istream& in,Merchandise& s);friend ostream&operator(istream& in,Merchandise& s)coutinput the Merchandises:endl;couts.no;couts.name;couts.price;return in;ostream&operator(ostream& out,Mer
19、chandise& s)outMerchandise:endl;outno:s.noendl;outname:s.nameendl;outprice:s.pricemer;coutmer;return 0;实验结果:4.编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。代码:#include#includeusing namespace std;int main()char ch;ifstream file1;ifstream file2;ofstream file3;file1.open(xyz.txt,ios:in);file2.open(q
20、we.txt,ios:in);file3.open(asd.txt,ios:out);if(!file1 | !file2) coutxyz.txt cannot openendl;abort();file1.seekg(0);file2.seekg(0);while(!file1.eof()file1.get(ch);if(ch=97)ch = ch-32;file3.put(ch);coutch;while(!file2.eof()file2.get(ch);if(ch=97)ch = ch-32;file3.put(ch);coutch;file1.close();file2.close
21、();file3.close();return 0;实验结果: 三、 实验总结:通过这次试验,我学习掌握了C+格式化的输入输出方法,掌握了重载运算符“”的方法,掌握了磁盘文件的输入输出方法,能够更加熟悉地运用Visual C+ 6.0的系统。 任课教师签名: 实验七 Windows程序框架及MFC编程(2学时)学号:2012013854 姓名:柯冬生 班级:计科1202班 成绩:实验名称:Windows程序框架及MFC编程实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:1学习windows基于消息事件驱动方式的程序设计2学习一个完整的窗
22、口编制的四个操作步骤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 range.ASSER
23、T(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big ic
24、onSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereSetDlgItemText(IDC_EDIT1, 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)
25、return;CDialog:OnOK();实验结果:2练习使用VC+的AppWizard(应用程序向导)生成一个最简单的基于MFC单文档或者基于对话框的应用程序。提示:I.单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中,选择“Win32 Application”。在Location(位置)文本框中指定一个路径,在Preject Name(项目名称)文本框中为项目输入一个名字,单击OK(确定)。选择菜单命令Project | Add to Project | New,弹出New对话框。在new对话框的Files选项卡中选择C+ Source File
26、,并填入文件名称,单击OK按钮,完成新建C+源程序文件。II.创建一个项目,单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中,选择“MFC AppWizard(exe)”。在Location(位置)文本框中指定一个路径,在Preject Name(项目名称)文本框中为项目输入一个名字,单击OK(确定)。III.在出现的对话框中选择Single Document或者dialog based,单击Next(下一步)按钮。以后每步接受缺省,单击Finish(完成)按钮,AppWizard)显示一个摘要表,其中列出了所选的项目特征。单击OK(确定)创建项目。I
27、V.编译、运行。查看各个生成的cpp文件,分析生成的,了解代码的执行过程。代码:/-确定按钮void CTestDlg:OnButton1() / TODO: Add 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 +
28、鱼香肉丝 + n;if(CButton*)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 + 韭菜鸡蛋 + n;if(CButton*)GetDlgItem(IDC_CHECK6)-GetCheck()=BST_CHEC
29、KED)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 hereint flag;flag = AfxMessageBox(是否确认关闭?,100,10);if(flag!=6)return;CDialog:OnOK();实验结果:三、 实验总结: 通过这次试验,我学习了window
30、s基于消息事件驱动方式的程序设计,一个完整的窗口编制的四个操作步骤,了解了Windows提供的窗口类,了解回调函数,学习到MFC对话框和单文档编程的一般方法,学习使用MSDN帮助解决问题。 任课教师签名: 实验八 数据库编程(2学时)学号:2012013854 姓名:柯冬生 班级:计科1202班 成绩:实验名称:数据库编程实验地点:综合楼207所使用的工具软件及环境:Microsoft Visual C+ 6.0一、实验目的:1创建数据库unicom.mdb;2在视图类“DAO数据库View.cpp”文件前面的文件中导入另一个类CStudentInfoDlg,通过#include” Stude
31、ntInfoDlg”;3控件变量的设置;4数据记录的显示。二、实验内容:(1)打开Microsoft Access 2003,创建数据库unicom.mdb(该数据库包含一个表unicom,表的结构和表的内容如表6.20所示)。(2)由于DAO要求与Microsoft Access 97数据库进行操作,因此必须将unicom.mdb换成Microsoft Access 97文件格式,转换后的数据库文件名为unicomn,并存放在“桌面”上。转换步骤:打开用Microsoft Access 2003创建的数据库unicom.mdb并选中unicom表,选择“工具”“数据库使用工具”“转换数据库”
32、“转为Access97文件格式”命令,在出现的对话框中的“文件名(N)”处重起文件名,如unicomn。保存并单击“确定”按钮,至此该数据库就转换成Microsoft Access 97文件格式了。注意:当打开转换好的unicomn数据库时,在出现的对话框中,选中“打开数据库”单击“确定”再单击“打开”确定双击数据表的名字,该数据库就打开了。(3)创建一个单文档应用程序,名为:DAO数据库。在“MFC Appwizard-step 2 of 6”对话框中选择Database view without file support(查看数据库不使用文件支持)选项,单击Data Source按钮,出现
33、图6.55所示的对话框。选择DAO单选按钮,单击按钮出现如图6.56所示的对话框,选择unicomn,单击“打开”按钮,发现处已有C:Documents and Settings Administrator桌面unicomn.mdb,如图6.57所示。单击OK按钮,出现如图6.58所示的对话框,从中选中unicom数据表,单击OK按钮回到“MFC Appwizard-step 2 of 6”对话框,单击Finish按钮完成操作。(4)打开对话框资源编辑器IDD_DAO_FORM,在对话框上添加如图6.59布局,如表6.23所示的控件。(5)按Ctrl+W组合键,在出现的MFC ClassWiz
34、ard对话框中打开Member Variables选项卡,为5个编辑框分别添加5个成员变量,如图6.60所示。 图6.55 选择数据源 图6.56 选择转换后的unicomn数据库 图6.57 选择了unicomn数据库 图6.58 选择unicom数据表 图6.59 对话框上添加的控件 图6.60 添加成员变量表6.23 添加控件列表控 件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_BUTTON_EDIT修改记录(&U)ButtonIDC_BUTTON_DELETE删除记录(&D)图6.61复制到IDD_DIALOG