吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7298|回复: 19
收起左侧

[其他转载] c语言写的通讯录

 关闭 [复制链接]
zapline 发表于 2009-11-20 19:25
本帖最后由 zapline 于 2009-11-20 20:13 编辑

参加完第一阶段的学习后,大概就能写出来了
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
typedef  struct node
{  
       char name[20];      /*姓名*/
       char address[40];   /*住址*/
       char phone[15];     /*电话*/
       struct node *next;
}add_list;
struct person
{  
       char name[20];
       char address[40];
       char phone[15];
};
add_list *tail,*head;   /*定义链表尾结点指针和头指针*/
FILE *fp;               /*文件指针*/
char filename[] =”address.txt";
char name[20];
char phone[15];
char c;
int pass()   /*密码登录模块*/
{
       char password[] = "jike0802";  /*通讯录密码*/
       char inputPassword[100] = "";  /*用来存储输入的密码*/
       printf("请输入系统登录密码:");
       scanf("%s",inputPassword);
       if ( !strcmp(password,inputPassword) )
              return 1;
       printf("密码错误!你有三次尝试机会,已尝试过一次\n请输入系统登录密码:");
       scanf("%s",inputPassword);
       if ( !strcmp(password,inputPassword) )
              return 1;
       printf("密码错误!你有三次尝试机会,已尝试过两次\n请输入系统登录密码:");
       scanf("%s",inputPassword);
       if ( !strcmp(password,inputPassword) )
              return 1;
       printf("密码错误!自动退出系统\n");
       getchar();
       return 0;
}
add_list *load(char filename[])  /*从文件载入通讯录*/
{         
    add_list *new,*head;
struct person t;
    head=(add_list *)malloc(sizeof(add_list));
    tail=head=NULL;
    if((fp=fopen(filename,"rb"))==NULL)
              return head;
    else         
              if(!feof(fp))                  
                     if(fread(&t,sizeof(struct person),1,fp)==1)                 
                     {            
                            new=(add_list *)malloc(sizeof(add_list));   /*连入链表第一个结点*/          
                            strcpy(new->name,t.name);          
                            strcpy(new->address,t.address);                          
                            strcpy(new->phone,t.phone);
                            head=tail=new;
                            new->next=NULL;
                            /*连入链表其余结点*/
                            while(!feof(fp))     
                            {                       
                                   if(fread(&t,sizeof(struct person),1,fp)==1)                                      
                                   {                                            
                                          new=(add_list *)malloc(sizeof(add_list));                  
                                          strcpy(new->name,t.name);   
                                          strcpy(new->address,t.address);                                        
                                          strcpy(new->phone,t.phone);                                                         
                                          tail->next=new;                                  
                                          new->next=NULL;                             
                                          tail=new;                                                                
                                   }                                                      
                            }                          
                     }
                     fclose(fp);             
                     return head;    
}
int delete(add_list **head)
{    
       add_list *p,*q,*t;
       char name[20],c;
       int flag=0;
       printf("请输入要删除人的姓名:\n");
       getchar();
       gets(name);
       q=p=*head;
       while(p!=NULL)
       {     
              if(strcmp(name,p->name)==0)
              {     
                     printf("姓名:%s\t住址:%s\n",p->name,p->address);
                     printf("电话:%s\n",p->phone);
                     printf("真的要删除吗?\n删除请输入(Y)取消请输入(N)-->");
                     c=getchar();
                     getchar();
                     if(c=='y'||c=='Y')
                     {     
                            if(p==*head)
                                   *head=p->next;
                            else
                                   q->next=p->next;
                            t=p;
                            p=p->next;
                            free(t);
                            flag=1;
                            printf("已删除确认项!按回车键继续!\n");
                     }
                     else
                     {      
                            q=p;
                            p=p->next;
                     }
              }
              else
              {     
                     q=p;
                     p=p->next;
              }
       }
       return flag;
}
int search(add_list *head)
{
       add_list *p;
       p = head;
       printf("查看所有输入1,根据姓名查询输入2,根据号码查询输入3-->");
       getchar();
       c = getchar();
       getchar();
       switch (c)
       {
       case '1':
              while(p!=NULL)           
              {               
                     printf("************************通讯成员*********************************\n");         
                     printf("姓名:%-20s\t住址:%-40s\n",p->name,p->address);         
                     printf("电话:%-15s\n",p->phone);            
                     printf("*****************************************************************\n");         
                     p=p->next;            
              }
              printf("按回车键继续!");
              getchar();
              return 1;
              break;
       case '2':
              printf("输入要查找人的姓名:");
              gets(name);            
              while(p!=NULL)                  
              {                       
                     if(strcmp(name,p->name)==0)                    
                     {                      
                            printf("姓名:%s\t住址:%s\n",p->name,p->address);            
                            printf("电话:%s\n",p->phone);          
                            printf("按回车键继续!");
                            getchar();
                            return 1;  
                     }     
                     p=p->next;
              }     
              getchar();
              return 0;
              break;
       case '3':
              printf("输入要查找人的号码:");
              gets(phone);           
              while(p!=NULL)                  
              {                       
                     if(strcmp(phone,p->phone)==0)                  
                     {                      
                            printf("姓名:%s\t住址:%s\n",p->name,p->address);            
                            printf("电话:%s\n",p->phone);   
                            printf("按回车键继续!");
                            getchar();
                            return 1;  
                     }     
                     p=p->next;
              }     
              getchar();
              return 0;
              break;
       default:
              return 0;
       }
       return 0;
}

void insert(add_list **head)
{    
       add_list *new;
       new=(add_list *)malloc(sizeof(add_list));
       printf("请输入姓名:"); getchar();gets(new->name);
       printf("请输入住址:"); gets(new->address);
       printf("请输入电话:"); scanf("%s",new->phone);
       if(*head==NULL)
       {   
              *head=new;
              new->next=NULL;
              tail=new;
       }
       else
       {
              tail->next=new;
              new->next=NULL;
              tail=new;
       }
       getchar();
}
void add()
{
       c = 'y';
       while ( c=='y' || c=='Y')
       {
              insert(&head);
              printf("\n是否继续?\n继续添加输入(Y)停止添加输入(N)-->");
              c = getchar();
              getchar();
       }     
}
void save(add_list *head,char filename[])
{     
       add_list *p;
       struct person t;

       if((fp=fopen(filename,"wb"))==NULL)
       {     
              printf("error:cannot open file %s\n",filename);
              getchar();
       }
       else
       {     
              p=head;
              while(p!=NULL)
              {      
                     strcpy(t.name,p->name);
                     strcpy(t.address,p->address);
                     strcpy(t.phone,p->phone);
                     fwrite(&t,sizeof(struct person),1,fp);
                     p=p->next;
              }
       }
       fclose(fp);
}
void view()
{
       printf("=====================================================\n");   
       printf("===              欢迎使用pp通讯录                 ===\n");      
       printf("===       制作 : 计科0802班 - 第十编程小组       ===\n");       
       printf("=====================================================\n");
}

int theUI()  /*界面模块*/
{
       int  t;
       while(1)
       {
              view();
              printf("===               1 增加通讯成员                  ===\n");
              printf("===               2 删除通讯成员                  ===\n");
              printf("===               3 查询通讯成员                  ===\n"); 
              printf("===               4 插入通讯成员                  ===\n"); 
              printf("===               5 保存通讯文本                  ===\n"); 
              printf("===               0 退出本次操作                  ===\n"); 
              printf("=====================================================\n");   
              printf("请输入您选择的操作,输入选项编号然后按回车键:");
              c=getchar();
              switch(c)
              {      
              case '1':  
                     add(&head);
                     printf("请尽快保存!按回车键继续!");
                     getchar();
                     system("cls");
                     break;
       
              case '2':   
                     t=delete(&head);
                     if(!t)             
                     {
                            printf("查无此人按回车键继续!");
                            getchar();
                     }
                     system("cls");
                     break;
              
              case '3':   
                     t=search(head);
                     if(!t)             
                     {
                            printf("查询失败按回车键继续!");
                            getchar();
                     }
                     system("cls");
                     break;
              
              case '4':
                     insert(&head);
                     printf("请尽快保存!按回车键继续!");
                     getchar(); 
                     system("cls");
                     break;

              case '5':
                     save(head,filename);
                     printf("保存成功!按回车键继续!");
                     getchar();
                     getchar();
                     system("cls");
                     break;
       
              case '0':   
                     printf("推出前是否保存?保存请输入(Y),不保存输入其它值-->");
                     c = getchar();
                     c = getchar();
                     if ( c=='Y' || c=='y')
                     {
                            save(head,filename);
                            printf("保存成功!按回车键继续!");
                            getchar();
                     }
                     exit(0);
              
              default:  
                     printf("输入指令无效!按回车键继续!");
                     getchar();
                     system("cls");
              }
       }
}
void main()
{
       view();
       if ( pass() )
       {
              system("cls");
              getchar();
              head=load(filename);
              theUI();
       }
       else
              exit(0);
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

什么也不是 发表于 2009-11-20 19:27
{:299_842:}
师傅好强大
小鬼 发表于 2009-11-20 19:58
ieiqp 发表于 2009-11-20 20:08
cool头 发表于 2009-11-20 20:44
学习个。。。
ToBePeak 发表于 2009-11-20 20:59
上学期课程设计的时候有帮人做了个通讯录,自己做了个图书管理系统。
小子贼野 发表于 2009-11-21 20:51
膜拜一下强大的Z牛
柯梦南 发表于 2009-11-25 08:17
真是牛啊,我这初学者都看不太懂啊,怎么加不了学习群了啊,前两天一直在外面培训,没上网,今天来了又错过了吗?
最硬的石头 发表于 2009-11-27 10:54
第22行有中文字符..
char filename[] =”address.txt";
最硬的石头 发表于 2009-11-27 10:55
收藏学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 01:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表