huhuhu12138 发表于 2018-1-17 20:08:22

大神们啊,我这个代码为什么和新建的文件关联不起来啊

这个程序里在E盘我自己建立了1个student.txt,为什么老打不开这个文件呢,还有就是如果关联了之后,为什么存入文件的数据有乱码啊
#include <iostream>
#include<fstream>
#include<iomanip>
using namespace std;
#include<string.h>
//#include<process.h>
#include<windows.h>


class student
{
public:
    char name;
    char no;
    char date;
    char type;
    char classes;


    //student();
   void stu1()
    {
      cout<<endl<<"\t\t\t*               请输入学生姓名及学号";
      cin>>name>>no;
    }
    void stu2()
    {
      cout<<endl<<"\t\t\t*               请输入学生缺课日期";
      cin>>date;
    }
    void stu3()
    {
      cout<<endl<<"\t\t\t*               请输入缺课课程";
      cin>>classes;
    }
    void stu4()
    {
      cout<<endl<<"\t\t\t*               请输入缺课类型";
      cin>>type;
      //cout<<endl;
    }
    friend void input();//录入学生缺课记录(导入到文件中)
    friend void search();//根据学生姓名查询缺课记录
    friend void modify(student a[],int n);//修改学生缺课信息
    friend void output();//输出缺课学生信息(从文件中读取)
    friend int add();//添加一个学生的缺课信息
    friend void output2(student a[],int n);//输出当前学生缺课记录
    friend void input2(student a[],int n);//把最终的数据保存到文件中
};
void input()//写入到文件中
{
    int i,j;
    student s;
    //char c='\n';
    fstream file;
    file.open("D:\\student.txt",ios::in|ios::out);//导入到文件
    cout<<"请输入要录入的学生人数"<<endl;
    cin>>j;
    for(i=0;i<j;i++)
    {
      s.stu1();
      s.stu2();
      s.stu3();
      s.stu4();
      file.write((char *)&s, sizeof(s));//写文件
      //file.write((char *)&c, sizeof(c));

      //file<<endl;

    }
    cout<<"成功输入同学信息";
    file.close();
}
void input2(student a[],int n)//把最终的数据保存到文件中
{
    int i;
    char c='\n';
    fstream ifile;
    ifile.open("D:\\lstudent.txt",ios::out);//导入到文件
    for(i=0;i<n;i++)
    {
      ifile.write((char *)&a, sizeof(a));//写文件
      ifile.write((char *)&c, sizeof(c));

      //ifile<<endl;

    }
    cout<<"成功保存学生信息";
    ifile.close();
}
int add(student a[],int n)//新增一个学生的缺课记录
{
    student x;
    x.stu1();
    x.stu2();
    x.stu3();
    x.stu4();

    strcpy(a.name,x.name);
    strcpy(a.no,x.no);
    strcpy(a.date,x.date);
    strcpy(a.classes,x.classes);
    strcpy(a.type,x.type);
    n++;
    cout<<"成功输入同学信息";
    return n;
}

void search()
{
    student x;
    char name;
    int z;
    fstream m;
    a1:
      int flag=0;
      m.open("D:\\student.txt",ios::in);//打开文件
      cout<<"请输入您要查找的同学姓名:"<<endl;
      cin>>name;
      m.read((char*)&x,sizeof(x));

      while(!m.eof())
      {
            if(!strcmp(name,x.name))
            {
                cout<<"姓名学号日期课程名称缺课类型"<<endl;
                cout<<x.name<<x.no<<x.date<<x.classes<<x.type<<endl;
                flag=1;
                break;
            }
            m.read((char*)&x,sizeof(x));

      }
      m.close();
      if(flag==0)
            cout<<"您查询的同学无缺课信息"<<endl;
      cout<<"是否继续查询,若是,请输入 1 ,若否,请输入 0 ;"<<endl;
      cin>>z;
      if(z==1)
            goto a1;
}

void modify(student a[],int n)
{
    int i,j;
    char xname;
    cout<<"请输入您想要修改的学生姓名"<<endl;
    cin>>xname;
    for(i=0;i<n;i++)
    {
      if(strcmp(xname,a.name)==0)
      {
            cout<<"该学生的缺课记录信息为"<<endl;
            cout<<"姓名学号日期课程名称缺课类型"<<endl;
            cout<<a.name<<a.no<<a.date<<a.classes<<a.type<<endl;
            cout<<"请确认是否需要修改,若是,请输入 1 ,若否,请输入 0 ;";
            cin>>j;
            if(j==1)
            {
                a.stu1();
                a.stu2();
                a.stu3();
                a.stu4();
                cout<<"修改成功"<<endl;
            }
            else
                printf("请检查!!!");break;
            break;
      }
    }
}
void output()//输出从文件导入的学生缺课记录
{
    student x;
    fstream m;
    m.open("D:\\student.txt",ios::in);//打开文件
    m.read((char*)&x,sizeof(x));
    cout<<"\t\t\t姓名学号    日期课程名称缺课类型"<<endl;
    while(!m.eof())
    {

      cout<<"\t\t\t"<<x.name<<setw(7)<<x.no<<setw(10)<<x.date<<setw(8)<<x.classes<<setw(8)<<x.type<<endl;
      m.read((char*)&x,sizeof(x));
    }
    m.close();
}
void output2(student a[],int n)//输出当前学生缺课记录
{
    int i;
    cout<<"\t\t\t学生的缺课记录信息为"<<endl;
    cout<<endl<<"\t\t\t*姓名学号   日期课程名称缺课类型"<<endl;
    for(i=0;i<n;i++)
      cout<<"\t\t\t"<<a.name<<setw(7)<<a.no<<setw(10)<<a.date<<setw(8)<<a.classes<<setw(8)<<a.type<<endl;
}

void menu()
{
    cout<<"\t\t\t****************************************************************"<<endl;
    cout<<"\t\t\t******************欢迎使用学生考勤管理系统**********************"<<endl;
    cout<<"\t\t\t******************1.录入学生缺课记录并输出 *********************"<<endl;
    cout<<"\t\t\t******************2.查找学生缺课记录****************************"<<endl;
    cout<<"\t\t\t******************3.修改学生的缺课记录**************************"<<endl;
    cout<<"\t\t\t******************4.新增一个学生的缺课记录 *********************"<<endl;
    cout<<"\t\t\t******************5.输出当前学生缺课记录************************"<<endl;
    cout<<"\t\t\t******************6.把最终的数据保存到文件中********************"<<endl;
        cout<<"\t\t\t******************7.退出程序************************************"<<endl;
    cout<<"\t\t\t****************************************************************"<<endl;

}
int main()
{
    int sel;
    int n,i=0;
    char pass,pname;
    cout<<"\n\n\n\n\n\n\n\t\t\t****************************************************************"<<endl;
    cout<<"\t\t\t*                  欢迎使用学生考勤管理系统                  *"<<endl;
    cout<<endl<<"\t\t\t*                  请输入用户名:";
    cin>>pname;
    cout<<endl<<"\t\t\t*                  请输入密码:";
    cin>>pass;
    system("cls");
    if(strcmp(pass,"000")==0)
    {
      student x;
      fstream m;
      m.open("D:\\student.txt",ios::in);//打开文件
      m.read((char*)&x,sizeof(x));
      cout<<"姓名学号日期课程名称缺课类型"<<endl;
      while(!m.eof())
            {
                i++;
                m.read((char*)&x,sizeof(x));
            }
      m.close();
      n=i;
      do
      {
            menu();
            cout<<"\t\t\t*               请输入你的选择";
            cin>>sel;
            switch(sel)
            {
                case 1:input();system("pause");system("cls");break;
                case 2:search();system("pause");system("cls");break;
                case 3:modify(x,n);system("pause");system("cls");break;
                case 4:n=add(x,n);system("pause");system("cls");break;
                case 5:output2(x,n);system("pause");system("cls");break;
                case 6:input2(x,n);system("pause");system("cls");break;
                                case 7:exit(1);
            }
      }while(sel!=0);
      cout<<"感谢您的使用"<<endl;
    }
   else
      cout<<"\t\t\t密码错误";
    return 0;
}

qq1242009750 发表于 2018-1-20 11:39:22

打开文件时 要说明文件所在的地方和名称
页: [1]
查看完整版本: 大神们啊,我这个代码为什么和新建的文件关联不起来啊