30/09/2018, 17:37

Cách ghi ra file txt với hàm ofstream trong C++?

Bạn nào giúp tớ sao ghi kết quả từ GTLN, GTNN, GTTB, kết quả từ tìm kiếm theo MSSV và tên SV ra file output.txt.

#include <cstdlib>
#include <iostream>
#include<stdio.h>
#include <fstream>
#include <cstring> 

const int MAX=50;
using namespace std;

struct sinhvien
{
    char mssv[8];
    float d,tb,max,min;
    char hoten[20];  
};

struct sinhvien sv[MAX];
void nhap(sinhvien sv[],int &n)
{
    do
    {
        cout<<"Moi nhap so luong sv: ";
        cin>>n;
        cout<<"Moi ban nhap thong tin ve sv: "<<endl;
        if (n<=0) cout << "Nhap sai! Hay nhap lai.
";
    } while (n<=0);
    cout<<endl<<"-------------------"<<endl;
    cout<<"NHAP DANH SACH SINH VIEN."<<endl;
    cout<<"========================="<<endl;
   
    for(int i=0;i<n;i++)
    {
        cout<<endl<<i+1<<". ";
        cout<<"Nhap ho va ten: ";
        cin>>sv[i].hoten;
        cout<<"   Nhap ma so sinh vien: ";
        cin>>sv[i].mssv;
        cout<<"   Nhap diem :";
        cin>>sv[i].d;
    }
    
    ofstream input ("input.txt",ios::out);
    input<<n<<endl;
     for(int i=0;i<n;i++)
     {
        input<<sv[i].hoten<<endl;
        input<<sv[i].mssv<<endl;
        input<<sv[i].d<<endl;
     }
     input.close();
}

void docfile(char tenfile[], sinhvien sv[], int &n)
{
     ifstream nhap(tenfile, ios::in);
     nhap>>n;
     for(int i=0;i<n;i++)
     {
        nhap>>sv[i].hoten;
        nhap>>sv[i].mssv;
        nhap>>sv[i].d;
     }
     nhap.close();
}

void xuat(sinhvien sv[],int n)
{
    cout<<"----------------------------
";
    cout<<" So luong hoc sinh la: "<<n<<endl;
    
    for(int i=0;i<n;i++)
    {
        cout<<i+1<<". ";
        cout<<"Ho ten : "<<sv[i].hoten<<" "<<"  Ma sv: "<<sv[i].mssv<<" "<<"  Diem la: "<<sv[i].d<<endl;
    }    
}


    // Tim so nho nhat

int timnhonhat( int n, sinhvien sv[MAX])
{
    int min=sv[0].d;
    for (int i=1; i<n; i++)
        if (min>sv[i].d) min=sv[i].d;
    return min;
}

    // Tim so lon nhat
int timlonnhat(int n, sinhvien sv[MAX])
{
    int max=sv[0].d;
    for (int i=1; i<n; i++)
        if (max<sv[i].d) max=sv[i].d;
    return max;
}

    // Tinh gia tri trung binh
double trungbinh(int n, sinhvien sv[MAX])
{
    long s=0;
    for (int i=0; i<n; i++)
        s = s + sv[i].d;
    return (double)s/n;
}

struct sinhvien timkiem(int n, sinhvien sv[MAX])
{
     struct sinhvien svTimThay;
    cout<<"
--------------------------
";
    cout<<"TIM KIEM THONG TIN SINH VIEN
";
       cout<<"----------------------------
";
       
       char mssv[8];
          cout<<("Ma so sinh vien can tim : ");
          fflush(stdin);
          gets(mssv);
        int timThay = 0;
          for (int i=0; i<n; i++)        
          {                                            // Neu Mssv nhap trung voi mssv cua sinh vien thu i
              if (strcmp(mssv,sv[i].mssv)==0)            // -> Tim thay.
             {
             svTimThay = sv[i];
             timThay = 1;
             break;
             }
            }
            cout<<"Ket qua tim kiem la: "<<endl<<endl;
            if (timThay==0)
            {
            cout<<"Khong tim thay sinh vien nao co ma la : "<<mssv;
              }
              else
              {
              cout<< "Ma so sinh vien la: "<< svTimThay.mssv<<endl;
              cout<< "Ten cua sinh vien la: "<< svTimThay.hoten<<endl;    
              cout<< "Diem cua sinh vien la: "<< svTimThay.d<<endl;
              }
        
        
        char hoten[20];
        cout<<"----------------------------
";
        cout<< "Ho va Ten can tim: ";
        fflush(stdin);
        gets(hoten);
          cout<< "Ket qua tim kiem la: "<<endl<<endl;
          for (int i=0; i<n; i++)
          {                                          // Neu Ten nhap trung voi Ten cua sinh vien thu i
             if (strcmp(hoten,sv[i].hoten)==0)      // -> Tim thay.
            {
            timThay = 1;
            cout<< "Ma so sinh vien la: "<< sv[i].mssv<<endl;
            cout<< "Ten cua sinh vien la: "<< sv[i].hoten<<endl;    
            cout<< "Diem cua sinh vien la: "<< sv[i].d<<endl;
             }
              }    
          if (timThay==0)
          {
            cout<<"Khong tim thay sinh vien nao co ten la :"<<hoten;
            }
}
void ketqua(char kq[], sinhvien sv[])
{
     ofstream output ("output.txt", ios::out);
     output.close();
}
int main(int argc, char *argv[])
{
    sinhvien sv[MAX];
    sinhvien svTimThay;
    int n;
    cout<<"Chao mung ban da dung chuong trinh."<<endl;
    //nhap(sv,n);
    //cout<<"Da luu danh sach sinh vien vao tep input.txt"<<endl;
    char tenfile[]="input.txt";
    docfile(tenfile,sv,n);
    cout<<"Xuat danh sach sinh vien tu input.txt "<<endl<<endl;
    xuat(sv,n);    
    cout<< "Gia tri nho nhat la: ";
    cout<< timnhonhat(n, sv) << endl;
    cout<< "Gia tri lon nhat la: ";
    cout<< timlonnhat(n, sv) << endl;
    cout<< "Gia tri trung binh cua cac phan tu la: ";
    cout<< trungbinh(n, sv) << endl;
    svTimThay=timkiem(n, sv);

    system("PAUSE");
    return EXIT_SUCCESS;
}
viết 19:39 ngày 30/09/2018

Bạn muốn lưu sinh viên có điểm lớn nhất hay chỉ muốn lưu cái điểm lớn nhất thôi.
Mình thấy cái hàm int timlonnhat( int n, sinhvien sv[MAX]) đặt tên giống nhau là sai rồi, và chỉ return về kiểu int chứ không phải kiểu sinhvien, nên chỉ lưu được giá trị lớn nhất đó thôi
Việc lưu này thì đơn giản thôi

ofstream out("File Name.txt");

out << GiaTri;

out.close();

Còn nếu muốn lưu thông tin sinh viên đó thì giá trị max phải return về sinh viên


void Save(char* fileName, SinhVien sinhVienCanLuu)
{
   ofstream out(fileName);

   out 
        << sinhVienCanLuu.MSSV     << '\t'
        << sinhVienCanLuu.HoTen    << '\t'
        << sinhVienCanLuu.DiemTB   << '\t'
        << sinhVienCanLuu.DiemToan << '\t';
   ....

   out.close();
}
Bài liên quan
0