C语言通讯X录程序设计.docx
《C语言通讯X录程序设计.docx》由会员分享,可在线阅读,更多相关《C语言通讯X录程序设计.docx(62页珍藏版)》请在冰豆网上搜索。
C语言通讯X录程序设计
《程序设计综合实习[软]》
实习报告
学号
159074210
姓名
吴师庆
班级
软152
指导教师
潘祥
安徽工业大学
2016年9月
课程设计题目:
个人通讯录管理系统
一、需求分析
个人通讯录管理系统的制作,为了实现数据的输入、输出、修改、删除、查询、存、取功能。
程序的基本功能为:
1.建立联系人信息,包括姓名、电话、地址、QQ;
2.添加新的联系人信息(通讯录信息输入功能);
3.可按姓名、电话、地址、QQ排序输出显示通讯录的所有信息(显示通讯录信息功能);
4.按姓名、电话、地址、QQ查询某个联系人的信息(通讯录记录查询功能);
5.输入联系人姓名以修改某个联系人的信息(修改通讯录信息功能);
6.按姓名删除某个联系人的信息(删除通讯录信息功能);
7.将数据以文件的形式存储在磁盘上(保存通讯录信息功能)。
二、总体设计
各模块流程框图
1.main()
2.voidinput(PEOPLEpHead,intx)
3.voidsearch(PEOPLEpHead)
4.intshow(PEOPLEpHead)
开始
选显示排序依据
调用
address_
sort()
函数
phone_
name_
QQ_
其他键
4
3
2
1
按姓名顺序显示
按电话顺序显示
按地址顺序显示
按QQ顺序显示
输入错误
输出所有联系人信息
结束
5.voidmodify(PEOPLEpHead)
6.voiddelete_name(PEOPLEpHead,intx)
7.voidsave(PEOPLEpHead)
8.voidquit()
三、详细设计
1.新建联系人功能主控函数voidinput(PEOPLEpHead,intx)
实现添加新的联系人的功能。
voidinput(PEOPLEpHead,intx)
{
inti=0;
PEOPLEp=pHead;
while(p!
=NULL&&i{p=p->pNext;++i;}PEOPLEpNew=(PEOPLE)malloc(sizeof(people));if(pNew==NULL){printf("动态分配内存失败!");exit(-1);}printf("\n*************************************************************************\n\n");printf("\t\t请创建并添加联系人信息\n\n");printf("\t\t请输入联系人姓名:");gets(pNew->name);printf("\t\t请输入联系人电话:");gets(pNew->phone);printf("\t\t请输入联系人地址:");gets(pNew->address);printf("\t\t请输入联系人QQ:");gets(pNew->QQ);printf("\n\t\t成功添加了联系人信息!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();PEOPLEq=p->pNext;p->pNext=pNew;pNew->pNext=q;}2.查询功能主控函数voidsearch(PEOPLEpHead)实现可按姓名、电话、地址、QQ查询某联系人的功能,会分别调用相应的查询函数。voidsearch(PEOPLEpHead){intnum;printf("\n*************************************************************************\n\n");printf("\t\t\t1.按姓名查找\n");printf("\t\t\t2.按电话查找\n");printf("\t\t\t3.按地址查找\n");printf("\t\t\t4.按QQ查找\n");printf("\n\t\t选择你需要操作的功能号码(1-4):");num=getchar();getchar();switch(num){case'1':name_search(pHead);break;case'2':phone_search(pHead);break;case'3':address_search(pHead);break;case'4':QQ_search(pHead);break;default:printf("\t\t\t输入错误!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();break;}}3.显示功能主控函数intshow(PEOPLEpHead)先调用排序函数,再按相应顺序将全部联系人的信息显示到屏幕。intshow(PEOPLEpHead){intnum;printf("\n*************************************************************************\n\n");printf("\t\t\t1.按姓名顺序显示\n");printf("\t\t\t2.按电话顺序显示\n");printf("\t\t\t3.按地址顺序显示\n");printf("\t\t\t4.按QQ顺序显示\n");printf("\n\t\t选择你需要操作的功能号码(1-4):");num=getchar();getchar();switch(num){case'1':name_sort(pHead);break;case'2':phone_sort(pHead);break;case'3':address_sort(pHead);break;case'4':QQ_sort(pHead);break;default:printf("\t\t\t输入错误!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();return0;}intlen=number(pHead);PEOPLEp=pHead->pNext;inti;printf("\n*************************************************************************\n");printf("====================→用户信息记录表←===============================");printf("\n*************************************************************************\n\n");if(p!=NULL){for(i=0;ipNext){printf("\t\t联系人姓名:%s\n",p->name);printf("\t\t联系人电话号码:%s\n",p->phone);printf("\t\t联系人地址:%s\n",p->address);printf("\t\t联系人QQ:%s\n",p->QQ);printf("\n");if(i!=0&&(i+1)%5==0){printf("\n\t\t\t输入任意键显示下一页\n");printf("\n*************************************************************************\n");getchar();}}printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}else{printf("\t\t对不起!!没有任何人的记录!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}return0;}4.修改功能主控函数voidmodify(PEOPLEpHead)输入要修改联系人的姓名,可显示该联系人信息,并输入该联系人新的信息。voidmodify(PEOPLEpHead){inti;intmark=0;intlen=number(pHead);charname[25];PEOPLEp=pHead->pNext;printf("\n*************************************************************************\n");printf("====================→用户信息修改功能←=============================");printf("\n*************************************************************************\n\n");printf("\t\t输入要修改联系人的姓名:");gets(name);if(p!=NULL){for(i=1;i<=len;++i,p=p->pNext){if(strcmp(name,p->name)==0){printf("*************************以下是您要修改的用户信息******************\n\n");printf("联系人姓名:%s\n",p->name);printf("联系人电话号码:%s\n",p->phone);printf("联系人地址:%s\n",p->address);printf("联系人QQ:%s\n",p->QQ);printf("\n*************************************************************************\n\n");++mark;}break;}if(mark>0){printf("\t\t请输入修改联系人信息\n\n");printf("\t\t请输入联系人姓名:");scanf("%s",p->name);printf("\t\t请输入联系人电话:");scanf("%s",p->phone);printf("\t\t请输入联系人地址:");scanf("%s",p->address);printf("\t\t请输入联系人QQ:");scanf("%s",p->QQ);getchar();printf("\n\t\t成功修改了联系人信息!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}else{printf("\n\t\t对不起!!没有该用户的记录!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}}else{printf("\n\t\t对不起!!没有任何人的记录!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}}5.删除功能主控函数voiddelete_name(PEOPLEpHead,intx)输入要删除联系人的姓名,可显示该联系人信息,并提示是否确认删除,确认后会删除该联系人信息。voiddelete_name(PEOPLEpHead,intx){inti,pos;intmark=0;intlen=number(pHead);charname[25];PEOPLEp=pHead->pNext;printf("\n*************************************************************************\n");printf("====================→用户信息删除功能←=============================");printf("\n*************************************************************************\n\n");printf("\t\t输入要删除联系人的姓名:");gets(name);if(p!=NULL){for(i=1;i<=len;++i,p=p->pNext){if(strcmp(name,p->name)==0){printf("*************************以下是您要删除的用户信息************************\n\n");printf("num:%d\n",mark+1);printf("联系人姓名:%s\n",p->name);printf("联系人电话号码:%s\n",p->phone);printf("联系人地址:%s\n",p->address);printf("联系人QQ:%s\n",p->QQ);printf("\n*************************************************************************\n");pos=i;++mark;}}if(mark>0){printf("\n\t\t是否确定删除?(y/n)");if(getchar()=='y'){getchar();Delete(pHead,pos);//删除节点printf("\n\t\t删除成功!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}else{printf("\n\t\t已取消\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}}else{printf("\n\t\t对不起!!没有该用户的记录!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}}else{printf("\n\t\t对不起!!没有任何人的记录!!\n\n");printf("请按Enter键继续");printf("\n*************************************************************************\n");getchar();}}6.保存功能主控函数voidsave(PEOPLEpHead)将所有联系人的信息保存为文本文件,用户可随时打开txt文件查看所有联系人信息。voidsave(PEOPLEpHead)//保存函数{FILE*fp;PEOPLEp=pHead->pNext;fp=fopen("address_list.txt","w");fprintf(fp,"*************************************************************************\n\n");fprintf(fp,"==============→用户信息记录表←================\n");while(p!=NULL){fprintf(fp,"\n====================================================\n\n");fprintf(fp,"联系人姓名:%s\n",p->name);fprintf(fp,"联系人电话号码:%s\n",p->phone);fprintf(fp,"联系人地址:%s\n",p->address);fprintf(fp,"联系人QQ:%s\n",p->QQ);p=p->pNext;}fprintf(fp,"\n\n*************************************************************************\n");fclose(fp);printf("\n\t恭喜你!!成功储存,你能在address_list.txt找到相应纪录\n");printf("\n请按Enter键继续");printf("\n*************************************************************************\n");getchar();}7.退出功能主控函数voidquit()退出通讯录系统。voidquit(){printf("\n\t\t感谢使用个人通讯录管理系统,再见!\n\n");exit(0);}四、调试与测试1.显示函数intshow(PEOPLEpHead);原本设计为void型函数,但当用户没有输入任何联系人信息时,程序在显示“没有任何人信息后”,还会继续执行该函数,导致该信心重复输出。后改为int型,用return0;控制函数结束运行。2.删除函数voiddelete_name(PEOPLEpHead,intx);原本没有x参数。但在main函数中,定义了i来记录联系人个数,调用voidinput(PEOPLEpHead,intx)函数时,联系人数i会加一,但删除时并没有对i进行操作,导致i只加不减,在运行删除功能后再
p=p->pNext;
++i;
}
PEOPLEpNew=(PEOPLE)malloc(sizeof(people));
if(pNew==NULL)
printf("动态分配内存失败!
");
exit(-1);
printf("\n*************************************************************************\n\n");
printf("\t\t请创建并添加联系人信息\n\n");
printf("\t\t请输入联系人姓名:
gets(pNew->name);
printf("\t\t请输入联系人电话:
gets(pNew->phone);
printf("\t\t请输入联系人地址:
gets(pNew->address);
printf("\t\t请输入联系人QQ:
gets(pNew->QQ);
printf("\n\t\t成功添加了联系人信息!
!
\n\n");
printf("请按Enter键继续");
printf("\n*************************************************************************\n");
getchar();
PEOPLEq=p->pNext;
p->pNext=pNew;
pNew->pNext=q;
2.查询功能主控函数voidsearch(PEOPLEpHead)
实现可按姓名、电话、地址、QQ查询某联系人的功能,会分别调用相应的查询函数。
voidsearch(PEOPLEpHead)
intnum;
printf("\t\t\t1.按姓名查找\n");
printf("\t\t\t2.按电话查找\n");
printf("\t\t\t3.按地址查找\n");
printf("\t\t\t4.按QQ查找\n");
printf("\n\t\t选择你需要操作的功能号码(1-4):
num=getchar();
switch(num)
case'1':
name_search(pHead);
break;
case'2':
phone_search(pHead);
case'3':
address_search(pHead);
case'4':
QQ_search(pHead);
default:
printf("\t\t\t输入错误!
3.显示功能主控函数intshow(PEOPLEpHead)
先调用排序函数,再按相应顺序将全部联系人的信息显示到屏幕。
intshow(PEOPLEpHead)
printf("\t\t\t1.按姓名顺序显示\n");
printf("\t\t\t2.按电话顺序显示\n");
printf("\t\t\t3.按地址顺序显示\n");
printf("\t\t\t4.按QQ顺序显示\n");
name_sort(pHead);
phone_sort(pHead);
address_sort(pHead);
QQ_sort(pHead);
return0;
intlen=number(pHead);
PEOPLEp=pHead->pNext;
inti;
printf("====================→用户信息记录表←===============================");
if(p!
=NULL)
for(i=0;ipNext)
printf("\t\t联系人姓名:
%s\n",p->name);
printf("\t\t联系人电话号码:
%s\n",p->phone);
printf("\t\t联系人地址:
%s\n",p->address);
printf("\t\t联系人QQ:
%s\n",p->QQ);
printf("\n");
if(i!
=0&&(i+1)%5==0)
printf("\n\t\t\t输入任意键显示下一页\n");
else
printf("\t\t对不起!
没有任何人的记录!
4.修改功能主控函数voidmodify(PEOPLEpHead)
输入要修改联系人的姓名,可显示该联系人信息,并输入该联系人新的信息。
voidmodify(PEOPLEpHead)
intmark=0;
charname[25];
printf("====================→用户信息修改功能←=============================");
printf("\t\t输入要修改联系人的姓名:
gets(name);
for(i=1;i<=len;++i,p=p->pNext)
if(strcmp(name,p->name)==0)
printf("*************************以下是您要修改的用户信息******************\n\n");
printf("联系人姓名:
printf("联系人电话号码:
printf("联系人地址:
printf("联系人QQ:
++mark;
if(mark>0)
printf("\t\t请输入修改联系人信息\n\n");
scanf("%s",p->name);
scanf("%s",p->phone);
scanf("%s",p->address);
scanf("%s",p->QQ);
printf("\n\t\t成功修改了联系人信息!
printf("\n\t\t对不起!
没有该用户的记录!
5.删除功能主控函数voiddelete_name(PEOPLEpHead,intx)
输入要删除联系人的姓名,可显示该联系人信息,并提示是否确认删除,确认后会删除该联系人信息。
voiddelete_name(PEOPLEpHead,intx)
inti,pos;
printf("====================→用户信息删除功能←=============================");
printf("\t\t输入要删除联系人的姓名:
printf("*************************以下是您要删除的用户信息************************\n\n");
printf("num:
%d\n",mark+1);
pos=i;
printf("\n\t\t是否确定删除?
(y/n)");
if(getchar()=='y')
Delete(pHead,pos);//删除节点
printf("\n\t\t删除成功!
printf("\n\t\t已取消\n\n");
6.保存功能主控函数voidsave(PEOPLEpHead)
将所有联系人的信息保存为文本文件,用户可随时打开txt文件查看所有联系人信息。
voidsave(PEOPLEpHead)//保存函数
FILE*fp;
fp=fopen("address_list.txt","w");
fprintf(fp,"*************************************************************************\n\n");
fprintf(fp,"==============→用户信息记录表←================\n");
fprintf(fp,"\n====================================================\n\n");
fprintf(fp,"联系人姓名:
fprintf(fp,"联系人电话号码:
fprintf(fp,"联系人地址:
fprintf(fp,"联系人QQ:
fprintf(fp,"\n\n*************************************************************************\n");
fclose(fp);
printf("\n\t恭喜你!
成功储存,你能在address_list.txt找到相应纪录\n");
printf("\n请按Enter键继续");
7.退出功能主控函数voidquit()
退出通讯录系统。
voidquit()
printf("\n\t\t感谢使用个人通讯录管理系统,再见!
exit(0);
四、调试与测试
1.显示函数intshow(PEOPLEpHead);原本设计为void型函数,但当用户没有输入任何联系人信息时,程序在显示“没有任何人信息后”,还会继续执行该函数,导致该信心重复输出。
后改为int型,用return0;控制函数结束运行。
2.删除函数voiddelete_name(PEOPLEpHead,intx);原本没有x参数。
但在main函数中,定义了i来记录联系人个数,调用voidinput(PEOPLEpHead,intx)函数时,联系人数i会加一,但删除时并没有对i进行操作,导致i只加不减,在运行删除功能后再
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1