⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 book.cpp

📁 课程设计:通讯录。利用C语言实现通讯录的基本要求。
💻 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 + -