标题:求助:通讯录管理系统
只看楼主
XTY
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-6
结帖率:0
已结贴  问题点数:20 回复次数:5 
求助:通讯录管理系统
设计内容
通讯录管理系统:
至少有姓名、性别、年龄、住址、电话号码;
汉字界面;
至少有输入数据、显示数据、编辑、修改、删除等功能,可增加排序、查询等功能。
界面要求全屏设计,比较美观,提示信息准确汉化,所有功能可以反复使用。数据类型至少要用到结构体和数组,使用文件进行存储和管理,鼓励采用链表结构
这个怎么做啊?我不会做···希望有人帮忙一下   我百度的那些程序不对的
搜索更多相关主题的帖子: 管理系统 百度 通讯录 电话号码 结构体 
2011-06-13 16:48
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:7 
怎么这么多管理系统啊?
2011-06-13 16:49
diy3344520
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2011-6-13
得分:7 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

typedef struct person       //通讯录结构中节点的定义
{
    char name[30];          //姓名
    char addr[30];          //地址
    char offphnum[15];      //办公电话
    char hmphnum[15];       //家庭电话
    char mbnub[15];         //移动电话
    struct person *next;
}listnode,*listlink;

struct add_person          //通讯录记录结构
{
    char name[30];
    char addr[30];
    char offphnum[15];
    char hmphnum[15];
    char mbnub[15];
};
listlink head=NULL,end=NULL;
listlink create();         //建立通讯录并将信息存入文件
listlink readfp();         //将文件的信息独处并转存如链表
void Show(listlink head);  //显示信息
listlink Delete(listlink head);//删除一条记录的信息
void Find(listlink head);  //查找记录
listlink Input(listlink head); //向通讯录加入一条记录
void Alter(listlink head); //修改一条记录的信息
void Save(listlink head);  //保存信息到文件

int main()
{
    int n;
    head=readfp();
    if(head==NULL)
        head=create(head);
    while(1)
    {
        printf("------------------------------------\n");
        printf("请选择操作:1 显示所有  2 删除记录  \n");
        printf("            3 查询记录  4 插入新记录\n");
        printf("            5 修改记录  0 保存退出  \n");
        printf("请选择操作:");
        scanf("%d",&n);
        switch(n)
        {
            case 1:Show(head);break;
            case 2:head=Delete(head);break;
            case 3:Find(head);break;
            case 4:head=Input(head);break;
            case 5:Alter(head);break;
            case 0:Save(head);return 0;
        }
    }
    return 0;
}

//----------------------------建立通讯录
listlink create()
{
    listlink s;
    printf("\n通讯录为空!\n");
    printf("请输入信息以创建通讯录(结束请在姓名处输入‘#’)\n\n");
    while(1)
    {
        s=(listlink)malloc(sizeof(listnode));
        printf("姓名:");
        scanf("%s",&s->name);
        if(strcmp(s->name,"#")==0) break;
        printf("地址:");
        scanf("%s",&s->addr);
        printf("办公电话:");
        scanf("%s",&s->offphnum);
        printf("家庭电话:");
        scanf("%s",&s->hmphnum);
        printf("移动电话:");
        scanf("%s",&s->mbnub);
        s->next=NULL;
        if(head==NULL)
            head=end=s;
        else
        {
            end->next=s;
            end=s;
        }
        printf("\n");
    }
    return (head);
}

//-----------------------------显示全部记录
void Show(listlink head)
{
    listlink p1;
    p1=head;
    printf("\n");
    if(p1==NULL)
    {
        printf("没有记录!\n");
        return ;
    }
    while(p1!=NULL)
    {
        printf("姓名:%s\n",p1->name);
        printf("地址:%s\n",p1->addr);
        printf("办公电话:%s\n",p1->offphnum);
        printf("家庭电话:%s\n",p1->hmphnum);
        printf("移动电话:%s\n",p1->mbnub);
        p1=p1->next;
        printf("\n");
    }
}
//----------------------------将文件的信息读出并转存如链表中
listlink readfp()
{
    FILE *fp;
    struct add_person persons;
    listlink s;
    fp=fopen("people.txt","r");
    if(fp==NULL)
    {
        printf("cannot open file!\n");
        return NULL;
    }
    printf("\n\n通讯录打开成功!                \n");
    fread(&persons,sizeof(struct add_person),1,fp);
    while(!feof(fp))
    {
        s=(listlink)malloc(sizeof(listnode));    //存入链表中
        strcpy(s->name,persons.name);
        strcpy(s->addr,persons.addr);
        strcpy(s->offphnum,persons.offphnum);
        strcpy(s->hmphnum,persons.hmphnum);
        strcpy(s->mbnub,persons.mbnub);
        s->next=NULL;
        if(head==NULL)                             //尾插法将其插入链表中
            head=end=s;
        else
        {
            end->next=s;
            end=s;
        }
        fread(&persons,sizeof(struct add_person),1,fp);
    }
    return head;
}

//-------------------------------------将信息保存到文件中
void Save(listlink head)
{
    FILE *fp;
    static struct add_person persons;
    listlink p;
    fp=fopen("people.txt","wb");
    p=head;
    while(p!=NULL)
    {
        strcpy(persons.name,p->name);
        strcpy(persons.addr,p->addr);
        strcpy(persons.offphnum,p->offphnum);
        strcpy(persons.hmphnum,p->hmphnum);
        strcpy(persons.mbnub,p->mbnub);
        fwrite(&persons,sizeof(struct add_person),1,fp);
        p=p->next;
    }
    fclose(fp);
}

//----------------------------------删除一条记录
listlink Delete(listlink head)
{
    listlink p1,p2;
    char Name[10],ch;
    int k=1;
    p1=p2=head;
    if(p1==NULL)
    {
        printf("没有记录!\n");
        return NULL;
    }
    while(k)
    {
        printf("请输入要删除人的姓名:");
        scanf("%s",&Name);
        while(p1!=NULL)
        {
            p2=p1;
            if(strcmp(p1->name,Name)==0)
            {
                if(p1==head)
                {
                    if(p1->next!=NULL)
                    head=p1->next;
                else
                    head=NULL;
                }
            else
                p2->next=p1->next;
            free(p1);
            printf("删除成功!\n");
            return head;
            }
        p1=p1->next;
    }
    printf("要删除的记录不存在!\n");
    printf("是否继续?(Y/N):");
        getchar();
        ch=getchar();
        if(ch=='Y'||ch=='y')
            k=1;
        else
            k=0;
    }
    return head;
}

//--------------------------------------查找指定记录
void Find(listlink head)
{
    listlink p1=head;
    char Name[10],ch;
    int k=1;
    if(p1==NULL)
    {
        printf("没有记录!\n");
        return ;
    }
    while(k)
    {
        p1=head;
        printf("请输入要查找人的姓名:");
        scanf("%s",&Name);
        while(strcmp(Name,p1->name)!=0&&p1->next!=NULL)
        {
            p1=p1->next;
        }
        if(strcmp(Name,p1->name)!=0)
            printf("要查找的记录不存在!\n");
        else
        {
            printf("姓名:%s\n",p1->name);
            printf("地址:%s\n",p1->addr);
            printf("办公电话:%s\n",p1->offphnum);
            printf("家庭电话:%s\n",p1->hmphnum);
            printf("移动电话:%s\n",p1->mbnub);
        }
        printf("是否继续?(Y/N):");
        getchar();
        ch=getchar();
        if(ch=='Y'||ch=='y')
            k=1;
        else
            k=0;
    }
}

//------------------------------------------向通讯录中插入新的记录
listlink Input(listlink head)
{
    int k=1;
    char ch;
    listlink s,p;
    p=head;
    while(k)
    {
        s=(listlink)malloc(sizeof(listnode));
        printf("姓名:");
        scanf("%s",&s->name);
        printf("地址:");
        scanf("%s",&s->addr);
        printf("办公电话:");
        scanf("%s",&s->offphnum);
        printf("家庭电话:");
        scanf("%s",&s->hmphnum);
        printf("移动电话:");
        scanf("%s",&s->mbnub);
        s->next=NULL;
        if(p==NULL)
            head=s;
        else
        {
            end->next=s;
            end=s;
        }
        printf("是否继续?(Y/N):");
        getchar();
        ch=getchar();
        if(ch=='Y'||ch=='y')
            k=1;
        else
            k=0;
    }
    return head;
}

//-----------------------------------------修改一条记录的信息
void Alter(listlink head)
{
    listlink p=head;
    char pname[10],ch;
    int k=1;
    if(p==NULL)
    {
        printf("没有记录!\n");
        return ;
    }
    while(k)
    {
        printf("请输入要修改人的姓名:");
        scanf("%s",&pname);
        while(p!=NULL)
        {
             if(strcmp(pname,p->name)==0)
             {
                 printf("请输入要修改的信息!\n");
                 printf("姓名:");
                 scanf("%s",&p->name);
                 printf("地址:");
                 scanf("%s",&p->addr);
                 printf("办公电话:");
                 scanf("%s",&p->offphnum);
                 printf("家庭电话:");
                 scanf("%s",&p->hmphnum);
                 printf("移动电话:");
                 scanf("%s",&p->mbnub);
                 break;
             }
             p=p->next;
        }
        if(p==NULL)
            printf("没有要修改人的记录!\n");
        printf("是否继续?(Y/N):");
        getchar();
        ch=getchar();
        if(ch=='Y'||ch=='y')
            k=1;
        else
            k=0;
    }
      
}
这个大概差不多了
2011-06-13 16:49
XTY
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-6
得分:0 
回复 2楼 hjywyj
初学者不会嘛
2011-06-13 17:04
XTY
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-6
得分:0 
回复 2楼 hjywyj
运行不了哦,怎么办????????
2011-06-13 17:15
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
得分:7 
回复 3楼 diy3344520
。。。。
2011-06-13 17:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342705-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.289380 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved