当前位置: 代码迷 >> C语言 >> 通讯录不能输入正确数据(找本质错误谢谢)
  详细解决方案

通讯录不能输入正确数据(找本质错误谢谢)

热度:301   发布时间:2006-08-29 01:22:37.0
通讯录不能输入正确数据(找本质错误谢谢)

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "conio.h"

#define null 0
#define LEN sizeof(Lnode)

typedef struct
{
int num;
char name[15];
int age;
char adress[10];

}Stud;

typedef struct LNode
{
Stud Stu;
struct LNode *next;
}Lnode,*LinkList;

FILE *fp;
LinkList L=null;


void Creat_Adrbok(void);
void Insert_Adrbok();
void Delete_Adrbok();
void Change_Adrbok();
void Find_Adrbok();
void Show_Adrbok();
int menu();

void Creat_Adrbok(void)
{
int i,t;
char *temp;
LinkList p,L,s;

p=L;

printf("Please input the num of the datestruct:\n");
scanf("%d",&i);
for(t=1;t<=i;t++)
{
s=(LinkList)malloc(sizeof(Lnode));

printf("请按结构顺序输入第%d个学生的数据:","t");
printf("\n请输入学生的学号");
gets(temp);
s->Stu.num=atoi(temp);
printf(" \n输入学生的姓名");
gets(s->Stu.name);
printf("\n输入学生的年龄");
gets(temp);
s->Stu.age=atoi(temp);
printf("\n输入学生的地址");
gets(s->Stu.adress);

p->next=s;
s->next=null;
p=p->next;
}
p=L;

do
{
fwrite(p,LEN,1,fp);
p=p->next;
}while(p!=null);


fclose(fp);

}


void Insert_Adrbok()
{
LinkList s,p=L;
while(!(p->next))p=p->next;
s=(LinkList)malloc(sizeof(Lnode));

printf("请输入要添加学生的信息\n");
scanf("%d%s%d%s",&s->Stu.num,s->Stu.name,&s->Stu.age,s->Stu.adress);
p->next=s;
s->next=null;
p=null;

}


void Delete_Adrbok()
{
LinkList p,q;
int i;
p=L;
printf("请输入要删除学生的学号");
scanf("%d",&i);
while(!(p->next)&&(i!=p->next->Stu.num))
p=p->next;
if(!(p->next))
{
printf("输入值错误,找不到此信息\n");
exit(-2);
}
q=p->next;
p->next=q->next;
p=null;
q=null;


}

void Change_Adrbok()
{
LinkList p=L;
int i;
printf("请输入要改的学生信息的学号\n");
scanf("%d",&i);
while(!(p)&&(i!=p->Stu.num))
p=p->next;
if(!(p))
{
printf("输入值错误,找不到此信息\n");
exit(-2);
}
printf("请输入要改的内容\n");
scanf("%d%s%d%s",&p->Stu.num,p->Stu.name,&p->Stu.age,p->Stu.adress);
p=null;
}


void Find_Adrbok()
{
LinkList p=L;
int i;
printf("请输入要查询的学生信息的学号:\n");
scanf("%d",&i);
while(!(p)&&(i!=p->Stu.num))
p=p->next;
if(!(p))
{
printf("输入值错误,找不到此信息\n");
exit(-2);
}

printf("找到本人的资料如下:\n");
printf("%5d %5s %5d %5s\n",p->Stu.num,p->Stu.name,p->Stu.age,p->Stu.adress);

}


void Show_Adrbok()
{
LinkList p=L->next;
printf("通讯录内容如下 :\n");
while(!p)
{
printf("%5d %5s %5d %5s\n",p->Stu.num,p->Stu.name,p->Stu.age,p->Stu.adress);
p=p->next;
}
p=null;
}


int menu()
{
int x;
printf("1-创建一个通讯录:\n");
printf("2-向通讯录添加内容:\n");
printf("3-删除通讯录的一项内容:\n");
printf("4-修改通讯录某项信息:\n");
printf("5-查找某个人的信息并显示:\n");
printf("6- 显示出通讯录的信息:\n");
printf("7- 退出菜单:\n");
do
{
printf("请选择一项功能:\n");
scanf("%d",&x);
}while(x<1||x>7);
return x;

}

int main()
{

int i;
LinkList p;
p=L;

if((fp=fopen("adrbok.txt","rb"))==null)
{
printf("open error!");
exit(0);
}
if((fp=fopen("adrbok.txt","wb"))==null)
{
printf("open error!");
exit(0);
}

switch((i=menu()))
{
case 1: void Creat_Adrbok(void); break;
case 2: void Insert_Adrbok();break;
case 3: void Delete_Adrbok();break;
case 4: void Change_Adrbok();break;
case 5: void Find_Adrbok(); break;
case 6: void Show_Adrbok(); break;
default:;

} 这个主函数很有问题

fp=fopen("adrbok.txt","wb");
do
{
fwrite(L,LEN,1,fp);
p=p->next;

}while(p!=null);
fclose (fp);
system("cls");

return 0;
}

[此贴子已经被作者于2006-8-29 1:26:37编辑过]

搜索更多相关的解决方案: 通讯录  数据  输入  

----------------解决方案--------------------------------------------------------
晕,你发这来了,我忘了你名字了
----------------解决方案--------------------------------------------------------

你先看看,我下午还有课,完了还要开年级大会,来不了了,晚上应该能上,有问题到时再说吧.
你的那些函数(除了第一个建立链表之外)改成从文本文件中读取数据会更好些,你要从链表中读取数据,程序又没设置循环,读取不了,所以我改成那样了.


----------------解决方案--------------------------------------------------------
case 1: void Creat_Adrbok(void); break;
case 2: void Insert_Adrbok();break;
case 3: void Delete_Adrbok();break;
case 4: void Change_Adrbok();break;
case 5: void Find_Adrbok(); break;
case 6: void Show_Adrbok(); break;
default:;

这里面的void应去掉
----------------解决方案--------------------------------------------------------
  相关解决方案