实验六 手机短信中电话号码和手机号码的识别与提取
实验六
小型系统开发
计算机科学与技术系0902班
组 长: 雷耀阳
组 员:柴瑞东、李志鹏、张玲春
日 期:
实验
实验类型__综合
__ 实验室__软件实验室1__
1( 实验题目
手机短信中电话号码和手机号码的识别与提取
2( 实验目的和要求
掌握小型系统开发方法,提高学生综合开发能力。
根据实际问题,设计
,综合运用课程知识,完成《学生成绩管理系统》或《数据结构算法演示系统》的设计、编程与调试工作。
3( 需求
要从手机短信的内容中识别电话号码或手机号码,必须从短信的第一个字符开始查找,找到第一个数值型字符(‘0’,‘9’),然后依次判断其后的字符,若其后有连续的6个或7个数值型字符,则将其识别成电话号码并提取,若其后有连续的10个数值型字符,则将其识别成手机号码并提取。继续向后搜索直到整个短信查找完毕。
4( 概要设计
?短信的存储结构类型定义
typedef struct
{
char word[200];/*短信内容*/
int length; /*短信长度*/
}Message;
?通讯录中记录的存储结构类型的定义
typedef struct
{
char call[7]; /*电话号码*/
char phone[11]; /*手机号码*/}Note;
?流程图
开始
定义各变量
输入短信内容
提取短信中的手机号 提取短信中的电话
输出电话号码
结束
5( 详细设计
根据输入的短信进行检索,找出其中的电话号码并输出。 次代码共分4个模块:主函数、输入函数、手机号码检索模块、电话号码检索模块。
其中手机和电话号码检索又分别分为查找和输出模块。
主函数:
void main()
{
input();
phone();
call();
}
短信输入函数:
void input()
{
int n=0;
printf("请输入短信内容:\n");
scanf("%s",Q.word);
}
手机号码查找:
void phone()
{
int i=0,j=0,k=0,flag=0;
while(i<200)
{
if(Q.word[i]=='0'||Q.word[i]=='1'||Q.word[i]=='2'||Q.word[i]=='3'||
Q.word[i]=='4'||Q.word[i]=='5'||Q.word[i]=='6'||Q.word[i]=='7'||
Q.word[i]=='8'||Q.word[i]=='9')
{
for(k=0;k<11;k++)
{
if(Q.word[i+k+1]=='0'||Q.word[i+k+1]=='1'||Q.word[i+k+1]=='2'||
Q.word[i+k+1]=='3'||Q.word[i+k+1]=='4'||Q.word[i+k+1]=='5'||
Q.word[i+k+1]=='6'||Q.word[i+k+1]=='7'||Q.word[i+k+1]=='8'||
Q.word[i+k+1]=='9')
{flag++;}
}
if(flag==10&&(Q.word[i-1]!='0'&&Q.word[i-1]!='1'&&Q.word[i-1]!='2'&&
Q.word[i-1]!='3'&&Q.word[i-1]!='4'&&Q.word[i-1]!='5'&&Q.word[i-1]!='6'&&
Q.word[i-1]!='7'&&Q.word[i-1]!='8'&&Q.word[i-1]!='9'))
{
phoneadd(i);
flag=0;
}
else
flag=0;
}
i++;
}
}
电话号码查找:
void call()
{
int i=0,j=0,k=0,flag=0;
while(i<200)
{
if(Q.word[i]=='0'||Q.word[i]=='1'||Q.word[i]=='2'||Q.word[i]=='3'||
Q.word[i]=='4'||Q.word[i]=='5'||Q.word[i]=='6'||Q.word[i]=='7'||
Q.word[i]=='8'||Q.word[i]=='9')
{
for(k=0;k<7;k++)
{
if(Q.word[i+k+1]=='0'||Q.word[i+k+1]=='1'||Q.word[i+k+1]=='2'||
Q.word[i+k+1]=='3'||Q.word[i+k+1]=='4'||Q.word[i+k+1]=='5'||
Q.word[i+k+1]=='6'||Q.word[i+k+1]=='7'||Q.word[i+k+1]=='8'||
Q.word[i+k+1]=='9')
{flag++;}
}
if(flag==6&&(Q.word[i-1]!='0'&&Q.word[i-1]!='1'&&Q.word[i-1]!='2'&&
Q.word[i-1]!='3'&&Q.word[i-1]!='4'&&Q.word[i-1]!='5'&&Q.word[i-1]!='6'&&
Q.word[i-1]!='7'&&Q.word[i-1]!='8'&&Q.word[i-1]!='9'))
{
calladd(i);
flag=0;
}
else
flag=0;
}
i++;
}
}
手机号码输出:
void phoneadd(int i)
{
int j;
for(j=0;j<11;j++)
P.phone[j]=Q.word[i++];
printf("%s\n",P.phone);
strcpy(&P.phone,"\0"); }
电话号码输出:
void calladd(int i) {
int j;
for(j=0;j<7;j++)
P.call[j]=Q.word[i++];
printf("%s\n",P.call);
strcpy(&P.call,"\0"); }
调试分析 6(
在C_free里出现很多错误和警告,经过讨论解决了错误,但是没有解决警告的问题,但是系统可以
被编译,并出现结果。
7( 使用说明
程序名为LinkList.exe,运行环境为WINDOWS。程序执行后显示
输入短信内容
按回车群定输入后,即可输出短信中的手机号码和电话号码。
8( 实验
本次实验用数组做的话较容易完成。
最初在用队列做的时候碰到一些麻烦,很多东西不会用,只好换成用数组来完成。
在提取数字的地方,想过用枚举定义一组字符型数字,但是没能够正确完成,最后改为对0~9这10个
数字的分别判定。
9( 模块分工
雷耀阳2009100233 电话号码查找 call()
张玲春2009100209 手机号码输出 phoneadd()
李志鹏2009100207 手机号码查找 phone()
柴瑞东 2009100219 短信输入input() 电话号码输出 calladd()