标题:我的通讯录为什么删除不掉联系人,望大神指点
只看楼主
葡萄馅饺子
Rank: 1
来 自:南阳理工学院
等 级:新手上路
帖 子:4
专家分:5
注 册:2014-10-16
结帖率:50%
已结贴  问题点数:30 回复次数:4 
我的通讯录为什么删除不掉联系人,望大神指点
/*个人通讯录*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dataWab{
    char name[8];
    char postcode[16];
    char mobile[16];
    char address[16];
    struct dataWab *nextPtr;
};            /*自引用结构,用作通讯录的数据结构*/

typedef struct dataWab DATAWAB;
typedef DATAWAB *DATAWABPTR;
void insertWab(DATAWABPTR*,char[],char[],char[],char[]);        /*插入函数*/
void menuWab(void);                            /*菜单函数*/
void printWab(DATAWABPTR);                    /*打印所有记录函数*/
void seekWab(DATAWABPTR,char[]);            /*查找函数*/
void deleteWab(DATAWABPTR,char[]);            /*删除函数*/
void modifyWab(DATAWABPTR,char[]);            /*修改函数*/
int test(DATAWABPTR);                        /*测试函数,测试通讯录内是否有记录*/
void printone(DATAWABPTR);                    /*打印单条记录函数*/
int controlWab(void);                        /*程序分支控制函数*/

int main()
{
    DATAWABPTR startPtr=NULL;
    DATAWABPTR tempPtr;
    FILE *fileWab;

    char menu;                        /*菜单操作控制变量*/
    char insert;                    /*插入确认控制变量*/
    char modifyName[8];                /*查找时的临时姓名存储*/
    char deleteName[8];                /*删除时的临时姓名存储*/
    char tempName[8];                /*临时姓名存储*/
    char tempPostcode[16];            /*临时邮编存储*/
    char tempMobile[16];            /*临时手机存储*/
    char tempAddress[16];            /*临时地址存储*/
    char seekName[8];                /*查找时的临时姓名存储*/



    puts("\n\n\t\t欢迎使用通讯录管理系统\n");
    menuWab();
    menu=getch();

    while(menu!='6'){

        switch(menu){

            case '1':
                printWab(startPtr);
                getch();
                break;
            case '2':
                while(controlWab()){
                    printf("\n查找姓名:\n#>");
                    scanf("%s",seekName);
                    seekWab(startPtr,seekName);
                }
                break;
            case '3':
                while(controlWab()){

                    puts("\n录入个人信息\n");
                    printf("姓名:");
                    scanf("%s",tempName);
                    printf("\n邮编:");
                    scanf("%s",tempPostcode);
                    printf("\n手机:");
                    scanf("%s",tempMobile);
                    printf("\n地址:");
                    scanf("%s",tempAddress);
                    printf("录入正确请按 1 \n#>");
                    insert=getch();
                    if(insert=='1')
                        insertWab(&startPtr,tempName,tempPostcode,tempMobile,
                                    tempAddress);
                }
                break;
            case '4':
                while(controlWab()){
                    printf("\n删除姓名\n#>");
                    scanf("%s",deleteName);
                    deleteWab(startPtr,deleteName);
                }
                break;
            case '5':
                while(controlWab()){
                    printf("\n修改姓名\n#>");
                    scanf("%s",modifyName);
                    modifyWab(startPtr,modifyName);
                }
                break;
            default:
                puts("\n\n输入选项错误,请重新输入\n");
                break;
        }

        menuWab();
        menu=getch();
    }
    if((fileWab=fopen("wab.dat","wb"))==NULL)
        return 0;
    while(startPtr!=NULL){
        fwrite(startPtr,sizeof(DATAWAB),1,fileWab);
        startPtr=startPtr->nextPtr;
    }
    puts("\n\n\t\t感谢使用通讯录管理系统,再见!\n");
}


void menuWab(void)                                /*菜单函数*/
{
   
    puts("**********************通讯录管理**************************");
    puts("**********************************************************");
    puts("**\t[-1-]所有记录\t\t[-2-]查找记录\t\t**");
    puts("**\t[-3-]增加记录\t\t[-4-]删除记录\t\t**");
    puts("**\t[-5-]修改记录\t\t[-6-]退出系统\t\t**");
    puts("**********************************************************");
    puts("**********************************************************");
    puts("\n请选择 1-6");
    printf("#>");
}



void insertWab(DATAWABPTR *tempPtr,char temp2Name[],char temp2Postcode[],
               char temp2Mobile[],char temp2Address[])
/*插入函数*/

{
    DATAWABPTR newPtr;
    newPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
    strcpy(newPtr->name,temp2Name);
    strcpy(newPtr->postcode,temp2Postcode);
    strcpy(newPtr->mobile,temp2Mobile);
    strcpy(newPtr->address,temp2Address);
   
    newPtr->nextPtr=*tempPtr;
    *tempPtr=newPtr;
}



void printWab(DATAWABPTR printPtr)            /*打印函数*/
{
    if(!(test(printPtr))){
        printf("\n%8s%16s%16s%16s%16s\n","姓名","邮编","手机","住址");

        while(printPtr!=NULL){
            printf("%8s%16s%16s%16s%\n",printPtr->name,printPtr->postcode,
                    printPtr->mobile,printPtr->address);
            printPtr=printPtr->nextPtr;
        }
    }
}


void seekWab(DATAWABPTR seekPtr,char tempName[])

/*查找函数*/
{
    if(!(test(seekPtr))){
        while(seekPtr!=NULL){
                    
            if(!(strcmp(tempName,seekPtr->name))){
                printone(seekPtr);
                seekPtr=seekPtr->nextPtr;
            }
            else
                seekPtr=seekPtr->nextPtr;
        }
    }
}

            
            
void deleteWab(DATAWABPTR deletePtr,char deleteName[])
/*删除函数*/
{
    DATAWABPTR tempPtr,forePtr;
    forePtr=deletePtr;
    tempPtr=deletePtr->nextPtr;
    while(tempPtr!=NULL){
        if(!(strcmp(tempPtr->name,deleteName))){
            forePtr->nextPtr=tempPtr->nextPtr;
            free(tempPtr);
            break;
        }
        else{
            forePtr=tempPtr;
            tempPtr=tempPtr->nextPtr;
        }
    }
}



void modifyWab(DATAWABPTR modifyPtr,char modifyName[])
/*修改函数*/
{
    if(!(test(modifyPtr))){
        while(modifyPtr!=NULL){
            if(!(strcmp(modifyName,modifyPtr->name))){
                printf("请输入新姓名:");
                scanf("%s",modifyPtr->name);
                printf("\n请输入新邮编:");
                scanf("%s",modifyPtr->postcode);
                printf("\n请输入新手机:");
                scanf("%s",modifyPtr->mobile);
                printf("\n请输入新地址:");
                scanf("%s",modifyPtr->address);
               
                break;
            }
            else
                modifyPtr=modifyPtr->nextPtr;
        }
    }
}


int test(DATAWABPTR testPtr)
{
    if(testPtr==NULL)
        puts("通讯录内没有任何记录");
    else
        return 0;
    return 1;
}


void printone(DATAWABPTR printone)
{
    printf("\n%8s%16s%16s%16s%\n","姓名","邮编","手机","住址");
    printf("%8s",printone->name);
    printf("%16s",printone->postcode);
    printf("%16s",printone->mobile);
    printf("%16s",printone->address);

}


int controlWab(void)
{
    puts("继续执行请按 1");
    if(getch()=='1')
        return 1;
    return 0;
}
搜索更多相关主题的帖子: address include mobile 联系人 通讯录 
2014-12-22 19:27
pkwangxinjun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:170
注 册:2010-8-29
得分:10 
你的程序不是不能删除,是不能删除第一个添加的人!你可以添加两三个删除第二个或者第三个试试,可以的
原因: 你没有设置空的头结点导致while(tempPtr!=NULL)时直接把第一个节点pass掉了
2014-12-23 12:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:10 
同一性質的問題總見有人問來問去。用鏈表結構處理數據,無非是怎麽刪除結點的問題,不管是通訊錄聯係人,還是學生學籍管理、字典查刪改……通通是一樣的處理手法。先把鏈表刪除結點的方法做好了,就能解決一大批同類問題。也見過有人會刪鏈表結點,但不會刪具體應用數據的,那就是沒有遷移能力,平時寫慣了大雜燴代碼(不懂結構化編程分解功能函數),一到綜合題就攪成漿糊(很多人以爲不斷地刷功能單一的小題目就算學會的)。

授人以渔,不授人以鱼。
2014-12-23 13:02
pkwangxinjun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:170
注 册:2010-8-29
得分:10 
版主说的很苦,但确实是这个道理!!
2014-12-23 13:04
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
粉长粉长的代码  谁又耐心看完呢

DO IT YOURSELF !
2014-12-23 13:06



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




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

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