C语言通讯录管理系统课程设计

本文实例为大家分享了C语言通讯录管理系统课程设计,供大家参考,具体内容如下

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
struct Sign{ 
  char name[8]; 
  char sex[4]; 
  char birthday[12]; 
  char phone[11]; 
  char postcode[7]; 
  char addr[30]; 
  struct Sign *next; 
 }pe; 
 char PhoneCop[4] ; 
 
//结构体 
struct Sign *p1,*p2,*head; 
FILE *fp; 
void ShowMenu(){ 
 system("color 1F"); 
 printf("#################   通讯录管理系统 v1.0 ###################\n"); 
 printf("#####################################################################\n"); 
 printf("#                 #\n"); 
 printf("#   1-----------------信息录入-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#   2-----------------信息查询-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#   3-----------------信息查看-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#   4-----------------信息修改-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#   5-----------------信息统计-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#   6-----------------退出系统-------------------   #\n"); 
 printf("#                 #\n"); 
 printf("#####################################################################\n"); 
 printf("#  POWER BY ************* 兰州理工大学  201407   #\n"); 
 printf("#####################################################################\n"); 
  
}; 
void HeadShow() 
{ 
 printf("#################   通讯录管理系统 v1.0 ###################\n"); 
 printf("---------------------------------------------------------------------\n"); 
 
} 
void FileLoading() 
{ 
  if((fp=fopen("txl.dat","rb"))==NULL) 
 { 
  printf("文件操作错误,请检查是否有权限操作文件!"); 
  Sleep(3000); 
  exit(1); 
 } 
 p1=(struct Sign*)malloc(sizeof(struct Sign)); 
 p1->next=NULL; 
 head=p1; 
 while(!feof(fp)) 
 { 
  if(fread(p1,sizeof(struct Sign),1,fp)!=1) 
   break; 
  p2=(struct Sign*)malloc(sizeof(struct Sign)); 
  p2->next=NULL; 
  p1->next=p2; 
  p1=p2; 
 } 
 fclose(fp); 
} 
void add() 
{  
 char ch; 
 if((fp==fopen("txl.dat","ab+"))!=1) 
 { 
  printf("文件打开失败"); 
  exit(1); 
 } 
 while(1) 
 { system("cls"); 
  printf("请输入__\n"); 
  p2=(struct Sign*)malloc(sizeof(struct Sign)); 
  p2->next=NULL; 
  printf("姓名:");scanf("%s",pe.name); 
  printf("性别:");scanf("%s",pe.sex); 
  printf("生日:");scanf("%s",pe.birthday); 
  printf("电话号码:");scanf("%s",pe.phone); 
  printf("邮编:");scanf("%s",pe.postcode); 
  printf("地址:");scanf("%s",pe.addr); 
  strcpy(p1->name,pe.name); 
  strcpy(p1->sex,pe.sex); 
  strcpy(p1->birthday,pe.birthday); 
  strcpy(p1->phone,pe.phone); 
  strcpy(p1->postcode,pe.postcode); 
  strcpy(p1->addr,pe.addr); 
  p1->next=p2; 
  p1=p2;   
  if(fwrite(&pe,sizeof(struct Sign),1,fp)!=1) 
   printf("写入错误"); 
  printf("输入E或e来结束输入?"); 
  getchar(); 
  ch=getchar(); 
  if(ch=='e'||ch=='E') 
   break; 
 
 } 
 fclose(fp); 
} 
void SaveChange() 
{  
 if((fp==fopen("txl.dat","w"))!=1) 
 { 
  printf("文件打开失败"); 
  exit(1); 
 } 
 p1=head; 
 while(p1->next!=NULL) 
 { 
  if(fwrite(p1,sizeof(struct Sign),1,fp)!=1) 
   printf("写入错误"); 
  p1=p1->next; 
   
 } 
 fclose(fp); 
} 
void AllShow() 
{ 
 HeadShow(); 
 printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");  
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 while(p1->next!=NULL) 
 { 
  printf("%10.8s %6.6s %10.12s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
  p1=p1->next; 
   
 } 
  
} 
 
void AllNum() 
{ int i=0; 
 HeadShow(); 
 printf("   共有记录条数为: \n"); 
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
  while(p1->next!=NULL) 
 { 
  i++; 
  p1=p1->next; 
   
 } 
 printf("   %d     \n",i); 
 printf("---------------------------------------------------------------------\n"); 
  
 printf("   共有联通用户为: \n"); 
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 i=0; 
  while(p1->next!=NULL) 
 { 
  strncpy(PhoneCop,p1->phone,3); 
  if(strcmp(PhoneCop,"130")==0||strcmp(PhoneCop,"131")==0||strcmp(PhoneCop,"132")==0||strcmp(PhoneCop,"155")==0||strcmp(PhoneCop,"156")==0||strcmp(PhoneCop,"185")==0||strcmp(PhoneCop,"186")==0) 
   i++; 
  p1=p1->next; 
   
 } 
 printf("   %d     \n",i); 
 printf("---------------------------------------------------------------------\n"); 
 printf("   共有移动用户为: \n"); 
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 i=0; 
  while(p1->next!=NULL) 
 { 
  strncpy(PhoneCop,p1->phone,3); 
  if(strcmp(PhoneCop,"134")==0||strcmp(PhoneCop,"135")==0||strcmp(PhoneCop,"136")==0||strcmp(PhoneCop,"137")==0||strcmp(PhoneCop,"138")==0||strcmp(PhoneCop,"139")==0||strcmp(PhoneCop,"150")==0||strcmp(PhoneCop,"151")==0||strcmp(PhoneCop,"152")==0||strcmp(PhoneCop,"157")==0||strcmp(PhoneCop,"158")==0||strcmp(PhoneCop,"159")==0||strcmp(PhoneCop,"187")==0||strcmp(PhoneCop,"188")==0) 
   i++; 
  p1=p1->next; 
   
 } 
 printf("   %d     \n",i); 
 printf("---------------------------------------------------------------------\n"); 
  printf("   共有电信用户为: \n"); 
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 i=0; 
  while(p1->next!=NULL) 
 { 
  strncpy(PhoneCop,p1->phone,3); 
  if(strcmp(PhoneCop,"180")==0||strcmp(PhoneCop,"189")==0||strcmp(PhoneCop,"133")==0||strcmp(PhoneCop,"153")==0) 
   i++; 
  p1=p1->next; 
   
 } 
 printf("   %d     \n",i); 
 printf("---------------------------------------------------------------------\n"); 
} 
void CheckFace() 
{ int Check_key; 
 printf("###########   通讯录管理系统 v1.0 ################\n"); 
 printf("############################################################\n"); 
 printf("#               #\n"); 
 printf("#     1------按姓名查询      #\n"); 
 printf("#               #\n"); 
 printf("#     2------按电话号码查询     #\n"); 
 printf("#               #\n"); 
 printf("#     3------综合查询       #\n"); 
 printf("#               #\n"); 
 printf("#     4------退出查询模块      #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("############################################################\n"); 
 printf("# POWER BY ************* 兰州理工大学  201407  #\n"); 
 printf("############################################################\n"); 
  
} 
void Selelctname() 
{ system("cls"); 
 HeadShow(); 
 printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");  
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 char FindName[8]; 
 int i=0; 
 printf("请输入要查询的姓名:"); 
 scanf("%s",&FindName); 
 while(p1->next!=NULL) 
 { 
  if(strcmp(p1->name,FindName)==0) 
   {printf("%10.8s %6.6s %10.10s %11.14s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
   i++; 
   } 
  p1=p1->next; 
   
 } 
 printf("共 %d 条\n",i); 
 system("pause"); 
} 
 
void Selelctphone() 
{ system("cls"); 
 HeadShow(); 
 printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");  
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 char phone[11]; 
 int i=0; 
 printf("请输入要查询的电话号码:"); 
 scanf("%s",&phone); 
 while(p1->next!=NULL) 
 { 
  if(strcmp(p1->phone,phone)==0) 
   {printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
   i++; 
   } 
  p1=p1->next; 
   
 } 
 printf("共 %d 条\n",i); 
 system("pause"); 
} 
void Selelctall() 
{ system("cls"); 
 HeadShow(); 
 printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");  
 printf("---------------------------------------------------------------------\n"); 
 p1=head; 
 char all[30]; 
 int i=0; 
 printf("请输入任意一项要查询的内容:"); 
 scanf("%s",&all); 
 while(p1->next!=NULL) 
 { 
  if(strcmp(p1->name,all)==0||strcmp(p1->sex,all)==0||strcmp(p1->birthday,all)==0||strcmp(p1->phone,all)==0||strcmp(p1->postcode,all)==0||strcmp(p1->addr,all)==0) 
   {printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
   i++; 
   } 
  p1=p1->next; 
   
 } 
 printf("共 %d 条\n",i); 
 system("pause"); 
} 
void Change() 
{ char ChangeName[8]; 
 int changekey; 
 system("cls"); 
 HeadShow(); 
 int i,y=0;    
 p1=p2=head;  
 printf("请输入你要修改的条目的姓名:"); 
 scanf("%s",&ChangeName); 
  getchar(); 
 while(p1!=NULL) 
 {  
 if(strcmp(p1->name,ChangeName)==0)  
  { printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
   printf("您要修改的是这条记录吗?1---是|2---否\n"); 
   scanf("%d",&i); 
   if(i==1) 
   { y=1; 
   printf("你要修改的通讯录为:\n"); 
   printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr); 
   printf("请选择您的操作  1---删除|2---修改\n"); 
   scanf("%d",&changekey); 
   if(changekey==1) 
    { 
    if(p1==head)   
     {head=p1->next; 
     free(p1); 
     } 
     else 
     { 
    p2->next=p1->next; 
    free(p1);  
    SaveChange();  
     
    } 
     
  } 
  else if(changekey==2) 
  { 
   printf("姓名:");scanf("%s",p1->name); 
   printf("性别:");scanf("%s",p1->sex); 
   printf("生日:");scanf("%s",p1->birthday); 
   printf("电话:");scanf("%s",p1->phone); 
   printf("邮编:");scanf("%s",p1->postcode); 
   printf("地址:");scanf("%s",p1->addr); 
   SaveChange(); 
   printf("\n OK! \n"); 
  }  
   }    
   
  } 
 else if(strcmp(p1->name,ChangeName)&&(p1->next)==NULL) 
  { 
   i=0;    
   
  } 
  p2=p1;  
  p1=p1->next; 
 } 
 
  if(y==0)  
 { 
  printf("对不起,没有找到要修改的通讯名单,请检查你要修改的姓名是否正确\n"); 
 } 
  
  
 system("pause"); 
} 
void ExirShow() 
{ 
 system("color 0E"); 
 printf("###########   通讯录管理系统 v1.0 ################\n"); 
 printf("############################################################\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#      谢谢使用!       #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("#               #\n"); 
 printf("############################################################\n"); 
 printf("# POWER BY ************* 兰州理工大学  201407  #\n"); 
 printf("############################################################\n"); 
  
} 
void ErrorShow() 
{ int errortime=5; 
 system("color 0E"); 
 for(errortime=5;errortime>0;errortime--) 
  {printf("\r输入错误!请仔细检查!将在%d秒后返回",errortime); 
   Sleep(1000); 
  } 
  
} 
int main() 
{ int key; 
 int Ex_key; 
 int Check_key; 
 char a[10]; 
 if((fp=fopen("txl.dat","ab"))==NULL) 
 { 
  printf("文件操作错误,请检查是否有权限操作文件!"); 
  Sleep(3000); 
  exit(1); 
 } 
 fclose(fp); 
 FileLoading(); 
 while(1){ 
 ShowMenu(); 
 gets(a); 
 key=atoi(a); 
 if(key==1) 
  {system("cls"); 
  add(); 
  } 
 else if(key==2) 
  { system("cls"); 
    
   system("color 0E"); 
  while(1) 
    { 
   system("color 0E"); 
   CheckFace(); 
   printf("请输入你的选择:\n"); 
   gets(a); 
   Check_key=atoi(a); 
   if(Check_key==1) 
    Selelctname() 
   ; 
   else if(Check_key==2) 
    Selelctphone() 
   ; 
   else if(Check_key==3) 
    Selelctall() 
   ; 
   else if(Check_key==4) 
   
   break; 
   else 
   ErrorShow(); 
   system("cls"); 
   system("color 1F"); 
   getchar(); 
    
  }  
   
   
  } 
  
 else if(key==3)  //2013级 耿。。 
 { system("color 0E"); 
  system("cls"); 
  AllShow(); 
  system("pause"); 
 } 
 else if(key==4) 
  { 
   system("color 0A"); 
   Change(); 
   
   
  } 
 else if(key==5) 
  { 
  system("color 5F"); 
  system("cls"); 
  AllNum(); 
  system("pause"); 
   } 
 else if(key==6) 
  { 
  system("cls"); 
  ExirShow(); 
  Sleep(1000); 
  exit(0); 
  } 
   
 else 
  
  ErrorShow(); 
  system("cls"); 
  system("color 1F"); 
  getchar(); 
 } 
  
 
} 

比较简单就是用到了链表和文件操作,其中统计联通和移动人数的那里其实只用一个循环就可以。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。