电话本管理设计与实现

来源:互联网 发布:很萌美图软件 编辑:程序博客网 时间:2024/04/25 14:01

 /*@file telbook.c
*电话号码管理
*C+*.dat file
**.dat filename="c:/xxxxx.dat";
*complied with vc++
*chinayaosir
*/

/*0.1include head file*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

/*0.2 data struct*/
struct telephone
{char client_name[20];
char client_address[30];
char telephonenmber[15];
}message;

/*0.3操作函数声明*/
//1.1用户使用界面
void user_interface();
//1.2添加电话号码
void insert_data();
//1.3修改电话号码
void modify_data();
//1.4删除电话号码
void delete_data();
//1.5保存电话号码
void saveto_data();
//1.6用户查询函数
void search_method();
//1.7打印资料清单
void print_all_data();
//其它方法...
//排序电话号码函数
void sort_data(); 
//按用户名称查询
void search_name(); 
//按电话号码查询
void search_number();

//2.全局文件名称
char* filename="telbook.dat";

//3.main()主函数调用
void main()
{
 user_interface();
}


//1.1用户使用界面
void user_interface()
{
 int choice=0;
 while(choice!=6)
 {
 system("cls");
 printf("/n 电话本管理 /n");
 printf("/n================================");
 printf("/n -1- 添加资料");
 printf("/n -2- 修改资料");
 printf("/n -3- 删除资料");
 printf("/n -4- 资料查询");
 printf("/n -5- 汇总资料");
 printf("/n -6- 退出系统");
 printf("/n================================");
 printf("/n请选择:");

 scanf(" %d",&choice);
 getchar();
 if(choice>7||choice<1)
 {
  printf("请选择1-6之间的数/n按回车继续");
  getch();
  continue;
 }
 switch(choice)
 {
  case 1:
   insert_data();
   break;
  case 2:
   modify_data();
   break;
  case 3:
   delete_data();
   break;
  case 4:
   search_method();
   break;
  case 5:
   print_all_data();
   break;
  case 6:
   break;
   default:
  break;
 }
 }

 system("cls");
 printf("/n谢谢你的使用,再见!/n");
}


//1.2添加电话号码
void insert_data()
{
 char choice = 'y';
 while(choice == 'Y' || choice == 'y')
 {
  system("cls");
  printf("/n 添加电话号码 /n");
  printf("/n================================/n");
  printf("请按下面输入资料:/n");
  printf("用户姓名:");
  gets(message.client_name);
  printf("用户电话:");
  gets(message.telephonenmber);
  printf("用户地址:");
  gets(message.client_address);

  printf("/n是否保存?[y/n]:");
  scanf(" %c",&choice);
  if(choice=='y'||choice=='Y') {saveto_data(); }
  printf("/n继续添加?[y/n]:");
  scanf(" %c", &choice);
  getchar();
 }
 printf("任意键返回……/n");
 getch();
}
//1.3修改电话号码
/*此程序有些bug*/
void modify_data()
{
 FILE *fp;
 char name[20];
 char choice = 'y';
 char found='y';

while(choice=='y'||choice=='Y')
{
 fp=fopen(filename,"r+w");//打开文件进行读写操作
 if (fp==NULL)  
  printf("/n打开文件错误!/n");

 if(fp!=NULL)
 {
 system("cls");
 printf("/n修改电话号码/n");
 printf("/n================================/n");
 printf("请输入修改的用户姓名:");
 scanf("%s",name);
 //将文件数据进行一一读取,如果找到则退出
 while((fread(&message,sizeof(struct telephone),1,fp))==1)
 {
  if(strcmp(name,message.client_name)==0)
  {  found='y';  break;  }
 }
 if(found=='y')//如果找到,输出信息,并输入新信息和保存
 {
  printf("/n原用户信息/n");
  printf("用户姓名:%s/n",message.client_name);
  printf("用户电话:%s/n",message.telephonenmber);
  printf("用户地址:%s/n",message.client_address);
  printf("/n用户新信息");
  printf("/n请输入用户姓名:");
  scanf("%s",message.client_name);
  printf("/n请输入用户电话:");
  scanf("%s",message.telephonenmber);
  printf("/n请输入用户地址:");
  scanf("%s",message.client_address);

  printf("/n/n要保存吗?[y/n]:");
  scanf(" %c",&choice);

  if(choice=='y'||choice=='Y')
  {
   fseek(fp,sizeof(struct telephone),1);
   fwrite(&message,sizeof(struct telephone),1,fp);
  } 
 }
 else
 { printf("没有此用户信息!/n"); }
 
 }

 fclose(fp);

 printf("继续修改吗?[y/n]");
 scanf(" %c",&choice);
}
 printf("按任意键返回……");
 getchar();
}

 

//1.4删除电话号码
void delete_data()
{
 FILE *fp;
 int i=0,j;
 struct telephone diff[500],same;
 char name[20],found='n',choice='y';

 while(choice=='y'||choice=='Y')
 {
 fp=fopen(filename,"rb");//打开文件进行读操作
 if(fp!=NULL)
  {
  system("cls");
  printf("/n 删除电话号码/n");
  printf("/n================================/n");
  printf("请输入用户姓名:");
  scanf("%s",name);
  //将文件数据进行一一读取,如果找到则退出
  while((fread(&message,sizeof(struct telephone),1,fp))==1)
  {
  if(strcmp(name,message.client_name)==0)
   { same=message; found='y'; }
  else
   { diff[i++]=message; }
  }
  
  }
 else
 { printf("/n打开文件错误!/n"); }
 fclose(fp);
 if(found=='y')//如果找到,输出信息,并重新输入新信息和保存
 {
 printf("/n删除的用户信息/n");
 printf("用户姓名:%s/n",same.client_name);
 printf("用户电话:%s/n",same.telephonenmber);
 printf("用户地址:%s/n",same.client_address);

 printf("/n要删除吗?[y/n]:");
 scanf(" %c",&choice);

 if(choice=='y'||choice=='Y')
 {
 fp=fopen(filename,"wb");//打开文件进行写操作
 if(fp!=0)
 {
 rewind(fp);
 for(j=0;j<i;j++)
 { fwrite(&diff[j],sizeof(struct telephone),1,fp); }

 }
 else
 { printf("/n打开文件错误!/n"); }

 }
 }
 else
 {
 printf("没有此用户的信息!");
 }

 fclose(fp);
 printf("要继续删除吗?[y/n]");
 scanf(" %c",&choice);
 }
 printf("按任意键返回……");
 getchar();
}
//1.5保存电话号码
void saveto_data(){
 FILE *fp;
 fp=fopen(filename,"a+b");//追加方式打开文件进行操作
 if (fp!=NULL)
 //进行写操作
 {fwrite(&message,sizeof(struct telephone),1,fp);}
 else
 {return;}
 fclose(fp);
}

//1.6用户查询函数
void search_method(){
 int choice=0;
 while(choice!=3){
 system("cls");
 printf("/n 电话号码管理 /n");
 printf("/n================================/n");
 printf("/n -1- 用户姓名查询/n");
 printf("/n -2- 电话号码查询/n");
 printf("/n -3- 返回上级菜单/n");
 printf("/n================================/n");
 printf("/n请选择:");
 scanf(" %d",&choice);
 getchar();

 if(choice>3||choice<1) {
  printf("请选择1-2之间的数/n按回车继续");
  getchar();
  continue;
 }
 switch(choice)
 {
 case 1:
  //按用户名称查询
  search_name();
  break;
 case 2:
  //按电话号码查询
  search_number();
  break;
 default:
  break;
 }
}
}

//1.7打印资料清单
void print_all_data(){
 FILE *fp;
 int i;
 sort_data();
 fp=fopen(filename,"rb");//打开文件进行读操作
 if (fp!=NULL){
 system("cls");
 printf("/n 打印资料清单 /n");
 printf("/n================================/n");
 for(i=0;(fread(&message,sizeof(struct telephone),1,fp))==1;i++){
  printf("记录%d:/n",i+1);
  printf("/t姓名:/t%s/n",message.client_name);
  printf("/t电话:/t%s/n",message.telephonenmber);
  printf("/t地址:/t%s/n",message.client_address);
  printf("================================/n");
 }
 printf("/n共%d条记录/n",i);
 }
 else
 {
 printf("打开文件时出现错误/n");
 }
 fclose(fp);
 printf("按任意键返回……");
 getchar();
}

//排序记录数据
void sort_data(){
 FILE *fp;
 int i,j,k;
 struct telephone temp[500],change;

 fp=fopen(filename,"rb");//打开文件进行读操作
 if (fp!=NULL){
  system("cls");
  for(i=0;(fread(&message,sizeof(struct telephone),1,fp))==1;i++)
  {temp[i]=message;}

  for(j=1;j<=i-1;j++){
   for(k=0;k<i-j;k++){
   if(strcmp(temp[k].client_name,temp[k+1].client_name)>0){
    change=temp[k];
    temp[k]=temp[k+1];
    temp[k+1]=change;
   }/*end if*/
   }/*end for k*/
  }/*end for j*/

 }/*if fp!=NULL*/
 else
  {return;}
 fclose(fp);
 //进行写操作
 fp=fopen(filename,"wb");//写方式打开文件进行操作
 for(j=0;j<i;j++)
 {fwrite(&temp[j],sizeof(struct telephone),1,fp);}
 fclose(fp);
}

 

 

//按用户名查询
void search_name(){
FILE *fp;
char name[20];
char choice = 'y';
int i=0;

while(choice=='y'||choice=='Y'){
 fp=fopen(filename,"rb");//打开文件进行读写操作
 if(fp!=NULL){
  system("cls");
  printf("/n 按用户名查询 /n");
  printf("/n================================/n");
  printf("请输入用户姓名:");
  scanf("%s",name);
  //将文件数据进行一一读取,如果找到则退出
  while((fread(&message,sizeof(struct telephone),1,fp))==1){
   if(strcmp(name,message.client_name)==0) {
    i++;
    printf("/n用户姓名:%s/n",message.client_name);
    printf("用户电话:%s/n",message.telephonenmber);
    printf("用户地址:%s/n",message.client_address);
   }
  }
  if(i==0){ printf("/n没有此用户信息!/n"); }
 
 }
 else
 {
  printf("/n打开文件错误!/n");}
  fclose(fp);
  printf("/n要继续按本方式查询吗?[y/n]");
  scanf(" %c",&choice);
 }
 printf("按任意键返回……");
 getchar();
}

//按电话号码查询
void search_number() {
 FILE *fp;
 char number[15];
 char choice = 'y';
 int i=0;

 while(choice=='y'||choice=='Y') {
  fp=fopen(filename,"rb");//打开文件进行读写操作
  if(fp!=NULL){
   system("cls");
   printf("/n 电话号码管理 /n");
   printf("/n================================/n");
   printf("请输入电话号码:");
   scanf("%s",number);
   //将文件数据进行一一读取,如果找到则退出
   while((fread(&message,sizeof(struct telephone),1,fp))==1){
    if(strcmp(number,message.telephonenmber)==0){
     i++;
     printf("/n用户姓名:%s/n",message.client_name);
     printf("用户电话:%s/n",message.telephonenmber);
     printf("用户地址:%s/n",message.client_address);
    }
   }
   if(i==0) { printf("/n没有此用户信息!/n"); }
  }
  else
  { printf("/n打开文件错误!/n"); }
  fclose(fp);
  printf("/n要继续按本方式查询吗?[y/n]");
  scanf(" %c",&choice);
 }
 printf("按任意键返回……");
 getchar();
}

原创粉丝点击