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

 更新时间:2021年01月02日 12:25:43   作者:ANONYMOUSLYCN  
这篇文章主要为大家详细介绍了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(); 
 } 
  
 
} 

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

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

相关文章

  • C++ decltype 说明符

    C++ decltype 说明符

    这篇文章主要介绍了C++ decltype 说明符,检查实体的声明类型,或表达式的类型和值类别。下面我们来看看文章中的具体内容吧

    2021-12-12
  • C++ DFS算法实现走迷宫自动寻路

    C++ DFS算法实现走迷宫自动寻路

    这篇文章主要为大家详细介绍了C++ DFS算法实现走迷宫自动寻路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 深入了解c语言的循环语句

    深入了解c语言的循环语句

    这篇文章主要为大家介绍了c语言的循环语句,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • GetChar缓存机制深入剖析

    GetChar缓存机制深入剖析

    以下是对GetChar缓存机制进行了详细的介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++将保存char、int 和double到txt文件中

    C++将保存char、int 和double到txt文件中

    这篇文章主要介绍了C++如何将保存char、int 和double到txt文件中,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++ 整型与字符串的互转方式

    C++ 整型与字符串的互转方式

    今天小编就为大家分享一篇C++ 整型与字符串的互转方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++11 shared_ptr 与 make_shared源码剖析详解

    C++11 shared_ptr 与 make_shared源码剖析详解

    这篇文章主要介绍了C++11 shared_ptr 与 make_shared的源码剖析,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 一文带你吃透C++继承

    一文带你吃透C++继承

    继承是C++语言的一个重要特性,继承使得软件(代码)复用变得简单、易行,可以通过继承复用已有的程序资源,缩短软件开发的周期,本就带大家吃透C++继承,需要的朋友可以参考下
    2023-06-06
  • C中qsort快速排序使用实例

    C中qsort快速排序使用实例

    在学习C++ STL的sort函数,发现C中也存在一个qsort快速排序,要好好学习下C的库函数啊
    2014-01-01
  • c语言数据结构之并查集 总结

    c语言数据结构之并查集 总结

    一种用于管理分组的数据结构。它具备两个操作:(1)查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组,需要的朋友可以参考下
    2018-08-08

最新评论