数据结构课程设计—通讯录管理系统

/**************************** 
*版权所有  (C)2016.ccx 

*文件名称:   ccx.cpp 
*文件标识:   无 
*内容摘要:   该项目的所有函数的实现 
*其他说明:   无 
*当前版本:   V1.0 
*作   者:    郗传秀
*完成日期:   20161225 

*修改记录:   6 
*修改日期:   20161229 
*版本号:     V1.0 
*修改人:     郗传秀 
*修改内容: 

********************************************************************/  

#include"ccx.h"

void choose();//主菜单
void searchmenu();//查询菜单
void add();//添加新纪录   添加新用户
void searchna();//按条件(姓名)搜索记录
void display();//显示全部记录
void load();//载入文件内容
void save();//写入文件
void del();//删除记录
void listinsert();//插入结点函数
void bianji();//编辑
void dial();//拨号


/***********************主函数************************************/
/***********************************************************
*功能描述:  主函数
*输入参数:   无
*输出参数:   无
*返回值:     无
*************************************************************/
int main() //主函数
{
	load();
	listinsert();
	while (1)
		choose(); //进入主菜单,有非法输入仍停留在主菜单
    return 0;
}
/***********************主函数************************************/

/***********************load函数*****************************/
/***********************************************************
*功能描述:  装载导入文件
*输入参数:   无
*输出参数:   无
*返回值:     无
*************************************************************/
void load()//装载已有文件信息
{
	if((fp=fopen("txl.txt","rb"))==NULL)
	{
		printf("\n\t\t通讯录文件不存在");
		if ((fp=fopen("txl.txt","wb"))==NULL)
		{
			printf("\n\t\t建立失败");
			exit(0);
		{
			printf("\n\t\t通讯录文件已建立");
			printf("\n\t\t按任意键进入主菜单");
			getch();
        }

		}else
			return;
	exit(0);
	}
	//导入文件功能部分
	fseek(fp,0,2);
	if (ftell(fp)>0)
	{
		rewind(fp);
		for(len=0;!feof(fp)&&fread(&yong[len],sizeof(struct yonghu),1,fp);len++);
		printf("\n\t\t文件导入成功");
		printf("\n\t\t按任意键返回主菜单");
		getch();
		return;
	}
	printf("\n\t\t文件导入成功");
	printf("\n\t\t通讯录文件中无任何纪录");
	printf("\n\t\t按任意键返回主菜单");
	getch();
	return;
}

void listinsert()//增加新结点
{
	linklist s,p=l;
	for(int i=0;idata.name,yong[i].name);
        strcpy(s->data.fm,yong[i].fm);
        strcpy(s->data.addr,yong[i].addr);
        strcpy(s->data.tel,yong[i].tel);
        strcpy(s->data.group,yong[i].group);
        strcpy(s->data.kuaijie,yong[i].kuaijie);
        s->data.tms=yong[i].tms;
	     if(head==NULL)   //若为空,则建立新节点//////////////////////////////////////////////////
            {
                head=s;
                r=head;
                head->next=NULL;
            }
            else         //否则,插入节点////////////////////////尾插法
            {
                r->next=s;
                r=s;
                r->next=NULL;
            }///////////////////////////////////
	}
}



/*********************主菜单界面********************************/
/***********************************************************
*功能描述:  提供选择界面
*输入参数:   选择键
*输出参数:   无
*返回值:     无
*************************************************************/
void choose()//主菜单
{
	char ch;
	system("cls");
	printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
	printf("\n\t\t***************欢迎进入通讯录系统***************");
	printf("\n\t\t******************1-新添纪录     ***************");
	printf("\n\t\t******************2-查找联系人   ***************");
	printf("\n\t\t******************3-删除联系人   ***************");
	printf("\n\t\t******************4-保存         ***************");
        printf("\n\t\t******************5-退出         ***************");
        printf("\n\t\t******************6-编辑         ***************");
        printf("\n\t\t******************7-拨号         ***************");
        printf("\n\t\t******************7-发送信息     ***************");
        printf("\n\t\t************************************************");
        printf("\n★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
	printf("\n\t\t请选择:");
	printf("%c ",ch=getch());
	switch (ch)
	{
	case '1':add();break;
	case '2':searchmenu();break;
	case '3':del();break;
	case '4':save();break;
	case '5':exit(0);
	case '6':bianji();break;
	case '7':dial();break;
	default:choose();
	}
}
/*********************主菜单界面********************************/

/***********************************************************
*功能描述:  添加新用户
*输入参数:   新用户信息
*输出参数:   无
*返回值:     无
*************************************************************/
void add()//添加新纪录
{
    int x;
    int a=0,i,findmark;
	l=(linklist)malloc(sizeof(pnode));    //建立头节点
	printf("\n\t\t**************** 请输入用户信息 ****************\n");
	printf("\n\t\t姓名:");
	scanf("%s",&yong[len].name);
	printf("\n\t\t性别:");
	scanf("%s",&yong[len].fm);
                printf("\n\t\t地址:");
                scanf("%s",&yong[len].addr);
	            printf("\n\t\t联系方式:");
	            scanf("%s",&yong[len].tel);
	            printf("\n\t\t分组:");
	            scanf("%s",&yong[len].group);
	            printf("\n\t\t快捷键:");
	            scanf("%s",&yong[len].kuaijie);
	            len++;
	            printf("\n\t\t==============新用户添加成功=============================\n");
	            printf("\n\t\t=============是否继续添加新用户==========================\n");
	            printf("\n\t\t======继续添加请选1      返回主界面请选2=============\n");
	            scanf("%d",&x);
	            if(x==1)
                    {
                        add();
                    }
                if(x==2)
                    {
                        choose();
                    }
}
/***********************************************************
*功能描述:  查询选择菜单
*输入参数:   选择键
*输出参数:   无
*返回值:     无
*************************************************************/
void searchmenu()//查询菜单
{
	char ch;
	system("cls");
	printf("\n\t\t=================查询菜单 =======================");
	printf("\n\t\t================1-显示所有记录===================");
	printf("\n\t\t================2-按姓名查询=====================");
	printf("\n\t\t================3-返回主菜单=====================");
	printf("\n\t\t=================================================");
	printf("\n\t\t请选择:");
	printf("%c",ch=getch());
	switch (ch)
	{
	case '1':display();break;
	case '2':searchna();break;
	case '3':choose();break;
	}
}
/***********************************************************
*功能描述:  按照输入的用户姓名进行查找
*输入参数:   用户姓名
*输出参数:   用户所有信息
*返回值:     无
*************************************************************/
void searchna()////查找按姓名
{
	printf("\n\t\t======================按姓名查找 =============================");
	char name[20];
	printf("\n\t\t请输入姓名:");
	scanf("%s",name);
	printf(" \n\t\t查询到的信息:\n");
	printf(" %-10s%-10s%-10s%-10s%-10s%-s\n","姓名","地址","联系方式","分组","快捷键","性别");//格式控制输出
	printf(" -----------------------------------------------------------------------------\n");
		for (int i=0;idata.name);
                    strcpy(yong[i].name,s->data.name);
                }
                if(xuan==2)
                {
                    printf("请输入新用户地址\n");
                    scanf("%s",&s->data.addr);
                    strcpy(yong[i].addr,s->data.addr);
                }
                if(xuan==3)
                {
                    printf("请输入新联系方式\n");
                    scanf("%s",&s->data.tel);
                    strcpy(yong[i].tel,s->data.tel);
                }
                if(xuan==4)
                {
                    printf("请输入新用户分组\n");
                    scanf("%s",&s->data.group);
                    strcpy(yong[i].group,s->data.group);
                }
                if(xuan==5)
                {
                    printf("请输入新用户快捷键\n");
                    scanf("%s",&s->data.kuaijie);
                    strcpy(yong[i].kuaijie,s->data.kuaijie);
                }
				printf("\n\t\t编辑成功");

			} //endif
		} //endif
		else
			continue;
	} //endfor



	if(!findmark)//没有找到任何符合条件的记录  输入为注册过的用户时
		printf("\n\t\t没有其他符合条件的记录!");


	printf("\n\t\t继续编辑请按1     返回主界面请按2  \n"); //无同名纪录,是否继续删除其他纪录
	scanf("%d",&ch);
	if (ch==1)
		bianji();
    if(ch==2)
        Sleep(3000);
        choose();//继续删除其他纪录

}







/***********************************************************
*功能描述:  拨号或者发送信息
*输入参数:  选择键,姓名,快捷键
*输出参数:   tms
*返回值:     无
*************************************************************/
void dial()       //拨号功能
{
    int c,choic;
	int ch,xuan;
    int r;
    pnode *p;
	pnode *s;
	int a=0,i,j,findmark; //findmark为查找结果标志
    char name[20];
    char b[20];
    printf("         \n");
    printf("+------------------------------------------------+\n");
    printf("\n\t\t   请按要求输入您的选择\n");
    printf("+     使用用户姓名联系请按(1)    使用快捷键联系请按(2)   +\n");  //两种拨号方式
    printf("+----------------------------------------------+\n");
    scanf("%d",&r);
    p=head;
    if(r==1)
    {
        printf("                    请输入联系用户的姓名:\n");
        scanf("%s",name);
		for (i=a;idata.name)!=0&&p!=NULL)//进行查找   查找用户名为name的用户
            p=p->next;
        if(p==NULL)//用户不存在
        {
            printf("+----------------------------------------------+\n");
            printf("                 您选择的用户不存在!\n");
            printf("+----------------------------------------------+\n");
            printf("+       重新输入请按(1)    返回主菜单(2)        +\n");
            printf("+----------------------------------------------+\n");
            scanf("%d",&choic);
            if(choic==1)
            {
                system("cls");
                dial();
            }
            if(choic==2)
            {
                system("cls");
                choose();
            }
        }
        else//找到此用户  名为name
        {
            printf("呼叫此用户请按1,发送信息到此用户请按2");
            int v;
            scanf("%d",&v);
            if(v==1)
            {
                 printf("+----------------------------------------------+\n");
            printf("        loding------                           \n");
            for(int j=0; j<20; j++)        //运用时间函数,实现拨号界面
            {
                Sleep(100);
                printf("■■");
            }
            printf("                                               \n");
            printf("                                               \n");
            Sleep(2000);
            printf("%s\n",&p->data.tel);
            p->data.tms=p->data.tms+1;
            printf("+----------------------------------------------+\n");
            printf("拨打次数:    %d",p->data.tms);
            printf("+----------------------------------------------+\n");
            printf("\n\t\t稍后返回主界面\n");
            Sleep(5000);

            }
            if(v==2)
            {
                printf("\n\t\t\=========\n");
                char neirong[200];
                printf("\n\t\t请输入要发送的内容\n");
                scanf("%s",neirong);
                printf("\n\t\t发送中......\n");
                for(int j=0; j<20; j++)        //运用时间函数,实现拨号界面
                {
                    Sleep(100);
                    printf("■■");
                }

                printf("\n\t\t发送成功\n");
                Sleep(2000);
                printf("\n\t\t稍后返回主界面\n");
                Sleep(5000);

            }

        }
    }
    else
    {
        printf("\n\t\t请输入快捷键号码:\n");
        scanf("%s",&b);
        while(p!=NULL&&strcmp(b,p->data.kuaijie)!=0)                   //遍历链表比较查询   遍历查询  利用快捷键
            p=p->next;
        if(p==NULL)
        {
            printf("\n\t\t   您输入的单键号码不存在!\n");
            printf("\n\t\t+----------------------------------------------+\n");
            printf("\n\t\t+      重新输入请按(1)    返回主菜单(2)        +\n");
            printf("\n\t\t+----------------------------------------------+\n");
            scanf("%d",&choic);
            if(choic==1)
            {
                dial();
            }
            if(choic==2)
            {
                Sleep(2000);
                system("cls");
                choose();
            }
        }
        else
        {


            printf("呼叫此用户请按1,发送信息到此用户请按2");
            int v;
            scanf("%d",&v);
            if(v==1)
            {
                             printf("                                               \n");
            printf("        loding------                                        \n");
            for(int j=0; j<20; j++)
            {
                Sleep(100);
                printf("■■");
            }
             printf("                                               \n");
             printf("                                               \n");
            Sleep(5000);
            printf("%s\n",p->data.name);
            printf("%s\n",p->data.tel);
            p->data.tms=p->data.tms+1;
            printf("\n\t\t+----------------------------------------------+\n");
            printf("拨打次数:    %d",p->data.tms);                  //显示拨打次数
            printf("\n\t\t+----------------------------------------------+\n");
            printf("\n\t\t稍后回到主界面\n");
            Sleep(5000);
            }
            if(v==2)
            {
                printf("\n\t\t=============\n");
                char neirong[200];
                printf("\n\t\t请输入要发送的内容\n");
                scanf("%s",neirong);
                printf("\n\t\t发送中......\n");
                for(int j=0; j<20; j++)        //运用时间函数,实现拨号界面
                {
                    Sleep(100);
                    printf("■■");
                }

                printf("\n\t\t发送成功\n");
                Sleep(2000);
                printf("\n\t\t稍后返回主界面\n");
                Sleep(5000);

            }


        }
    }
}*/







头文件
ccx.h
#ifndef CCX_H_INCLUDED
#define CCX_H_INCLUDED


#include 
#include
#include 
#include 
#include
#include 
#define maxl 1000
struct yonghu
{
char name[20];//姓名
char fm[20];//性别
char addr[20];//地址
char tel[20];//联系方式
char group[20]; //分组
char kuaijie[20];//快捷键
int tms;//拨打次数
}yong[maxl];//1000个记录,可修改

struct pnode
{
	yonghu data;
	struct pnode *next/*, *prior*/;//双循环链表
};
typedef  pnode * linklist;

linklist head=NULL,r=NULL;   //初始化链表   单链表
linklist l;
int len=0;//链表长度
FILE *fp; //文件指针
#endif // CCX_H_INCLUDED



运行结果
主界面




新添记录

查询


删除

编辑



拨号/发送信息







设计心得:
利用了单链表,将每个独立的用户已一个个节点的形式连到一起,在基本的“增删改查”中加入了退出、保存以及拨号和发送信息界面
讲头文件与cpp文件链接运行,实现以上功能

你可能感兴趣的:(数据结构课程设计—通讯录管理系统)