c语言编程通讯录.docx
- 文档编号:29034768
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:16
- 大小:17.05KB
c语言编程通讯录.docx
《c语言编程通讯录.docx》由会员分享,可在线阅读,更多相关《c语言编程通讯录.docx(16页珍藏版)》请在冰豆网上搜索。
c语言编程通讯录
1、设计思路:
主要分为添加信息、删除信息、排序、查找四部分。
将各个功能分开用函数实现,主函数只起调用作用。
期中删除时需要确定删除内容,要用到查找函数,需要函数间的调用。
因需要形成文本文档格式,还需专门用到函数从txt中调取数据,组成链表。
需要用到函数的操作基于此链表进行。
二、程序内容:
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"stdlib.h"
intchoose();//函数声明
voidadd();
voidget();
voidarrange();
structdata*search();
voiddel();
structdata//学生信息类型,包含学号,姓名,联系方式
{
charnum[15];//学号
charname[20];
charphone[15];
intflag;
structdata*next;
}*head;
intk;//全局变量,通讯录总人数。
FILE*fp;//文件指针
voidmain()//主函数,只起到调用各个函数功能
{
printf("**系***\n");
inta;
a=choose();
if(a==1)
{
add();
}
if(a==2)
{
del();
}
if(a==3)
{
search();
main();
}
if(a==4)
{
arrange();
}
}
intchoose()//主页面,选择要执行的功能。
{
intn;
printf("***************通讯录*******************\n");
printf("请输入需要执行的功能对应的序号:
\n");
printf("1、添加新同学信息\n");
printf("2、删除某同学信息\n");
printf("3、按关键字查找并输出\n");
printf("4、对已有信息按学号排序\n");
while
(1)//直到输入正确为止。
{
scanf("%d",&n);
if(n==1||n==2||n==3||n==4)
{
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
returnn;
}
voidadd()//添加功能
{
inti;
structdata*stu;
stu=(structdata*)malloc(sizeof(data));
fp=fopen("addressbook.txt","a+");//读写/追加方式打开文本文档。
printf("请输入新同学学号\n");
scanf("%15s",stu->num);
printf("请输入新同学姓名\n");
scanf("%20s",stu->name);
printf("请输入新同学联系方式\n");
scanf("%15s",stu->phone);
fprintf(fp,"%-15s\t\t%-20s\t\t%-15s\n",stu->num,stu->name,stu->phone);//存入文件中
fclose(fp);
free(stu);
printf("请选择下一步操作:
\n");//后续操作选择
printf("1、继续添加新同学\n");
printf("2、返回主页面\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
add();
break;
}
elseif(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
}
voidget()//从TXT中读取数据,组成链表函数。
查找排序函数均需调用。
{
structdata*stu,*p1;
inti=0;
k=0;//全局变量初始化
p1=(structdata*)malloc(sizeof(structdata));
head=NULL;
fp=fopen("addressbook.txt","r+");//打开文件
if(fopen("addressbook.txt","r+")==NULL)//若无数据时
{
printf("通讯录暂无学生信息,请选择下一步操作\n");
printf("1:
现在添加学生信息\n");
printf("2:
返回选择操作面板\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
add();
break;
}
elseif(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
}
else
{
while(!
feof(fp))//文件位置指针指向末尾时结束
{
stu=(structdata*)malloc(sizeof(structdata));
fscanf(fp,"%15s\t\t%20s\t\t%15s\n",&stu->num,&stu->name,&stu->phone);
stu->flag=0;//将节点连接为链表
if(head==NULL)//表空
{
head=stu;
p1=stu;
stu->next=NULL;
}
else//表非空
{
p1->next=stu;
p1=stu;
stu->next=NULL;
}
}
fclose(fp);
}
p1=head;//记录总人数,作为后续函数判断是否表空依据
while(p1!
=NULL)
{
//printf("%15s\t\t%20s\t\t%15s\n",p1->num,p1->name,p1->tel);
p1=p1->next;
k++;
}
free(p1);
}
voidarrange()//按学号排序
{
structdata*p1,*p2;
intj;
get();//调用函数
for(j=1;j<=k;j++)
{
p1=head;
p2=p1;
while(p2!
=NULL)
{
if(p2->flag==0)
break;
else
p2=p2->next;
}
while(p1!
=NULL)
{
if(strcmp(p1->num,p2->num)<0&&p1->flag==0)
p2=p1;
p1=p1->next;
}
printf("%15s\t\t%20s\t\t%15s\n",p2->num,p2->name,p2->phone);
p2->flag=1;
}
p2=head;
while(p2!
=NULL)
{
p2->flag=0;
p2=p2->next;
}
printf("1:
返回选择操作面板\n");
while
(1)
{
scanf("%d",&j);
if(j!
=1&&j!
=2)
{
printf("输入序号不正确,请重新输入。
\n");
continue;
}
else
break;
}
if(j==1)
main();
}
structdata*search()//查找函数
{
structdata*p1,*p2;
p1=(structdata*)malloc(sizeof(structdata));
inti=0,h=0;
get();//调用函数
if(k==0)
{
printf("通讯录暂无学生信息,请选择下一步操作\n");
printf("1:
继续添加学生信息\n");
printf("2:
返回选择操作面板\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
add();
break;
}
elseif(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
}
else
{
p2=head;//选择查找方式
printf("请选择关键字种类:
\n");
printf("1、按学号查找\n");
printf("2、按姓名查找\n");
printf("3、按联系方式查找\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
printf("请输入学号:
\n");
scanf("%s",p1->num);
while(p2!
=NULL)//按学号
{
if(strcmp(p2->num,p1->num)==0)
{
printf("该生信息如下:
\n");
printf("%15s\t\t%20s\t\t%15s\n",p2->num,p2->name,p2->phone);
h=1;
break;
}
p2=p2->next;
}
break;
}
elseif(i==2)//按姓名
{
printf("请输入姓名:
\n");
scanf("%s",p1->name);
while(p2!
=NULL)
{
if(strcmp(p2->name,p1->name)==0)
{
printf("该生信息如下:
\n");
printf("%15s\t\t%20s\t\t%15s\n",p2->num,p2->name,p2->phone);
h=1;
break;
}
p2=p2->next;
}
break;
}
elseif(i==3)//按联系方式
{printf("请输入电话:
\n");
scanf("%s",p1->phone);
while(p2!
=NULL)
{
if(strcmp(p2->name,p1->name)==0)
{
printf("查找成功!
\n");
printf("该生信息如下:
\n");
printf("%15s\t\t%20s\t\t%15s\n",p2->num,p2->name,p2->phone);
h=1;
break;
}
p2=p2->next;
}
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
if(h)//返回指针以便删除时调用
{
return(p2);
}
if(!
h)
{
printf("无此同学信息\n");
main();
}
}
}
voiddel()//删除操作
{
inti=0;
structdata*p1,*p2,*p3;
p2=(structdata*)malloc(sizeof(data));
get();//调用函数
printf("请查找所要删除的同学。
\n");
p2=search();//调用查找函数
printf("1、删除\n");
printf("2、返回选择操作面板\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
p1=head;
p3=p1->next;
if(p1==p2)
head=p3;
else
{
while(p3!
=p2)
{
p1=p1->next;
p3=p3->next;
}
p1->next=p3->next;
}
fp=fopen("addressbook.txt","w");
p1=head;
while(p1!
=NULL)
{
fprintf(fp,"%-15s\t\t%-20s\t\t%-15s\n",p1->num,p1->name,p1->phone);//存入文件中
printf("%15s\t\t%20s\t\t%15s\n",p1->num,p1->name,p1->phone);
p1=p1->next;
}
fclose(fp);
free(p2);
printf("删除成功!
\n");
break;
}
if(i==2)
{
main();
break;
}
}
if(i==1)
{
printf("请选择下一步操作:
\n");
printf("1:
继续删除学生信息\n");
printf("2:
返回选择操作面板\n");
while
(1)
{
scanf("%d",&i);
if(i==1)
{
del();
break;
}
elseif(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。
\n");
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 通讯录