Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Làm sao để nhập dữ liệu từ file vào danh sách liên kêt đơn.

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    18

    Mặc định Làm sao để nhập dữ liệu từ file vào danh sách liên kêt đơn.

    Em đang làm bài tập c mà chưa hiểu làm thế nào để nhập 1 dữ liệu từ file vào danh sách liên kết đơn.
    trong đó dữ liệu là 1 cấu trúc sinh viên . các tiền bối cho e xin ý kiến và có code minh học thì tốt quá.
    ví du cấu trúc của em là
    typedef struct
    {
    char ten[30];
    char diachi[30];
    char lop[10];
    } SINHVIEN;

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    đọc từng node rồi add vào list.
    HT117-5277

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    16

    đây là 1 bài quản lý file sử dụng dslk đơn nhìn hơi dài nhưng nếu bạn xem kỹ thì nó cũng khá đơn giản,mong cái này giúp được bạn:
    Code:
    #include<conio>
    #include<stdio>
    #include<string>
    #include<ctype>
    
    struct sinhvien
    {
    char ms[5];
    char name[80];
    float diem;
    struct sinhvien *next;
    }*first=NULL,*last=NULL;
    
    FILE *fpt;
    int i=0;
    /////////////////////////////////////////
    
    void xoads()
    {
    struct sinhvien *ptr;
     while(first!=NULL)
     {
     ptr=first;
     first=first->next;
     free(ptr);
     }
    first=last=NULL;
    }
    ///////////////////////////////////////
    
    void nhapdsmoi()
    {
    struct sinhvien sv;
    char maso[5],chon;
    printf("ban co muon xoa danh sach cu va viet lai danh sach moi?(C/K):");
    do
    {
    chon=toupper(getchar());
    }while(chon!='C' && chon!='K');
    
    flushall();
    if(chon=='C')
    {
    fpt=fopen("sinhvien.dat","wb");
    do
    {
    printf("nhap ma so:");
    gets(maso);
    if(strlen(maso))
     {
    
      strcpy(sv.ms,maso);
      printf("ten:");gets(sv.name);
      printf("diem:");scanf("%f",&sv.diem);
      flushall();
      printf("-----------------------------------\n");
      fwrite(&sv,sizeof(struct sinhvien),1,fpt);
     ++i;
     }
    }while(strlen(maso));
    fclose(fpt);
    }
    
    }
    ///////////////////////////////////////
    
    void themds()
    {
    struct sinhvien sv;
    char maso[5];
    fpt=fopen("sinhvien.dat","a+b");
    do
    {
    printf("nhap ma so:");
    gets(maso);
    if(strlen(maso))
     {
    
      strcpy(sv.ms,maso);
      printf("ten:");gets(sv.name);
      printf("diem:");scanf("%f",&sv.diem);
      flushall();
      printf("-----------------------------------\n");
      fwrite(&sv,sizeof(struct sinhvien),1,fpt);
     ++i;
     }
    }while(strlen(maso));
    fclose(fpt);
    }
    ///////////////////////////////////////
    
    void xuatfile()
    {
    struct sinhvien *ptr;
    
    fpt=fopen("sinhvien.dat","rb");
    do
    {
    ptr=(struct sinhvien*)calloc(1,sizeof(struct sinhvien));
    fread(ptr,sizeof(struct sinhvien),1,fpt);
    ptr->next=NULL;
    if(first==NULL) first=last=ptr;
    else
      {
      last->next=ptr;
      last=last->next;
      }
    }while(!feof(fpt));
    fclose(fpt);
    }
    
    ////////////////////////////////////////////
    
    void display()
    {
    printf("            DANH SACH SINH VIEN           \n");
    printf("|-----------------------------------------|\n");
    printf("| MA SO |      TEN      | DIEM |  KET QUA |\n");
    printf("|-----------------------------------------|\n");
    
    }
    ///////////////////////////////////////////
    
    void xuatds()
    {
    struct sinhvien *ptr;
    int j;
    ptr=first;
    xuatfile();
    display();
    ptr=first;
    while(ptr!=NULL && strlen(ptr->ms)!=NULL)
    {
    if(ptr->diem>=5)
    {
    printf("|%7s|%15s|%6.1f|   PASS   |\n",ptr->ms,ptr->name,ptr->diem);
    printf("|-----------------------------------------|\n");
    }
    else
    {
    printf("|%7s|%15s|%6.1f|   FAIL   |\n",ptr->ms,ptr->name,ptr->diem);
    printf("|-----------------------------------------|\n");
    }
    ptr=ptr->next;
    }
    
    //printf("\n");
    xoads();
    getch();
    }
    
    ///////////////////////////////////////////
    
    void xoanode()
    {
    struct sinhvien *ptr;
    char maso[5],chon;
    int count=0,j=0;
    struct sinhvien *q=NULL;
    ptr=first;
    xuatfile();
    ptr=first;
    printf("nhap ma so sv can xoa:");
    gets(maso);
    if(strlen(maso))
     while(ptr!=NULL)
     if(strcmp(ptr->ms,maso)==0)
      {
      printf("tim thay node can xoa.ban co muon xoa ko?(C/K):\n");
       do
       {
        chon=toupper(getchar());
       }while(chon!='C' && chon!='K');
       flushall();
       if(chon=='C')
       {
        if(q==NULL)
        {
         q=first;
         first=first->next;
        }
        q->next=ptr->next;
        free(ptr);
        count=1;
        --i;
        break;
       }
      }
     else
     {
      q=ptr;
      ptr=ptr->next;}
    
    
    if(count==1)
    {
    printf("du lieu sv ma so %s da duoc xoa thanh cong!!!\n",maso);
    fpt=fopen("sinhvien.dat","wb");
    ptr=first;
    while(ptr!=NULL)
    {
    fwrite(ptr,sizeof(struct sinhvien),1,fpt);
    ptr=ptr->next;
    }
    
    fclose(fpt);
    xuatds();
    }
    if(count==0)
    printf("du lieu sv ma so %s xoa that bai!!!\n",maso);
    
    xoads();
    }
    //////////////////////////////////////////////
    
    void timkiem()
    {
    struct sinhvien *ptr;
    char maso[5];
    int n=0;
    ptr=first;
    xuatfile();
    ptr=first;
    printf("nhap ma so hoc sinh can tim:");
    gets(maso);
    if(strlen(maso))
    while(ptr!=NULL)
      if(strcmp(ptr->ms,maso)==0)
      {
         display();
          if(ptr->diem>=5)
          {
           printf("|%7s|%15s|%6.1f|   PASS   |\n",ptr->ms,ptr->name,ptr->diem);
           printf("|-----------------------------------------|\n");
          }
           else
           {
            printf("|%7s|%15s|%6.1f|   FAIL   |\n",ptr->ms,ptr->name,ptr->diem);
            printf("|-----------------------------------------|\n");
           }
          n=1;
          break;
      }
    else
    ptr=ptr->next;
    
    if(!n)
    printf("khong tim thay du lieu hoc sinh can tim!!!\n");
    getch();
    xoads();
    }
    
    void menu()
    {
    printf("************************\n");
    printf("* 1.tao danh sach moi  *\n");
    printf("* 2.them danh sach     *\n");
    printf("* 3.hien danh sach     *\n");
    printf("* 4.tim kiem theo ma so*\n");
    printf("* 5.xoa dl 1 sinh vien *\n");
    printf("* 0.thoat              *\n");
    printf("************************\n");
    printf("ban chon? :");
    }
    main()
    {
    
    int chon;
    //xuatds();
    //xoanode();
    
    
    do
    {
    clrscr();
    menu();
    do
     {
     scanf("%d",&chon);
     flushall();
     }while(chon<0 && chon>5);
    switch(chon)
     {
      case 1:nhapdsmoi();break;
      case 2:themds();break;
      case 3:xuatds();break;
      case 4:timkiem();break;
      case 5:xoanode();break;
     }
    
    }while(chon!=0);
    
    xoads();
    getch();
    }

Các đề tài tương tự

  1. Bài tập C++ [giúp]nhập và xuất dữ liệu file txt với danh sách liên kết đơn
    Gửi bởi terink79 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 02-06-2013, 03:53 AM
  2. Cấu trúc dữ liệu sử dụng danh sach liên kêt. in ra kết quả sai.
    Gửi bởi vanminhcit trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 27-10-2012, 10:40 PM
  3. Mã nguồn C Lỗi Quản lý hợp đồng danh sách liên kêt (lỗi không tính tổng được)
    Gửi bởi trung888 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 31-05-2012, 08:45 AM
  4. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-04-2011, 11:30 AM
  5. Cộng Hai Số Rất Lớn Băng Danh Sách Liên Kêt
    Gửi bởi phuong_123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 07-06-2010, 10:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn