C语言怎么从文件中将信息导入链表中

编写一个通讯录管理系统。addressbook.txt中按姓名顺序存储联系人信息,联系人信息包括姓名、单位、住宅电话、手机、电子邮件、通讯地址。本系统应完成以下几方面的功能:
(1)导入信息:从addressbook.txt中的联系人信息导入链表中。
(2)输入新联系人:从键盘输入新的联系人,并将它插入到链表的相应位置。
(3)显示信息:显示所有通讯录里的条目。
(4)查询:在文件中根据姓名查询出联系人的信息
(5)存盘:将链表中的信息写入addressbook.txt中。

这个实现起来挺简单的,就是写起来麻烦点,不是一点代码能写完的!
1,建立一个链表,链表的节点struct定义为联系人信息的格式;
2,读取文件,把内容存入链表;
3,查询就根据姓名关键字遍历链表就行了;
4,把内容存入文件;

首先建立链表,以及插入节点,查询链表函数写出来;
文件的读取和存入到不是很麻烦;
----------------------------下面是简单的实现,可以输入,存入文件,从文件读取,打印,如果还想要实现其他的稍修改一下就行了------

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

#define MAX 80

struct stu{
int id;
char name[MAX];
struct stu* next;
};

typedef struct stu STU;
typedef STU* STUPTR;

STUPTR insert(STUPTR head, int id, char* name);
void print_st(STUPTR head);
void save_to_file(FILE* fp, STUPTR head);
FILE* crt_file( void );
STUPTR read_to_link(STUPTR head);

int main( void )
{

int choice;
int stu_id;
char stu_name[MAX];

STUPTR head;

FILE* fp;

clrscr();
head = NULL;

clrscr();

printf( "please enter the choice!\n" );
scanf( "%d", &choice );

while( choice != 9 ){

switch(choice){
case 1: printf("enter the insert ----id---name!\n");
scanf( "%d%s", &stu_id ,stu_name);
head = insert(head,stu_id,stu_name);
break;

case 2:print_st(head);
break;

case 3:puts("save the info to file e:\stu_info.txt!\n");
fp = crt_file();
save_to_file( fp, head);
puts( "save the data sucessful!\n");
fclose(fp);
break;

case 4:puts("read the file to link!\n");
head = NULL;
head = read_to_link(head);
puts("read the file successful!\n");
break;

}

printf( "please enter the choice!\n");
scanf( "%d", &choice );
}

}

STUPTR insert(STUPTR head, int id, char* name)
{
STUPTR new, cur;

cur = head;

new = malloc( sizeof( STU) );

new->id = id;
strcpy(new->name, name);
new->next = NULL;

if(cur == NULL)
head = new;
else{
while(cur->next != NULL){
cur = cur->next;
}
cur->next = new;
}

return head;
}

void print_st(STUPTR head)
{
STUPTR cur=head;
int i;
i=1;

if(cur == NULL){
printf( "has no student info!\n" );
}
else while(cur != NULL){
printf( "%d:------%d---%s\n", i,cur->id,cur->name);
i++;
cur = cur->next;

}

}

void save_to_file(FILE* fp, STUPTR head)
{
int i;
STUPTR cur;

cur = head;

while(cur != NULL){
fprintf(fp, "%d %s\n", cur->id,cur->name);
cur = cur->next;
}
}

FILE* crt_file(void)
{
FILE* fp;
fp = fopen( "e:\stu_info.txt", "w" ); /*w is right or not*/
if(fp == NULL)
puts("shit!!!!!!!!!!");
return fp;
}

STUPTR read_to_link( STUPTR head)
{

int id;
char name[MAX];

FILE* fp;
fp = fopen("e:\stu_info.txt", "r");

while( !feof(fp) ){
fscanf(fp, "%d%s", &id, name );
head = insert(head, id, name);
}

return head;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-29

一、操作步骤:
1,建立一个链表,链表的节点struct定义为联系人信息的格式;
2,读取文件,把内容存入链表;
3,查询就根据姓名关键字遍历链表就行了;
4,把内容存入文件;
二、例程:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
struct stu{
  int id;
  char name[MAX];
  struct stu* next;
};
typedef struct stu STU;
typedef STU*       STUPTR;
STUPTR insert(STUPTR head, int id, char* name);
void print_st(STUPTR head);
void save_to_file(FILE* fp, STUPTR head);
FILE* crt_file( void );
STUPTR  read_to_link(STUPTR head);
int main( void )
{
  
  int choice;
  int stu_id;
  char stu_name[MAX];
  STUPTR head;
  FILE* fp;
  clrscr();
  head = NULL;
clrscr();
  printf( "please enter the choice!\n" );
  scanf( "%d", &choice );
  while( choice != 9 ){
      switch(choice){
         case 1: printf("enter the insert ----id---name!\n");
                 scanf( "%d%s", &stu_id ,stu_name);
                 head = insert(head,stu_id,stu_name);
                 break;
         case 2:print_st(head);
                break;
         case 3:puts("save the info to file e:\stu_info.txt!\n");
                fp = crt_file();
                save_to_file( fp,  head);
                puts( "save the data sucessful!\n");
                fclose(fp);
                break;
         case 4:puts("read the file to link!\n");
                head = NULL;
                head = read_to_link(head);
                puts("read the file successful!\n");
                break;
                
      }
      printf( "please enter the choice!\n");
      scanf( "%d", &choice );
  }
}
STUPTR  insert(STUPTR head, int id, char* name)
{
   STUPTR new, cur;
   cur = head;
   new = malloc( sizeof( STU) );
   new->id = id;
   strcpy(new->name, name);
   new->next = NULL;
   if(cur == NULL)
    head = new;
    else{
          while(cur->next != NULL){
              cur = cur->next;
          }
          cur->next = new;
    }
    return head;
}
void print_st(STUPTR head)
{
    STUPTR cur=head;
    int i;
    i=1;
    
    if(cur == NULL){
      printf( "has no student info!\n" );
    }
    else while(cur != NULL){
        printf( "%d:------%d---%s\n", i,cur->id,cur->name);
        i++;
        cur = cur->next;
    }
}
void save_to_file(FILE* fp, STUPTR head)
{
     int i;
     STUPTR cur;
     cur = head;
     while(cur != NULL){
       fprintf(fp, "%d     %s\n", cur->id,cur->name);
       cur = cur->next;
     }
}
FILE* crt_file(void)
{
  FILE* fp;
  fp = fopen( "e:\stu_info.txt", "w" );   /*w is right or not*/
  if(fp == NULL)
    puts("shit!!!!!!!!!!");
  return fp;
}
STUPTR read_to_link( STUPTR head)
{
      
      int id;
      char name[MAX];
      FILE* fp;
      fp = fopen("e:\stu_info.txt", "r");
while( !feof(fp) ){
      fscanf(fp, "%d%s", &id, name );
      head = insert(head, id, name);
      }
      
      return head;
      
}

C语言怎么从文件中将信息导入链表中
1,建立一个链表,链表的节点struct定义为联系人信息的格式;2,读取文件,把内容存入链表;3,查询就根据姓名关键字遍历链表就行了;4,把内容存入文件;首先建立链表,以及插入节点,查询链表函数写出来;文件的读取和存入到不是很麻烦;---下面是简单的实现,可以输入,存入文件,从文件读取,打印,如...

c语言如何从文件读入,并存放在链表中
FILE * fp;\/\/读取文件的文件流 struct filetext * p =head;\/\/定义一个p,用来寻找链表中最后一个节点 if((fp=(fopen(filename,"r+")))==NULL){\/\/如果打开文件失败,返回head,并提示 printf("open file failure");return head; } \/\/然后开始读取文件,放到new的buf中 if(fread(new->bu...

C语言,calloc用法,用他实现把结构体数组的数据拷贝到链表,不能用mallloc...
原型:void *calloc(unsigned n,unsigned size);我写了个简单的插入链表,你参考吧 include <stdio.h>#include <stdlib.h>typedef struct student_list{ char name[6]; struct student_list *next;}SL;void insertSL(SL *slHead);\/\/添加结构数据到链表 参数:头节点指针int main(void){...

编写c语言程序,从文件中读取数据顺序存储到单链表l中,文件中数据之间用...
\/\/输出链表到屏幕和文件output.txt void outlink(node *head){ node *p=head->next;FILE *w =fopen("output.txt","w");if(w==NULL){ printf("打开文件失败!");return;} while(p){ \/\/输出链表节点数据到屏幕 printf("%d ",p->data);\/\/输出链表节点数据到文件output.txt fprintf(w,"%...

C语言中将键盘输入的信息存入链表
create(head);\/\/建立线性链表 display(head);\/\/显示线性链表 Deleteline(head);\/\/删除某一列 display(head);\/\/显示 Change(head);\/\/改变元素 system("PAUSE");return 0;} void create(LNode*head){ LNode*p,*rear=head;\/\/空的线性链表头和尾 printf("输入 '0'或'1'\\n如果您输入 '0',...

用C语言将文本文件中的数据(一个个结构体类型的数据)读到链表中去,代码...
这是我最开始学习链表的时候写的一个很小的程序,好像不是很完善,但是大致应该没有问题,你可以参照的看看。太晚了,实在是不想写了。include <stdio.h>#include <io.h>#include <conio.h>#include <stdlib.h>#include <string.h>#define MAX 200struct student{char no[10]; \/\/ 学号char...

c语言从文件中读入多行数据(每行数据有几种)到链表中
当把链表已经确定的时候,就可以依次存入文件。和平时链表的遍历一样,每读取一个节点内容就进行一次存入

c语言从文件中读入多行数据(每行数据有几种)到链表中
fscanf语句中,字符串name、major、phone_no、e_mail,前面多了&,读入有误。

C语言从控制台输入一个字符串存入数组,回车键结束,把数组转存到链表里面...
include <stdio.h>#include <string.h>#include <stdlib.h>#define LEN sizeof (struct array)struct array{char ch;struct array *next;};int main(){struct array *deletea (struct array *h, char ch, int n); \/\/删除字符'a'void displist (struct array *head); \/\/显示链表中...

c语言,将文件的数据用链表处理需要将文件的数据全部先导入链表吗?
要删除和修改首先你要找到要删除和修改的位置,所以一般会把文件的内容读取到结构体数组或者链表中来,在载入的文件内容中查找你要删除的内容,然后执行删除,最后重新写入文件,c语言w方式打开文件会直接清空文件内容,然后写入;说一哈这种管理系统的程序设计题型:一般都是用结构体数组或者链表来存储信息,...

相似回答