课题
名称
设
计
目
的
实
验
环
境
任
文章编辑系统
完成数据结构——《文章编辑系统》课程学习,实现一个文章编辑系统,可以统计
一页文字中文字、数字及空格的个数,以提高对串的应用能力。通过本次教学实习,对所
学专业知识进一步消化、理解并掌握,锻炼和提高综合运用所学知识解决实际问题的能
力,全面提高程序设计能力和开发能力,熟悉编译工具的使用方法和环境,协调团队合
作力,相互学习,相互帮助。对 C++中时间函数博大精深有了更深刻的认识,了解自己有
哪些方面的不足之处,以便日后改进。另外,希望通过本次课程设计,增加对 C++这门课
的兴趣,促进学习的积极性,为尽早确定将来选择方向定下目标。
规定运行的软件环境 :windows 2000、windowsXP、windowsVista、windows7.
运行该软件所需要的硬件设备: PC 机一台.
运行该软件所需要的软件设备: Microsoft Visual C++ 6.0
基本功能:
1. 静态存储一页文章保存在文件中,每行最多不超过 80 个字符,共 N 行
2. 分别统计出其中英文字母数和空格数及整篇文章总字数
3. 统计某一字符串在文章中出现的次数,并输出该次数
4. 当删除某一子串时,后面的字符随之前移
5. 用指定的字符串替换某一子串
务
基本要求:
1. 存储结构使用线性表,分别用几个子函数实现相应的功能
2. 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号
3. 输出形式:①分行输出用户输入的各行字符;②分 4 行输出"全部字母数"、"数
字个数"、"空格个数"、"文章总字数";③输出删除某一字符串后的文章;④输出
替换某一字符串后的文章
4. 界面要友好,输入有提示,尽量展示人性化
5. 源程序代码清晰、有层次
6. 用户输入非法数据时,系统要及时给出警告信息
课程进度计划
起止日期
计 划 内 容
6 月 13 日~14 日
6 月 15 日
6 月 16 日~17 日
查找资料,设计程序
完善程序,完成报告
完成设计,课题答辩
要
求
序
号
1
2
3
1
设计任务
课程设计名称:
《文章编辑系统》
二、设计概要
1、 课程设计目的
完成数据结构——《文章编辑系统》课程学习,实现一个文章编辑系统,可以统计一页文
字中文字、数字及空格的个数,以提高对串的应用能力。通过本次教学实习,对所学专业知识
进一步消化、理解并掌握,锻炼和提高综合运用所学知识解决实际问题的能力,全面提高程序
设计能力和开发能力,熟悉编译工具的使用方法和环境,协调团队合作力,相互学习,相互帮
助。对 C++中时间函数博大精深有了更深刻的认识,了解自己有哪些方面的不足之处,以便日
后改进。另外,希望通过本次课程设计,增加对 C++这门课的兴趣,促进学习的积极性,为尽
早确定将来选择方向定下目标。
2、 设计原理
面向对象的程序设计是现在最外流行的程序设计方法。面向对象的方法模仿人们建立现实
世界模型的方法,认为客观世界是由各种各样的对象组成的,每个对象都有各自的内部状态和
运动规律,不同对象之间的相互作用和联系就构成了各种各样的系统。利用人们对事物分类和
抽象的自然倾向,引进了类的概念,具有封装性、继承性和多态性等特点。
在 C++中,类是指由用户定义的一种抽象数据类型,将一组具有相关性的数据成员结合在
一起,要使用类中所包含的数据时,必须通过有该类所提供的成员函数来存取。
数据封装是指将类中的数据成员以其可被使用或不可被使用的方式进行分类,即有条件地
限制类中部分或全部的数据成员被使用,在定义数据成员时在其前面冠以 private、protected
或 public,分别表示私有的、保护的和公有的。因此,类是实现数据封装的一个有力方法,
类的特性是实现了数据封装或数据抽象。
C++的流插入运算符“<<”和流提取运算符“>>”是 C++在类库中提供的,所有 C++编译系
统都在类库中提供输入流类 istream 和输出流类 ostream。Cin 和 Cout 分别是 istream 和
ostream 的对象。在类库中提供的头文件中已经对“<<和“>>”进行了重载,使之作为流插入
运算符和流提取运算符,能用来输出和输入 C++标准类型的数据。对流插入运算符“<<”进行
重载后,在程序中用“<<”不仅能输出标准类型数据,而且可以输出用户自己定义的类对象。
3、 使用工具软件
本次课程设计主要使用的工具为:Microsoft Visual C++6.0 及以上版本。
Microsoft Visual C++ 6.0(简称 VC)是 Microsoft 公司推出的目前使用极为广泛的基于
2
Windows 平台的 C++可视化开发环境。Visual C++ 6.0 提供的是控制台应用程序对学习和掌握
标准 C++内容非常有得。“可视”的资源编辑器与 MFC 类以及应用程序向导,为快速高效地开发
出功能强大的 Windows 应用程序提供了极大的方便。利用 Visual C++ 6.0 进行 Internet、数
据库及多媒体等多方面的程序开发也很容易。
三、课程设计内容简介
1、程序设计的基本结构流程
开始
主函数
输入文字
统计个数
查找某一子串
输出文字
统计字母、数字、空格、
某一字符串的个数以及
文章总字数。
删除这一子串
输出删除后的文章
具体操作
2、 程序运行流程说明
程序运行时首先从主函数开始,先判断选择的操作。然后根据要求进行相应的查找、删除、
统计、显示等操作,一次操作完之后,会回到开始的选择界面,用户可重新选择操作,如果用户
选择退出,程序就停止。
3、 主要模块描述
while(L->next)
{
for (p = L, q = s; *q != '\0' && p->next; p = p->next, q++)
if (p->c != *q)
break;
if (*q == '\0')
n++;
3
L = L->next;
}
将链表指针指向输入的字符串开始字符,和文章中字符的首位,然后使用循环语句,将字符
串的每一个字符依次比较,判断相同的字符,以便实现其他的查找,统计,删除等功能。
4、 各功能函数描述
本次设计共分为八个函数,一个主函数 void main( ),其余分函数分别实现七个功能:
输入文字,函数为:void InitList(ca *L);
直接输出结果,函数为:void print1(ca *L);
替换某一字符串,函数为:ca *RepStr(ca *L)
分行输出用户的输入的各行字符的函数为:void print3(ca *L);
文章中的字符数,空格数,数字等统计,函数为:
void print2(ca *L, int &p1, int &p2, int &p3, int &n);
字符串删除,函数为: ca *DelStr(ca *L);
统计某一字符串出现的次数,函数为:void StrNo(ca *L)
四、详细设计与实现
1、存储结构设计
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是
一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性
表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的
一种数据结构。
在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。本
程序中采用链式存储结构。
2、主要算法设计
本课程设计中用指针链表,配合循环语句,完成字符串比较功能,从而完成统计字符串,
删除字符串,统计字符信息的功能。
字符串删除:如果,输入字符的第一个字母与文本中的元字符有相同的时候,执行第一个
for 循环语句,对原文中的字符依次和输入的字符串比较,有不相同的跳出,如果完全相同,则
将 P 指针给 H 指针,从而达到删除的作用。然后,进行上述操作,完成删除操作。
ca *DelStr(ca *L)//删除子串
{
ca *H = L;
4
char s[80], *q;
ca *p;
cout<<"输入该子串: ";
cin>>s;
if (H->c == *s)
{
}
for (p = H->next, q = s+1; *q != '\0' && p->next; p = p->next, q++)
if (p->c != *q)
break;
if (*q == '\0')
H = p;
while(L->next)
{
}
for (p = L->next, q = s; *q != '\0' && p->next; p = p->next, q++)
if (p->c != *q)
break;
if (*q == '\0')
L->next = p;
else L = L->next;
return H;
}
统计某一字符,操作也是如此,两个字符比较,如果发现字符相同时统计数字 N 就加 1
函数为:
void StrNo(ca *L)
//统计某一字符串出现的次数
{
int n = 0;
5
char s[80], *q;
ca *p;
cout<<"输入一字符串: ";
cin>>s;
while(L->next)
{
}
for (p = L, q = s; *q != '\0' && p->next; p = p->next, q++)
if (p->c != *q)
break;
if (*q == '\0')
n++;
L = L->next;
cout<<"字符串 "<
next; L = L->next, n++)
if(isalpha(L->c)) p1++;
else if(isdigit(L->c)) p2++;
else if(L->c == ' ') p3++;
else if(L->c == '\n') n--;
cout<<"\n 全部字母数: "<cout<<"\n 文章总字数: "<
按选择 2—回车 enter 输入一字符串:23 在文章中出现的次数,如图 4-3 所示:
图 4-3
按选择 3—回车 enter 实现对输入的某一子串进行删除并将其后面字符前移,输出删除后的文
章,如下图 4—4 所示:
8