ifstream读取错误,求解?

我不明白为什么会发生这样,求解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include//bits/stdc++.h
#include//help.h
      cin>>name; 
            string c;
            ifstream filein14("情况.txt",ios::in);
             while(getline(filein14,c))
             {
                 length_word[flag]=c.length()-1;
                 debug(length_word[flag]);
                 flag+=1;
                 if(c==name)
                 {
                     flag2=1;
                     break;
                 }
             }

help.h的内容:

#include//bits/stdc++.h
using namespace std;
void debug(int a)
{
    cout<<a<<endl;
}
void debug(char a)
{
    cout<<a<<endl;
}
void debug(char* a)
{
    cout<<a<<endl;
}
void debug(string a)
{
    cout<<a<<endl;
}

情况.txt的内容(有部分中文乱码):

awdrgy
#1.0#3-3
dorothy
#2.2#0-0
sssusie
#1.0#3-0
ߴߴ
#1.0#4-0
perry
#4.0#7-2
Ʈ������
#4.0#7-0

输出:

8
7
6
7
6
7
3
7
4

解释:我输出了文件每行的长度
谁能告诉我为什么?

3个回答

c在哪里定义的
c == name
如果c是char[]的话,应该用 strcmp 而不是 == 比较。

还有你的问题是什么,乱码么?中文的编码是双字节的,你按照char去读写要小心。

perry_lin
perry_lin txt文件第一行有6个字符,他却说有8个
6 个月之前 回复
perry_lin
perry_lin 在前面定义了
6 个月之前 回复

全部代码(从后面看):

#include//bits/stdc++.h
#include"help.h"
using namespace std;
int main()
{
     for( ; ; )
     {    
         string control="",ifend="",c="",swap="",name="",passport="",h="",n="",inspect_type="",test_name="",inspect_name[30],inspect_password[30];
         char l,namebychar[20];
         int No=0,No2=0,flag=0,num[30][100],t=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flag8=0,m=0,o=0,r=0,length_name[30],length_password[30][100],k[30][100][6],num_name,sum[3],money,buy[5],length_word[30];
         for(int t=0;t<30;t++)
         {
             for(m=0;m<100;m++)
             {
                 memset(k[t][m],0,sizeof(k[t][m]));
             }
             memset(length_word,0,sizeof(length_word));
         }
         memset(length_password,0,sizeof(100));
         cout<<"请问要进行什么操作?"<<endl<<"(注册/查看/更新/购买/还债)"<<endl;
         cin>>control;
         if(control=="注册")
         {
             fstream testbycharfile;
             testbycharfile.open("名单2.txt",ios::in);
             while(!testbycharfile.eof())
             {
                 testbycharfile>>l;
                 if(l=='$')
                 {
                     No+=1;
                 }
             }
             for( ; ; )
             {
                 cout<<"请输入昵称"<<endl;
                 cin>>name;
                 ifstream filein8("名单.txt",ios::in);
                 while(filein8>>c)
                 {
                     if(c==name)
                     {
                         flag6=1;
                         break;
                     }
                 }
                 if(flag6==1)
                 {
                     cout<<"昵称已存在!";
                     flag6=0;
                     continue;
                 }
                 cout<<endl<<"请输入密码"<<endl;
                 cin>>passport;
                 for(int t_1=0;t_1<10;t_1++)
                 {
                     for(int t_2=0;t_2<10;t_2++)
                     {
                         for(int t_3=0;t_3<t_1;t_3++)
                         {
                             test_name+=t_2+'0';
                             if(passport==(name+test_name))
                             {
                                 cout<<"密码过于简单!";
                                 flag6=1;
                                 break;
                             }
                             if(passport==test_name)
                             {
                                 cout<<"密码过于简单!";
                                 flag6=1;
                                 break;
                             }
                         }
                         if(flag6==1)
                         {
                             break;
                         }
                         test_name="";
                     }
                     if(flag6==1)
                     {
                        break;
                     }
                 }
                 if(flag6==1)
                 {
                     flag6=0;
                     continue;
                 }
                 cout<<endl;
                 cout<<"请确认信息" <<endl<<"昵称:"<<name<<endl<<"编号:"<<No<<endl<<"密码:"<<passport<<"(输入是或否)"<<endl;
                 cin>>h;
                 if(h=="是")
                 {
                     break;
                 } 
                 else if(h=="否")
                 {

                 } 
                 else
                 {
                     cout<<"已默认为“否”";

                 }
             }
             testbycharfile.open("名单.txt",ios::in);
             ofstream fileOut("名单2.txt",ios::app);
             while(!testbycharfile.eof())
             {
                 testbycharfile>>c;
                 fileOut<<c;
             }
             fileOut<<No<<"#"<<name<<"#"<<passport<<"$";
             ofstream fileio2("名单.txt",ios::app);
             fileio2<<endl<<No<<endl<<name<<endl<<passport<<endl<<"&";
             srand((unsigned)time(NULL));
             for(int i=0;i<100;i++)
                 {
                     num[0][i]=rand()%999999;
                 }           
             ofstream file2("密码.txt",ios::app);
             file2<<endl<<name;
             for(int t=0;t<100;t++)
             {
                file2<<endl<<num[0][t];
             }
             file2<<endl<<"&";
             for( ; ; )
             {
                 cout<<"请输入钱数"<<endl;
                 cin>>money;
                 if(money>7)
                 {
                     cout<<"过多!(集数请另外购买)";
                     continue;
                 }
                 cout<<"请确认(是/否)"<<endl;
                 cin>>h;
                 if(h=="否")
                 {
                     continue;
                 }
                 else if(h!="是")
                 {
                     cout<<"已默认为\"否\"";
                 } 
                 ofstream fileout13("情况.txt",ios::app);
                 fileout13<<name;
                 for(t=3;t<9;t++)
                 {
                     if(money<t)
                     {
                         fileout13<<" "<<t-4<<"。0 "<<money<<"-0";
                         break;
                     }
                 }
                 fileout13<<endl;
                 break;
             }
         }
         else if(control=="查看")
         {
             cout<<"请输入查看类型(个人/查看码)"<<endl;
             cin>>inspect_type;
             if(inspect_type=="个人")
             {
                 cout<<"请输入你要查看的名字"<<endl;
                 cin>>name;
                 ifstream filein("名单.txt",ios::in);
                 flag=0;
                 while(filein>>c)
                 {
                     if(c=="&")
                     {
                         ++flag;
                     }
                     if(c==name)
                     {               
                         ifstream filein3("名单.txt",ios::in);
                         while(filein3>>c)
                         {
                             if(flag==0)
                             {
                                 cout<<"编号:"<<c<<endl;
                                 flag3=1;
                                 flag++;
                             }
                             if(flag2==1)
                             {
                                 cout<<"昵称:"<<c<<endl;
                             }
                             if(flag2==2)
                             {
                                 cout<<"密码:"<<c<<endl;
                             }
                             if(flag3==1)
                             {
                                 flag2++;
                                 if(c=="&")
                                 {
                                     break;
                                 }
                             }
                             if(c=="&")
                             {
                                 flag-=1;
                             }
                         }
                         flag=1;
                         break;
                     }
                 }
                 if(flag==1)
                 {
                     ifstream filein2("密码.txt",ios::in);
                     cout<<"查看码:";
                     flag4=0;
                     flag3=0;
                     while(filein2>>c)
                     {
                         if(c=="&")
                         {
                            flag3++;
                         }
                         if(c==name)
                         {
                             ifstream filein4("密码.txt",ios::in);
                             while(filein4>>c)
                             { 
                                 if(flag3==0&&flag4==0)
                                 {
                                     flag4++;
                                     continue;
                                 }
                                 if(c=="&")
                                 {
                                     flag3--;
                                 }
                                 if(flag4==1)
                                 {
                                     if(c=="&")
                                     {
                                         break;
                                     }
                                     cout<<endl<<c;
                                 }
                             }
                             cout<<endl;
                         } 
                     }
                 }
                 else
                 {
                     cout<<"用户不存在!";
                 }
             } 
             else if(inspect_type=="查看码")
             {
                 cout<<"请输入集数(n~m)"<<endl;
                 cin>>No>>l>>No2;                
                 ifstream filein5("密码.txt",ios::in);
                 flag=0;
                 flag5=0;
                 while(filein5>>c)
                 {
                     if(No>100)
                     {
                         cout<<"集数不存在!";
                         break;
                     } 
                     if(c=="&")
                     {
                         flag=-2;
                     }
                     flag+=1;
                     if(flag==0)
                     {
                        cout<<c<<endl;
                     }
                     if(flag==No)
                     {
                         if(flag5==0)
                         {
                             flag5+=1;
                             flag-=1;
                         }
                         while(flag<=No2)
                          {
                             filein5>>c;
                             cout<<"  "<<c<<endl;
                             flag++;
                          }
                     }

                 }
             } 
         }
         else if(control=="更新")
         {
             ifstream filein6("密码.txt",ios::in);
             flag5=-1;
             flag4=0;
             flag3=0;
             flag=0;
             flag2=0;
             while(filein6>>c)
             {
                 if(c=="&")
                 {
                     flag5++;
                     flag=1;
                     flag2++;
                     continue;
                 }
                 if(flag==2)
                 {
                    length_password[flag5][flag3]=c.size();
                    flag3++;
                 }
                 if(flag==1)
                 {
                    length_name[flag4]=c.size();
                    inspect_name[flag4]=c;
                    flag4++;
                    flag=2;
                 }
             }
             num_name=flag4;
             flag=0;
             m=0;
             o=0;
             flag3=0;
             flag4=-1;
             flag5=-1;
             fstream testbycharfile;
             testbycharfile.open("密码.txt",ios::in);
             while(testbycharfile>>l)
             {
                 if(l=='&')
                 {
                     flag=0;
                 }
                 if(flag==1)
                 {
                     if(length_name[flag4]>0)
                     {
                         length_name[flag4]-=1;
                         continue;
                     }
                     o=length_password[flag5][flag3];
                     if(m==0)
                     {
                        --o;
                     }
                     k[flag5][m][o]=l-'0';
                     if(o==0)
                     {
                        flag3+=1;
                        m++;
                     }
                     length_password[flag5][flag3]-=1;
                 }
                 if(l=='&')
                 {
                     flag5++;
                     flag2-=1;
                     flag4++;
                     flag=1;
                     m=0;
                 }
             }
             ifstream filein10("名单.txt",ios::in);
             while(filein10>>c)
             {
                 if(flag7==3)
                 {
                     inspect_password[r]=c;
                     flag7=0;
                     r++;
                 }
                 if(flag7==2)
                 {
                    flag7++; 
                 }
                 if(flag7==1)
                 {
                     flag7++;
                 }
                 if(c=="&")
                 {
                     flag7=1;
                 }
             }
             for(int t=0;t<100;t++)
             {
                num[0][t]=k[0][t][5]*100000+k[0][t][4]*10000+k[0][t][3]*1000+k[0][t][2]*100+k[0][t][1]*10+k[0][t][0];
             }
             ofstream fileout7("我的我的世界Bug日记4.2.4.cpp",ios::out);
             fileout7<<"#include<iostream>\n#include<fstream>\n#include<cstring>\nusing namespace std;\nint main()\n{\n     int b,flag;\n    string name,password;\n    char a;\n    cout<<\"请输入昵称\";\n    cin>>name;\n    cout<<\"请输入密码\";\n    cin>>password;\n    if(name==\""<<inspect_name[0]<<"\")\n    {\n      if(password==\""<<inspect_password[0]<<"\")\n      {\n        cout<<\"请问你要看哪一期?\";\n      cin>>a;\n      cout<<\"请输入查看码\";\n      cin>>b;\n      switch(a)\n      {\n"; 
             for(int t=0;t<100;t++)
             {
                fileout7<<"      case'"<<t+1<<"':\n        if(b=="<<num[0][t]<<")\n        {\n          flag=1;\n        }\n        else\n        {\n          flag=2;\n        }\n        break;\n";
             } 
             fileout7<<"      }\n    if(flag==1)\n    {\n    switch(a)\n      {\n        case'1':\n          {\n          ofstream fileOut(\"我的世界Bug日记第1期.txt\",ios::out);\n          fileOut<<\"Bug出生在一个荒岛上,\"<<endl<<\"他不是新手,所以知道要砍树。\"<<endl<<\"他看了看四周,发现没有树,于是他往前走\"<<endl<<\"走着走着,他瞬移了,卡到一棵树里\"<<endl<<\"卡死了。\"<<endl<<\"第一期结束\";\n          break;\n        }\n        case'2':\n        {\n          ofstream fileOut2(\"我的世界Bug日记第二期.txt\",ios::out);\n          fileOut2<<\"Bug重生了,但他却不在那个岛上\"<<endl<<\"他在山洞里,发现一个宝箱,里面有本书\"<<endl<<\"他打开一看,里面写着:重生点更改 100%\"<<endl<<\"瞬移 25%\"<<endl<<\"后面都是空的,他想:这难道是我卡Bug的几率?\"<<endl<<\"他突然被小白围攻,他搭起了一堵墙,结果还是死了。\"<<endl<<\"书上默默地多了一条:\"<<endl<<\"弓箭穿墙 30%\"<<endl<<\"第二期结束\";\n        }\n        default:cout<<\"尚未开发\";\n      }\n    }\n  }\n  }\n  else if(flag==2)\n    {\n      cout<<\"密码错误!\";\n     }\n"; 

             ofstream fileout8("我的我的世界Bug日记4.2.4.cpp",ios::app);
             for(int i=1;i<num_name;i++)
             {
                 for(int t=0;t<100;t++)
                 {
                     num[i][t]=k[i][t][5]*100000+k[i][t][4]*10000+k[i][t][3]*1000+k[i][t][2]*100+k[i][t][1]*10+k[i][t][0];
                 }
                 fileout8<<"else if(name==\""<<inspect_name[i]<<"\")\n    {\n      if(password==\""<<inspect_password[i]<<"\")\n     {\n      cout<<\"请问要看哪一期?\";\n      cin>>a;\n      cout<<\"请输入查看码\";\n      cin>>b;\n      switch(a)\n      {\n";
                 for(int t=0;t<100;t++)
                 {
                    fileout8<<"      case'"<<t+1<<"':\n        if(b=="<<num[i][t]<<")\n        {\n          flag=1;\n        }\n        else\n        {\n          flag=2;\n        }\n        break;\n";
                 } 
                 fileout8<<"      }\n    if(flag==1)\n    {\n      switch(a)\n      {\n        case'1':\n          {\n          ofstream fileOut(\"我的世界Bug日记第1期.txt\",ios::out);\n          fileOut<<\"Bug出生在一个荒岛上,\"<<endl<<\"他不是新手,所以知道要砍树。\"<<endl<<\"他看了看四周,发现没有树,于是他往前走\"<<endl<<\"走着走着,他瞬移了,卡到一棵树里\"<<endl<<\"卡死了。\"<<endl<<\"第一期结束\";\n          break;\n        }\n        case'2':\n        {\n          fstream fileOut2(\"我的世界Bug日记第二期.txt\",ios::out);\n          fileOut2<<\"Bug重生了,但他却不在那个岛上\"<<endl<<\"他在山洞里,发现一个宝箱,里面有本书\"<<endl<<\"他打开一看,里面写着:重生点更改 100%\"<<endl<<\"瞬移 25%\"<<endl<<\"后面都是空的,他想:这难道是我卡Bug的几率?\"<<endl<<\"他突然被小白围攻,他搭起了一堵墙,结果还是死了。\"<<endl<<\"书上默默地多了一条:\"<<endl<<\"弓箭穿墙 30%\"<<endl<<\"第二期结束\";\n        }\n        default:cout<<\"尚未开发\";\n      }\n    }\n  }\n  }\n  else if(flag==2)\n    {\n      cout<<\"密码错误!\";\n     }\n"; 
             }
             fileout8<<"  return 0;\n}";
         }
         else if(control=="购买")
         {
             cout<<"请输入昵称"<<endl;
             cin>>name;
             cout<<"请输入集数(n~m)"<<endl;
             cin>>num[0][0]>>l>>num[0][1];
             if(l!='~')
             {
                 flag==5;
             }
             if(num[0][0]>num[0][1])
             {
                 num[0][2]=num[0][0];
                 num[0][0]=num[0][1];
                 num[0][1]=num[0][2];
             }
             ifstream filein11("密码.txt",ios::in);
             while(filein11>>n)
             {
                     if(n==name)
                     {
                         flag=1;
                         for(int t=1;t<num[0][0];t++)
                         {
                             filein11>>n;
                             if(n=="&")
                             {
                                 flag5=1;
                                 break;
                             }
                         }
                         if(flag5==1)
                         {
                             break;
                         }
                         cout<<"查看码为:"<<endl;
                         for(int t=1;t<=num[0][1]-num[0][0]+1;t++)
                         {
                             filein11>>n;
                             cout<<"  "<<n<<endl;
                         }
                         break;
                     }
                     flag=0;     

             }
             sum[0]=num[0][1]-num[0][0]+1;
             sum[1]=sum[0]/5;
             if(flag5==1)
             {
                 cout<<"集数不存在!";
             }
             else if(sum[1]*5!=sum[0])
             {
                 sum[2]=5-(sum[0]-sum[1]*5);
                 sum[1]++;
             }
             else
             {
                 sum[2]=0;
             }
             if(flag5!=1)
             {
                 cout<<"总价="<<sum[1]<<"-"<<sum[2]<<endl<<"请输入已付"<<endl;
                 cin>>money;
                 if(sum[1]<money)
                 {
                     buy[0]=money-sum[1];
                 }
                 else if(sum[1]>money)
                 {
                     buy[0]=money-sum[1];
                 }
                 else
                 {
                     buy[0]=0;
                 }
         fstream testbycharfile;
                 testbycharfile.open("情况.txt",ios::in);
                 for(int t=0;t<name.length()-1;t++)
                 {
                     namebychar[t]=name[t];
                 }
                 flag=0;
                 flag2=0;
                 flag3=0;
                 while(!testbycharfile.eof())
                 {
                     testbycharfile>>l;

                     if(flag3==1)
                     {
                         if(buy[0]>0)
                         {
                             freplacechar("情况.txt",t+1,l-'0'+buy[0]+'0');
                         }
                     }
                     if(flag3==3)
                     {
                         freplacechar("情况.txt",t+3,l-'0'+sum[1]+'0');
                     }
                     if(flag3==6)
                     {
                         freplacechar("情况.txt",t+5,l-'0'+money+'0');
                     }
                     if(flag3==8)
                     {
                         if(buy[0]<0)
                         {
                             freplacechar("情况.txt",t+7,l-'0'+buy[0]+'0');
                         }
                     }
                     if(flag2==1)
                     {
                         flag3++;
                     }
                     if(l==namebychar[t])
                     {
                         t++;
                         flag=1;
                     }
                     else
                     {
                         t=0;
                         flag=0;
                     }
                     if(t==name.length()-1)
                     {
                         flag2=1;
                     }
                 }
                 if(flag2!=1)
                 {
                     cout<<"用户不存在!";
                 }
             }
         }
         else if(control=="还债")
         {
             cout<<"请输入昵称"<<endl;
             cin>>name;
             ifstream filein14("情况.txt",ios::in);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这里出错
             while(getline(filein14,c))
             {
                 length_word[flag]=c.length()-1;
                 debug(length_word[flag]);
                 flag+=1;
                 if(c==name)
                 {
                     flag2=1;
                     break;
                 }
             }
             if(flag2==1)
             {
                 fstream testbycharfile;
                 testbycharfile.open("情况.txt");
                 t=1;
                 while(testbycharfile>>l)
                 {
                     if(t==length_word[flag3]&&flag4!=1)
                     {
                         flag3++;
                         t=0;
                         flag--;
                     }
                     if(flag==0)
                     {
                         flag4=1;
                     }
                     if(flag4==1)
                     {
                         flag5++;
                         if(length_word[flag3]-flag5==1)
                         {
                             buy[0]=l-'0';
                             break;
                         }
                         else
                         {
                             continue;
                         }
                     }
                     t++;
                 }
                 if(buy[0]==0)
                 {
                     cout<<"没欠钱!";
                 }
                 //debug
                 else if(buy[0]<0)
                 {
                     cout<<"[BUG REPORT]"<<endl<<"money less than zero!";
                     bug(1);
                     exit(1);
                 }
                 else if(buy[0]>7)
                 {
                     cout<<"[BUG REPORT]"<<endl<<"own is out of limits!";
                     bug(2);
                     exit(2);
                 }
                 //enddebug
                 else
                 {
                     cout<<"你欠了"<<buy[0]<<endl<<"请输入已还"<<endl;
                     cin>>money;
                     if(money==buy[0])
                     {
                         cout<<"已还清!";
                         freplacechar("情况.txt",length_word[flag3],'0');
                     }
                     else if(money>buy[0])
                     {
                         cout<<"还的过多!(集数请另外购买)"<<endl;
                     }
                     else
                     {
                         cout<<"已还"<<buy[0]<<endl<<"还欠"<<buy[0]-money<<endl;
                         freplacechar("情况.txt",length_word[flag3],money-buy[0]+'0');
                     }

                 }
             }
             else
             {
                 cout<<"昵称不存在!"<<endl;
             }
         }
         cout<<"是否继续?"<<endl;
         cin>>ifend;
         if(ifend=="否")
         {
             break; 
         } 
     } 
     return 0; 
}

help.h:

#include//bits/stdc++.h
using namespace std;
void debug(int a)
{
    cout<<a<<endl;
}
void debug(char a)
{
    cout<<a<<endl;
}
void debug(char* a)
{
    cout<<a<<endl;
}
void debug(string a)
{
    cout<<a<<endl;
}
void freplacechar(string fname,int place,char after_replace_word)
{
     char* ch;
     char l[1];
     l[0]=after_replace_word;
     ch=&l[0];
     FILE *fp;
     fp = fopen(fname.c_str(),"r+");
     fseek(fp,place, SEEK_SET);
     fwrite(ch,1,1,fp);
     fclose(fp);
}
void story()
{
     string story;
     story="        case'-':\n        {\n          ofstream fileOut2(\"我的世界Bug日记第----期.txt\",ios::out);\n          fileOut2<<----;\n        }\n";
}
void bug(int a)
{
     ofstream fileout("Bug.log",ios::app);
     time_t tt = time(NULL);
     struct tm* t= localtime(&tt);
     fileout<<t->tm_year + 1900<<"/"<<setw(2)<<setfill('0')<<t->tm_mon + 1<<"/"<<t->tm_mday<<endl<<"["<<setw(2)<<setfill('0')<<t->tm_hour<<":"<<setw(2)<<setfill('0')<<t->tm_min<<":"<<setw(2)<<setfill('0')<<t->tm_sec<<"]"<<endl;
     switch(a)
     {
         case 1:
             fileout<<"[BUG REPORT]own money less than zero!"<<endl<<"check the programme or the text"<<endl<<"bugnumber:"<<a<<endl<<"---------------------------------------------------------------------------------------"<<endl;
         case 2:
             fileout<<"[BUG REPORT]own money is out of limits!"<<endl<<"check the programme of the text"<<endl<<"bugnumber:"<<a<<endl<<"---------------------------------------------------------------------------------------"<<endl; 
     }
} 
    while(getline(filein14,c))
    {
        debug(c);//添加一行打印,看打印出来的text是否是你想的字符串;
        length_word[flag]=c.length()-1;
        debug(length_word[flag]);
        flag+=1;
        if(c==name)
        {
            flag2=1;
            break;
        }
    }

中文乱码问题的话,在写入的时候比如: file << name; 改成 file << name.c_str();

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ifstream读取错误,求解
我文件中有“&”,但是他好像读的有问题,无法进行调试 提取了片段 ``` #include<iostream> #include<fstream> #include<cstring> using namespace std; int main() { string c; ifstream filein("密码.txt",ios::in); while(getline(filein,c)) { if(c=="&") { flag=1; continue; } if(flag==1) { cout<<c<<endl; break; } } return 0; } ``` 密码.txt中: & awdrgy 16827 17234 23424 ...... 为什么它输出为空白?
ifstream读取多个文件
``` void readfile(string str, vector <int> &v) { ifstream inputFile; int num; inputFile.open(str.c_str()); if (inputFile) { while (inputFile >> num) { v.push_back(num); } } else { cout << "Can not open the file" << endl; } inputFile.close(); inputFile.clear();//// } ``` 想用readfile函数读多次文件存储到vector里,为什么只有第一个文件可以读,后面的都不行 ``` readfile(filename_ori, ori_vect); readfile(filename_first, first_vect); readfile(filename_second, second_vect); readfile(filename_third, third_vect); ```
如何知道c++的文件读取流ifstream当前读取的位置?
我知道如果要定位ifstream的位置可以用诸如ifstream.seekg(offset, ios::cur)这样的方法,但是我想知道ifstream当前读取的位置怎么写呢?这是个现实的需求,我必须先得到这个位置,然后读取线程退出,再启动读取线程时用上面的seekg方法定位到之前的位置继续读取下去,我觉得这是一个挺普通的功能需求,ifstream类应该已经提供了现成方法的吧??怎么写呢?望高手指教!
MFC 使用ifstream读取文件的时候“<<”不合法什么鬼
if (openFile(&fread, file)) { int count1 = 0; for (int count = 0; count < ROW; count++){ fread >> str >> a[0] >> a[1] >> a[2]; data[count1] = a[0]; data[count1 + 1] = a[1]; data[count1 + 2] = a[2]; count1 += 3; } error C2678: binary '>>' : no operator defined which takes a left-hand operand of type 'class ifstream' (or there is no acceptable conversion)
c++ io流的read函数实际读取的字节数
用c++io类,ifstream,读取二进制文件,用read函数时,怎么得到实际读取的字节数? 比如ifstream in("a.jpg",ios::in|ios::binary);in.read(buf,1024); 我如何得到实际读取的字节数?
从txt读取数据时系统自动多读取了一部分零碎的数据,希望大佬们能帮忙解决一下。
本人c++萌新,对c++还不太熟悉。(已解决,谢谢大家) 参考信息:【mie haha 的博客】转载请注明出处(万分感谢!): https://blog.csdn.net/qq_40315080/article/details/88176331 ![图片说明](https://img-ask.csdn.net/upload/202001/03/1578043480_334799.png)(调试照片以及txt文档) (修改如下,具体原因可见我转载的文章)![图片说明](https://img-ask.csdn.net/upload/202001/03/1578062048_231754.png) 读取函数如下: ``` void Class::class_Read() //从文件读入数据 { Date *p; p = ClassHead; ifstream in("class.txt"); if (!in) { cout << "没有课程信息,请先录入课程信息!" << endl; return; } while (1) { string n,e; int s; double N,t; in >> N >> n >> t >> s >> e; class_insert(N,n,t,s,e); if(in.fail()) { break; } } in.close(); } #endif; ```
c++用jsoncpp读取json文件并,有数千个数据,求把这些数据转成数组?
我有一个json文件,现在想把里面的数据读取出来,并转化为数组或是线性表。 文件是这样的,有数千个类似的这样的。我在网上找了很多的教程,但是里面的例子一般都是直接 int comment = root["comment"].asInt(); 但是我这里有数千个,而且后面要统计from相同的数量等等,所以想用数组或者是线性表来存储,方便后面。 因为是第一次接触json,完全菜鸟,所以很多概念都不了解,希望各位大神能够给一些简单一点的回答,非常感谢 [ { "comment": 0, "from": "北京-北京市-海淀区", "comments": [], "to": "河北省-承德市-隆化县", "score": "0", "corp": "兴铁物流", "time": "1398175318.988036" }, void readFileJson() { 根据网上的教程就写了一点点,我把添加到了源文件那里,可是好像打不开,运行的话就直接弹出Error poening file void readFileJson() { Json::Reader reader;//json解析 Json::Value root;//表示一个json格式的对象  ifstream in("rating(1).json", ios::binary); if (!in.is_open()) { cout << "Error opening file\n"; return; }
c++文件报错:错误(活动) E1776 无法引用 函数 "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits> &)
代码片段如图 ![图片说明](https://img-ask.csdn.net/upload/201910/11/1570801040_651441.png)![图片说明](https://img-ask.csdn.net/upload/201910/11/1570801048_969407.png)![图片说明](https://img-ask.csdn.net/upload/201910/11/1570801061_847400.png) 编译环境为visual studio 2017 为什么会报这个错误? 求解答
C++使用ifstream如何获取文件长度(具体数值)
rt,如何获取一个文件的实际长度(字节即可),但是我不是要打印在屏幕上,而是要存在 long long型的变量里面。网上给的streampos的方法虽然能得到长度但是,无法将长度转存到一个long long型里面(强转是木有用的),虽然streampos里面有个Fpos正好能指示长度然而不幸的是人家是私有的,无法读取。所以还请大神帮帮忙,要用ifstream,并且能够读取文件长度,多谢。
关于C++中ifstream in()以及ios_base::in的问题
代码如下: ``` void Utilities::readFile(const string file_name, vector<double>& histogram){ ifstream in(file_name.c_str(), ios_base::in); if(in == NULL){ cout << "Error:open data file error.\n"; getchar(); exit(0); } string str; const string delimiters = " "; getline(in, str); tokenize(str, histogram, delimiters); } ``` 运行结果如下: ![运行结果](https://img-ask.csdn.net/upload/201708/19/1503110045_858692.png)
c++中overloading ifstream运算符时,可以设定逗号作为分隔符吗?
现有一个Stock class 我想要在里面改写‘>>’运算符,使得从文件中读取数据时可以直接使用 **stocks.txt文件:** ![图片说明](https://img-ask.csdn.net/upload/201911/13/1573604818_161518.png) **overloading 代码:** ![图片说明](https://img-ask.csdn.net/upload/201911/13/1573604913_157634.png) **文件中读取数据时的代码:** ![图片说明](https://img-ask.csdn.net/upload/201911/13/1573605104_906761.png) 我如何在**改写**运算符时使用逗号作为分隔符?
C++ 二进制文件读取访问权限冲突
在读取二进制文件的时候,第一次运行,创建文件,没有错误,第二次在有文件的基础上再次运行,则在程序结束的时候出现一个xmemory文件报错 该几行代码在代码末也重复出现过,但经过排除法测试,该几行代码在代码末出现并不会引发异常。代码如下: //用读档方式打开文件,如果存在就读,不存在就建立。 ifstream infile; ofstream ofile;//用来初期建立存档,和后期保存存档 infile.open("./gamedata.dat", ios::in); if (!infile)//没有建立存档 { ofile.open("./gamedata.dat", ios::out); //写入玩家存档信息 ofile.write((char*)&player, sizeof(player)); ofile.close();//存好档就可以关闭文件了 ofile.open("./equdata.dat",ios::out ); //写入玩家装备存档信息 ofile.write((char*)& equ, sizeof(equ)); ofile.close(); } infile.read((char*)&player, sizeof(player)); //读完玩家档就关闭 infile.close(); infile.open("./equdata.dat", ios::in); infile.read((char*)&equ, sizeof(equ)); //读完装备档就关闭 infile.close(); 以上是出现问题的代码区域,其中,问题代码为: infile.open("./equdata.dat", ios::in); infile.read((char*)&equ, sizeof(equ)); //读完装备档就关闭 infile.close(); 以上代码在程序末也出现但未报错: 以下为程序末尾出现的类似代码 //关闭游戏前自动存档 ofile.open("./gamedata.dat", ios::out); ofile.write((char*)& player, sizeof(player)); ofile.close(); ofile.open("./equdata.dat", ios::out); ofile.write((char*)& equ, sizeof(equ)); ofile.close(); system("cls"); cout << "退出游戏";
C++ 种 failed open file 'xxx' with mode ios::in
``` idx_t get_num_reads(const char* candidates_file) { ifstream in; open_fstream(in, candidates_file, ios::in); ExtensionCandidate ec; int max_id = -1; while (in >> ec) { max_id = std::max(ec.qid, max_id); max_id = std::max(ec.sid, max_id); } close_fstream(in); return max_id + 1; } ``` 这个函数要怎么改呢?
C++读取文件失败求教。。。。
data.txt文件内容: a b x c s d f g h w 下面是代码: ``` #include <iostream> #include <fstream> #include<string> using namespace std; int main() { char num[10]; ifstream file; file.open("data.txt"); if (file.is_open()) { file >> num; } else cout << "读取错误!" << endl; for (int j = 0; j < 10; j++) cout << num[j] << " "; file.close(); cin.get(); return 0; } ``` 输出: 读取错误! ?
请问一下,为什么这两段程序会出现访问冲突?
``` void Linklist::save_stu_info() { string class_name; string class_name_suffix; Node *pt; pt = pHead; cout << "请输入保存班级名称:"; cin >> class_name; class_name_suffix = class_name + ".dat"; ofstream outfile(class_name_suffix, ios::binary); if (!outfile) { cerr << "open error!" << endl; abort(); } for (int i = 0; i < count; i++) { outfile.write((char *)pt, sizeof(Node)); pt = pt->pNext; } cout << "保存成功!" << endl; outfile.close(); } void Linklist::load_stu_info() { string class_name; string class_name_suffix; Node *pt; pt = pHead; cout << "请输入读取班级名称:"; cin >> class_name; class_name_suffix = class_name + ".dat"; ifstream infile(class_name_suffix, ios::binary); if (!infile) { cerr << "open error!" << endl; abort(); } cout << "请输入该班学生人数:" << endl; cin >> count; for (int i = 0; i < count; i++) { infile.read((char *)pt, sizeof(Node)); pt = pt->pNext; } cout << "读取成功!" << endl; infile.close(); } ```第一个函数是我用来保存链表的各个节点的指针到一个dat文件中,第二个函数是把dat文件中的指针读取出来,但是当我运行就会报错 0x659D4B89 (vcruntime140d.dll)处(位于 studentmanage.exe 中)引发的异常: 0xC0000005: 写入位置 0x00546448 时发生访问冲突。
这个运行结果是怎样的,咋感觉我不会显示它的输出呢?
#include"iostream" #include <fstream> #include"stdlib.h" #define MAX 100 using namespace std; class person { public: int num; char name[20]; char sex[4]; int age; }; //Teacher class class Teacher:virtual public person { public: char dept[20]; char special[20]; char title[20]; void Input() { cout<<"Input num:";cin>>num; cout<<"Input name:";cin>>name; cout<<"Input sex:";cin>>sex; cout<<"Input age:";cin>>age; cout<<"Input dept:";cin>>dept; cout<<"Input special:";cin>>special; cout<<"Input title:";cin>>title; } void Output() { cout<<"编号: "<<num<<" "<<"姓名: "<<name<<" "<<"性别: "<<sex<<" "<<"年龄: "<<age<< " "<<"所在系: "<<dept<<" "<<"专业: "<<special<<" "<<"职称: "<<title<<endl; } }; Teacher Tea[MAX]; static int Teatop; class TeaManager { public: int Add(); int Search(); void Show(); void Edit(); int Delete(); void Save(); void Read(); }; int TeaManager::Add() { Teacher t; int i,nu; if(Teatop==MAX) {cout<<"人数已满"<<endl; return 0; } cout<<"请输入编号:";cin>>nu; for(i=0;i<Teatop;i++) { if(nu==Tea[i].num) {cout<<"已有编号,请从输入"<<endl; return 0; } } t.Input();Tea[Teatop]=t;Teatop++; cout<<"添加成功!"<<endl; return 1; } int TeaManager::Search() { int j,n; cout<<"请输入编号:";cin>>n; for(j=0;j<Teatop;j++) { if(n==Tea[j].num) break; } if(j==Teatop) cout<<"没有此人!"<<endl; else Tea[j].Output(); return 1; } void TeaManager::Show() { int i; if(Teatop==0) {cout<<"记录为空!"<<endl; return;} for(i=0;i<Teatop;i++) Tea[i].Output(); } void TeaManager::Edit() { Teacher t1; int j,n; cout<<"请输入要编辑的人的编号:";cin>>n; for(j=0;j<Teatop;j++) { if(n==Tea[j].num) break; } if(j==Teatop) {cout<<"没有此人!"<<endl;return;}; cout<<"输入修改后的信息,编号不能改:"<<endl; t1.Input(); Tea[j]=t1; cout<<"编辑成功!"<<endl; } int TeaManager::Delete() { int j,n; cout<<"请输入要删除的人的编号:";cin>>n; for(j=0;j<Teatop;j++) { if(n==Tea[j].num) break; } if(j==Teatop) {cout<<"没有此人!"<<endl;return 0;}; for(j;j<Teatop;j++) { Tea[j]=Tea[j+1]; } Teatop--; cout<<"删除成功!"<<endl; return 1; } void TeaManager::Save() { int i; ofstream outfile,outfile1; outfile1.open("Teatop.dat",ios::out); outfile1<<Teatop; outfile.open("Tea_data.dat",ios::binary); if(!outfile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Teatop;i++) outfile.write((char *)&Tea[i],sizeof(Tea[i])); outfile.close(); cout<<"保存成功!"<<endl; } void TeaManager::Read() { int i; ifstream infile,infile1; infile1.open("Teatop.dat",ios::in); infile1>>Teatop; infile.open("Tea_data.dat",ios::binary); if(!infile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Teatop;i++) infile.read((char *)&Tea[i],sizeof(Tea[i])); infile.close(); cout<<"读取成功!"<<endl; } void Tea_mune(TeaManager TM) { int b; char c; do{ cout<<"教师管理"<<endl; cout<<"=========================================================================================="<<endl; cout<<"| 1.添加 "; cout<<"2.查询 "; cout<<"3.显示 "; cout<<"4.编辑 "; cout<<"5.删除 "; cout<<"6.统计 "; cout<<"7.保存 "; cout<<"8.读取 "; cout<<"0.退出 |"<<endl; cout<<"=========================================================================================="<<endl; cout<<"请选择:";cin>>b; switch(b) { case 1:TM.Add();break; case 2:TM.Search();break; case 3:TM.Show();break; case 4:TM.Edit();break; case 5:TM.Delete();break; case 6:cout<<"共有教师人数:"<<Teatop<<endl;break; case 7:TM.Save();break; case 8:TM.Read();break; default:cout<<"\n error"<<endl;break; case 0:break; } cout<<"按回车键继续"<<endl; flushall(); c=getchar(); system("cls"); }while(b!=0); } class Tester:virtual public person { public: char testroom[10]; char post[10]; void Input() { cout<<"Input num:";cin>>num; cout<<"Input name:";cin>>name; cout<<"Input sex:";cin>>sex; cout<<"Input age:";cin>>age; cout<<"Input testroom:";cin>>testroom; cout<<"Input post:";cin>>post; } void Output() { cout<<"编号: "<<num<<" "<<"姓名: "<<name<<" "<<"性别: "<<sex<<" "<<"年龄: "<<age<< " "<<"所在实验室: "<<testroom<<" "<<"职务: "<<post<<endl; } }; Tester Test[MAX]; static int Testop; class TestManager { public: int Add(); int Search(); void Show(); void Edit(); int Delete(); void Save(); void Read(); }; int TestManager::Add() { Tester t; int i,nu; if(Testop==MAX) {cout<<"人数已满"<<endl; return 0; } cout<<"请输入编号:";cin>>nu; for(i=0;i<Testop;i++) { if(nu==Test[i].num) {cout<<"已有编号,请从输入"<<endl; return 0; } } t.Input(); Test[Testop]=t; Testop++; cout<<"添加成功!"<<endl; return 1; } int TestManager::Search() { int j,n; cout<<"请输入编号:";cin>>n; for(j=0;j<Testop;j++) { if(n==Test[j].num) break; } if(j==Testop) cout<<"没有此人!"<<endl; else Test[j].Output(); return 1; } void TestManager::Show() { int i; if(Testop==0) {cout<<"记录为空!"<<endl; return;} for(i=0;i<Testop;i++) Test[i].Output(); } void TestManager::Edit() { Tester t1; int j,n; cout<<"请输入要编辑的人的编号:";cin>>n; for(j=0;j<Testop;j++) { if(n==Test[j].num) break; } if(j==Testop) {cout<<"没有此人!"<<endl;return;}; cout<<"输入修改后的信息,编号不能改:"<<endl; t1.Input(); Test[j]=t1; cout<<"编辑成功!"<<endl; } int TestManager::Delete() { int j,n; cout<<"请输入要删除的人的编号:";cin>>n; for(j=0;j<Testop;j++) { if(n==Test[j].num) break; } if(j==Testop) {cout<<"没有此人!"<<endl;return 0;}; for(j;j<Testop;j++) { Test[j]=Test[j+1]; } Testop--; cout<<"删除成功!"<<endl; return 1; } void TestManager::Save() { int i; ofstream outfile,outfile1; outfile1.open("Testop.dat",ios::out); outfile1<<Testop; outfile.open("Test_data.dat",ios::binary); if(!outfile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Testop;i++) outfile.write((char *)&Test[i],sizeof(Test[i])); outfile.close(); cout<<"保存成功!"<<endl; } void TestManager::Read() { int i; ifstream infile,infile1; infile1.open("Testop.dat",ios::in); infile1>>Testop; infile.open("Test_data.dat",ios::binary); if(!infile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Testop;i++) infile.read((char *)&Test[i],sizeof(Test[i])); infile.close(); cout<<"读取成功!"<<endl; } void Test_mune(TestManager TM) { int b; char c; do{ cout<<"实验人员管理"<<endl; cout<<"=========================================================================================="<<endl; cout<<"| 1.添加 "; cout<<"2.查询 "; cout<<"3.显示 "; cout<<"4.编辑 "; cout<<"5.删除 "; cout<<"6.统计 "; cout<<"7.保存 "; cout<<"8.读取 "; cout<<"0.退出 |"<<endl; cout<<"=========================================================================================="<<endl; cout<<"请选择:";cin>>b; switch(b) { case 1:TM.Add();break; case 2:TM.Search();break; case 3:TM.Show();break; case 4:TM.Edit();break; case 5:TM.Delete();break; case 6:cout<<"共有实验员人数:"<<Testop<<endl;break; case 7:TM.Save();break; case 8:TM.Read();break; default:cout<<"\n error"<<endl;break; case 0:break; } cout<<"按回车键继续"<<endl; flushall(); c=getchar(); system("cls"); }while(b!=0); } class Policer:virtual public person { public: char polices[10]; char post1[10]; void Input() { cout<<"Input num:";cin>>num; cout<<"Input name:";cin>>name; cout<<"Input sex:";cin>>sex; cout<<"Input age:";cin>>age; cout<<"Input polices:";cin>>polices; cout<<"Input post1:";cin>>post1; } void Output() { cout<<"编号: "<<num<<" "<<"姓名: "<<name<<" "<<"性别: "<<sex<<" "<<"年龄: "<<age<< " "<<"政治面貌: "<<polices<<" "<<"职称: "<<post1<<endl; } }; Policer Policers[MAX]; static int Policersop; class PolicerManager { public: int Add(); int Search(); void Show(); void Edit(); int Delete(); void Save(); void Read(); }; int PolicerManager::Add() { Policer t; int i,nu; if(Policersop==MAX) {cout<<"人数已满"<<endl; return 0; } cout<<"请输入编号:";cin>>nu; for(i=0;i<Policersop;i++) { if(nu==Policers[i].num) {cout<<"已有编号,请从输入"<<endl; return 0; } } t.Input(); Policers[Policersop]=t; Policersop++; cout<<"添加成功!"<<endl; return 1; } int PolicerManager::Search() { int j,n; cout<<"请输入编号:";cin>>n; for(j=0;j<Policersop;j++) { if(n==Policers[j].num) break; } if(j==Policersop) cout<<"没有此人!"<<endl; else Policers[j].Output(); return 1; } void PolicerManager::Show() { int i; if(Policersop==0) {cout<<"记录为空!"<<endl; return;} for(i=0;i<Policersop;i++) Policers[i].Output(); } void PolicerManager::Edit() { Policer t1; int j,n; cout<<"请输入要编辑的人的编号:";cin>>n; for(j=0;j<Policersop;j++) { if(n==Policers[j].num) break; } if(j==Policersop) {cout<<"没有此人!"<<endl;return;}; cout<<"输入修改后的信息,编号不能改:"<<endl; t1.Input(); Policers[j]=t1; cout<<"编辑成功!"<<endl; } int PolicerManager::Delete() { int j,n; cout<<"请输入要删除的人的编号:";cin>>n; for(j=0;j<Policersop;j++) { if(n==Policers[j].num) break; } if(j==Policersop) {cout<<"没有此人!"<<endl;return 0;}; for(j;j<Policersop;j++) { Policers[j]=Policers[j+1]; } Policersop--; cout<<"删除成功!"<<endl; return 1; } void PolicerManager::Save() { int i; ofstream outfile,outfile1; outfile1.open("Policersop.dat",ios::out); outfile1<<Policersop; outfile.open("Policers_data.dat",ios::binary); if(!outfile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Policersop;i++) outfile.write((char *)&Policers[i],sizeof(Policers[i])); outfile.close(); cout<<"保存成功!"<<endl; } void PolicerManager::Read() { int i; ifstream infile,infile1; infile1.open("Policersop.dat",ios::in); infile1>>Policersop; infile.open("Policers_data.dat",ios::binary); if(!infile) {cerr<<"open error!"<<endl; return; } for(i=0;i<Policersop;i++) infile.read((char *)&Policers[i],sizeof(Policers[i])); infile.close(); cout<<"读取成功!"<<endl; } void Policers_mune(PolicerManager TM) { int b; char c; do{ cout<<"行政人员管理"<<endl; cout<<"=========================================================================================="<<endl; cout<<"| 1.添加 "; cout<<"2.查询 "; cout<<"3.显示 "; cout<<"4.编辑 "; cout<<"5.删除 "; cout<<"6.统计 "; cout<<"7.保存 "; cout<<"8.读取 "; cout<<"0.退出 |"<<endl; cout<<"=========================================================================================="<<endl; cout<<"请选择:";cin>>b; switch(b) { case 1:TM.Add();break; case 2:TM.Search();break; case 3:TM.Show();break; case 4:TM.Edit();break; case 5:TM.Delete();break; case 6:cout<<"共有行政员人数:"<<Policersop<<endl;break; case 7:TM.Save();break; case 8:TM.Read();break; default:cout<<"\n error"<<endl;break; case 0:break; } cout<<"按回车键继续"<<endl; flushall(); c=getchar(); system("cls"); }while(b!=0); } int main() { TeaManager Tmer1; TestManager Tetmer; PolicerManager Polimer; int a=1,m=0; char c; cout<<" *************************************"; cout<<endl<<" $ 高校人员管理系统 $"<<endl; cout<<" *************************************"; cout<<endl<<"请输入密码:";cin>>m; if(m!=666) { cout<<"密码错误!"<<endl; flushall(); c=getchar(); return 0; } while(a) { system("cls"); cout<<endl; cout<<" ****欢迎使用高校人员信息管理系统****"<<endl; cout<<" ================================="<<endl; cout<<" | 1.教师管理 |"<<endl; cout<<" | 2.实验员管理 |"<<endl; cout<<" | 3.行政员管理 |"<<endl; cout<<" | 0.退出 |"<<endl; cout<<" ================================="<<endl; cout<<"请选择:";cin>>a; switch(a) { case 1:Tea_mune(Tmer1);break; case 2:Test_mune(Tetmer);break; case 3:Policers_mune(Polimer);break; case 0:break; default:cout<<"\n error"<<endl; cout<<"按回车键继续"<<endl; flushall(); c=getchar(); break; } } cout<<endl<<"谢谢使用"<<endl; flushall(); c=getchar(); return 0; }
文件读取问题,文件已存在,和项目存在在E盘下,但是文件打不开,哪位高手指点一下
ifstream in; in.open("huff.txt"); if (!in.is_open()) { cout << "读取错误" << endl; exit(1); } while (in >> ch)//读取进行数据计数 { hash[ch]++; } in.close();
为什么我看了这个关于高校人员信息管理系统设计的代码运行时总是会说找不到“common.h”这个文件,这个那里有错误呢?
#ifndef COMMON_H_INCLUDED #define COMMON_H_INCLUDED #include<string> #include<iostream> #include<iomanip> class COMMON { protected: std::string name; bool sex; int age; std::string id; static int person_sum; static int man_sum; static int woman_sum; public: COMMON(std::string a, bool b, int c, std::string d); virtual ~COMMON(); static int get_person_sum(); static int get_man_sum(); static int get_woman_sum(); virtual void show(){} virtual void show_row(){} virtual bool change(){} std::string get_name(){return name;} bool get_sex(){return sex;} int get_age(){return age;} std::string get_id(){return id;} }; int COMMON::person_sum = 0; int COMMON::man_sum = 0; int COMMON::woman_sum = 0; int COMMON::get_person_sum() { return person_sum; } int COMMON::get_man_sum() { return man_sum; } int COMMON::get_woman_sum() { return woman_sum; } COMMON::COMMON(std::string a, bool b, int c, std::string d): name(a), sex(b), age(c), id(d) { person_sum++; if(b) man_sum++; else woman_sum++; } COMMON::~COMMON() { person_sum--; if(sex) man_sum--; else woman_sum--; } #endif // COMMON_H_INCLUDED tester.h 实验员: #ifndef TESTER_H_INCLUDED #define TESTER_H_INCLUDED #include"common.h" class TESTER: public COMMON { private: std::string laboratory; std::string title; static int tester_sum; public: TESTER(std::string a = "haha", bool b = 1, int c = 19, std::string d = "1", std::string e = "tt", std::string f = "学生"); ~TESTER(); static int get_tester_sum(); virtual void show(); virtual void show_row(); virtual bool change(); std::string get_laboratory(){return laboratory;} std::string get_title(){return title;} }; int TESTER::tester_sum = 0; int TESTER::get_tester_sum() { return tester_sum; } TESTER::TESTER(std::string a, bool b, int c, std::string d, std::string e, std::string f): COMMON(a,b,c,d), laboratory(e), title(f) { tester_sum++; } TESTER::~TESTER() { tester_sum--; } void TESTER::show() { std::cout << "实验员:\n"; std::cout << "姓名:\t\t" << name << std::endl; std::cout << "姓别:\t\t"; if(sex) std::cout << "男\n"; else std::cout << "女\n"; std::cout << "年龄:\t\t" << age << std::endl; std::cout << "ID:\t\t" << id << std::endl; std::cout << "所属实验室:\t" << laboratory << std::endl; std::cout << "职务:\t\t" << title << std::endl; } void TESTER::show_row() { std::cout << std::left << std::setw(8) << name; if(sex) std::cout << std::left << std::setw(8) << "男"; else std::cout << std::left << std::setw(8) << "女"; std::cout << std::left << std::setw(8) << age; std::cout << std::left << std::setw(16) << id; std::cout << std::left << std::setw(16) << laboratory; std::cout << std::left << std::setw(16) << title; std::cout << std::endl; } bool TESTER::change() { std::cout << "姓名:\t\t" ; std::string new_name; std::cin >> new_name; for(unsigned int i = 0; i < new_name.length(); i++) { if(new_name[i] >= '0' && new_name[i] <= '9') { std::cout << "输入非法,输入任意键返回\n"; return 1; } } name = new_name; std::cout << "姓别:\t\t"; std::string a; std::cin >> a; if(sex) man_sum--; else woman_sum--; if(a == "男") sex = 1, man_sum++; else sex = 0, woman_sum++; std::cout << "年龄:\t\t"; std::cin >> age; std::cout << "所属实验室:\t"; std::cin >> laboratory; std::cout << "职务:\t\t"; std::cin >> title; return 0; } #endif // TESTER_H_INCLUDED teacher.h 教师: #ifndef TEACHER_H_INCLUDED #define TEACHER_H_INCLUDED #include"common.h" class TEACHER: virtual public COMMON { protected: std::string department; std::string profession; std::string title; static int teacher_sum; public: TEACHER(std::string a = "xixi", bool b = 1, int c = 30, std::string d = "213", std::string e = "计算机与信息工程学院", std::string f = "计算机科学与技术", std::string g = "教师"); ~TEACHER(); static int get_teacher_sum(); virtual void show(); virtual void show_row(); virtual bool change(); std::string get_department(){return department;} std::string get_profession(){return profession;} std::string get_title(){return title;} }; int TEACHER::teacher_sum = 0; int TEACHER::get_teacher_sum() { return teacher_sum; } TEACHER::TEACHER(std::string a, bool b, int c, std::string d, std::string e, std::string f, std::string g): COMMON(a,b,c,d), department(e), profession(f), title(g) { teacher_sum++; } TEACHER::~TEACHER() { teacher_sum--; } void TEACHER::show() { std::cout << "教师:\n"; std::cout << "姓名:\t\t" << name << std::endl; std::cout << "姓别:\t\t"; if(sex) std::cout << "男\n"; else std::cout << "女\n"; std::cout << "年龄:\t\t" << age << std::endl; std::cout << "ID:\t\t" << id << std::endl; std::cout << "院系:\t\t" << department << std::endl; std::cout << "专业:\t\t" << profession << std::endl; std::cout << "职务:\t\t" << title << std::endl; } void TEACHER::show_row() { std::cout << std::left << std::setw(8) << name; if(sex) std::cout << std::left << std::setw(8) << "男"; else std::cout << std::left << std::setw(8) << "女"; std::cout << std::left << std::setw(8) << age; std::cout << std::left << std::setw(16) << id; std::cout << std::left << std::setw(16) << department; std::cout << std::left << std::setw(16) << profession; std::cout << std::left << std::setw(16) << title; std::cout << std::endl; } bool TEACHER::change() { std::cout << "姓名:\t\t" ; std::string new_name; std::cin >> new_name; for(unsigned int i = 0; i < new_name.length(); i++) { if(new_name[i] >= '0' && new_name[i] <= '9') { std::cout << "输入非法,输入任意键返回\n"; return 1; } } name = new_name; std::cout << "姓别:\t\t"; std::string a; std::cin >> a; if(sex) man_sum--; else woman_sum--; if(a == "男") sex = 1, man_sum++; else sex = 0, woman_sum++; std::cout << "年龄:\t\t"; std::cin >> age; std::cout << "院系:\t\t"; std::cin >> department; std::cout << "专业:\t\t"; std::cin >> profession; std::cout << "职务:\t\t"; std::cin >> title; return 0; } #endif // TEACHER_H_INCLUDED administrator.h 行政人员: #ifndef ADMINISTRATOR_H_INCLUDED #define ADMINISTRATOR_H_INCLUDED #include"common.h" class ADMINISTRATOR: virtual public COMMON { protected: std::string politics; std::string position; static int administrator_sum; public: ADMINISTRATOR(std::string a = "huhu", bool b = 1, int c = 39, std::string d = "176", std::string e = "群众", std:: string f = "社会主义新青年"); ~ADMINISTRATOR(); static int get_administrator_sum(); virtual void show(); virtual void show_row(); virtual bool change(); std::string get_politics(){return politics;} std::string get_position(){return position;} }; int ADMINISTRATOR::administrator_sum = 0; int ADMINISTRATOR::get_administrator_sum() { return administrator_sum; } ADMINISTRATOR::ADMINISTRATOR(std::string a, bool b, int c, std::string d, std::string e, std::string f): COMMON(a,b,c,d), politics(e), position(f) { administrator_sum++; } ADMINISTRATOR::~ADMINISTRATOR() { administrator_sum--; } void ADMINISTRATOR::show() { std::cout << "行政人员:\n"; std::cout << "姓名:\t\t" << name << std::endl; std::cout << "姓别:\t\t"; if(sex) std::cout << "男\n"; else std::cout << "女\n"; std::cout << "年龄:\t\t" << age << std::endl; std::cout << "ID:\t\t" << id << std::endl; std::cout << "政治面貌:\t" << politics << std::endl; std::cout << "职称:\t\t" << position << std::endl; } void ADMINISTRATOR::show_row() { std::cout << std::left << std::setw(8) << name; if(sex) std::cout << std::left << std::setw(8) << "男"; else std::cout << std::left << std::setw(8) << "女"; std::cout << std::left << std::setw(8) << age; std::cout << std::left << std::setw(16) << id; std::cout << std::left << std::setw(16) << politics; std::cout << std::left << std::setw(16) << position; std::cout << std::endl; } bool ADMINISTRATOR::change() { std::cout << "姓名:\t\t" ; std::string new_name; std::cin >> new_name; for(unsigned int i = 0; i < new_name.length(); i++) { if(new_name[i] >= '0' && new_name[i] <= '9') { std::cout << "输入非法,输入任意键返回\n"; return 1; } } name = new_name; std::cout << "姓别:\t\t"; std::string a; std::cin >> a; if(sex) man_sum--; else woman_sum--; if(a == "男") sex = 1, man_sum++; else sex = 0, woman_sum++; std::cout << "年龄:\t\t"; std::cin >> age; std::cout << "政治面貌:\t"; std::cin >> politics; std::cout << "职称:\t\t"; std::cin >> position; return 0; } #endif // ADMINISTRATOR_H_INCLUDED tea&admi.h 教师及行政人员: #ifndef TEAADMI_H_INCLUDED #define TEAADMI_H_INCLUDED #include"teacher.h" #include"administrator.h" class TEAADMI: public TEACHER, public ADMINISTRATOR { private: static int teaadmi_sum; public: TEAADMI(std::string a = "maomao", bool b = 1, int c = 59, std::string d = "0", std::string e = "计算机与信息工程学院", std::string f = "计算机科学与技术", std::string g = "教师", std::string h = "群众", std:: string i = "社会主义新青年"); ~TEAADMI(); static int get_teaadmi_sum(); virtual void show(); virtual void show_row(); virtual bool change(); }; int TEAADMI::teaadmi_sum = 0; int TEAADMI::get_teaadmi_sum() { return teaadmi_sum; } TEAADMI::TEAADMI(std::string a, bool b, int c, std::string d, std::string e, std::string f, std::string g, std::string h, std::string i): COMMON(a,b,c,d), TEACHER(a,b,c,d,e,f,g), ADMINISTRATOR(a,b,c,d,h,i) { teaadmi_sum++; } TEAADMI::~TEAADMI() { teaadmi_sum--; } void TEAADMI::show() { std::cout << "教师及行政人员:\n"; std::cout << "姓名:\t\t" << name << std::endl; std::cout << "姓别:\t\t"; if(sex) std::cout << "男\n"; else std::cout << "女\n"; std::cout << "年龄:\t\t" << age << std::endl; std::cout << "ID:\t\t" << id << std::endl; std::cout << "院系:\t\t" << department << std::endl; std::cout << "专业:\t\t" << profession << std::endl; std::cout << "职务:\t\t" << title << std::endl; std::cout << "政治面貌:\t" << politics << std::endl; std::cout << "职称:\t\t" << position << std::endl; } void TEAADMI::show_row() { std::cout << std::left << std::setw(8) << name; if(sex) std::cout << std::left << std::setw(8) << "男"; else std::cout << std::left << std::setw(8) << "女"; std::cout << std::left << std::setw(8) << age; std::cout << std::left << std::setw(16) << id; std::cout << std::left << std::setw(16) << department; std::cout << std::left << std::setw(16) << profession; std::cout << std::left << std::setw(16) << title; std::cout << std::left << std::setw(16) << politics; std::cout << std::left << std::setw(16) << position; std::cout << std::endl; } bool TEAADMI::change() { std::cout << "姓名:\t\t" ; std::string new_name; std::cin >> new_name; for(unsigned int i = 0; i < new_name.length(); i++) { if(new_name[i] >= '0' && new_name[i] <= '9') { std::cout << "输入非法,输入任意键返回\n"; return 1; } } name = new_name; std::cout << "姓别:\t\t"; std::string a; std::cin >> a; if(sex) man_sum--; else woman_sum--; if(a == "男") sex = 1, man_sum++; else sex = 0, woman_sum++; std::cout << "年龄:\t\t"; std::cin >> age; std::cout << "院系:\t\t"; std::cin >> department; std::cout << "专业:\t\t"; std::cin >> profession; std::cout << "职务:\t\t"; std::cin >> title; std::cout << "政治面貌:\t"; std::cin >> politics; std::cout << "职称:\t\t"; std::cin >> position; return 0; } #endif // TEA&ADMI_H_INCLUDED interface.h 界面: #ifndef INTERFACE_H_INCLUDED #define INTERFACE_H_INCLUDED #include"teacher.h" #include"tester.h" #include"administrator.h" #include"tea&admi.h" #include<stdio.h> #include<stdlib.h> #include<conio.h> /*----------------函数声明-------------------*/ void interface_login(); //初始界面 void interface_Manager(); //管理者界面 void staff_list(); //管理者清单 #include"myfun.h" /*----------------函数定义-------------------*/ void interface_Manager() //管理界面 { int n=1; while(n) { system("cls"); std::cout << "------------欢迎来到只有神知道的领域 o(*≧▽≦)ツ----------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "------------- 输入1 添加信息 -------------\n"; std::cout << "------------- 输入2 查询信息 -------------\n"; std::cout << "------------- 输入3 浏览信息 -------------\n"; std::cout << "------------- 输入4 修改信息 -------------\n"; std::cout << "------------- 输入5 删除信息 -------------\n"; std::cout << "------------- 输入6 统计信息 -------------\n"; std::cout << "------------- 输入0 返回上一级 -------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cin >> n; switch(n) { case 1:Add_information();break; case 2: { int a = 1; if(!Query_information()) break; while(a) { std::cout << "输入1 修改信息\n"; std::cout << "输入2 删除信息\n"; std::cout << "输入0 返回上一级\n"; std::cin >> a; switch(a) { case 1:Edit_information(); a = 0; break; case 2:Delete_information(); a= 0; break; } } break; } case 3: { int a=1; while(a) { Browse_information(); std::cout << "输入1 修改信息\n"; std::cout << "输入2 删除信息\n"; std::cout << "输入0 返回上一级\n"; std::cin >> a; switch(a) { case 1:Edit_information(); break; case 2:Delete_information(); break; } } break; } case 4:Edit_information(); break; case 5:Delete_information(); break; case 6:count_information(); break; } } } void interface_login() //登入界面 { int n=1; while(n) { system("cls"); std::cout << "----------欢迎进入高校人员信息管理系统 o(*≧▽≦)ツ--------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "------------- 输入1 管理员账号登入 -------------\n"; std::cout << "------------- 输入2 查询信息 -------------\n"; std::cout << "------------- 输入3 浏览信息 -------------\n"; std::cout << "------------- 输入4 统计信息 -------------\n"; std::cout << "------------- 输入5 观看制作信息 -------------\n"; std::cout << "------------- 输入0 关闭系统 -------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cin >> n; switch(n) { case 1:login(); break; case 2:if(Query_information()) std::cout << "输入任意键,返回上一级\n", getch(); break; case 3:Browse_information(); std::cout << "输入任意键,返回上一级\n"; getch(); break; case 4:count_information(); break; case 5:staff_list(); break; } } } void staff_list() //制作人员名单 { system("cls"); std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "--------------Include the following members----------------\n"; std::cout << "-------------- wzy ----------------\n"; std::cout << "-------------- ToRe ----------------\n"; std::cout << "-----------------------------------------------------------\n"; std::cout << "-----------------------------------------------------------\n\n\n"; std::cout << "\n输入任意键返回主菜单…\n"; getch(); } #endif // INTERFACE_H_INCLUDED myfun.h 主要功能实现: #ifndef MYFUN_H_INCLUDED #define MYFUN_H_INCLUDED #include<vector> #include<map> #include<fstream> /*----------------成员声明-------------------*/ std::multimap<std::string, COMMON *> sear; std::vector<TESTER*> tester; std::vector<TEACHER*> teacher; std::vector<ADMINISTRATOR*> administrator; std::vector<TEAADMI*> teaadmi; /*----------------函数声明-------------------*/ void Information_load(); //信息加载 void room_delete(); //释放空间 void login(); //登入函数 void Add_information(); //添加信息 bool Query_information(); //显示查询信息 void Browse_information(); //浏览信息 void Edit_information(); //修改信息 void Delete_information(); //删除信息 void count_information(); //统计信息 /*----------------函数定义-------------------*/ void Information_load() //信息加载 { std::ifstream in; in.open("实验员.txt", std::ios::in); std::string name, id; int age; bool sex; while(in >> name) { std::string laboratory, title; in >> sex >> age >> id >> laboratory >> title; TESTER *t = new TESTER(name,sex,age,id,laboratory,title); tester.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); } in.close(); in.open("教师.txt", std::ios::in); while(in >> name) { std::string department, profession, title; in >> sex >> age >> id >> department >> profession >> title; TEACHER *t = new TEACHER(name,sex,age,id,department,profession,title); teacher.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); } in.close(); in.open("行政人员.txt", std::ios::in); while(in >> name) { std::string politics, position; in >> sex >> age >> id >> politics >> position; ADMINISTRATOR *t = new ADMINISTRATOR(name,sex,age,id,politics,position); administrator.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); } in.close(); in.open("教师&行政人员.txt", std::ios::in); while(in >> name) { std::string department, profession, title, politics, position; in >> sex >> age >> id >> department >> profession >> title >> politics >> position; TEAADMI *t = new TEAADMI(name,sex,age,id,department,profession,title,politics,position); teaadmi.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); } } void room_delete() //释放空间 { for(auto iter:tester) delete iter; for(auto iter:teacher) delete iter; for(auto iter:administrator) delete iter; for(auto iter:teaadmi) delete iter; } void login() //登入函数 { std::string com; system("cls"); std::cout << "请输入密码\n"; getchar(); std::getline(std::cin,com); if(com == "bokuwasinnsekainokamitonaru") interface_Manager(); else { std::cout << "密码错误,输入任意键返回上一级\n"; getch(); } } void Add_information()//添加信息 { system("cls"); std::cout << "请输入添加类型\n1:实验员\t2:教师\t\t3:行政人员\t4:教师及行政人员\n"; int flag; std::cin >> flag; std::string name, se, id; int age; bool sex = 0; std::cout << "ID:\t\t"; std::cin >> id; for(unsigned int i = 0; i < id.length(); i++) { if(id[i] < '0' || id[i] > '9') { std::cout << "输入非法,输入任意键返回\n"; getch(); return; } } std::multimap<std::string, COMMON *>::iterator beg, en; beg = sear.lower_bound(id); en = sear.upper_bound(id); if(beg != en) { std::cout << "此ID已存在,输入任意键返回\n"; getch(); return; } std::cout << "姓名:\t\t"; std::cin >> name; for(unsigned int i = 0; i < name.length(); i++) { if(name[i] >= '0' && name[i] <= '9') { std::cout << "输入非法,输入任意键返回\n"; getch(); return; } } std::cout << "性别:\t\t"; std::cin >> se; if(se == "男") sex = 1; std::cout << "年龄:\t\t"; std::cin >> age; if(flag == 1) { std::string laboratory, title; std::cout << "实验室名称:\t"; std::cin >> laboratory; std::cout << "职务:\t\t"; std::cin >> title; TESTER *t = new TESTER(name,sex,age,id,laboratory,title); tester.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); std::ofstream out; out.open("实验员.txt", std::ios::app); out << name << " " << sex << " " << age << " " << id << " "; out << laboratory << " " << title << std::endl; out.close(); } if(flag == 2) { std::string department, profession, title; std::cout << "院系:\t\t"; std::cin >> department; std::cout << "专业:\t\t"; std::cin >> profession; std::cout << "职务:\t\t"; std::cin >> title; TEACHER *t = new TEACHER(name,sex,age,id,department,profession,title); teacher.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); std::ofstream out; out.open("教师.txt", std::ios::app); out << name << " " << sex << " " << age << " " << id << " "; out << department << " " << profession << " " << title << std::endl; out.close(); } if(flag == 3) { std::string politics, position; std::cout << "政治面貌:\t"; std::cin >> politics; std::cout << "职称:\t\t"; std::cin >> position; ADMINISTRATOR *t = new ADMINISTRATOR(name,sex,age,id,politics,position); administrator.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); std::ofstream out; out.open("行政人员.txt", std::ios::app); out << name << " " << sex << " " << age << " " << id << " "; out << politics << " " << position << std::endl; out.close(); } if(flag == 4) { std::string department, profession, title, politics, position; std::cout << "院系:\t\t"; std::cin >> department; std::cout << "专业:\t\t"; std::cin >> profession; std::cout << "职务:\t\t"; std::cin >> title; std::cout << "政治面貌:\t"; std::cin >> politics; std::cout << "职称:\t\t"; std::cin >> position; TEAADMI *t = new TEAADMI(name,sex,age,id,department,profession,title,politics,position); teaadmi.push_back(t); sear.insert(make_pair(name, t)); sear.insert(make_pair(id, t)); std::ofstream out; out.open("教师&行政人员.txt", std::ios::app); out << name << " " << sex << " " << age << " " << id << " "; out << department << " " << profession << " " << title << " "; out << politics << " " << position << std::endl; out.close(); } std::cout << "注册成功,输入任意键返回\n"; getch(); } void Delete_information() //删除信息 { std::cout << "输入目标ID以确认\n"; std::string aid; std::cin >> aid; for(unsigned int i = 0; i < aid.length(); i++) { if(aid[i] < '0' || aid[i] > '9') { std::cout << "输入非法,输入任意键返回\n"; getch(); return; } } std::multimap<std::string, COMMON *>::iterator beg, en, iter; beg = sear.lower_bound(aid); en = sear.upper_bound(aid); if(beg == en) { std::cout << "目标不存在,输入任意键返回\n"; getch(); return; } std::string aid_name = beg -> second -> get_name(); sear.erase(beg); beg = sear.lower_bound(aid_name); en = sear.upper_bound(aid_name); for(iter = beg; iter != en; ++iter) if(iter -> second -> get_id() == aid) {sear.erase(iter); break;} bool flag = 0; std::ofstream out; out.open("实验员.txt", std::ios::out); for(std::vector<TESTER*>::iterator it = tester.begin(); it != tester.end();) { if((*it) -> get_id() == aid){flag = 1; delete (*it); it = tester.erase(it); continue;} out << (*it) -> get_name() << " " << (*it) -> get_sex() << " "; out << (*it) -> get_age() << " " << (*it) -> get_id() << " "; out << (*it) -> get_laboratory() << " " << (*it) -> get_title() << std::endl; ++it; } out.close(); if(flag) {std::cout << "删除成功,输入任意键返回\n"; getch(); return;} out.open("教师.txt", std::ios::out); for(std::vector<TEACHER*>::iterator it = teacher.begin(); it != teacher.end();) { if((*it) -> get_id() == aid){flag = 1; delete (*it); it = teacher.erase(it); continue;} out << (*it) -> get_name() << " " << (*it) -> get_sex() << " "; out << (*it) -> get_age() << " " << (*it) -> get_id() << " "; out << (*it) -> get_department() << " " << (*it) -> get_profession() << " " << (*it) -> get_title() << std::endl; it++; } out.close(); if(flag) {std::cout << "删除成功,输入任意键返回\n"; getch(); return;} out.open("行政人员.txt", std::ios::out); for(std::vector<ADMINISTRATOR*>::iterator it = administrator.begin(); it != administrator.end();) { if((*it) -> get_id() == aid){flag = 1; delete (*it); it = administrator.erase(it); continue;} out << (*it) -> get_name() << " " << (*it) -> get_sex() << " "; out << (*it) -> get_age() << " " << (*it) -> get_id() << " "; out << (*it) -> get_politics() << " " << (*it) -> get_position() << std::endl; it++; } out.close(); if(flag) {std::cout << "删除成功,输入任意键返回\n"; getch(); return;} out.open("教师&行政人员.txt", std::ios::out); for(std::vector<TEAADMI*>::iterator it = teaadmi.begin(); it != teaadmi.end();) { if((*it) -> get_id() == aid){flag = 1; delete (*it); it = teaadmi.erase(it); continue;} out << (*it) -> get_name() << " " << (*it) -> get_sex() << " "; out << (*it) -> get_age() << " " << (*it) -> get_id() << " "; out << (*it) -> get_department() << " " << (*it) -> get_profession() << " " << (*it) -> get_title() << " "; out << (*it) -> get_politics() << " " << (*it) -> get_position() << std::endl; ++it; } out.close(); std::cout << "删除成功,输入任意键返回\n"; getch(); } void Edit_information() //修改信息 { std::cout << "输入目标ID以确认\n"; std::string aid; std::cin >> aid; for(unsigned int i = 0; i < aid.length(); i++) { if(aid[i] < '0' || aid[i] > '9') { std::cout << "输入非法,输入任意键返回\n"; getch(); return; } } std::multimap<std::string, COMMON *>::iterator beg, en, iter; beg = sear.lower_bound(aid); en = sear.upper_bound(aid); if(beg == en) { std::cout << "目标不存在,输入任意键返回\n"; getch(); return; } system("cls"); bool flag = 0; std::ofstream out; out.open("实验员.txt", std::ios::out); for(auto iter:tester) { if(iter -> get_id() == aid) { iter -> show(), std::cout << "\n\n根据提示输入修改信息\n\n"; while(iter -> change()) { system("cls"); iter -> show(); std::cout << "输入非法,请重新输入\n"; } flag = 1; } out << iter -> get_name() << " " << iter -> get_sex() << " "; out << iter -> get_age() << " " << iter -> get_id() << " "; out << iter -> get_laboratory() << " " << iter -> get_title() << std::endl; } out.close(); if(flag) {std::cout << "修改成功,输入任意键返回\n"; getch(); return;} out.open("教师.txt", std::ios::out); for(auto iter:teacher) { if(iter -> get_id() == aid) { iter -> show(), std::cout << "\n\n根据提示输入修改信息\n\n"; while(iter -> change()) { system("cls"); iter -> show(); std::cout << "输入非法,请重新输入\n"; } flag = 1; } out << iter -> get_name() << " " << iter -> get_sex() << " "; out << iter -> get_age() << " " << iter -> get_id() << " "; out << iter -> get_department() << " " << iter -> get_profession() << " " << iter -> get_title() << std::endl; } out.close(); if(flag) {std::cout << "修改成功,输入任意键返回\n"; getch(); return;} out.open("行政人员.txt", std::ios::out); for(auto iter:administrator) { if(iter -> get_id() == aid) { iter -> show(), std::cout << "\n\n根据提示输入修改信息\n\n"; while(iter -> change()) { system("cls"); iter -> show(); std::cout << "输入非法,请重新输入\n"; } flag = 1; } out << iter -> get_name() << " " << iter -> get_sex() << " "; out << iter -> get_age() << " " << iter -> get_id() << " "; out << iter -> get_politics() << " " << iter -> get_position() << std::endl; } out.close(); if(flag) {std::cout << "修改成功,输入任意键返回\n"; getch(); return;} out.open("教师&行政人员.txt", std::ios::out); for(auto iter:teaadmi) { if(iter -> get_id() == aid) { iter -> show(), std::cout << "\n\n根据提示输入修改信息\n\n"; while(iter -> change()) { system("cls"); iter -> show(); std::cout << "输入非法,请重新输入\n"; } flag = 1; } out << iter -> get_name() << " " << iter -> get_sex() << " "; out << iter -> get_age() << " " << iter -> get_id() << " "; out << iter -> get_department() << " " << iter -> get_profession() << " " << iter -> get_title() << " "; out << iter -> get_politics() << " " << iter -> get_position() << std::endl; } out.close(); std::cout << "修改成功,输入任意键返回\n"; getch(); } bool Query_information() //查询函数 { system("cls"); std::cout << "输入目标姓名或ID以查询\n"; std::string aid; std::cin >> aid; std::multimap<std::string, COMMON *>::iterator beg, en, iter; beg = sear.lower_bound(aid); en = sear.upper_bound(aid); if(beg == en) { std::cout << "查询结果为空,输入任意键返回\n"; getch(); return 0; } for(iter = beg; iter != en; ++iter) { iter -> second -> show(); std::cout << std::endl; } return 1; } void Browse_information() //浏览函数 { system("cls"); std::cout << "-------------------实验员-------------------\n"; std::cout << "姓名\t" << "性别\t" << "年龄\t" << "ID\t\t" << "实验室名称\t" << "职务\n"; for(auto iter:tester) iter -> show_row(); std::cout << "\n------------------行政人员------------------\n"; std::cout << "姓名\t" << "性别\t" << "年龄\t" << "ID\t\t" << "政治面貌\t" << "职称\n"; for(auto iter:administrator) iter -> show_row(); std::cout << "\n--------------------教师--------------------\n"; std::cout << "姓名\t" << "性别\t" << "年龄\t" << "ID\t\t" << "院系\t\t" << "专业\t\t" << "职务\n"; for(auto iter:teacher) iter -> show_row(); std::cout << "\n-----------------行政人员&教师--------------\n"; std::cout << "姓名\t" << "性别\t" << "年龄\t" << "ID\t\t" << "政治面貌\t" << "职称\t\t" << "院系\t\t" << "专业\t\t" << "职务\n"; for(auto iter:teaadmi) iter -> show_row(); } void count_information() //统计信息 { system("cls"); std::cout << "员工总人数:\t\t" << COMMON::get_person_sum() << std::endl; std::cout << "男性人数:\t\t" << COMMON::get_man_sum() << std::endl; std::cout << "女性人数:\t\t" << COMMON::get_woman_sum() << std::endl; std::cout << "教师人数:\t\t" << TEACHER::get_teacher_sum() << std::endl; std::cout << "实验员人数:\t\t" << TESTER::get_tester_sum() << std::endl; std::cout << "行政管理人员人数:\t" << ADMINISTRATOR::get_administrator_sum() << std::endl; std::cout << "行政管理人员&教师人数:\t" << TEAADMI::get_teaadmi_sum() << std::endl; std::cout << "\n\n输入任意键返回上一级\n"; getch(); } #endif // MYFUN_H_INCLUDED main.cpp 主函数: #include"interface.h" int main() { Information_load(); //加载信息 interface_login(); //首界面 room_delete(); //释放空间 // count_information(); return 0; }
我想把保存在一个txt文件中的数据调用到一个类不知道如何成立
case 8:cout<<"\t\t此步是调用文件中的信息"<<endl; { ifstream readFile("课程设计保存.txt"); system("pause"); } break; //这是需要调用的文件名 class lesson { public: string date; int turn; string name; string type; void add() { cin>>date; cin>>turn; cin>>name; cin>>type; } void show(); void show1(); void allshow(); }; class student:public lesson { public: int count=0; int num; string name; string sex; int age; int classroom; lesson a[10]; void add(); void show(); void show1(); void show2(); void allshow(); void addlesson(); void save(); }; student stu[1000]; //怎么调用到这个lei'z
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问