沈阳理工大学通信工程C课程设计doc.docx
《沈阳理工大学通信工程C课程设计doc.docx》由会员分享,可在线阅读,更多相关《沈阳理工大学通信工程C课程设计doc.docx(26页珍藏版)》请在冰豆网上搜索。
![沈阳理工大学通信工程C课程设计doc.docx](https://file1.bdocx.com/fileroot1/2022-10/13/15f73cee-dc51-4250-a313-b60e2606e879/15f73cee-dc51-4250-a313-b60e2606e8791.gif)
沈阳理工大学通信工程C课程设计doc
封皮
(按学校要求手工填写)
成绩评定表
学生姓名
班级学号
专业
通信工程
课程设计题目
字符串类的设计与实现
评
语
组长签字:
成绩
日期
20年月曰
课程设计任务书
学院
信息科学与工程
专业
通信工程
学生姓名
班级学号
课程设计题目
字符串类的设计与实现
实践教学要求与任务
进行字符串类的设计,具体要求如下:
(1)使用堆分配存储表示实现字符串的存储;
(7)实现清空子串操作ClearString(&S);
(8)将上述功能作为类的成员函数实现,编写主函数测试上述功能
工作计划与进度安排
第17周:
分析题目,查阅课题相关资料,进行类设计、算法设计;
第18周:
程序的设计、调试与实现;
第19周:
程序测试与分析,撰写课程设计报告,进行答辩验收。
指导教师:
专业负责人:
学院教学副院长:
201年月曰
201年月曰
201年月曰
摘要
类是C++中十分重要的概念,它是实现面向对象程序设计的基础。
C++对C的改进,最重要的就是增加了“类”这样一种类型。
类是对象的抽象,而对象则是类的具体实例,如果一种计算机语言中不包含类,它就不能称为面向对象的语言。
一个有一定规模的C++程序是由许多类所构成的。
本文进行了对字符串类的设计与实现,该程序实现的主要目的是对串赋值操作、串比较操作、求串长操作、串连接操作、求子串操作和清空子串操作进行功能测试。
本文采用VisualC++6.0的控制台工程和MFC工程分别实现了对字符串的相应操作功能的测试,通过对两种程序的测试结果对比分析,表明:
本文字符串类的设计思想正确,两种程序均能正确执行对所需功能的测试操作。
关键词:
类;字符串类的设计与实现;控制台工程;MFC工程
1需求分析1..
2算法基本原理1...
3类设计1..
4基于控制台的应用程序3..
4.1类的接口设计3..
4.2类的实现4..
4.3主函数设计1..1.
4.4基于控制台的应用程序测试1..2
5基于MFC的应用程序15
5.1基于MFC勺应用程序设计15
5.1.1MFC程序界面设计15
5.1.2MFC程序代码设计17
5.2基于MFC勺应用程序测试22
结论2..4..
参考文献2..5..
1需求分析
(1)类是C++中十分重要的概念,它是实现面向对象程序设计的基础。
C++对C的改进,最重要的就是增加了“类”这样一种类型。
(2)类是对象的抽象,而对象则是类的具体实例,如果一种计算机语言中不包含类,它就不能称为面向对象的语言。
一个有一定规模的C++程序是由许多类所构成的。
(3)类是C++的灵魂,如果不真正掌握类,就不能真正掌握C++。
2算法基本原理
图2-1基本原理图
3类设计
从上面的算法分析可以看到,本设计的关键是类的成员函数的定义。
可以定
义一个字符数组类string,然后在类内声明类的成员函数。
字符数组类的各成员函数负责对输入的字符串进行按要求处理,输入的字符串用一个一维数组来存放,字符数组类string的数据成员包括数组str[N]和len。
字符数组类string的功能需要有实现串赋值操作StrAssign(&T,chars)、实现串比较操作StrCompare(S,T)实现求串长操作StrLength(S)、实现串连接操作Concat(&T,S1,S2)、实现求子串操作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
#str[N]:
char
#len:
int
+string(char*p)
+string()
+copy(char*s1,char*s2):
void
+copy(char*s):
void
+strset():
void+strout():
void+length():
int+StrAssign(char*s):
void+StrCompare(char*s):
int+StrLengh():
int+Concat(char*s):
void+SubString(char*s,inta,intb):
void土ClearString(char*s):
int图1string类的UML图形表示
在字符串类的设计与实现过程中,在字符数组类string的成员函数StrAssign(char*s)、StrCompare(char*s)、StrLengh()、Concat(char*s)、SubString(char*s,inta,intb)和ClearString(char*s)中,实现对所选择的测试功能进行测试的操作。
4基于控制台的应用程序
整个程序分为三个独立的文档,string.h文件中是字符数组类string的声明,string.cpp文件中包括类的成员函数实现文件;main.cpp文件包括程序的主函数,
主函数中定义了一个类string的对象,通过这个对象对字符串类的实现进行功能测试操作。
4.1类的接口设计
//string.h文件,实现类的声明
//string类声明
//字符串一维数组
//串的长度
//外部接口
//字符串的构造
#includeconstintN=200;intn,flag=0;classstring
{
private:
charstr[N];
intlen;
public:
string(char*p)
{
copy(str,p);
}
string(){};
voidcopy(char*s1,char*s2);
//字符串的输入
voidcopy(char*s);voidstrset()
{
cin>>str;
}
voidstrout()//字符串的输出
{
cout<}
intlength();
voidStrAssign(char*s);
//串赋值
intStrCompare(char*s);
//串比较
intStrLengh();
//求串长
voidConcat(char*s);
//串连接
voidSubString(char*s,inta,intb);
//求子串
intClearString(char*s);
//清空子串
};
对字符数组类string的成员函数进行建立,类的成员是公有和私有类型,对于string类对象的外部模块来讲,类的私有成员是无法访问的。
在程序中,字符串一维数组和串的长度采用了动态内存分配技术,这些工作都是在类的构造函数中完成,它们的清理工作在析构函数中完成。
4.2类的实现
//string.cpp文件,类实现
#include"string.h"//包含类的声明头文件
//string类的实现
intstrlen(char*s)
{
inti=0;while(s[i++]!
='\0');
returni-1;
}
intstring:
:
length()
{
inti=0;
while(str[i++]!
='\0');returni-1;
}
voidstring:
:
StrAssign(char*s)
//串赋值
{
inti,k=length();
for(i=0;i{
str[i]==s[i];
}
str[i]='\0';
}
intstring:
:
StrCompare(char*s)
//串比较
{
inti=0;
intk1,k2,t;
k1=strlen(s);k2=length();
if(k1{t=k1;k1=k2;k2=t;}
for(i=0;i{
if(s[i]return1;
elseif(s[i]>str[i])
return-1;
}
return0;
}
intstring:
:
StrLengh()
{
inti=0;
while(str[i++]!
='\0');
returni-1;
}
voidstring:
:
Concat(char*s)
{
inti=0,k=length();
while(s[i]!
='\0')
{
str[k]=s[i];
k++;i++;
}
str[k]='\0';
}
voidstring:
:
SubString(char*s,inta,intb)
{
inti,k=0;
for(i=a-1;i
{
//求串长
//串连接
//求子串
str[k]=s[i];
k++;
str[k]='\0';
}
intstring:
:
ClearString(char*s)//清空子串
{
inti,k=strlen(s);
for(i=0;i{s[i]=NULL;
}
return1;
}
voidshow()
{
charyorn;
cout<<"\n是否退出系统[Y/N]:
";
cin>>yorn;
cout<if(yorn=='y'||yorn=='Y')flag=1;
else
if(yorn=='n'||yorn=='N'){flag=0;cout<<"请再次输入功能序号\n";}
else
{
flag=0;cout<<"输入有误,请重新输入"<}
}
voidmenu()
//功能列表
{
cout<<"字符串类的设计与实现"<cout<<"设计人:
司志磊"<coutvv"学号:
1103060135"vvendl;
cout«"功能选择菜单:
"<cout<<"1)串赋值\n"vv"2)串比较\n"<<"3)求串长\n"<<"4)串连接
\n"<<"5)求子串\n"<<"6)清空子串\n";
cout<<"请您输入相应功能的序号!
"<voidc1()//测试功能1:
串赋值
{
strings;
chars1[N];
coutvv"您选择的功能是串赋值\n";
coutvv"请输入字符串,并以回车结束:
";
s.strset();
s.StrAssign(s1);
coutvv"串赋值为:
";
s.strout();
show();
}
voidc2()//测