C语言实现电话簿管理系统

本文实例为大家分享了C语言电话簿管理系统的具体代码,供大家参考,具体内容如下

/*大二实践周所作,
时间:2017.9,11
电话簿管理系统
*/

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NULL 0
typedef struct lianxiren{
 char job[30];
 char number[20];
 char name[10];
 char email[30];
 struct lianxiren*next;
}lianxiren;
#define LEN sizeof(lianxiren)
lianxiren* creat_list()
{
 lianxiren *head,*p1,*p2;
 char name[10];int n=0;
 head=NULL;
 p1=(lianxiren *)malloc(LEN);
 p2=p1;
 printf("请输入姓名(姓名为0时停止创建):");
 gets(name);
 if(strcmp(name,"0")==0)return 0;
 else {
 strcpy(p1->name,name);
 printf("请输入电话号码:");gets(p1->number);
 printf("请输入工作单位:");gets(p1->job);
 printf("请输入E-mail:");gets(p1->email);
 }
 while(1)
 {
 n++;
 if(n==1)
  head=p1;
 else
  p2->next=p1;
 p2=p1;
 printf("请输入姓名(姓名为0时停止创建):");
 gets(name);
 if(strcmp(name,"0")==0)break;
 else{
  p1=(lianxiren*)malloc(LEN);
      strcpy(p1->name,name);
  printf("请输入电话号码:");gets(p1->number);
  printf("请输入工作单位:");gets(p1->job);
  printf("请输入E-mail:");gets(p1->email);}
 }p2->next=NULL;
 return head;
}//链表创建函数
lianxiren* shifang_list(lianxiren*head)
{
 lianxiren*p1;
 for(;head!=NULL;)
 {
 p1=head;
 head=head->next;
 free(p1);
 }
 return head;
}//释放链表函数
void print_list(lianxiren*head)
{
 void caidan();
 int n=0;
 printf("现在通讯录中有如下成员:");
  while(head!=NULL)
 {
 printf("\n名字:");puts(head->name);
 printf("\n电话号码:");puts(head->number);
 printf("\n工作单位:");puts(head->job);
 printf("\nE-mail:");puts(head->email);
 putchar('\n');
 head=head->next;n++;
 if(n%8==0){
 printf("按回车键显示下一页");
 getchar();
 system("cls");
 caidan();
 }
 }
 printf("总共%d个联系人\n",n);
}//打印链表函数
int length(lianxiren*head)
{
  int n = 0;
  lianxiren *p;
  p = head;
  while(p != NULL)
  {
    p = p->next;
    n++;
  }
  return n;
} 

void paixu1(lianxiren*head)
{
 void caidan();
 int n=length(head);
 int i,j;
 lianxiren temp,*p;
 p=head;
 lianxiren a[100];
 for(i=1;i<=n;i++)
 {
 strcpy(a[i].name,p->name);
 strcpy(a[i].number,p->number);
 strcpy(a[i].job,p->job);
 strcpy(a[i].email,p->email);
 p=p->next;
 }
 for(i=1;i<=n-1;i++)
 {
 for(j=1;j<=n-i;j++)
 {if(strcmp(a[j].number,a[j+1].number)>0)
 {
  temp=a[j];
      a[j]=a[j+1];
  a[j+1]=temp;
 }
 }
 }
 printf("现在通讯录中有如下成员:");
 for(i=1;i<=n;i++)
 {
 printf("\n名字:");puts(a[i].name);
 printf("\n电话号码:");puts(a[i].number);
 printf("\n工作单位:");puts(a[i].job);
 printf("\nE-mail:");puts(a[i].email);
 putchar('\n');
 if(i%8==0){
 printf("按回车键显示下一页");
 getchar();
 system("cls");
 caidan();
 }
 }
 printf("总共%d个联系人\n",n);
}
void paixu2(lianxiren*head)
{
 void caidan();
 int n=length(head);int i,j;
 lianxiren temp,*p;
 p=head;
 lianxiren a[100];
 for(i=1;i<=n;i++)
 {
 strcpy(a[i].name,p->name);
 strcpy(a[i].number,p->number);
 strcpy(a[i].job,p->job);
 strcpy(a[i].email,p->email);
 p=p->next;
 }
for(i=1;i<=n-1;i++)
 {
 for(j=1;j<=n-i;j++)
 {if(strcmp(a[j].name,a[j+1].name)>0)
 {
  temp=a[j];
      a[j]=a[j+1];
  a[j+1]=temp;
 }
 }
 }
 printf("现在通讯录中有如下成员:");
 for(i=1;i<=n;i++)
 {
 printf("\n名字:");puts(a[i].name);
 printf("\n电话号码:");puts(a[i].number);
 printf("\n工作单位:");puts(a[i].job);
 printf("\nE-mail:");puts(a[i].email);
 putchar('\n');
 if(i%8==0){
 printf("按回车键显示下一页");
 getchar();
 system("cls");
 caidan();
 }
 }
 printf("总共%d个联系人\n",n);
}
void paixu_list(lianxiren*head)
{
 void caidan();
 if(head==NULL)
 {printf("电话簿为空,请重新创建!");
 return;
 }
 char a;
 printf("1,按电话号码升序排序\n2,按姓名字母升序排序\n");
 printf("请选择一种排序方法:");
 a=getchar();
 getchar();
 switch(a){
 case'1':paixu1(head);break;
 case'2':paixu2(head);break;
 default:printf("输入有误!\n");break;
 }
}
void chazhao1(lianxiren*head)
{if(head==NULL)
{
 printf("电话簿为空,请重新创建");
 return;
}
char name[10];
printf("请输入名字:");gets(name);
while(strcmp(name,head->name)!=0)
{head=head->next;
if(head==NULL){printf("电话簿未有此联系人\n");
return;}
}
printf("%s的电话号码为:",name);
puts(head->number);
printf("\n工作单位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通过名字查找
void chazhao2(lianxiren*head)
{if(head==NULL)
{
 printf("电话簿为空,请重新创建");
 return;
}
char number[20];
printf("请输入电话号码:");gets(number);
while(strcmp(number,head->number)!=0)
{head=head->next;
if(head==NULL){printf("电话簿未有此联系人\n");
return;}
}
printf("%s的主人为:",number);
puts(head->name);
printf("\n工作单位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通过电话号码查找
void chazhao(lianxiren*head)
{
 int n;
 printf("  1,通过名字查找\n  2,通过电话号码查找\n  3,退出\n请选择你需要的服务:");
  scanf("%d",&n);
 getchar();
 while(1)
 {
 switch(n){
 case 1:{chazhao1(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;
 case 2:{chazhao2(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;
 case 3:return;break;
 default:{printf("输入不正确!");printf("请选择服务项:");scanf("%d",&n);getchar();}break;
 }}
}//查找联系人
void add_list(lianxiren*head)
{
  lianxiren*p1,*p2,*h;
 char name[10];
 printf("请输入名字(名字为0时停止)");
 gets(name);
 if(strcmp(name,"0")!=0)
 {
 p1=(lianxiren*)malloc(LEN);
 strcpy(p1->name,name);
 printf("请输入电话号码:");gets(p1->number);
 printf("请输入工作单位:");gets(p1->job);
 printf("请输入E-mail:");gets(p1->email);
 }
 else return;
 h=p1;
  while(1)
 {
 p2=p1;
 printf("请输入名字(名字为0时停止)");
 gets(name);
 if(strcmp(name,"0")==0)break;
 else{
  p1=(lianxiren*)malloc(LEN);
  strcpy(p1->name,name);
  printf("请输入电话号码:");gets(p1->number);
  printf("请输入工作单位:");gets(p1->job);
  printf("请输入E-mail:");gets(p1->email);
  p2->next=p1;
 }
 }
  p1=head->next;
 head->next=h;
  p2->next=p1;
}//添加链表函数
lianxiren*xiugai_list(lianxiren*head)
{
 char a[20];
 printf("请输入联系人名字或电话:");
 gets(a);
 if(head==NULL)
 {
 printf("电话簿为空,请重新创建");
 return head;
 }
 lianxiren*p=head;
 while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0)
 {
 p=p->next;
 if(p==NULL){printf("电话簿未有此联系人\n");
 return head;}
 }
 printf("查找到了!");
 printf("\n名字:");puts(p->name);
 printf("\n电话号码:");puts(p->number);
 printf("\n工作单位:");puts(p->job);
 printf("\nE-mail:");puts(p->email);
 putchar('\n');
 int n;
 while(1)
 {printf("请选择操作项(1,名字2,电话号码3,工作单位4,E-mail 5,退出):");
 scanf("%d",&n);
 getchar();
 switch(n)
 {
  case 1:{printf("请输入名字:");gets(p->name);}break;
 case 2:{printf("请输入电话号码:");gets(p->number);}break;
 case 3:{printf("请输入工作单位:");gets(p->job);}break;
 case 4:{printf("请输入E-mail:");gets(p->email);}break;
  case 5:return head;break;
 default:printf("输入错误!");break;
 }
 }
}//修改链表函数
lianxiren*delete_list(lianxiren*head)
{
 char a[20];
 printf("请输入联系人名字或电话:");
 gets(a);
 if(head==NULL)
 {
 printf("电话簿为空,请重新创建");
 return head;
 }
 lianxiren*p=head,*p1;
 while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0)
 {
 p1=p;
 p=p->next;
 if(p==NULL){printf("电话簿未有此联系人\n");
 return head;}
 }
 printf("查找到了!");
 printf("\n名字:");puts(p->name);
 printf("\n电话号码:");puts(p->number);
 printf("\n工作单位:");puts(p->job);
 printf("\nE-mail:");puts(p->email);
 putchar('\n');
 char n;
 printf("是否删除该联系人(Y/N)");
 n=getchar();
 switch(n)
 {
  case 'y':
 case 'Y':{if(p==head){head=p->next;free(p);}else{p1->next=p->next;free(p);}printf("成功删除!");}break;
 case 'N':
 case 'n':printf("取消删除!");break;
 default:printf("输入错误!");break;
 }
 return head;
}//删除链表函数
void save_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","wb"))==NULL) {
 printf("File cannot be opened\n");
 exit(0);}
if(head==NULL)
{
 printf("通讯录为空\n");
 return;
}
lianxiren*p1=head;
while(p1!=NULL)
{
 if(fwrite(p1,LEN,1,fp)!=1){
 printf("cannot open file\n");
 return;}
 p1=p1->next;
}
printf("保存完毕!\n");
fclose(fp);
}//文件写入函数
lianxiren*load_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","rb"))==NULL) {
 printf("电话簿为空,请重新创建\n");
 exit(0);}
lianxiren*p1,*p2;
p1=(lianxiren*)malloc(LEN);
if(fread(p1,LEN,1,fp)==0)
{printf("电话簿为空,请重新创建");
return head;
}
head=p1;
p2=p1;
p1=(lianxiren*)malloc(LEN);
while(fread(p1,LEN,1,fp))
{
 p2->next=p1;
 p2=p1;
 p1=(lianxiren*)malloc(LEN);
}
p2->next=NULL;
free(p1);
return(head);
fclose(fp);
}//文件读取函数
int kouling()
{
 char s[20];
 printf("请输入口令:");
 int n=0;
 while(n<3)
 {scanf("%s",s);
 getchar();
 if(strcmp(s,"20160390527")==0)
 return 0;
 else{n++;
 if(n==3){
 printf("抱歉,输入错误\n");
 return 1;}
 printf("口令错误,请重新输入\n");
 }
 }return 1;
}//口令验证,密码为:20160390527
void caidan()
{
 printf("      欢迎进入电话簿系统      \n");
 printf("********************************************\n");
  printf("    1、创建电话簿(会将原有电话簿覆盖)\n");
 printf("    2、查找联系人        \n");
 printf("    3、添加联系人        \n");
 printf("    4、修改联系人        \n");
 printf("    5、删除联系人        \n");
  printf("    6、查看电话簿(排序)     \n");
 printf("    7、退出系统         \n");
 printf("********************************************\n");
}//菜单界面
void main()
{
 if(kouling()) return;//口令验证
 system("cls");
 caidan();//进入菜单界面
 printf("     请选择你所需要的服务:");
 int n;scanf("%d",&n);
 getchar();
 lianxiren*head;
 while(1){
 system("cls");
    caidan();
 switch(n){
 case 1:{
  head=creat_list();
  system("cls");
  caidan();
  print_list(head);
  save_list(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//创建电话簿(创建链表、写入文件,释放链表)
 case 2:{
  head=load_list(head);
  chazhao(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//查找联系人(读入文件、查找函数、释放链表)
 case 3:{
  head=load_list(head);
  add_list(head);
  system("cls");
  caidan();
  print_list(head);
  save_list(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//添加联系人(读入文件、添加链表、写入文件、释放链表)
 case 4:{
  head=load_list(head);
  head=xiugai_list(head);
  save_list(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//修改联系人(读入文件,修改链表、写入文件、释放链表)
 case 5:{
  head=load_list(head);
  head=delete_list(head);
  save_list(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//删除联系人(读入文件,删除链表、写入文件、释放链表)
 case 6:{
  head=load_list(head);
      paixu_list(head);
  shifang_list(head);
  printf("********************************************\n");
  printf("\n如需要其他服务,请重新输入:");
  scanf("%d",&n);
  getchar();}break;//查看电话簿(读入文件,排序链表、释放链表)
 case 7:{
  system("cls");
  return;}break;//退出
 default:{
  printf("\n输入有误,请重新输入:");
  scanf("%d",&n);
  getchar();}break;
 }}
}

更多学习资料请关注专题《管理系统开发》。

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

(0)

相关推荐

  • C语言实现一个通讯录

    实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6.  清空所有联系人 7. 以名字排序所有联系人 没有开辟动态内存的方法: 头文件:test.h #ifndef __CONTACT #define __CONTACT #define _CRT_SECURE_NO_WARNINGS 1 #include<

  • 用C语言实现简易通讯录

    C语言实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 **提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人** 思路分析: 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息.所以头文件里

  • C语言实现通讯录功能

    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 先定义头文件 #ifndef __CONTACT_H__ #define __CONTACT_H__ #define NAME_LEN 10 #define SEX_LEN 6 #define TELE_LEN 12 #define ADDR_LEN 20 #define MAX_PEO 1000 typedef struct PEO { char name[NAME_LEN]; int age; char sex[S

  • C语言实现简单的通讯录

    用C语言写了一个简单的通讯录,说简单一是功能简单,二是也没有加读写文件操作,只是作为链表操作的一个练习,希望能给这方面的新手一此引导和帮助. 代码: /* 转贴请注明出处 */ /* 作者:小浦原(ID:blueboy82006) */ /* http://blog.csdn.net/blueboy82006 */ #include <stdio.h> #include <stdlib.h> #include<string.h> #include<ctype.h&

  • C语言使用结构体实现简单通讯录

    C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 代码实现: 头文件: #ifndef __HEAD_H__ ////防止头文件被多次调用 #define __HEAD_H__ #include<stdio.h> #include<string.h> #in

  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例

    通讯录管理系统 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计

  • C语言实现通讯录系统

    C语言通讯录系统实现,供大家参考,具体内容如下 需求分析: 利用文件读,写的方法 实现增加通讯录联系人信息 实现删除通讯录联系人信息 实现查找通讯录联系人信息 实现修改通讯录联系人信息 实现查看现有通讯录联系人信息 代码实现: // main.c // C语言通讯录实现 // // Created by Brisinga on 15/10/14. // Copyright © 2015年 yan. All rights reserved. // #include <stdio.h> #incl

  • C语言基于哈希表实现通讯录

    本文为大家分享了C语言基于哈希表实现通讯录的具体代码,供大家参考,具体内容如下 1.需求分析 本演示程序用C语言编写,完成哈希表的生成,电话号码的插入.以及查找等功能. (1)按提示输入相应的联系人的相关资料: (2)以相应的输出形式输出所存储的的联系人的资料: (3)程序可以达到建立.添加.查找.打印的功能: (4)程序可以判断用户输入的非法数据并引导正确的输入. 2.概要设计 存储电话号码的记录时,若在存储位置和其关键字之间建立某种确定的对应关系使得每个关键字和存储结构中一个唯一的存储位置相

  • 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 Ph

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

随机推荐