关于c++将文件内容读取到链表中

问题描述

关于c++将文件内容读取到链表中

解决方案

 #include<string>
#include<iostream>
#include<fstream>
#include <stdlib.h>
using namespace std;

class Person
{
protected:
    string name;
    int age;
    string sex;
};

class Doctor:public Person
{
public:
    void show();
    void del();
    void add();
    void refer();
    void save();
    void open();
    Doctor *get();
    Doctor *find_d(int card);
protected:
    string spe;
    double fee;
    int son_d;
//private:
public:
    Doctor *next,*head,*prece;
};

void Doctor::open()
{
    FILE *fp;
    Doctor *p1,*p2;
    head=new Doctor;
    head->prece=NULL;
    p1=head;
    ifstream infile("file.txt",ios::in|ios::binary);
    p2=new Doctor;
    while(infile.read((char*)p2,sizeof(Doctor)))
    {
        cout<<p2->age;
        p1->next=p2;
        p2->prece=p1;
        p1=p2;
        cout<<"aaaa"<<endl;
        p2=new Doctor;
    }
    p1->next = NULL;
    infile.close();
}
void Doctor::save()
{
    Doctor *p;
    p=head->next;
    fstream outfile("file.txt",ios::out|ios::binary);
    if(!outfile)
    {
        cout<<"打开文件失败!"<<endl;
    }
    else
    {
        while(p)
        {
            outfile.write((char *)p,sizeof(Doctor));
            p=p->next;
            cout << "haha" << endl;
        }
    }
    outfile.close();
}
Doctor* Doctor::find_d(int card)
{
    int card2;
    Doctor *p;
    p=head->next;
    while(p)
    {
        card2=p->son_d;
        if(card2==card)
        {
            return p;
        }
        else
        {
            p=p->next;
        }
        if(!p)
        {
            return p=NULL;
        }
    }

}
Doctor* Doctor::get()
{
    Doctor *p=new Doctor;

    cout<<" 姓名:";
    cin>>p->name;
    cout<<" 医生编号:";
    cin>>p->son_d;
    cout<<" 年龄:";
    cin>>p->age;
    cout<<" 性别:";
    cin>>p->sex;
    cout<<" 专业:";
    cin>>p->spe;
    cout<<" 诊费:";
    cin>>p->fee;

    return p;
}

void Doctor::add()
{
    Doctor *p1,*p2;
    char y;
    p1=head;
    cout<<"请输入要添加的医生信息:"<<endl;
    p2=get();

    if(p1->next!=NULL)
        p1->next->prece=p2;
    if(p1->next==NULL)
        p2->next=NULL;
    p2->prece=p1;
    p2->next=p1->next;
    p1->next=p2;

    cout<<"医生信息添加成功!"<<endl;
    cout<<"是否继续添加医生信息?(y/n)"<<endl;
    cin>>y;

    if(y=='y'||y=='Y')
    {
        add();
    }
    else
    {
        return;
    }
}

void Doctor::del()
{
    int card;
    Doctor *p;
    cout<<"请输入要删除医生信息的医生编号:";
    cin>>card;
    p=find_d(card);

    if(p==NULL)
    {
        cout<<"对不起!查无此人。"<<endl;
    }
    else
    {
        p->prece->next=p->next;
        if(p->next!=NULL)
            p->next->prece=p->prece;
        delete p;
        cout<<"删除成功!"<<endl;
    }
}

void Doctor::refer()
{
    Doctor *p;
    cout<<"输入要查询的医生信息的医生编号:";
    int card;
    cin>>card;
    p=find_d(card);
    if(p==NULL)
    {
        cout<<"对不起!查无此人。"<<endl;
    }
    else
    {
        cout<<"姓名:";
        cout<<p->name;
        cout<<"    医生编号:";
        cout<<p->son_d;
        cout<<"    年龄:";
        cout<<p->age;
        cout<<"    性别:";
        cout<<p->sex;
        cout<<"    专业:";
        cout<<p->spe;
        cout<<"    诊费:";
        cout<<p->fee;
    }
}

void Doctor::show()
{
    Doctor *p;

    p=head->next;

    while(p)
    {
        cout<<" 姓名:";
        cout<<p->name;
        cout<<"    医生编号:";
        cout<<p->son_d;
        cout<<"    年龄:";
        cout<<p->age;
        cout<<"    性别:";
        cout<<p->sex;
        cout<<"    专业:";
        cout<<p->spe;
        cout<<"    诊费:";
        cout<<p->fee;

        p=p->next;
        cout<<endl;
    }
}

int main()
{
    Doctor d;
    d.head = new Doctor;
    d.head->prece = NULL;
    d.head->next = NULL;
    //d.add();
    d.open();
    d.show();
    //d.save();

    return 0;
}

解决方案二:

为什么链表读取完文件的内容后却输出不出来???

解决方案三:

而且我在读取中加入标示,标示读取了三次,说明读取成功了,但是为什么就是输出不出来?

解决方案四:

解决方案五:

你调试一下,在输出是看一下变量。

解决方案六:

不知道,为什么链表读取完文件的内容后却输出不出来???

解决方案七:

应该是你的read有问题
建议贴一下Doctor这个类
目测你Doctor类的name成员应该是个指针吧?不是一个字符数组吧,没有new过空间,直接read进去了,这样之后访问的时候肯定因为之前的越界写入而崩溃

解决方案八:

解决方案九:


 #include<string>
#include<iostream>
#include<fstream>
#include <stdlib.h>
using namespace std;

class Person
{
protected:
    string name;
    int age;
    string sex;
};

class Doctor:public Person
{
public:
    void show();
    void del();
    void add();
    void refer();
    void save();
    void open();
    Doctor *get();
    Doctor *find_d(int card);
protected:
    string spe;
    double fee;
    int son_d;
private:
    Doctor *next,*head,*prece;
};

void Doctor::open()
{
    FILE *fp;
    Doctor *p1,*p2;
    p1=head;
    ifstream infile("file.txt",ios::in|ios::binary);
    while(!infile.eof())
    {
        p2=new Doctor;
        infile.read((char*)p2,sizeof(Doctor));
        cout<<p2->age;
        p1->next=p2;
        p2->prece=p1;
        p1=p2;
        cout<<"aaaa"<<endl;
    }
    infile.close();
}
void Doctor::save()
{
    Doctor *p;
    p=head->next;
    fstream outfile("file.txt",ios::out|ios::binary);
    if(!outfile)
    {
        cout<<"打开文件失败!"<<endl;
    }
    else
    {
        while(p)
        {
            outfile.write((char *)p,sizeof(Doctor));
            p=p->next;
        }
    }
    outfile.close();
}
Doctor* Doctor::find_d(int card)
{
    int card2;
    Doctor *p;
    p=head->next;
    while(p)
    {
        card2=p->son_d;
        if(card2==card)
        {
            return p;
        }
        else
        {
            p=p->next;
        }
        if(!p)
        {
            return p=NULL;
        }
    }

}
Doctor* Doctor::get()
{
    Doctor *p=new Doctor;

    cout<<" 姓名:";
    cin>>p->name;
    cout<<" 医生编号:";
    cin>>p->son_d;
    cout<<" 年龄:";
    cin>>p->age;
    cout<<" 性别:";
    cin>>p->sex;
    cout<<" 专业:";
    cin>>p->spe;
    cout<<" 诊费:";
    cin>>p->fee;

    return p;
}

void Doctor::add()
{
    Doctor *p1,*p2;
    char y;
    p1=head;
    cout<<"请输入要添加的医生信息:"<<endl;
    p2=get();

    if(p1->next!=NULL)
        p1->next->prece=p2;
    if(p1->next==NULL)
        p2->next=NULL;
    p2->prece=p1;
    p2->next=p1->next;
    p1->next=p2;

    cout<<"医生信息添加成功!"<<endl;
    cout<<"是否继续添加医生信息?(y/n)"<<endl;
    cin>>y;

    if(y=='y'||y=='Y')
    {
        add();
    }
    else
    {
        return;
    }
}

void Doctor::del()
{
    int card;
    Doctor *p;
    cout<<"请输入要删除医生信息的医生编号:";
    cin>>card;
    p=find_d(card);

    if(p==NULL)
    {
        cout<<"对不起!查无此人。"<<endl;
    }
    else
    {
        p->prece->next=p->next;
        if(p->next!=NULL)
            p->next->prece=p->prece;
        delete p;
        cout<<"删除成功!"<<endl;
    }
}

void Doctor::refer()
{
    Doctor *p;
    cout<<"输入要查询的医生信息的医生编号:";
    int card;
    cin>>card;
    p=find_d(card);
    if(p==NULL)
    {
        cout<<"对不起!查无此人。"<<endl;
    }
    else
    {
        cout<<"姓名:";
        cout<<p->name;
        cout<<"    医生编号:";
        cout<<p->son_d;
        cout<<"    年龄:";
        cout<<p->age;
        cout<<"    性别:";
        cout<<p->sex;
        cout<<"    专业:";
        cout<<p->spe;
        cout<<"    诊费:";
        cout<<p->fee;
    }
}

void Doctor::show()
{
    Doctor *p;

    p=head->next;

    while(p)
    {
        cout<<" 姓名:";
        cout<<p->name;
        cout<<"    医生编号:";
        cout<<p->son_d;
        cout<<"    年龄:";
        cout<<p->age;
        cout<<"    性别:";
        cout<<p->sex;
        cout<<"    专业:";
        cout<<p->spe;
        cout<<"    诊费:";
        cout<<p->fee;

        p=p->next;
        cout<<endl;
    }
}

int main()
{
    Doctor d;
    //d.add();
    d.open();
    d.show();
    //d.save();

    return 0;
}

解决方案十:

时间: 2025-01-25 19:02:35

关于c++将文件内容读取到链表中的相关文章

ASP.NET C# 选择Excel文件并读取到Gridview中,但是出错!

问题描述 ASP.NETC#选择Excel文件并读取到Gridview中,但是出错!代码如下:protectedvoidButton1_Click(objectsender,EventArgse){if(FileUpload1.HasFile==false){Response.Write("<script>alert('请您选择Excel文件')</script>");return;}stringIsXls=System.IO.Path.GetExtension

pkg文件内容提取。应用中为图片。

问题描述 pkg文件内容提取.应用中为图片. z 在如图程序中,我想把程序中的书法图片提取出来.找到了已下载在程序文件夹下的文件. 提取出来是pkg的文件格式. 请问 如何转换成普通的图片格式.(PS 程序中图片放大不失真) 解决方案 参考一下这个 http://www.zou114.com/wenjian/show.asp?mc=pkg

编程-ArcEngine通过文件路径读取Arcsde数据库中的文件

问题描述 ArcEngine通过文件路径读取Arcsde数据库中的文件 各位大神,本人编程小白一个(貌似废话),最近在老师让我写一个用C#调用GP工具的功能,这个GP工具的参数是要从另外的一台服务器上读取,老师提示我用连接ArcSDE数据库的方式读取,而且最后要在一个Combox中显示文件路径,界面类似于这样的结构,请大神们指点!!! 解决方案 http://blog.sina.com.cn/s/blog_84f7fbbb0101972x.html

Java读取文件内容的小例子

Java 提供 BufferedReader 类用来从流中读取字符串.FileReader 类用来读取文件.我们用这两个类来读取文件中的字符串. 下面是一个例子: import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class ReadFile{ public static void main(String[] args){ String path="c:/1.txt&

PHP读取文件内容的五种方式_php实例

php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); -- php读取文件内容: -----第一种方法-----fread()-------- <?php $file_path = "test.txt"; if(file_exists($file_path)){ $fp = fopen($file_path,"r"); $str = fread($fp,files

php读取文件内容的几种方法详解

示例代码1: 用file_get_contents 以get方式获取内容 复制代码 代码如下: <?php $url='http://www.baidu.com/'; $html=file_get_contents($url); //print_r($http_response_header); ec($html); printhr(); printarr($http_response_header); printhr(); ?> 示例代码2: 用fopen打开url, 以get方式获取内容

一个读取xml文件内容的类

xml 一个读取xml文件内容的类 package project.util.xml; import java.io.*;import java.util.*;import javax.servlet.http.*;import org.apache.log4j.*;import org.jdom.*;import org.jdom.input.*; /*** <p>Title: <font color="steelblue" size="10"&

Silverlight读取嵌入在xap文件中的文件内容

假如在 SilverlightApplication6 工程中添加一个文件夹 Content ,下面放置一个 mxh.txt 文件和 mxh.jpg 的照片,文件内容随便写.在"解决方案浏览器"的文件属性中,设置"Build Action"为"Content";"Copy to Output Directory"属性设置为"Do not copy". 在 xaml 文件中输入: XAML 代码 <Us

php读取文件内容到数组的方法

这篇文章主要介绍了php读取文件内容到数组的方法,涉及php中file.rtrim等函数对文件及字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php读取文件内容到数组的方法.分享给大家供大家参考.具体分析如下: php中可以通过file()函数将文件读取到数组中,数组中的元素即为文件的每行,file()函数通过"n"按行分割文件保存到数组,所以数组每个元素都是以"n"结尾,我们可以通过 rtrim()函数将其去除 ? 1 2 3