c语言编程通讯录.docx

上传人:b****6 文档编号:16709816 上传时间:2023-07-16 格式:DOCX 页数:16 大小:17.05KB
下载 相关 举报
c语言编程通讯录.docx_第1页
第1页 / 共16页
c语言编程通讯录.docx_第2页
第2页 / 共16页
c语言编程通讯录.docx_第3页
第3页 / 共16页
c语言编程通讯录.docx_第4页
第4页 / 共16页
c语言编程通讯录.docx_第5页
第5页 / 共16页
c语言编程通讯录.docx_第6页
第6页 / 共16页
c语言编程通讯录.docx_第7页
第7页 / 共16页
c语言编程通讯录.docx_第8页
第8页 / 共16页
c语言编程通讯录.docx_第9页
第9页 / 共16页
c语言编程通讯录.docx_第10页
第10页 / 共16页
c语言编程通讯录.docx_第11页
第11页 / 共16页
c语言编程通讯录.docx_第12页
第12页 / 共16页
c语言编程通讯录.docx_第13页
第13页 / 共16页
c语言编程通讯录.docx_第14页
第14页 / 共16页
c语言编程通讯录.docx_第15页
第15页 / 共16页
c语言编程通讯录.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c语言编程通讯录.docx

《c语言编程通讯录.docx》由会员分享,可在线阅读,更多相关《c语言编程通讯录.docx(16页珍藏版)》请在冰点文库上搜索。

c语言编程通讯录.docx

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");

}

}

}

}

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2