| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:请高手帮一下,看看我变得这个原程序有什么问题,为什么按5删除就显示错误
只看楼主 加入收藏
c359104119
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
请高手帮一下,看看我变得这个原程序有什么问题,为什么按5删除就显示错误
            手机名片管理系统
概述:
通过计算机对数据文件的存储和读取,实现名片的输入,输出,查找,修改,删除,分类存储等功能。最大可以管理300张名片。
要求:
       命令行界面
       有输入功能
       有删除条目功能
       有输出功能
       有显示列表功能
       有根据某一特点的查找功能
       有分类存储功能
//这样就可以了哦

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
#define null 0
#define Length sizeof(struct Person)

int Count=0;

struct Person
{
 char name[81];
 int age;
 char sex[81];
 char telephone[81];
 struct Person *next;
};

struct Person *head;
struct Person *tail;

void Welcome()
{
 printf("\t欢迎来到您的手机通讯录\n");
 printf("1.添加联系人\n");
 printf("2.显示通讯录\n");
 printf("3.查询联系人\n");
 printf("4.修改联系人\n");
 printf("5.删除联系人\n");
 printf("6.清空通讯录\n");
 printf("7.退出通讯录\n");
 printf("请选择: ");
}

void Input(struct Person *p)
{
 p->next=null;
 printf("请输入联系人的相关信息:\n");
 _flushall();
 printf("姓名:");
 gets(p->name);
 printf("年龄:");
 scanf("%d",&p->age);
 getchar();
 printf("性别:");
 gets(p->sex);
 printf("电话:");
 gets(p->telephone);
}

void Print(struct Person *p)
{
  printf("\n姓名:%s",p->name);
  printf("\n年龄:%d",p->age);
  printf("\n性别:%s",p->sex);
  printf("\n电话:%s\n",p->telephone);
}

struct Person* Find(char name[81])
{
 struct Person *p=head;
 while(p!=null&&strcmp(p->name,name)!=0)
 {
  p=p->next;
 }
 return p;
}

struct Person* FindFront(char name[81])
{
 struct Person *p=head;
 while(p!=null&&strcmp(p->next->name,name)!=0)
 {
  p=p->next;
 }
 return p;
}

void Search()
{
 char name[81];
 struct Person *p;
 printf("请输入联系人姓名:");
 getchar();
 gets(name);
 p=Find(name);
 if(p)
  Print(p);
 else
  printf("查无此人!\n");
}

void Show()
{
 struct Person *p=head;
 printf("一共有%d位联系人:\n",Count);
 while(p!=null)
 {
  Print(p);
  p=p->next;
 }
}

void PushBack()
{
 struct Person *p=(struct Person*)malloc(Length);
 Input(p);
 tail->next=p;
 tail=p;
 p->next=0;
}

void FirstPush()
{
 struct Person *p=(struct Person*)malloc(Length);
 Input(p);
 head=p;
 tail=p;
}

void Add()
{
 if(Count==0)
  FirstPush();
 else
  PushBack();
 ++Count;
}

void Modify()
{
 char name[81];
 struct Person *p;
 printf("请输入要修改的联系人姓名:");
 getchar();
 gets(name);
 p=Find(name);
 if(p)
 {
  Input(p);
  printf("恭喜你,修改成功!\n");
 }
 else
  printf("查无此人!\n");
}

void PopFront()
{
 struct Person *p=head;
 head=p->next;
 free(p);
 --Count;
}

void Delete()
{
 char name[81];
 struct Person *pfront;
 struct Person *p;
 printf("请输入要删除的联系人姓名:");
 getchar();
 gets(name);
 pfront=FindFront(name);
 p=Find(name);
 if(p)
 {
  pfront->next=p->next;
  free(p);
  --Count;
  printf("恭喜你,你已经成功删除该联系人\n");
 }
 else
  printf("查无此人!\n");
}

void Clear()
{
 while(Count)
  PopFront();
 printf("恭喜你,你已经清空通讯录\n");
}

int Select(int selection)
{
 switch(selection)
 {
  case 1:Add();return 0;
  case 2:Show();return 0;
  case 3:Search();return 0;
  case 4:Modify();return 0;
  case 5:Delete();return 0;
  case 6:Clear();return 0;
  default:printf("Bye-Bye! See you again!\n");system("pause");return 1;
 }
}

void Start()
{
 int selection;
 while(1)
 {
  system("color 07");
  Welcome();
  scanf("%d",&selection);
  if(Select(selection))
   return;
  system("pause");
  system("cls");
 }
}

int main()
{
 Start();
 return 0;
}

 0
搜索更多相关主题的帖子: 删除 
2010-05-26 14:03
c359104119
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-26
收藏
得分:0 
高手帮看看吧,急,明天就交作业!
2010-05-27 16:38
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:10 
程序代码:
void Delete()
{
    char name[81];
    struct Person *pfront;
    struct Person *p;
    printf("请输入要删除的联系人姓名:");
    getchar();
    gets(name);
    p=Find(name);
    if (p == NULL)
    {
    printf("查无此人!\n");
    }
    else if(p == head)
    {
    head = p->next;
    free(p);
         --Count;
         printf("恭喜你,你已经成功删除该联系人\n");
    }
    else
    {
    pfront = FindFront(name);
    pfront->next=p->next;
    free(p);
    --Count;
    printf("恭喜你,你已经成功删除该联系人\n");
    }
}
要考虑到删除头结点时,FindFront函数是不能用的

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2010-05-27 20:35
ym_706
该用户已被删除
收藏
得分:10 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-27 21:32
ym_706
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-27 21:41
ym_706
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-27 21:47
ym_706
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-27 21:47
快速回复:请高手帮一下,看看我变得这个原程序有什么问题,为什么按5删除就显示 ...
数据加载中...
 
   



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

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