版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封皮(按学校要求手工填写)成绩评定表学生姓名班级学号专业通信工程课程设计题目字符串类的设计与实现评语组长签字:成绩日期20 年 月曰课程设计任务书学院信息科学与工程专业通信工程学生姓名班级学号课程设计题目字符串类的设计与实现实践教学要求与任务进行字符串类的设计,具体要求如下:(1) 使用堆分配存储表示实现字符串的存储;(2)实现串赋值操作StrAssig n(&T,chars);(3)实现串比较操作StrCompare(S,T);(4)实现求串长操作StrLe ngth(S);(5)实现串连接操作Con cat(&T,S1,S2);(6)实现求子串操作SubStri ng(&Sub,S,pos
2、,le n);(7) 实现清空子串操作ClearString(&S);(8) 将上述功能作为类的成员函数实现,编写主函数测试上述功能工作计划与进度安排第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师:专业负责人:学院教学副院长:201年 月曰201 年 月曰201 年 月曰摘要类是C+中十分重要的概念,它是实现面向对象程序设计的基础。C+对C的改进, 最重要的就是增加了 “类”这样一种类型。 类是对象的抽象, 而对象则是类的具体实例, 如果一种计算机语言中不包含类,它就不能称为面向对
3、象的语言。一个有一定规模的 C+程序是由许多类所构成的。本文进行了对字符串类的设计与实现,该程序实现的主 要目的是对串赋值操作、串比较操作、求串长操作、串连接操作、求子串操作和清空子 串操作进行功能测试。 本文采用 Visual C+ 6.0 的控制台工程和 MFC 工程分别实现了对 字符串的相应操作功能的测试,通过对两种程序的测试结果对比分析,表明:本文字符 串类的设计思想正确,两种程序均能正确执行对所需功能的测试操作。关键词:类;字符串类的设计与实现;控制台工程; MFC 工程目录1 需求分析 1.2 算法基本原理 1.3 类设计 1.4 基于控制台的应用程序 3.4.1 类的接口设计 3
4、.4.2 类的实现 4.4.3 主函数设计 基于控制台的应用程序测试 1.25基于MFC的应用程序155.1基于MFC勺应用程序设计 155.1.1 MFC 程序界面设计 155.1.2 MFC 程序代码设计 175.2基于MFC勺应用程序测试 22结 论 2.4.参考文献 2.5.1需求分析(1)类是C+中十分重要的概念,它是实现面向对象程序设计的基础。C+ 对C的改进,最重要的就是增加了“类”这样一种类型。(2)类是对象的抽象,而对象则是类的具体实例,如果一种计算机语言中 不包含类,它就不能称为面向对象的语言。一个有一定规模的C+程序是由许多 类所构成的。(3)类是C+的灵
5、魂,如果不真正掌握类,就不能真正掌握 C+。2算法基本原理图2-1基本原理图3类设计从上面的算法分析可以看到,本设计的关键是类的成员函数的定义。可以定义一个字符数组类string,然后在类内声明类的成员函数。字符数组类的各成员 函数负责对输入的字符串进行按要求处理,输入的字符串用一个一维数组来存 放,字符数组类string的数据成员包括数组strN和len。字符数组类string的功 能需要有实现串赋值操作 StrAssign(&T,chars)、实现串比较操作 StrCompare(S,T) 实现求串长操作StrLength(S)、实现串连接操作Concat(&T,S1,S2)、实现求子串操
6、 作 SubString(&Sub,S,pos,len和实现清空子串操作 ClearString(&S)。从问题的需要来看,字符数组类string的功能需要有实现串赋值操作StrAssign(&T,chars)、实 现串比 较操作 StrCompare(S,T)、实 现求串 长操作 StrLength(S)、实现串连接操作 Concat(&T,S1,S2)、实现求子串操作 SubString(&Sub,S,pos,len和实现清空子串操作 ClearString(&S)。字符数组类string的组成如图1所示。string# strN: char# le n: int+ stri ng(cha
7、r *p)+ stri ng ()+ copy(char *s1,char *s2):void+ copy(char *s):void+ strset():void + strout():void + len gth ():i nt + StrAssig n(char*s):void + StrCompare(char*s):i nt + StrLe ngh():i nt + Con cat(char*s):void + SubStri ng(char*s,i nt a,i nt b):void 土 ClearString(char*s):int 图1string类的UML图形表示在字符串类的
8、设计与实 现过程中,在字符数 组类 string 的成员函数 StrAssign(char*s) 、 StrCompare(char*s) 、 StrLengh() 、 Concat(char*s) 、 SubString(char*s,int a,int b)和 ClearString(char*s)中,实现对所选择的测试功能进 行测试的操作。4 基于控制台的应用程序整个程序分为三个独立的文档,string.h文件中是字符数组类string的声明, strin g.cpp文件中包括类的成员函数实现文件;ma in .cpp文件包括程序的主函数,主函数中定义了一个类string的对象,通过这个
9、对象对字符串类的实现进行功能 测试操作。4.1 类的接口设计/string.h 文件,实现类的声明/string 类声明/字符串一维数组/串的长度/外部接口/字符串的构造#include const int N=200; int n ,flag=0; class stringprivate:char strN;int len;public:string(char *p)copy(str,p);string ();void copy(char *s1,char *s2);/字符串的输入void copy(char *s); void strset()cinstr;void strout()/字符
10、串的输出coutstrendl;int length ();void StrAssign(char*s);/串赋值int StrCompare(char*s);/串比较int StrLengh();/求串长void Concat(char*s);/串连接void SubString(char*s,int a,int b);/求子串int ClearString(char*s);/清空子串;对字符数组类 string 的成员函数进行建立,类的成员是公有和私有类型,对 于 string 类对象的外部模块来讲,类的私有成员是无法访问的。在程序中,字符 串一维数组和串的长度采用了动态内存分配技术, 这
11、些工作都是在类的构造函数 中完成,它们的清理工作在析构函数中完成。4.2 类的实现/string.cpp 文件,类实现#include string.h /包含类的声明头文件/string 类的实现int strlen(char*s)int i=0; while(si+!=0);return i-1;int string:length()int i=0;while(stri+!=0); return i-1;void string:StrAssign(char*s)/串赋值int i,k=length();for(i=0;ik;i+)stri=si;stri=0;int string:StrC
12、ompare(char*s)/串比较int i=0;int k1,k2,t;k1=strlen(s);k2=length();if(k1k2)t=k1;k1=k2;k2=t;for(i=0;ik1;i+)if(sistri)return -1;return 0;int string:StrLengh()int i=0;while(stri+!=0);return i-1;void string:Concat(char*s)int i=0,k=length();while(si!=0)strk=si;k+; i+;strk=0;void string:SubString(char*s,int a
13、,int b)int i,k=0;for(i=a-1;ib;i+)/求串长/串连接/求子串strk=si;k+;strk=0;int string:ClearString(char*s)/ 清空子串int i,k=strlen(s);for(i=0;ik;i+) si=NULL;return 1;void show()char yorn;coutyorn;coutendl;if(yorn=y|yorn=Y) flag=1;elseif(yorn=n|yorn=N)flag=0;cout 请再次输入功能序号 n; elseflag=0; cout 输入有误 ,请重新输入 endl;/功能列表vo
14、id menu()cout*、endl;cout 字符串类的设计与实现 endl;cout*、endl;cout 设计人:司志磊 endl;coutvv学号:1103060135vve ndl;cout功能选择菜单:endl;cout1)串赋值nvv2 )串比较n3 )求串长n4)串连接n5)求子串n6 )清空子串n;co u t 请您输入相应功能的序号 !s1;coutvv结果:vvs.StrCompare(s1)vs1;s.Concat(s1);coutvv连接后的新字符串为:;s.strout();show();void c5()/ 测试功能 5:求子串string s;int a,b;
15、char s1N;cout 您选择的功能是求子串 n; couts1;couta;coutb;coutendl;s.SubString(s1,a,b);cout 所取子串为 :; s.strout();show();void c6()string s;char s1N;cout 您选择的功能是清空子串 n;couts1;coutendl;cout结果:vvs.ClearStri ng(s1)e ndl;show();void cs(char &n1)/ 开关键n=n1-0;switch(n)case 1: c1();break;case 2: c2();break;case 3: c3();b
16、reak;case 4: c4();break;case 5: c5();break;case 6: c6();break;default: coutvv您输入的功能序号有误,请重新输入!endl;在类的成员函数实现过程中,类的构造函数为字符数组动态分配了内存空 间。类的析构函数在系统内部完成了函数调用。 类的成员函数可以自由地访问类 的私有数据成员。串赋值操作实现, 则返回赋值后的串;串比较操作实现,若字符串 1 大于字 符串 2,返回值为 1,若字符串 1等于字符串 2,返回值为 0,若字符串 1 小于字 符串 2,返回值为 -1;求串长操作实现,则返回值为所输入的串的长度;串连接 操作实
17、现,则返回连接后的字符串;求子串操作实现,则返回所求的子串;清空 子串操作实现,正常完成之后,返回值为1。根据函数的返回值,就可以判断操作实现的情况。4.3 主函数设计/main.cpp 主函数#include string.hint main() /主函数char a;menu();while(1)if(flag)couta; cs(a);return 0;在程序的主函数部分,首先,选择你所要测试的功能的序号,之后从键盘输 入需要的一个或两个字符串作为一个实际例子来进行功能的测试。 字符串使用一 维 数组来存储 。字符 数组类 string 的成 员函 数 StrAssign(char*s)
18、 、 StrCompare(char*s) StrLengh()、Concat(char*s)、SubString(char*s,int a,int b)和 ClearStri ng(char*s )会分别完成对所选功能的测试任务,show()函数会提示是否继 续进行功能测试,继续进行功能测试则从键盘输入 Y ,退出系统,结束对功能的 测试则输入 N。4.4 基于控制台的应用程序测试程序运行结果如图 2和图 3 所示。图2程序运行结果吾退岀系纽出/N】汶争以回车结克g嘶t再挨输人功能序号否退岀系处巾Euer再次输入功能序号退出系统IV/N1;N眾囂応屍功能的序号,計十人司志磊WE; 11030
19、69135塢歯莘菜至: )軽值ress anv key to continueFF;V?灌少年00仇Debuq222翻hIT1 IF%!二 功目吕吕 的母子子口 fj F 2 4 UUF- 子普暑 求煩毎位 旦會天字橢类的设计与实现旦并45 以符23 电幵字:1 串字蕾 是早连行 能-想字 臾串M 的输一的 择二员后图3程序运行结果从图2和图3中可以看出,程序能够实现所选序号的功能,但是, 对于功能 实现的结果的正确性问题却无法获知, 为了能够验证结果的正确性,对所输入的 字符串进行人为功能实现,如果两次的功能实现结果相同,即说明功能实现的结 果是正确的,否则,说明功能实现存在问题,需对程序进
20、行进一步调试分析。5基于MFC的应用程序MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程 序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主 要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准 Windows窗 口和控件实现输入输出,因此必须在 MFC类的框架下加入上面所设计的矩阵和 方程组类,并通过图形界面的输入输出改造来完成。5.1 基于MFC勺应用程序设计5.1.1 MFC程序界面设计首先在VC中建立 MFC AppWizard (exe)工程,名称设置为 0
21、00,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图 45所 示。6文怦 砖 TfKZ |左它中杞|1 hV/Fpll二忙Re-s mi riWliurdITiCusiwn AppWlFBrii,d好1如麻1帕曲比两|阳 e :J虐 Lxnendd Snnpd Pmc Wlzwd *1呂 AH EMcmIw fhlMiri-Hllr血少丄啊/卜工加州1冲出1|靜创建新的工临主1了凹3 MFC(r|r T iiik: : i-i fTl UW呷 iP*a|t jg锄n穀 apf HctfiiW!厂丄JSE于Ou:QiWhkl?ftp.Ui -Bliii 1
22、JNwinSZ Dyviic-Lint Library 国 Wifi紀 苗出R Lun那匚确走一|图 4 建立 MFC AppWizard (exe)工程图5建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成所需要的界面,如图6所示。图6字符串操作程序界面设计图6所示的界面中包含了 5个Static Text控件,7个Button控件,和10个Edit Box控件,控件的基本信息列表如下表1所示。表1控件基本信息控件类别控件ID控件 Caption说明Static TextIDC_STATIC请输入字符串1请输入字符串2请输入子串的始位置请输入子串的末位置功能测试结果Bott
23、onIDC BUTTON1串赋值IDC BUTTON2串比较IDC BUTTON3求串长IDC BUTTON4串连接IDC BUTTON5求子串IDC BUTTON6清空子串IDC BUTTON7退出Edit BoxIDC EDIT1字符串1IDC EDIT2字符串2IDC EDIT3串赋值的测试结果IDC EDIT4串比较的测试结果IDC EDIT5求串长的测试结果IDC EDIT6串连接的测试结果IDC EDIT7求子串的测试结果IDC EDIT8子串的始位置IDC EDIT9子串的末位置IDC EDIT10清空子串5.1.2 MFC程序代码设计为了能够将对话框界面上的控件能够与代码联系起
24、来, 需要为10个Edit Box 控件建立 Member Variables,按 Ctrl+w 键进入 MFC ClassWizard 界面,选择 Member Variables选项卡,可显示成员变量设置界面,如图 7所示。图7成员变量设置界面通过该界面设置与10个Edit Box控件对应的成员变量,具体内容如表2所示。表2控件基本信息控件ID成员变量类型成员变量名称IDC EDIT1CEditm str1IDC EDIT2CEditm str2IDC EDIT3CStri ngm e1IDC EDIT4intm e2IDC EDIT5intm e3IDC EDIT6CStri ngm e
25、4IDC EDIT7CStri ngm e5IDC EDIT8intm shouIDC EDIT9intm weiIDC EDIT10intm e6下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。 将string.h文件和string.cpp文件合并成一个文件,重新命名为string.h,并将其加入MFC工程。 修改string.h文件具体包括:将功能列表 menu( )函数和退出系统 show( ) 函数注释掉,因为在图形界 面的程序设计上不需要这两个函数;将函数中的 cout 语句全部去掉,因为不需要也不能够使用
26、cout 流实现 输出。 编写执行测试功能的按钮的函数,实现所需测试的功能,具体代码如下:void CMy000Dlg:OnButton1( )/ TODO: Add your control notification handler code hereUpdateData(TRUE);char cstr110;m_str1.GetWindowText(cstr1,10);m_e1=cstr1;UpdateData(FALSE);void CMy000Dlg:OnButton2( )/ TODO: Add your control notification handler code hereU
27、pdateData(TRUE);char cstr110,cstr210;m_str1.GetWindowText(cstr1,10);m_str2.GetWindowText(cstr2,10);m_e2=strcmp(cstr1,cstr2);UpdateData(FALSE);void CMy000Dlg:OnButton3( )/ TODO: Add your control notification handler code hereUpdateData(TRUE);char cstr110;m_str1.GetWindowText(cstr1,10);m_e3=strlen(cst
28、r1);UpdateData(FALSE);void CMy000Dlg:OnButton4( )/ TODO: Add your control notification handler code here UpdateData(TRUE);char cstr110,cstr210;m_str1.GetWindowText(cstr1,10);m_str2.GetWindowText(cstr2,10);int i=0,k=strlen(cstr1);while(cstr2i!=0)cstr1k=cstr2i;k+;i+;cstr1k=0;m_e4=cstr1;UpdateData(FALS
29、E);void CMy000Dlg:OnButton5( )/ TODO: Add your control notification handler code here UpdateData(TRUE);char cstr110;char cstr310;m_str1.GetWindowText(cstr1,10);int i,k=0;for(i=m_shou-1;im_wei;i+) cstr3k=cstr1i; k+;cstr3k=0; m_e5=cstr3;UpdateData(FALSE);void CMy000Dlg:OnButton6( )/ TODO: Add your con
30、trol notification handler code here UpdateData(TRUE);int i,k=strlen(m_e5);for(i=0;ik;i+) m_e5i=NULL;if(m_e5) m_e6=1;UpdateData(FALSE); 退出按钮比较简单,代码如下:void CMy000Dlg:OnButton7( )/ TODO: Add your control notification handler code here OnOK( );5.2基于MFC的应用程序测试运行程序后,首先出现的界面如图 8所示图8程序初始运行界面输入数据,则所输入的数据在界面上显示如图 9所示图9输入数据后的界面分别单击所要测试的功能的按钮,实现所要测试的功能并将测试结果显示出 来,如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脱靴器市场分析及投资价值研究报告
- 废物的运输和贮藏行业相关项目经营管理报告
- 农业作物虫害生物防治行业市场调研分析报告
- 不锈钢冰块产业链招商引资的调研报告
- 手动磨利器具产品供应链分析
- 医疗器械物流行业营销策略方案
- 电子蜂鸣器市场分析及投资价值研究报告
- 竹帘市场发展前景分析及供需格局研究预测报告
- 底裤服装产业链招商引资的调研报告
- 老茧锉刀市场发展前景分析及供需格局研究预测报告
- GB/T 10362-2008粮油检验玉米水分测定
- Ch1数值分析与科学计算引论
- 学情分析方案《王戎不取道旁李》
- 闻王昌龄左迁龙标遥有此寄ppt复习课程
- 傅青主女科课件
- 公司金融名词解释和问答题(较全)Word版
- 虚拟仿真实验教学平台课件
- 《军事理论》课后复习题库大全-第二章:国家安全
- 超星尔雅学习通《媒体创意经济玩转互联网时代》章节测试答案
- KF思维技术-在合作中解决问题与决策完整课件
- 2023年传染病防治知识考试试题及答案
评论
0/150
提交评论