当前位置:首页 > 数据结构课程设计(通讯录制作)
printf(\
return NULL;
}
输出函数更简单,直接输出链表即可
if(info==NULL) printf(\当前记录为空!\
else
printf(\姓名\\t街道\\t\\t城市\\t国家\\t邮编\\t\\n\while(info)
{ display(info);/*display为输出节点函数,一些列print组成*/ if(info->next==NULL) {break; } info=info->next; }; 4.存储与导入 存储 存储时通过fopen打开文件(没有该文件时则创建)
fp=fopen(\生成文件*/
if(!fp) {printf(\然后通过fwrite将链表信息写入文件
while(info) /*把链表写入文件*/
{fwrite(info,sizeof(struct address),1,fp);
info=info->next;}
fwrite每次从info读取一个sizeof(struct address)长度的数据,
欢迎共阅
写入fp文件中。 写入完毕后即关闭文件
fclose(fp);
导入
导入时先建立链表,为节点分配内存空间 然后打开文件,将文件的内容写入内存链表中
register int t, size; struct address *info,*temp=0; char *p;
FILE *fp; /*打开文件*/ if((fp=fopen(\{ printf(\return; } printf(\调用文件*/ size=sizeof(struct address); /*为结点分配内存*/
start= (struct address *)malloc(size); if(!start) /*如果读取失败,返回*/
{ printf(\ exit(0);
} info=start; p=(char*)info;
while((*p++=getc(fp))!=EOF)
欢迎共阅
{
for(t=0;t info->next=(struct address *)malloc(size); if(!info->next) { printf(\ return; } info->prior=temp; temp=info; info=info->next; p=(char*)info; } temp->next=0; last=temp; start->prior=0; fclose(fp); 注意:每次文件存储的时候都会覆盖以前存在文件里的内容,而每次导入的时候都会改变链表的内容。 因此每次打开程序时请先导入存储在文件里的数据,或者将record.txt备 份存储起来,避免数据丢失。 四.设计总结 通过本次课程设计,我学到了很多东西。 以前从没有用过文件方面的知识,而这次设计中用到了,刚开始使用时出了很多问题,在文件存储时经常遇到意外错误而导致程序终止了。这次的实验使我对结构体,链表的认识更深刻,使用更熟练,刚开始时在链表插入时遇到好多次内存 欢迎共阅 方面的错误,还有插入操作时对指针的使用不太熟练。通过一次次的思考与实验,思路更加清晰,程序的容错能力也越来越强。这次实验让我学到很多书本上没有的 东西。 程序里多次用到for(;;)循环,还有(struct address *)malloc(sizeof(struct address))为节点分配内存空间。 在文件操作中主要涉及到的函数有: fopen(”文件名”,”使用文件方式”); fwrite(info,sizeof(struct address),1,fp) ; fclose(文件指针); 五.参考资料 C程序设计(第三版) 谭浩强 清华大学出版社 数据结构(C++版) 李根强 中国水利水电出版社 附完整源码: #include char name[10]; char street[50]; char city[10]; char state[15]; char eip[7]; struct address *next; /*后继指针*/ 欢迎共阅
共分享92篇相关文档