第一次写入信息能成功,第二次运行程序在中途会自动退出,删除写入信息后又恢复最初状况,困惑很多天了,求大佬解答
#include #include<windows.h> #include #include #include #include using namespace std; SYSTEMTIME _time; struct Student { string name; string number; string sex; string college; string major; string grade; string age; }; struct Accommodation { string _number; string name; string type; string floor; string bed; int fee; }; struct AccommodationInf { string number; string _mnumber; int amount; int year,month,day; }; //容错处理 int _correct(string n) { for(int i=0;i<n.length();i++) if(n[i]<'0'||n[i]>'9') return -1; return atoi(&n[0]); }
//判断是否登记过 int _judge(string n) { string *s; int i(0),i1(0),m=1,m1=-1; ifstream f("C:\学生类.txt"); if(f.fail()) return m1; else while(!f.eof()) { f>>s[i]; i++; } f.close(); for(int j=2;j<i-1;j+=7) if(n==s[j].substr(5,s[j].length()-5)) return m; return m1; }
void _write(Student s,Accommodation a) { string *s1; int i(0),i1(0); ifstream fs("C:\学生类.txt"); if(fs.fail()) { ofstream fs("C:\学生类.txt"); fs<<"共有学生1名"<<endl; fs<<"姓名:"<<s.name<<endl; fs<<"学号:"<<s.number<<endl; fs<<"年龄:"<<s.age<<endl; fs<<"性别:"<<s.sex<<endl; fs<<"学院:"<<s.college<<endl; fs<<"专业:"<<s.major<<endl; fs<<"年级:"<<s.grade<<endl<<endl; fs.close(); ofstream fa("C:\宿舍类.txt"); fa<<"宿舍编号:"<<a._number<<endl; fa<<"宿舍楼名:"<<a.name<<endl; fa<<"楼层号:"<<a.floor<<endl; fa<<"宿舍类型:"<<a.type<<endl; fa<<"收费标准:"<<a.fee<<endl; fa.close(); ofstream fi("C:\住宿信息类.txt"); fi<<"学号:"<<s.number<<endl; fi<<"宿舍编号:"<<a._number<<endl; fi<<"欠费:0元"<<endl; GetLocalTime(&_time); fi<<"入住时间:"<<_time.wYear<<"年"<<_time.wMonth<<"月"<<_time.wDay<<"日"<<_time.wHour<<"时"<<_time.wMinute<<"分"<<_time.wSecond<<"秒"<<endl<<endl; fi.close(); } else { while(!fs.eof()) { fs>>s1[i]; i++; } fs.close(); for(;atoi(s1[0].substr(8+i1,1).c_str())>='0'&&atoi(s1[0].substr(8+i1,1).c_str())<='9';i1++); int m=atoi(s1[0].substr(8,i1).c_str());m++; char *c; itoa(m,c,10); string ss=c; s1[0]="共有学生"+ss+"名"; ofstream fss("C:\学生类.txt"); for(int j=0;j<i-1;j++) { fss<<s1[j]<<endl; if(j%7==0) fss<<endl; } fs.close(); ofstream fs1("C:\学生类.txt",ios::app); fs1<<"姓名:"<<s.name<<endl; fs1<<"学号:"<<s.number<<endl; fs1<<"年龄:"<<s.age<<endl; fs1<<"性别:"<<s.sex<<endl; fs1<<"学院:"<<s.college<<endl; fs1<<"专业:"<<s.major<<endl; fs1<<"年级:"<<s.grade<<endl<<endl; fs1.close(); ofstream fa("C:\宿舍类.txt",ios::app); fa<<"宿舍编号:"<<a._number<<endl; fa<<"宿舍楼名:"<<a.name<<endl; fa<<"楼层号:"<<a.floor<<endl; fa<<"宿舍类型:"<<a.type<<endl; fa<<"收费标准:"<<a.fee<<endl; fa.close(); ofstream fi("C:\住宿信息类.txt",ios::app); fi<<"学号:"<<s.number<<endl; fi<<"宿舍编号:"<<a._number<<endl; fi<<"欠费:0元"<<endl; GetLocalTime(&_time); fi<<"入住时间:"<<_time.wYear<<"年"<<_time.wMonth<<"月"<<_time.wDay<<"日"<<_time.wHour<<"时"<<_time.wMinute<<"分"<<_time.wSecond<<"秒"<<endl<<endl; fi.close();
}
} class Operate { public: void _register(); void _delete(); }; void Operate::_register() { Student s; Accommodation a; AccommodationInf n; cout<<"请输入以下信息:(暂时不填输入空格)"<<endl; cout<<"学号:"; cin>>s.number; if(_judge(s.number)==1) cout<<"已经登记过,请选择添加或更改信息...."<<endl; else { cout<<endl<<"姓名:"; cin>>s.name; cout<<endl<<"年龄:"; cin>>s.age; cout<<endl<<"性别:"; cin>>s.sex; cout<<endl<<"学院:"; cin>>s.college; cout<<endl<<"专业:"; cin>>s.major; cout<<endl<<"年级:"; cin>>s.grade; system("cls"); cout<<"请输入以下信息:(暂时不填的输入空格)"<<endl; cout<<"宿舍编号"; cin>>a._number; cout<<endl<<"宿舍楼名:"; cin>>a.name; cout<<endl<<"楼层号:"; cin>>a.floor; q: cout<<endl<<"宿舍类型(几人间):"; cin>>a.type; if(a.type=="二人间") a.fee=1800; else if(a.type=="四人间") a.fee=1500; else if(a.type=="六人间") a.fee=1200; else if(a.type=="八人间") a.fee=900; else {cout<<"不存在该类型宿舍,请重新输入";goto q;} char m; cout<<"是否确定登记,请输入y或n(y是确定,n是不确定):"; cin>>m; if(toupper(m)=='Y') { _write(s,a);cout<<"登记成功!"<<endl; } else if(toupper(m)=='N') cout<<"登记失败!"<<endl; else cout<<"输入错误!"<<endl; } Sleep(1000);system("cls"); } void Operate::_delete() { q: int m; cout<<" *1.全部删除\n
*2.删除学生类信息\n
*3.删除学生住宿信息\n
*4.删除学生宿舍信息\n"; cout<<"请选择:"; cin>>m; if(m==1) {system("del C:\学生类.txt"); system("del C:\住宿信息类.txt"); system("del C:\宿舍类.txt"); } else if(m==2) system("del C:\学生类.txt"); else if(m==3) system("del C:\住宿信息类.txt"); else if(m==4) system("del C:\宿舍类.txt"); else { cout<<"输入错误,请重新输入!"; goto q; } cout<<"删除成功,两秒后退出!"<<endl; Sleep(2000);system("cls"); } int main() { system("color e1"); d: cout<<setw(30)<<setfill(' ')<<"*菜单*"<<endl<<endl; cout<<setw(25)<<setfill(' ')<<"*1.学生住宿信息登记"<<endl; cout<<setw(25)<<setfill(' ')<<"*2.删除信息"<<endl; cout<<"请选择:"<<endl; int m; Operate operate; cin>>m;system("cls"); if(m==1){operate._register();goto d;} else if(m==2){operate._delete();goto d;} else cout<<"输入错误,请重新输入!"<<endl;system("cls");goto d; return 0; }
问题已解决!