| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 446 人关注过本帖
标题:菜鸟又有问题了
只看楼主 加入收藏
fannie5
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-10-21
收藏
 问题点数:0 回复次数:0 
菜鸟又有问题了
我课程实践在做通讯录管理,老师要求能建立,增删,修改并能按多种方式查询,但现在程序运行中修改和删除总有错,不知道为什么,忘各位大侠帮我这个菜鸟查一下错,不胜感激
以下是程序源代码:
     #include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Telephone
{
char name[20];
char addrass[20];
char zip[20];
char telephone[20];
struct Telephone *next;
};
typedef struct Telephone TEL;
TEL *head=NULL;
void showmenu(); //菜单
void Appenditem(); //添加条目
void print(); //输出条目
void Finditem1(); //查找条目( 按姓名 )
void Finditem2(); //查找条目( 按号码 )
void Finditem3(); //查找条目( 按邮编 )
void Finditem4(); //查找条目( 按地址 )
void Reviseitem(); //修改条目
void Removeitem(); //删除信息
void Saveandfree(); //保存到文件
void Open(); //打开文件
void main()
{
char ch;
Open(); //打开文件
while(1)
{
showmenu(); //显示菜单
scanf(" %c",&ch);
switch(ch)
{
case '1':Appenditem(); //添加条目
break;
case '2':print(); //输出条目
break;
case '3':Finditem1(); //查找条目1.按姓名
break;
case '4':Finditem2(); //查找条目2.按号码
break;
case '5':Finditem3(); //查找条目3.按邮编
break;
case '6':Finditem4(); //查找条目4.按地址
break;
case '7':Reviseitem(); //修改条目
break;
case '8': Removeitem(); //删除信息
print(); //输出删除后的结果
break;
case '0':Saveandfree(); //保存并释放内存
exit(0); //退出
break;
default:
printf("选择错误!");
break;
}
}
}

//菜单
void showmenu()
{
printf("\n*****************通讯录系统*****************\n");
printf("\t1.添加条目。\n");
printf("\t2.输出输出\n");
printf("\t3.按姓名查询\n");
printf("\t4.按号码查询\n");
printf("\t5.按邮编查询\n");
printf("\t6.按地址查询\n");
printf("\t7.修改条目\n");
printf("\t8.删除条目\n");
printf("\t0.保存并退出!\n");
printf("*************************************************\n");
printf("\t请选择:\n");
}

//添加条目
void Appenditem()
{
TEL *p1=NULL,*p2=NULL;
p1=(TEL *)malloc(sizeof(TEL)); //申请结点
printf("输入姓名:\n"); //添加信息
scanf("%s",p1->name);
printf("输入地址:\n");
scanf("%s",p1->addrass);
printf("输入邮编:\n");
scanf("%s",p1->zip);
printf("输入电话:\n");
scanf("%s",p1->telephone);
p1->next=NULL; //保存到链表

if(head==NULL)
{
head=(TEL *)malloc(sizeof(TEL)); //申请空间
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾
p2->next=p1;
}
printf("此信息已添加!");
}

//输出学生信息
void print()
{
TEL *p=NULL;
if(head==NULL)
{
printf("此通讯录中无记录,请输入记录后在使用本功能!\n");
return;
}
printf("**************通讯录系统*********************\n"); //输出信息
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}

//查找信息1.按姓名
void Finditem1()
{
TEL *p;
char findname[20];
printf("请输入要查找的姓名:\n");
scanf("%s",findname);
printf("**************通讯录系统*********************\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}
}

//查找信息2.按号码
void Finditem2()
{
TEL *p;
char findtelephone[20];
printf("请输入要查找的号码:\n");
scanf("%s",findtelephone);
printf("**************通讯录系统*********************\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->telephone,findtelephone)==0)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}
}

//查找信息3.按邮编
void Finditem3()
{
TEL *p;
char findzip[20];
printf("请输入要查找的邮编:\n");
scanf("%s",findzip);
printf("**************通讯录系统*********************\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->zip,findzip)==0)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}
}

//查找信息4.按地址
void Finditem4()
{
TEL *p;
char findaddrass[20];
printf("请输入要查找的地址:\n");
scanf("%s",findaddrass);
printf("**************通讯录系统*********************\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->addrass,findaddrass)==0)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}
}

//修改条目
void Reviseitem()

{
char findname[20]; //先查找 后修改
int k;
TEL *p = head->next, *pr = head->next;
printf("请输入要修改的姓名:\n");
scanf(" %s",findname);
if (head->next == NULL)
{
printf("无此节点!\n");
return;
}
while ((k=strcmp(p->name,findname)!=0 )&& p->next != NULL)
{
pr =p;
p =p->next;
}
if (k==0) //输出删除信息
{
printf("%s\t%s\t%s\t%s\n",p->next->name,p->next->addrass,\
p->next->zip,p->next->telephone);
if (p == head->next)
head->next = p->next;
else
pr->next = p->next;
free(p);
}
TEL *p1=NULL,*p2=NULL;
p1=(TEL *)malloc(sizeof(TEL)); //申请结点
printf("输入姓名:\n"); //添加信息
scanf("%s",p1->name);
printf("输入地址:\n");
scanf("%s",p1->addrass);
printf("输入邮编:\n");
scanf("%s",p1->zip);
printf("输入电话:\n");
scanf("%s",p1->telephone);
p1->next=NULL; //保存到链表

if(head==NULL)
{
head=(TEL *)malloc(sizeof(TEL)); //申请空间
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾
p2->next=p1;
}
printf("此信息已修改!");
}

//删除信息
void Removeitem()
{
char findname[20]; //先查找 后删除
TEL *p = head->next, *pr = head->next;
printf("请输入要删除的姓名:\n");
scanf(" %s",findname);
if (head->next == NULL)
{
printf("无此节点!\n");
return;
}
while ((strcmp(p->name,findname)!=0 )&& p->next != NULL)
{
pr =p;
p =p->next;
}
if (strcmp(findname, p->name)==0) //输出删除信息
{
printf("%s\t%s\t%s\t%s\n",p->next->name,p->next->addrass,\
p->next->zip,p->next->telephone);
if (p == head->next)
head->next = p->next;
else
pr->next = p->next;
free(p);
}
printf("此信息已删除!");
}
//保存链表信息到文件并释放内存空间
void Saveandfree()
{
TEL *p=NULL;
FILE *fp;
char *Book="books.txt";
if(head==NULL)
{
printf("\n记录为空!\n");
return;
}
else
p=head->next;
if((fp=fopen(Book,"wb+"))==NULL)
{
printf("\n打不开文件!\n");
return;
}
while(p!=NULL) //保存信息
{
fwrite(p,sizeof(TEL),1,fp);
p=p->next;
}
printf("保存完毕!");
fclose(fp);
//*****释放链表空间*****
for(;head->next!=NULL;)
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
//文件信息输出到链表
void Open()
{
FILE *fp;
TEL *p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL)
{
printf("\n****************这是一个新的通讯录管理系统******************\n");
return;
}
head=(TEL *)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(! feof(fp)) //循环读取
{
p1=(TEL *)malloc(sizeof(TEL));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp); //关闭文件
}
搜索更多相关主题的帖子: void head telephone 不胜感激 include 
2008-10-22 18:46
快速回复:菜鸟又有问题了
数据加载中...
 
   



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

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