📄 book.cpp
字号:
#include "info.h"
void infosys();
void creat();
void load();
void save(int);
void renew();
void add();
struct people *found_no(char []);
void dele();
void chaxun();
void show();
struct people *head=NULL; //定义头指针
struct people *tail=NULL; //定义尾指针
struct people *q; //定义指针,指向链表中节点
FILE *fp; //定义指向文件的指针
//*************************************************************
//主函数
//*************************************************************
void main()
{
printf("******************************************************\n");
printf(" 欢迎使用通讯录管理系统! \n");
printf("******************************************************\n");
infosys();
}
//*************************************************************
//主菜单
//*************************************************************
void infosys()
{
int sel;
char c;
if((fp=fopen("book","r"))==NULL)
{
printf("\n 您的通讯录不存在,是否创建?(y/n)");
if((c=getchar())=='y') creat();
else
{
printf("您没有创建通讯录,按任意键将退出系统...\n");
exit(0);
}
}
else
{
printf("正在导入通讯录,请等待...\n");
load();
}
do
{
printf("\n\n ********************************\n");
printf(" 通讯录管理系统 \n");
printf(" ********************************\n");
printf(" 1.创建新通讯录\n");
printf(" 2.通讯录维护\n");
printf(" 3.信息查询\n");
printf(" 4.信息统计\n");
printf(" 5.打 印\n");
printf(" 6.退出系统\n");
printf(" ********************************\n");
printf("请选择:");
scanf("%d",&sel);
switch(sel)
{
case 1: printf("\n您选择的是: 创建新通讯录\n"); creat();break;
case 2: printf("\n您选择的是: 通讯录维护"); renew();break;
case 3: printf("\n您选择的是: 信息查询"); chaxun();break;
case 6:printf("\n谢谢使用本系统!\n");break;
}
}while(sel!=6);
}
//*************************************************************
//创建新通讯录
//*************************************************************
void creat()
{
struct people *newp;
char ch;
int no=1;
char sel;
printf("\n您将要创建一个新的通讯录,该操作将使原来通讯录信息丢失,是否继续?(y/n)");
getchar();
if((ch=getchar())=='y')
{
printf("\n开始创建新通讯录\n");
fp=fopen("book","wb");
do
{
newp=(struct people *)malloc(sizeof(struct people));
printf("请输入第%d人信息:\n",no);
printf("编号:");
scanf("%s",newp->no);
printf("姓名:");
scanf("%s",newp->name);
printf("性别:");
scanf("%s",newp->sex);
printf("出生年月日(1980 12 30):");
scanf("%d%d%d",&newp->birthday.year,&newp->birthday.month,&newp->birthday.day);
printf("移动电话:");
scanf("%s",newp->mobilphone);
printf("办公电话:");
scanf("%s",newp->workphone);
printf("住宅电话:");
scanf("%s",newp->homephone);
printf("电子邮箱:");
scanf("%s",newp->email);
printf("通信地址:");
scanf("%s",newp->address);
printf("邮政编码:");
scanf("%s",newp->yb);
printf("所属群组(1.亲人 2.朋友 3.同事 4.客户 5.其他):");
scanf("%s",newp->qz);
printf("备注:");
scanf("%s",newp->bz);
if(head==NULL)
{
head=newp;
tail=newp;
tail->next=NULL;
}
else
{
tail->next=newp;
tail=newp;
tail->next=NULL;
}
printf("是否继续?(y/n)");
getchar();
sel=getchar();
no++;
fwrite(tail,sizeof(struct people),1,fp);
}while(sel!='n');
}
}
//*************************************************************
//导入文件中的通讯录
//*************************************************************
void load()
{
head=NULL;
tail=NULL;
int no=0;
struct people *newp;
fp=fopen("book","rb");
while(1)
{
newp=(struct people *)malloc(sizeof(struct people));
fread(newp,sizeof(people),1,fp);
if(feof(fp)){free(newp);break;}
if(head==NULL)
{
head=newp;
tail=newp;
tail->next=NULL;
}
else
{
tail->next=newp;
tail=newp;
tail->next=NULL;
}
no++;
printf("load:%s %s\n",tail->no,tail->name);
}
fclose(fp);
printf("导入成功,共计%d条记录.\n",no);
}
//*************************************************************
//更新后的通讯录存磁盘文件
//*************************************************************
void save(int s)
{
struct people *p=head;
if(s==0)
fp=fopen("book","wb");
else
fp=fopen("book","ab");
while(p)
{
fwrite(p,sizeof(struct people),1,fp);
p=p->next;
}
fclose(fp);
}
//*************************************************************
//通讯录信息维护菜单
//*************************************************************
void renew()
{
int sel;
do
{
printf("\n ********************************\n");
printf(" 通讯录信息维护 \n");
printf(" ********************************\n");
printf(" 1.添加信息\n");
printf(" 2.修改信息\n");
printf(" 3.删除信息\n");
printf(" 4.返回\n");
printf(" ********************************\n");
printf("请选择:");
scanf("%d",&sel);
switch(sel)
{
case 1: printf("\n您选择的是: 添加信息"); add();break;
case 2:
case 3:printf("\n您选择的是: 删除信息");dele();break;
case 4:break;
}
}while(sel!=4);
}
//*************************************************************
//添加通讯录
//*************************************************************
void add()
{
struct people *newp;
fp=fopen("book","ab");
char sel;
do
{
newp=(struct people *)malloc(sizeof(struct people));
printf("请输入信息:\n");
printf("编号:");
scanf("%s",newp->no);
printf("姓名:");
scanf("%s",newp->name);
printf("性别:");
scanf("%s",newp->sex);
printf("出生年月日(1980 12 30):");
scanf("%d%d%d",&newp->birthday.year,&newp->birthday.month,&newp->birthday.day);
printf("移动电话:");
scanf("%s",newp->mobilphone);
printf("办公电话:");
scanf("%s",newp->workphone);
printf("住宅电话:");
scanf("%s",newp->homephone);
printf("电子邮箱:");
scanf("%s",newp->email);
printf("通信地址:");
scanf("%s",newp->address);
printf("邮政编码:");
scanf("%s",newp->yb);
printf("所属群组(1.亲人 2.朋友 3.同事 4.客户 5.其他):");
scanf("%s",newp->qz);
printf("备注:");
scanf("%s",newp->bz);
if(head==NULL)
{
head=newp;
tail=newp;
tail->next=NULL;
}
else
{
tail->next=newp;
tail=newp;
tail->next=NULL;
}
fwrite(tail,sizeof(struct people),1,fp);
printf("是否继续?(y/n)");
getchar();
sel=getchar();
}while(sel!='n');
}
//*************************************************************
//删除通讯录中信息
//*************************************************************
void dele()
{
struct people *p;
char ch;
char no[7];
printf("\n请输入要删除的记录编号:\n");
getchar();
gets(no);
printf("\n您要删除的记录是:");
puts(no);
p=found_no(no);
if(p)
{
printf("找到满足条件记录,是否删除(y/n):");
if((ch=getchar())=='y')
{
printf("正在删除,请等候...\n");
if(p==head)head=p->next;
else q->next=p->next;
printf("记录已删除.\n");
}
save(0);
}
else
{
printf("对不起,未找到满足条件记录!\n");
}
}
//*************************************************************
//按编号查询信息,并返回找到记录的指针,若未找到返回NULL
//*************************************************************
struct people *found_no(char no[])
{
struct people *p;
q=p=head;
while(p!=NULL)
{
if(!strcmp(p->no,no))
return p;
q=p;
p=p->next;
}
return NULL;
}
//*************************************************************
//信息查询菜单
//*************************************************************
void chaxun()
{
int sel;
do
{
printf("\n\n ********************************\n");
printf(" 信息查询 \n");
printf(" ********************************\n");
printf(" 1.显示全部记录\n");
printf(" 2.按编号查询\n");
printf(" 3.按姓名查询\n");
printf(" 4.按群组查询\n");
printf(" 5.按电话查询\n");
printf(" 6.按生日查询\n");
printf(" 7.按单位查询\n");
printf(" 8.返回\n");
printf(" ********************************\n");
printf("请选择:");
scanf("%d",&sel);
switch(sel)
{
case 1: printf("\n您选择的是: 显示全部记录\n"); show();break;
case 2: printf("\n您选择的是: 通讯录维护"); renew();break;
case 3:
case 8:break;
}
}while(sel!=8);
}
//*************************************************************
//显示全部信息
//*************************************************************
void show()
{
struct people *p=head;
printf("----------------------------------------------------------------------------------------\n");
while(p!=NULL)
{
printf("编 号:%s\t\t姓 名:%s\t\t性 别:%s\n",p->no,p->name,strcmp(p->sex,"f")?" 男":" 女");
printf("出生日期:%d-%d-%d\n",p->birthday.year,p->birthday.month,p->birthday.day);
printf("移动电话:%s\t\t",p->mobilphone);
printf("办公电话:%s\t\t",p->workphone);
printf("住宅电话:%s\n",p->homephone);
printf("E-mail:%s\n",p->email);
printf("通信地址:%s\t\t",p->address);
printf("邮政编码:%s\n",p->yb);
printf("所属群组:%s\n",p->qz);
printf("备注:%s\n",p->bz);
printf("----------------------------------------------------------------------------------------\n");
p=p->next;
}
printf("按任意键继续....");
getchar();
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -