收藏 分销(赏)

C++实用程序工具包.doc

上传人:pc****0 文档编号:7193846 上传时间:2024-12-27 格式:DOC 页数:17 大小:58.50KB 下载积分:10 金币
下载 相关 举报
C++实用程序工具包.doc_第1页
第1页 / 共17页
C++实用程序工具包.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
实用程序工具包 C++面向对象程序设计 课程设计报告 设计题目: 实用程序工具包 学生姓名: 专业班级: 指导教师: 一、实践要求 一些语句在逻辑上不相关,但却经常使用,将它们收集起来形成实用程序工具包 untility . h ,今后所有程序都可用它,只要在包含有如下预处理命令: # include “untility . h” //实用程序工具包头文件 二、课题分析 1 .系统依赖性 在实用程序工具包中包含有常用的标准库系统,这些库文件的名字因为使用 ANSI 版还是老版本的 C + +而有所不同,将这些依赖系统的特征收集在实用程序工具包中,使程序的部分不依赖于系统中 C + +的精确版本,这样可改进程序的可移植性,可以在不同版本的编译器中轻易地编译它们。 2 .实用函数 ( 1 ) GetChar( ) 函数。经常会遇到要用户输人需跳过的空格及制表符,比如在输人用字符表示的某种选择时,并不需要空格及制表符,试实现 GetChar( ) 函数。 ( 2 ) UserSaysYes( )函数。在很多程序中都可加入实用UserSaysYes( )函数,而在标准库中并没有此函数,为此在 untility . h 中加入此函数的定义。 3 .实用函数模板 在用 C + +编程时经常用到一些函数模板,使用这些函数模板将使编程更简单,这些函数模板包括交换两个数据元素的函数模板 Swap 与显示数组中各元素的值的函数模板 Show 。 4 .实用类 (1)计时器类 Timer 。在比较同一个问题的不同程序实现时,了解一个程序与另一个程序运行的计算机时间是非常有用的,为此目的,开发了一个实用的计时器类 Timer 。 (2)通用异常类 Error 。异常处理是提高程序健壮性的重要手段。在编写程序时,应该考虑到程序可能会出现的异常,在程序中加人异常处理的相关代码。为处理异常,专门建立一个通用异常类 Error ,使用户程序处理异常变得更加简单。 (3)随机数类 Rand 。在编写测试程序时,使用随机数生成测试数据更具有代表性,为了更好地应用,将有关随机数的函数封装成类 Rand 。 三、软件流程图 从键盘输入 判断是否为空格或者制表符? 返回输入的字符 是是 否 从键盘输入一个字符 判断是否为?‘n’? 返回false 判断是否为‘n’? 返回true 否 是 四、源代码 #ifndef _UTILITY_H_ #define _UTILITY_H_ #ifdef _MSC_VER #if _MSC_VER==1200 #include<string> #include<iostream> #include<limits> #include<cmath> #include<fstream> #include<cctype> #include<ctime> #include<cstdlib> #include<iomanip> #include<cstdarg> #include<cassert> using namespace std; #include <time.h> #include <conio.h> #endif #else #include<string.h> #include<iostream.h> #include<limits.h> #include<math.h> #include<fstream.h> #include<ctype.h> #include<time.h> #include<stdlib.h> #include<iomanip.h> #include<stdarg.h> #include<assert.h> #endif /* char GetChar(istream &inStream=cin); /ar GetChar(istream &in=cin); bool UserSaysYes(); template <class ElemType> void Swap(ElemType &e1,ElemType &e2); template<class ElemType> void Display(ElemType elem[],int n); class Timer; class Error; class Rand; */ char GetChar(char in=getche()) { // char ch; while ((in==' '||in=='/t')) in=getche(); fflush(stdin); return in; } bool UserSaysYes() { char ch; bool initialResponse=true; while (1) { if(initialResponse) cout<<"(y,n)?"; else cout<<"用y或n回答:"; while((ch=GetChar())=='\n'); initialResponse=false; if((ch=='y')||(ch=='Y')||(ch=='n')||(ch=='N')) { // while(GetChar()!='\n'); if (ch=='y'||ch=='Y') return true; else return false; } else { // while(GetChar()!='\n'); continue; } } } template <class ElemType> void Swap(ElemType &e1,ElemType &e2) { ElemType temp; temp=e1;e1=e2;e2=temp; } template<class ElemType> void Show(ElemType elem[],int n,int iFlag) { for(int i=0;i<n;i++) { cout<<elem[i]; if(iFlag) { cout<<'\t'; } } cout<<endl; } //计时器类Timer class Timer { private: clock_t startTime; clock_t endTime; public: Timer(){startTime=clock();} double ElapsedTime() const { return (double)(endTime-startTime)/(double)CLK_TCK; } void Reset(){startTime=clock();} double get_startTime(){return (double) startTime/(double)CLK_TCK;} double get_endTime(){return (double)(endTime=clock())/(double)CLK_TCK;} }; #define MAX_ERROR_MESSAGE_LEN 100 class Error { private: char message [MAX_ERROR_MESSAGE_LEN]; public: Error(char mes[]="一般性异常!"){strcpy(message,mes);} void Show() const {cout<<message<<endl;} }; //随机数类Rand class Rand { public: static void SetRandSeed() {srand((unsigned)time(NULL));}//设置当前时间为随机数种子 static int GetRand(int n){return rand()%n;} static int GetRand(){return rand();} }; #endif 五、主函数 #include <iostream> #include "untility.h" using namespace std; int main(void) { char abc[20]; bool tag=true; bool tmp; int n; int i=0; char ch; try { while (tag) { cout<<"请输入矩阵阶数:"; cin>>n; if (n>1000)throw Error("阶数太大了!"); int **a,**b,**c; Timer objTimer; int i,j,k; a=new int *[n]; b=new int *[n]; c=new int *[n]; for(i=0;i<n;i++) { a[i]=new int[n]; b[i]=new int[n]; c[i]=new int[n]; } Rand::SetRandSeed(); objTimer.Reset(); cout<<"起始时间为:"<<objTimer.get_startTime()<<endl; for(i=0;i<n;i++) for(j=0;j<n;j++) { a[i][j]=Rand::GetRand(); b[i][j]=Rand::GetRand(); } for(i=0;i<n;i++) for(j=0;j<n;j++) { c[i][j]=0; for(k=0;k<n;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j]; } for(i=0;i<n;i++) { Show(a[i],n,1); cout<<endl; } cout<<"是否对第一第二个数进行交换"<<endl; tmp=UserSaysYes(); cout<<endl; if(true==tmp) { Swap(a[0][0],a[0][1]); Show(a[0],2,1); cout<<endl; } for(i=0;i<n;i++) { delete []a[i]; delete []b[i]; delete []c[i]; } delete []a; delete []b; delete []c; cout<<"终止时间为:"<<objTimer.get_endTime()<<endl; cout<<"用时:"<<objTimer.ElapsedTime()<<"秒."<<endl; cout<<"是否继续"<<endl; tag=UserSaysYes(); } } catch (Error err) { err.Show(); } i=0; cout<<"GetChar测试 结束按回车"<<endl; while((ch=GetChar())!=13) { abc[i]=ch; i++; } abc[i]='\0'; i=strlen(abc); cout<<endl; Show(abc,i,0); return 0; } 六、测试情况 七、心得体会 课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。 通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 我们做的课程设计,虽然是很简单的一个小的程序,但对我们来说却是一个很大的困难。更加是第一次做此类的课程设计,主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。 开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。 在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,了解到团队分工的重要性。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服