#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include"F.h"
#include"Data.h"
/*此函数功能:系统初始化*/
Indiv *Startwork_CreateLinklist()
{
Indiv *head;
fp=fopen("PAb.dat","rb+"); //读写打开存在的PAb.dat文件
if(fp==NULL) //读写打开文件PAb.dat失败
{
printf("\n\n\n\n");
printf("\t\t\t\t\t\t\t\t不能打开文件PAb.dat,自动执行系统初始化功能!\n");
fclose(fp);
fp=fopen("PAb.dat","wb+"); //读写建立PAb.dat文件
if(fp==NULL) //读写建立 PAb.dat文件 失败
{
remove("Pab.dat");
printf("\t\t\t\t\t\t\t系统初始化失败!\n");
fclose(fp);
printf("\t\t\t\t\t\t\t按任意键退出……\n");
getch();
exit(1);
}
else if(fp!=NULL) //读写建立 PAb.dat文件 成功
{
/*开辟一个头节点且指针域为空*/
head=(Indiv*)malloc(sizeof(Indiv));
head->next=NULL;
fclose(fp);
}
}
if(fp!=NULL) //读写打开文件PAb.dat成功
{
fclose(fp);
Indiv *s;
Indiv *p;
/*检查 PAb.dat文件 是否为空文件*/
int check;
check=Check_EmptyFile();
if( check==0 ) //若 PAb.dat文件 为空
{
/*开辟一个头节点且指针域为空*/
head=(Indiv*)malloc(sizeof(Indiv));
head->next=NULL;
}
else if( check==1 ) //若 PAb.dat文件 不为空
{
fp=fopen("PAb.dat","rb+"); //读写打开存在的PAb.dat文件
head=(Indiv*)malloc(sizeof(Indiv)); //开辟一个头节点
s=head;
while(!feof(fp)) //文件不为空,便读取文件的数据到链表中
{
p=(Indiv*)malloc(sizeof(Indiv));
p->next=NULL;
fscanf(fp,"%s %s %s %s %s %s\n",p->name,p->sex,p->company,p->phonenum,p->mail,p->Q);
s->next=p;
s=p;
}
fclose(fp);
}
}
printf("\n\n\n\n");
printf("\t\t\t\t\t\t\t\t\t\t系统正在初始化,请稍后!\n");
printf("\t\t\t\t\t");
Adjust_ProcessBar(20,100);
printf("\n\n");
printf("\t\t\t\t\t\t\t\t\t\t系统初始化成功!\n\n");
printf("\t\t\t\t\t\t\t\t\t\t请按任意键继续执行!");
getch();
fflush(stdin);
return head; //返回头指针
}
/*此函数功能:释放内存空间*/
void Free_LinkList(Indiv *head)
{
Indiv *q;
q=NULL;
Indiv *p;
p=head;
while(p!= NULL)
{
q=p->next;
free(p);
p = q;
}
}
/*此函数功能:在通讯录一次性输入若干个联系人的个人信息,并存入文件*/
void Inputdata(Indiv *head)
{
Indiv *s;
Indiv *p;
p=head;
Indiv *q;
q=p->next;
int n=1; //功能:是否继续录入联系人
while(p->next!=NULL)
{
p=q;
q=p->next;
}
char c; //功能:确定是否添加联系人
printf("\t\t\t\t\t\t\t是否添加联系人[Y/N]:");
c=getchar();
fflush(stdin);
while(c!='Y'&&c!='y'&&c!='N'&&c!='n')
{
printf("\t\t\t\t\t\t\t请选择正确的选项[Y/N]:");
c=getchar();
fflush(stdin);
}
if(c=='N'||c=='n')
{
printf("\t\t\t\t\t\t\t已取消添加联系人!\n");
}
else if(c=='Y'||c=='y')
{
while(n)
{
fp=fopen("PAb.dat","ab+"); //读写打开存在的 PAb.dat文件,可在文件末尾追加数据
s=(Indiv*)malloc(sizeof(Indiv)); //开辟新的节点
s->next=NULL;
p->next=s;
printf("\t\t\t\t\t\t\t请输入姓名:");
gets(s->name);
fflush(stdin);
printf("\t\t\t\t\t\t\t请输入性别:");
gets(s->sex);
fflush(stdin);;
printf("\t\t\t\t\t\t\t请输入单位:");
gets(s->company);
fflush(stdin);
printf("\t\t\t\t\t\t\t请输入电话号码:");
t: gets(s->phonenum);
int count=0; //功能:检验手机号码是否输入错误
while( s->phonenum[count]!='\0' )
{
count++;
}
if(count!=11&&count!=7) //若输入的 手机号码 不为 11 位数或者 7 位数,则让用户继续输入
{
printf("\t\t\t\t\t\t\t输入的电话号码有误,请输入正确的电话号码:");
goto t;
}
fflush(stdin);
printf("\t\t\t\t\t\t\t请输入邮箱地址:");
gets(s->mail);
fflush(stdin);
printf("\t\t\t\t\t\t\t请输入QQ账号:");
gets(s->Q);
fflush(stdin);
p=s;
fprintf(fp,"%s %s %s %s %s %s\n",s->name,s->sex,s->company,s->phonenum,s->mail,s->Q);
printf("\t\t\t\t\t\t\t信息录入完毕,是否继续录入[Y/N]:");
fclose(fp);
char ch; //功能:确定是否继续录入联系人。
ch=getchar();
fflush(stdin);
while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n')
{
printf("\t\t\t\t\t\t\t请选择正确的选项[Y/N]:");
ch=getchar();
fflush(stdin);
}
if(ch=='Y'||ch=='y') //确定继续录入联系人信息
{
n=1;
printf("\t\t\t\t\t\t\t请继续录入信息\n\n");
}else if(ch=='N'||ch=='n') //不继续录入联系人信息
{
printf("\t\t\t\t\t\t\t已退出录入信息\n\n");
n=0;
}
}
}
printf("\t\t\t\t\t\t\t按任意键退出……\n");
getch();
}
/*此函数功能:显示所有联系人的个人信息*/
void Displaydata(Indiv *head)
{
Indiv *p;
Indiv *r;
r=head;
p=head->next;
int count=0; //功能:统计通讯录联系人的个数
if(r->next!=NULL) //若链表 不为空链表
{
printf("\t\t\t\t\t\t\t联系人的个人信息如下:\n\n");
}
while(r->next!=NULL) //遍历链表,打印出联系人的信息
{
printf("\t\t\t\t\t\t\t\t姓名:%s\n",p->name);
printf("\t\t\t\t\t\t\t\t性别:%s\n",p->sex);
printf("\t\t\t\t\t\t\t\t单位:%s\n",p->company);
printf("\t\t\t\t\t\t\t\t电话号码:%s\n",p->phonenum);
printf("\t\t\t\t\t\t\t\t邮箱地址:%s\n",p->mail);
printf("\t\t\t\t\t\t\t\tQQ账号:%s\n\n",p->Q);
count++;
r=p;
p=p->next;
}
printf("\t\t\t\t\t\t\t个人通讯录管理系统中共有%d位联系人。",count);
printf("\n");
}
/*此函数功能:通过关键字查找联系人的个人信息*/
void Seekdata(Indiv *head)
{
Indiv *q;
q=head;
int t;
char ch; // 功能:数字功能键
printf("\t\t\t\t\t\t\t1.通过姓名查找\n");
printf("\t\t\t\t\t\t\t2.通过手机号码查找\n");
printf("\t\t\t\t\t\t\t3.通过QQ账号查找\n");
printf("\t\t\t\t\t\t\t请按下相应的数字键选择搜索关键字:");
ch=getch();
fflush(stdin);
while(ch<'1'||ch>'3')
{
printf("\t\t\t\t\t\t\t请选择正确搜索关键字!\n");
printf("\t\t\t\t\t\t\t请按下相应的数字键选择搜索关键字:");
ch=getch();
fflush(stdin);
}
switch(ch)
{
case '1':
printf("通过姓名查找\n\n");
printf("\t\t\t\t\t\t\t正在进行的操作:通过姓名查找联系人\n");
t=Seekd_byname(q); //调用 Seekd_byname(Indiv *head)函数 查找联系人,若存在则打印出联系人信息
break;
case '2':
printf("通过手机号码查找\n\n");
printf("\t\t\t\t\t\t\t正在进行的操作:通过手机号码查找联系人\n");
t=Seekd_byphon(q); //调用 Seekd_byphon(Indiv *head)函数 查找联系人,若存在则打印出联系人信息
break;
case '3':
printf("通过QQ账号查找\n\n");
printf("\t\t\t\t\t\t\t正在进行的操作:通过QQ账号查找联系人\n");
t=Seekd_byQQ(q); //调用 Seekd_byQQ(Indiv *head)函数 查找联系人,若存在则打印出联系人信息
break;
}
if(t!=0) //存在联系人
{
printf("\t\t\t\t\t\t\t一共搜索到%d位联系人\n",t);
printf("\t\t\t\t\t\t\t查找完毕!\n\n");
}
if(t==0) //不存在联系人
{
printf("\t\t\t\t\t\t\t没有找到该联系人的相关信息!\n");
}
printf("\t\t\t\t\t\t\t按任意键退出……\n");
getch();
}
int Seekd_byname(Indiv *head) /*通过姓名查找个人信息*/
{
int count=0;
char name[N];
printf("\t\t\t\t\t\t\t请输入姓名进行查找:");
gets(name);
fflush(stdin);
printf("\n");
Indiv *p;
Indiv *r;
r=head;
p=r->next;
while(r->next!=NULL) //遍历链表
{
if(!strcmp(p->name,name)) //判断是否存在 姓名与用户输入的姓名一致 的联系人
{
/*打印出该联系人的信息*/
/*可能出现姓名相同的情况,只要姓名与用户输入一致,便打印出该联系人信息*/
printf("\n");
printf("\t\t\t\t\t\t\t联系人的个人信息如下:\n");
printf("\t\t\t\t\t\t\t姓名:%s\n",p->name);
printf("\t\t\t\t\t\t\t性别:%s\n",p->sex);
printf("\t\t\t\t\t\t\t单位:%s\n",p->company);
printf("\t\t\t\t\t\t\t电话号码:%s\n",p->phonenum);
printf("\t\t\t\t\t\t\t邮箱地址:%s\n",p->mail);
printf("\t\t\t\t\t\t\tQQ账号:%s\n\n",p->Q);
count++;
}
r=p;
p=p->next;
}
return count; //返回count的值,若count为0,则不存在联系人,反之存在联系人
}
int Seekd_byphon(Indiv *head) /*通过电话号码查找个人信息*/
{
int count=0;
char phonenumber[N/2];
printf("\t\t\t\t\t\t\t请输入电话号码进行�
- 1
- 2
- 3
- 4
- 5
- 6
前往页