c/c++通讯录

第二个程序是C语言实训的程序

其实和第一个学生成绩管理系统程序差不多,只是多了文件功能!

Copyright ©Rushierer
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 60
typedef struct s_teleBook
{
	int number;			/*编号*/
	char name[15];		/*姓名*/
	char phone[12];     /*手机*/
	char qq[15];		/*QQ号*/
}TELE;
typedef struct date
{
    int infoCount;      /*统计数据个数*/
}DATE;

void showMenu();                                      /*显示菜单*/
void mainMenu(TELE myBook[],int n,DATE date[]);       /*显示首页*/
void showdate(TELE myBook[],int n,DATE date[]);       /*只显示数据*/
void input(TELE myBook[],int n,DATE date[]);          /*从键盘输入数据*/
void searchR(TELE myBook[],int n,DATE date[]);        /*查询信息*/
void searchByNumber(TELE myBook[],int n,DATE date[]); /*按编号查询信息*/
void searchByName(TELE myBook[],int n,DATE date[]);   /*按名字查询信息*/
void deleteR(TELE myBook[],int n,DATE date[]);        /*删除信息*/
void insertR(TELE myBook[],int n,DATE date[]);        /*插入信息*/
void modify(TELE myBook[],int n,DATE date[]);         /*修改信息*/
void sortR(TELE myBook[],int n,DATE date[]);          /*排序信息*/
void sortByName(TELE myBook[],int n,DATE date[]);     /*按名字排序*/
void sortByNumber(TELE myBook[],int n,DATE date[]);   /*按编号排序*/
void save(TELE myBook[],int n,DATE date[]);           /*保存数据到文件*/
void display(TELE myBook[],int n,DATE date[]);        /*显示数据*/
void read(TELE myBook[],int n,DATE date[]);           /*从文件读取数据*/

int main()
{
	int choice;
	TELE myBook[N];
	DATE date[1];
	showMenu();
	printf("\n");
	printf("欢迎使用通讯录!\n");
	printf("\n");
	printf("首次使用通讯录,请输入要添加联系人的个数:");
	scanf("%d",&date[0].infoCount);
    printf("\n");
    printf("1进行录入数据  0退出:");
    scanf("%d",&choice);
	switch(choice)
	{
		case 1:
			system("cls");
			input(myBook,date[0].infoCount,date);break;
		case 0:
		    exit(0);break;
	}
	return 0;

}


/*显示选项Menu*/
void showMenu()
{
	printf("                  通讯录管理系统             \n");
	printf("  *******************************************\n");
	printf("  *                                         *\n");
	printf("  *  1 input   record     2 search  record  *\n");
	printf("  *  3 delete  record     4 insert  record  *\n");
	printf("  *  5 modify  record     6 sort    record  *\n");
	printf("  *  7 save    record     8 display record  *\n");
	printf("  *  9 read    record     0 quit    system  *\n");
	printf("  *                                         *\n");
	printf("  *******************************************\n");
}


/*显示主菜单*/
void mainMenu(TELE myBook[],int n,DATE date[])
{
	int choice;
	showMenu();
	printf("请输入选项(0~9):");
	scanf("%d",&choice);
	switch(choice)
	{
		case 1:
			system("cls");
			input(myBook,n,date);break;
		case 2:
			system("cls");
			searchR(myBook,n,date);break;
		case 3:
			system("cls");
			deleteR(myBook,n,date);break;
		case 4:
		    system("cls");
		    insertR(myBook,n,date);break;
		case 5:
		    system("cls");
		    modify(myBook,n,date);break;
		case 6:
		    system("cls");
		    sortR(myBook,n,date);break;
		case 7:
		    system("cls");
		    save(myBook,n,date);break;
		case 8:
		    system("cls");
		    display(myBook,n,date);break;
		case 9:
		    system("cls");
		    read(myBook,n,date);break;
		case 0:
		    exit(0);break;

	}
}


/*从键盘输入联系人信息*/
void input(TELE myBook[],int n,DATE date[])
{
	int j,i;
	printf("                   Input record                      \n");
	printf("*****************************************************\n");
	printf("\n");
	printf("数据录入格式提示:\n");
	printf("1.数据内容:编号、姓名、手机号码、QQ号\n");
	printf("2.数据间以空格做间隔,最后回车录入数据结束!\n");
	printf("\n");
	for(i=0;i<n;i++)
	{
		printf("请输入第%d个联系人的信息:",i+1);
		scanf(" %d",&myBook[i].number);
        scanf("%s",myBook[i].name);
        scanf("%s",myBook[i].phone);
        scanf("%s",myBook[i].qq);
	}
	printf("\n");
	printf("数据录入完成!\n");
	printf("\n");
	printf("1显示录入的信息  2返回主菜单  0退出:");
	scanf("%d",&j);
	if(j==1)
	{
	    printf("\n");
		display(myBook,n,date);
	}
    else if(j==2)
	{
		system("cls");
		mainMenu(myBook,n,date);
	}
	else
		exit(0);
}


/*显示所有信息*/
void display(TELE myBook[],int n,DATE date[])
{
	int i,j;
	printf("所有信息:\n");
	printf("\n");
	printf("编号   姓名          电话号码        QQ号    \n");
	for(i=0;i<n;i++)
	{
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
                                    myBook[i].name,
                                    myBook[i].phone,
                                    myBook[i].qq);

	}
	printf("\n");
	printf("1返回主菜单  0退出:");
	scanf("%d",&j);
	if(j==1)
	{
		system("cls");
		mainMenu(myBook,n,date);
	}
	else
		exit(0);

}

/*只显示数据*/
void showdate(TELE myBook[],int n,DATE date[])
{
	int i;
	printf("已录入的信息:\n");
	printf("\n");
	printf("编号   姓名          电话号码        QQ号    \n");
	for(i=0;i<n;i++)
	{
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
                                   myBook[i].name,
                                   myBook[i].phone,
                                   myBook[i].qq);

	}
}

/*查找数据*/
void searchR(TELE myBook[],int n,DATE date[])
{
    int k;
    printf("                   Search record                     \n");
	printf("*****************************************************\n");
	printf("\n");
	printf("查找方式:1.按编号查找 2.按姓名查找\n");
	printf("请选择查找方式(1/2):");
	scanf("%d",&k);
	printf("\n");
	if(k==1)
    {
        searchByNumber(myBook,n,date);
    }
    else
    {
        searchByName(myBook,n,date);
    }
}


/*按编号查询*/
void searchByNumber(TELE myBook[],int n,DATE date[])
{
	int i,j,k=0;
    int number1;
    printf("请输入想查找的编号:");
    scanf("%d",&number1);
    printf("\n");
    printf("查找结果:");
    printf("\n");
    for(i=0;i<n;i++)
    {
        if(myBook[i].number==number1)
        {
            printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
                                        myBook[i].name,
                                        myBook[i].phone,
                                        myBook[i].qq);

            k+=1;
        }
    }
    if(k==0)
        printf("输入的编号不存在或输入格式不对!\n");
    printf("\n");
	printf("1重新查询  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
        case 1:
            system("cls");
            searchR(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}


/*按姓名查询*/
void searchByName(TELE myBook[],int n,DATE date[])
{
    int i,j,k=0;
    char name1[15];
    printf("请输入想查找的姓名:");
    scanf("%s",name1);
    printf("\n");
    printf("查找结果:");
    printf("\n");
    for(i=0;i<n;i++)
    {
        if(strcmp(myBook[i].name,name1)==0)
        {
            printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
                                        myBook[i].name,
                                        myBook[i].phone,
                                        myBook[i].qq);

            k+=1;
        }
    }
    if(k==0)
        printf("输入的姓名不存在或输入格式不对!\n");
    printf("\n");
	printf("1重新查询  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
        case 1:
            system("cls");
            searchR(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}

/*删除信息*/
void deleteR(TELE myBook[],int n,DATE date[])
{
	int i,k,j;
	printf("                   Delete record                     \n");
	printf("*****************************************************\n");
	printf("\n");
	showdate(myBook,n,date);
	printf("已经录入%d个联系人的信息,你想删除第几联系人个的信息:",n);
	scanf("%d",&k);
	i=k-1;
	for(;i<=n-2;i++)
	{
		strcpy(myBook[i].name,myBook[i+1].name);
		strcpy(myBook[i].phone,myBook[i+1].phone);
		strcpy(myBook[i].qq,myBook[i+1].qq);
		myBook[i].number=myBook[i+1].number;
	}
	printf("\n");
	printf("已成功删除!\n");
	date[0].infoCount=date[0].infoCount-1;
	n=n-1;
    printf("\n");
    printf("1显示修改后的信息  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
       case 1:
            printf("\n");
            display(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}

/*插入信息*/
void insertR(TELE myBook[],int n,DATE date[])
{
    int i,k,j;
    int number;
	char name[15]; 	    /*姓名*/
	char phone[12]; 	/*电话*/
	char qq[15];     	/*QQ号*/
	printf("                   Insert record                     \n");
	printf("*****************************************************\n");
	printf("\n");
	showdate(myBook,n,date);
	printf("\n");
	printf("你想在第几个数据之后插入数据:");
	scanf("%d",&k);
	if(k>n||k<=0)
    {
        printf("\n");
        printf("输入错误!\n");
        printf("请重新输入你想在第几个数据之后插入数据:");
        scanf("%d",&i);
        k=i;
    }
	printf("\n");
	printf("请输入插入的信息:");
	scanf("%d",&number);
    scanf("%s",name);
    scanf("%s",phone);
    scanf("%s",qq);
    for(i=n;k+1<=i;i--);
    {
        strcpy(myBook[i].name,myBook[i-1].name);
        strcpy(myBook[i].phone,myBook[i-1].phone);
        strcpy(myBook[i].qq,myBook[i-1].qq);
        myBook[i].number=myBook[i-1].number;
    }
    strcpy(myBook[k].name,name);
    strcpy(myBook[k].phone,phone);
    strcpy(myBook[k].qq,qq);
    myBook[k].number=number;
	date[0].infoCount=date[0].infoCount+1;
	n=n+1;
	printf("\n");
    printf("插入完成!\n");
    printf("\n");
    printf("1显示修改后的信息输入  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
       case 1:
            printf("\n");
            display(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}

}


/*修改信息*/
void modify(TELE myBook[],int n,DATE date[])
{
    int i,k,j;
    int number;
	char name[15]; 	    /*姓名*/
	char phone[12]; 	/*电话*/
	char qq[15];     	/*QQ号*/
	printf("                   Modify record                     \n");
	printf("*****************************************************\n");
	printf("\n");
	showdate(myBook,n,date);
	printf("\n");
	printf("已经录入%d个联系人的信息,你想修改第几个联系人的记录:",n);
	scanf("%d",&k);
	if(k>n||k<=0)
    {
        printf("\n");
        printf("输入错误,无这条记录!\n");
        printf("请重新输入你想修改第几个联系人的记录:");
        scanf("%d",&i);
        k=i;
    }
	printf("\n");
	printf("请输入修改后的信息:");
	scanf("%d",&number);
    scanf("%s",name);
    scanf("%s",phone);
    scanf("%s",qq);
    strcpy(myBook[k-1].name,name);
    strcpy(myBook[k-1].phone,phone);
    strcpy(myBook[k-1].qq,qq);
    myBook[k-1].number=number;
    printf("\n");
    printf("修改完成!\n");
    printf("\n");
    printf("1显示修改后的信息  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
       case 1:
            printf("\n");
            display(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}


/*排序信息*/
void sortR(TELE myBook[],int n,DATE date[])
{
    int k;
    printf("                     Sort record                     \n");
	printf("*****************************************************\n");
	printf("\n");
	printf("排序方式:1.按编号排序  2.按姓名排序\n");
	printf("请选择排序方式(1/2):");
	scanf("%d",&k);
	printf("\n");
	if(k==1)
    {
        sortByNumber(myBook,n,date);
    }
    else
    {
        sortByName(myBook,n,date);
    }
}


/*按姓名排序信息*/
void sortByName(TELE myBook[],int n,DATE date[])
{
    int i,j;
    TELE temp;
    for(j=1;j<n;j++)
        for(i=0;i<n-j;i++)
        if(strcmp(myBook[i].name,myBook[i+1].name)>0)
        {
            temp=myBook[i];
            myBook[i]=myBook[i+1];
            myBook[i+1]=temp;
        }
    printf("排序后的信息:\n");
    printf("\n");
	printf(" 姓名        编号    电话号码        QQ号    \n");
	for(i=0;i<n;i++)
	{
        printf("%-15s%-6d%-15s%-15s\n",myBook[i].name,
								       myBook[i].number,
                                       myBook[i].phone,
                                       myBook[i].qq);
	}
	printf("\n");
	printf("1重新排序  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
        case 1:
            system("cls");
            sortR(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}

/*按编号排序信息*/
void sortByNumber(TELE myBook[],int n,DATE date[])
{
    int i,j;
    TELE temp;
    for(j=1;j<n;j++)
        for(i=0;i<n-j;i++)
        if(myBook[i].number>myBook[i+1].number)
        {
            temp=myBooki[];
            myBook[i]=myBook[i+1];
            myBook[i+1]=temp;
        }
    printf("排序后的信息:\n");
    printf("\n");
	printf("编号   姓名          电话号码        QQ号    \n");
	for(i=0;i<n;i++)
	{
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,
                                       myBook[i].name,
                                       myBook[i].phone,
                                       myBook[i].qq);
	}
	printf("\n");
	printf("1重新排序  2返回主菜单  0退出:");
	scanf("%d",&j);
	switch(j)
	{
        case 1:
            system("cls");
            sortR(myBook,n,date);break;
        case 2:
            system("cls");
            mainMenu(myBook,n,date);break;
        case 0:
            exit(0);break;
	}
}


/*保存信息*/
void save(TELE myBook[],int n,DATE date[])
{
	FILE *fp;
	int i,j;
	TELE temp;
    printf("                     Save record                     \n");
	printf("*****************************************************\n");
	if((fp=fopen("teleBook.txt","w"))==NULL)		/*以写方式打开文本文件*/
	{
		printf("Failure to open teleBook.txt!\n");
	    printf("1返回主菜单  0退出:");
		scanf("%d",&j);
		if(j==1)
		{
			system("cls");
			mainMenu(myBook,n,date);
		}
		else
			exit(0);
	}
    for(j=1;j<n;j++)  //对全部信息按序号排序后再保存到文件
        for(i=0;i<n-j;i++)
        if(myBook[i].number>myBook[i+1].number)
        {
            temp=myBook[i];
            myBook[i]=myBook[i+1];
            myBook[i+1]=temp;
        }
	for(i=0;i<n;i++)
	{
        fprintf(fp," %-6d%-15s%-15s%-15s",myBook[i].number,
									   myBook[i].name,
                                       myBook[i].phone,
                                       myBook[i].qq);
        fprintf(fp,"\n");
	}
	fclose(fp);
	printf("\n");
	printf("保存通讯录信息成功!\n");
	printf("\n");
	printf("可在文件目录查看teleBook.txt文件!\n");
    printf("\n");
	printf("1返回主菜单  0退出:");
	scanf("%d",&j);
	if(j==1)
	{
		system("cls");
		mainMenu(myBook,n,date);
	}
	else
		exit(0);
}


/*从文件读取数据*/
void read(TELE myBook[],int n,DATE date[])
{
	FILE *fp;
	int i,j;
	TELE myBook1[N];
	printf("                      Read record                    \n");
	printf("*****************************************************\n");
	printf("\n");
	printf("读取信息结果:\n");
	printf("\n");
	if((fp=fopen("teleBook.txt","r"))==NULL)		/*以读方式打开文本文件*/
	{
		printf("Failure to open teleBook.txt!\n");
		printf("可能没有保存数据,可以返回主菜单先保存数据!\n");
	    printf("1返回主菜单  0退出:");
		scanf("%d",&j);
		if(j==1)
		{
			system("cls");
			mainMenu(myBook,n,date);
		}
		else
			exit(0);
	}
	for(i=0;!feof(fp);i++)				/*若未读到文件末尾,则继续读*/
	{
        fscanf(fp," %6d",&myBook1[i].number);
        fscanf(fp,"%15s",myBook1[i].name);
        fscanf(fp,"%15s",myBook1[i].phone);
        fscanf(fp,"%15s",myBook1[i].qq);
	}
	fclose(fp);
	printf("编号   姓名          电话号码        QQ号    \n");
	for(i=0;i<n;i++)
	{
        printf("%-6d%-15s%-15s%-15s",myBook1[i].number,
                                   myBook1[i].name,
                                   myBook1[i].phone,
                                   myBook1[i].qq);
        printf("\n");
	}
	printf("\n");
	printf("读取通讯录文件信息成功!\n");
	printf("\n");
	printf("1返回主菜单  0退出:");
	scanf("%d",&j);
	if(j==1)
	{
		system("cls");
		mainMenu(myBook,n,date);
	}
	else
		exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值