c语言通讯录管理系统课程设计.docx

上传人:b****7 文档编号:10149499 上传时间:2023-02-08 格式:DOCX 页数:71 大小:685.56KB
下载 相关 举报
c语言通讯录管理系统课程设计.docx_第1页
第1页 / 共71页
c语言通讯录管理系统课程设计.docx_第2页
第2页 / 共71页
c语言通讯录管理系统课程设计.docx_第3页
第3页 / 共71页
c语言通讯录管理系统课程设计.docx_第4页
第4页 / 共71页
c语言通讯录管理系统课程设计.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

c语言通讯录管理系统课程设计.docx

《c语言通讯录管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《c语言通讯录管理系统课程设计.docx(71页珍藏版)》请在冰豆网上搜索。

c语言通讯录管理系统课程设计.docx

c语言通讯录管理系统课程设计

(此文档为word格式,下载后您可任意编辑修改!

计算机科学与技术学院课程设计成绩单

C+:

72~74分C:

68~71分C-:

64~67分D:

60~63分F:

<60分

 

一、基本要求

3、能实现多条件查询。

4、最后把系统中的数据保存回相应的文件中。

2、解题思路

根据题目要求,

1、键盘式选择菜单实现功能选择。

2、通讯录数据以文本文件存储,故应提供文件的输入输出等操作。

将保存在txt文件中的数据读取出来并设计合适的链表(有头结点的单链表)用来存储数据。

3、利用链表进行通讯录记录的插入,查找,修改,删除等操作。

4、修改和删除均建立在查找的基础之上。

5、实现多条件查找。

6、通讯录分组信息同理。

利用单链表存储,从而进行显示、查找、删除等操作。

7、退出:

即将通讯录及分组信息保存到文件之后,再退出到管理系统。

3、算法描述

尾插法建带头结点的通讯录链表createF();

根据文本文件中数据的存储结构用fscanf()一条一条的读取数据;

并将读取出来的数据赋给链表的结点;

使Flag=1,即表示通讯录已经建立;

通讯录成员分组信息表createG()同理;

1、显示通讯录已有成员信息

从链表中读取并按照一定结构输出outputF();

2、添加通讯录成员信息

向通讯录中添加某人通讯信息的子函数insertF();

链表结点的插入,按编号次序有序插入

使用两个指针变量p1和p2分别指向当前访问过的结点和下一结点。

循环顺序查找插入结点的位置,其中p1指向待插入位置的前一个结点。

3、查找通讯录成员信息

查找模块search():

在通讯录中查找某人通讯信息的子函数

如果查找成功,则输出查找到的通讯者信息,返回p。

若查找失败,则输出查找失败,返回p。

4、修改通讯录成员信息

利用查找函数查找到需要修改的结点,进行修改。

5、删除通讯录成员信息

利用查找函数查找到需要修改的结点,进行删除。

6、多条件查询通讯录成员信息

选择第一个关键词类型之后,进行相关查询;

之后第二个关键词,不需要输入相应类型,而是根据输入数据之间的差别进行匹配,从而进行相关的查询操作;

7、显示已有通讯录成员分组信息

原理同outputF();

8、添加通讯录成员分组信息

原理同insertF();

9、删除通讯录成员分组信息

原理同DeleteF();

11、退出通讯录管理系统

4、程序设计

1、本程序中所有用到的数据结构定义

Group的单链表存储结构

structGroupInfo

{

intGnum;

charGname[20];

};

structGroup

{

structGroupInfoGInfo;

Group*next;

};

typedefGroup*GInfoList;

Friend的单链表存储结构

structFriendInfo

{

charFnum[5];

charFname[8];

charsex[3];

charbirthday[11];

charaddr[20];

structGroupInfoFGInfo;

};

structFriend

{

structFriendInfoFInfo;

Friend*next;

};

typedefFriend*FInfoList;

2、基本操作

*尾插法建带头结点的通讯录链表createF()*

FInfoListcreateF()

{

FILE*pRead,*pWrite;

intnCount=0;

FInfoList(Ffilename,"r");

if(NULL==pRead)exit(0);

pWrite=fopen("friend_bin.txt","wb");

if(NULL==pWrite)

{

fclose(pRead);

exit(0);

}

while(!

feof(pRead))

{

p=(Friend*)malloc(sizeof(Friend));

fwrite(p,sizeof(structFriend),1,pWrite);

rear->next=p;

rear=p;

}

fclose(pRead);

fclose(pWrite);

Fflag=1;

rear->next=NULL;

return(Gfilename,"r");

if(NULL==gRead)exit(0);

gWrite=fopen("group_bin.txt","wb");

if(NULL==gWrite)

{

fclose(gRead);

exit(0);

}

while(!

feof(gRead))

{

p=(Group*)malloc(sizeof(Group));

fscanf(gRead,"%d%s\n",&p->GInfo.Gnum,p->GInfo.Gname);

fwrite(p,sizeof(structGroup),1,gWrite);

rear->next=p;

rear=p;

}

fclose(gRead);

fclose(gWrite);

Gflag=1;

rear->next=NULL;

return\n%20s\n","通讯录");

while(p!

=NULL)

{

p=p->next;

}

}

③添加通讯录成员信息

*添加模块insertF():

向通讯录中添加某人通讯信息的子函数*

链表结点的插入,按编号次序有序插入

使用两个指针变量p1和p2分别指向当前访问过的结点和下一结点。

循环顺序查找插入结点的位置,其中p1指向待插入位置的前一个结点。

voidinsertF(FInfoListFhead,Friend*Fp)

{

Friend*p1,*p2;

p1=Fhead;

p2=p1->next;

while(p2!

=NULL&&strcmp(p2->FInfo.Fnum,Fp->FInfo.Fnum)<0)

{

p1=p2;p1指向刚访问过的结点

p2=p2->next;p2指向下一个结点

}

p1->next=Fp;插入p所指向的结点

Fp->next=p2;

}

④查找通讯录成员信息

*查找模块search():

在通讯录中查找某人通讯信息的子函数*

如果查找成功,则输出查找到的通讯者信息,返回p。

若查找失败,则输出查找失败,返回p。

把汉字转化为拼音缩写的函数,如李勇->ly

boolIn(wchar_tstart,wchar_tend,wchar_tcode)

{

if(code>=start&&code<=end)

{

returntrue;

}

returnfalse;

}

charconvert(wchar_tn)

{

if(In(0xB0A1,0xB0C4,n))return'a';

if(In(0XB0C5,0XB2C0,n))return'b';

if(In(0xB2C1,0xB4ED,n))return'c';

if(In(0xB4EE,0xB6E9,n))return'd';

if(In(0xB6EA,0xB7A1,n))return'e';

if(In(0xB7A2,0xB8c0,n))return'f';

if(In(0xB8C1,0xB9FD,n))return'g';

if(In(0xB9FE,0xBBF6,n))return'h';

if(In(0xBBF7,0xBFA5,n))return'j';

if(In(0xBFA6,0xC0AB,n))return'k';

if(In(0xC0AC,0xC2E7,n))return'l';

if(In(0xC2E8,0xC4C2,n))return'm';

if(In(0xC4C3,0xC5B5,n))return'n';

if(In(0xC5B6,0xC5BD,n))return'o';

if(In(0xC5BE,0xC6D9,n))return'p';

if(In(0xC6DA,0xC8BA,n))return'q';

if(In(0xC8BB,0xC8F5,n))return'r';

if(In(0xC8F6,0xCBF0,n))return's';

if(In(0xCBFA,0xCDD9,n))return't';

if(In(0xCDDA,0xCEF3,n))return'w';

if(In(0xCEF4,0xD188,n))return'x';

if(In(0xD1B9,0xD4D0,n))return'y';

if(In(0xD4D1,0xD7F9,n))return'z';

return'\0';

}

char*TransformToSpell(charname[]){

charchr[3];

wchar_twchr=0;

char*Spell=newchar[strlen(name)2];

memset(Spell,0x00,sizeof(char)*strlen(name)2+1);

for(unsignedinti=0,j=0;i<(strlen(name)2);++i)

{

memset(chr,0x00,sizeof(chr));

chr[0]=name[j++];

chr[1]=name[j++];

chr[2]='\0';

wchr=0;

wchr=(chr[0]&0xff)<<8;

wchr|=(chr[1]&0xff);

Spell[i]=convert(wchr);

}

returnSpell;

}

voidsearch(FInfoListFhead)

{

Friend*p;

charnamekey[8];

charnamespell[5];

intm;

p=Fhead->next;

scanf("%d",&m);

if(m==1)

{

scanf("%s",namekey);

intflag=0;判断是否找到

inti=0,count=0;

charnum[20][5];

while(p)

{

if(strcmp(namekey,p->FInfo.Fname)==0)

{

flag=1;

strcpy(num[i],p->FInfo.Fnum);

i++;

count++;

}

p=p->next;

}

if(flag==0)printf("\n对不起,通讯簿中没有此人的记录。

\n");

if(flag==1)

{

printf("\n已查到%d条记录,分别为:

\n\n",count);

p=Fhead->next;

i=0;

while(p)

{

if(strcmp(num[i],p->FInfo.Fnum)==0)

{

i++;

}

p=p->next;

}

}

}

elseif(m==3)

{

printf("\n请输入要查找的电话号码:

");

{

}

{

}

if((p==NULL))printf("\n对不起,通讯簿中没有此人的记录。

\n");

if((p!

=NULL))

{

printf("\n已查到,记录为:

\n\n");

}

}

elseif(m==2)

{

scanf("%s",namespell);

intflag=0;判断是否找到

inti=0,count=0;

charnum[20][5];

while(p)

{

if(strcmp(namespell,TransformToSpell(p->FInfo.Fname))==0)

{

flag=1;

strcpy(num[i],p->FInfo.Fnum);

i++;

count++;

}

p=p->next;

}

if(flag==0)printf("\n对不起,通讯簿中没有此人的记录。

\n");

if(flag==1)

{

printf("\n已查到%d条记录,分别为:

\n\n",count);

p=Fhead->next;

i=0;

while(p)

{

if(strcmp(num[i],p->FInfo.Fnum)==0)

{

i++;

}

p=p->next;

}

}

}

}

⑤修改通讯录成员信息

*修改模块modify():

在通讯录中修改某人通讯信息的子函数*

voidmodify(FInfoListFhead)

{

charch;

charkind[10],NewInfo[15];

Friend*p;

charnamekey[8];

charnamespell[5];

intm;

p=Fhead->next;

scanf("%d",&m);

if(m==1)

{

scanf("%s",namekey);

intflag=0;判断是否找到

inti=0,count=0;

charnum[20][5];

while(p)

{

if(strcmp(namekey,p->FInfo.Fname)==0)

{

flag=1;

strcpy(num[i],p->FInfo.Fnum);

i++;

count++;

}

p=p->next;

}

if(flag==0)printf("\n没有找到要修改的通讯者!

\n");

if(flag==1)

{

printf("\n已查到%d条记录,分别为:

\n\n",count);

p=Fhead->next;

i=0;

while(p)

{

if(strcmp(num[i],p->FInfo.Fnum)==0)

{

i++;

}

p=p->next;

}

charnum2[5];

p=Fhead->next;

printf("\n请输入所要修改的通讯者的编号:

");

scanf("%s",num2);

while(p)

{

if(strcmp(num2,p->FInfo.Fnum)==0)

{

printf("\n真的要修改该结点吗?

(是:

y否:

n):

");

scanf("%s",&ch);

while(ch=='y')

{

inti=0,n;

intflag=0;

printf("\n请输入所需修改的信息类别:

");

scanf("%s",kind);

if(strcmp(kind,"编号")==0)

{

printf("\n请输入所需修改的通讯信息:

");杨颖性别男

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

while(NewInfo[i]!

='\0')

{

if(NewInfo[i]>='0'&&NewInfo[i]<='9')

i++;

else

break;

}

if(i!

=n)

{

printf("输入的编号格式错误!

\n");

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

strcpy(p->FInfo.Fnum,NewInfo);

printf("修改成功!

\n");

return;

}

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

if(n>8)

{

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

strcpy(p->FInfo.Fname,NewInfo);

printf("修改成功!

\n");

return;

}

elseif(strcmp(kind,"性别")==0)

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

if(n>2)

{

printf("输入的性别格式错误!

\n");

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

strcpy(p->FInfo.sex,NewInfo);

printf("修改成功!

\n");

return;

}

elseif(strcmp(kind,"生日")==0)

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

while(NewInfo[i]!

='\0')

{

if(NewInfo[i]>='0'&&NewInfo[i]<='9'||NewInfo[i]=='-')

i++;

else

break;

}

if(i!

=n||n!

=10)

{

printf("输入的生日格式错误!

\n");

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

strcpy(p->FInfo.birthday,NewInfo);

printf("修改成功!

\n");

return;

}

elseif(strcmp(kind,"电话号码1")==0)

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

if(n<11&&n>1)

{

printf("\n输入的电话号码尾数不足或者格式错误!

\n");

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

printf("修改成功!

\n");

return;

}

elseif(strcmp(kind,"电话号码2")==0)

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

if(n<11&&n>1)

{

printf("输入的电话号码尾数不足或者格式错误!

\n");

printf("请重新输入:

");

scanf("%s",NewInfo);

}

elseflag=1;

}

printf("修改成功!

\n");

return;

}

elseif(strcmp(kind,"电话号码3")==0)

{

printf("\n请输入所需修改的通讯信息:

");

scanf("%s",NewInfo);

while(flag==0)

{

n=strlen(NewInfo);

if(n<8&&n>1)

{

printf("输入的电话号码尾数不足或者格式错误!

\n");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1