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

📄 dhbgl.c

📁 C语言源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"   /*标准输入输出函数库*/
#include "stdlib.h"  /*标准函数库*/
#include "string.h"  /*字符串函数库*/
#include "conio.h"   /*屏幕操作函数库*/
#define HEADER1 "    ---------------------------TELEPHONE BOOK---------------------------\n"
#define HEADER2 "   |    num       |    name    |  phonenumber    |      address        | \n"
#define HEADER3 "   |--------------|------------|-----------------|---------------------| \n"
#define FORMAT  "   |    %-10s|  %-10s| %-15s |%-20s | \n"
#define DATA         p->num,p->name,p->phonenum,p->address
#define END     "   ---------------------------------------------------------------------\n"
#define N 100
int saveflag=0;  /*是否需要存盘的标志变量*/
/*定义与电话簿有关的数据结构*/
typedef struct telebook      /*标记为telebook*/
{
char num[4];          /*编号*/
char name[10];        /*姓名*/
char phonenum[15];    /*电话号码*/
char address[20];     /*地址*/
}TELEBOOK;

void menu()  /*主菜单*/
{
system("cls");   /*调用DOS命令,清屏.与clrscr()功能相同*/
textcolor(13);   /*在文本模式中选择新的字符颜色*/
gotoxy(10,5);    /*在文本窗口中设置光标*/
cprintf("                 The telephone-book  Management System \n");
gotoxy(10,8);
cprintf("     *************************Menu********************************\n");
gotoxy(10,9);
cprintf("     *  1 input   record              2 display record             *\n");
gotoxy(10,10);
cprintf("     *  3 delete  record              4 search  record             *\n");
gotoxy(10,11);
cprintf("     *  5 modify  record              6 insert  record             *\n");
gotoxy(10,12);
cprintf("     *  7 sort    record              8 save    record             *\n");
gotoxy(10,13);
cprintf("     *  0 quit    system                                           *\n");
gotoxy(10,14);
cprintf("     *************************************************************\n");
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
/*格式化输出表头*/
void printheader()
{
  printf(HEADER1);
  printf(HEADER2);
  printf(HEADER3);
}
 /*格式化输出表中数据*/
void printdata(TELEBOOK pp)
{
 TELEBOOK* p;
 p=&pp;
 printf(FORMAT,DATA);

}

/*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/
void Disp(TELEBOOK temp[],int n)
{
int i;
if(n==0)  /*表示没有电话簿记录*/
{
  printf("\n=====>Not telephone record!\n");
  getchar();
  return;
}

printf("\n\n");
printheader(); /*输出表格头部*/
i=0;
while(i<n)    /*逐条输出数组中存储的电话簿记录*/
{
  printdata(temp[i]);
  i++;
  printf(HEADER3);
}
getchar();
}

void Wrong()  /*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}

void Nofind()  /*输出未查找此记录的信息*/
{
printf("\n=====>Not find this telephone record!\n");
}

/*************************************************************
作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值
参数:findmess[]保存要查找的具体内容; nameorphonenum[]保存按什么在数组中查找;
**************************************************************/
int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])
{
int i=0;
if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/
{
  while(i<n)
   {
   if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的电话号码*/
    return i;
    i++;
    }
}
else if(strcmp(nameorphonenum,"name")==0)  /*按姓名查询*/
{
  while(i<n)
   {
   if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/
    return i;
    i++;
    }
}
return -1; /*若未找到,返回一个整数-1*/
}


/*输入字符串,并进行长度验证(长度<lens)*/
void stringinput(char *t,int lens,char *notice)
{
   char n[255];
   do{
      printf(notice);  /*显示提示信息*/
      scanf("%s",n);  /*输入字符串*/
      if(strlen(n)>lens) printf("\n exceed the required length! \n");
      /*进行长度校验,超过lens值重新输入*/
     }while(strlen(n)>lens);
     strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/

}

 /*增加电话簿记录*/
int Add(TELEBOOK temp[],int n)
{
 char ch,num[10];
 int i,flag=0;
 system("cls");
 Disp(temp,n); /*先打印出已有的电话簿信息*/

 while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/
 {
  while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/
  {
    stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入编号并检验*/
    flag=0;
    if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/
      {return n;}
     i=0;
    while(i<n) /*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/
    {
      if(strcmp(temp[i].num,num)==0)
      {
       flag=1;
       break;
       }
      i++;
    }

  if(flag==1) /*提示用户是否重新输入*/
     {  getchar();
        printf("==>The number %s is existing,try again?(y/n):",num);
        scanf("%c",&ch);
        if(ch=='y'||ch=='Y')
         continue;
        else
          return n;
      }
  else
      {break;}
  }
  strcpy(temp[n].num,num); /*将字符串num拷贝到temp[n].num中*/
  stringinput(temp[n].name,15,"Name:");
  stringinput(temp[n].phonenum,15,"Telephone:");
  stringinput(temp[n].address,15,"Adress:");
  saveflag=1;
  n++;
  }
     return n;
}

/*按编号或姓名,查询电话簿记录*/
void Qur(TELEBOOK temp[],int n)
{
int select; /*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/
char searchinput[20]; /*保存用户输入的查询内容*/
int p=0;
if(n<=0) /*若数组为空*/
{
  system("cls");
  printf("\n=====>No telephone record!\n");
  getchar();
  return;
}
system("cls");
printf("\n     =====>1 Search by name  =====>2 Search by telephone number\n");
printf("      please choice[1,2]:");
scanf("%d",&select);
if(select==1)   /*按姓名查询*/
 {

  stringinput(searchinput,10,"input the existing name:");
  p=Locate(temp,n,searchinput,"name");
  /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/
  if(p!=-1) /*若找到该记录*/
  {
   printheader();
   printdata(temp[p]);
   printf(END);
   printf("press any key to return");
   getchar();
  }
  else
   Nofind();
   getchar();
}
else if(select==2) /*按电话号码查询*/
{
  stringinput(searchinput,15,"input the existing telephone number:");
  p=Locate(temp,n,searchinput,"phonenum");
  if(p!=-1)
  {
   printheader();
   printdata(temp[p]);
   printf(END);
   printf("press any key to return");
   getchar();
  }
  else
   Nofind();
   getchar();
}
else
  Wrong();
  getchar();
  
}

/*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/
int Del(TELEBOOK temp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{ system("cls");
  printf("\n=====>No telephone record!\n");
  getchar();
  return n;
}
system("cls");
Disp(temp,n);
printf("\n    =====>1 Delete by name       =====>2 Delete by telephone number\n");
printf("    please choice[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
  stringinput(findmess,10,"input the existing name:");
  p=Locate(temp,n,findmess,"name");
  getchar();
  if(p!=-1)
  {
   for(i=p+1;i<n;i++) /*删除此记录,后面记录向前移*/
   { 
    strcpy(temp[i-1].num,temp[i].num);
    strcpy(temp[i-1].name,temp[i].name);
    strcpy(temp[i-1].phonenum,temp[i].phonenum);
    strcpy(temp[i-1].address,temp[i].address);

    }
    printf("\n==>delete success!\n");
    n--;
    getchar();
    saveflag=1;
   }
  else
   Nofind();
   getchar();
 }
else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/
{
  stringinput(findmess,15,"input the existing telephone number:");
  p=Locate(temp,n,findmess,"phonenum");
  getchar();
  if(p!=-1)
  {
   for(i=p+1;i<n;i++)   /*删除此记录,后面记录向前移*/
   { 
    strcpy(temp[i-1].num,temp[i].num);
    strcpy(temp[i-1].name,temp[i].name);
    strcpy(temp[i-1].phonenum,temp[i].phonenum);
    strcpy(temp[i-1].address,temp[i].address);
    }
    printf("\n=====>delete success!\n");
    n--;
    getchar();
    saveflag=1;
  }
  else
   Nofind();
   getchar();
}
 return n;
}

/*修改电话簿记录。先按输入的联系人姓名查询到该记录,
  然后提示用户修改该记录编号之外的值,编号不能修改*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -