#include <iostream.h>
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct dormitory
{
char name[20];
char dorm[5];
string student;
//char student[13];
};
bool empty()
{
ifstream fin("dormitory.txt");
string s;
/*if(!fin)
{
cout<<"Error: can't open the file !"<<endl;
return;
} */
bool judge=0;
fin>>s;
if(s.length()==0)
judge=1;
return judge;
//cout<<"Error:no contents in this file !"<<endl;
}
void addDormitory(int &);
void delDormitory(int &);
void lookOver(int );
void editDormitory(int );
void compositor(int );
int _tmain(int argc, _TCHAR* argv[])
{
int c;
static int num = 0;
ifstream infile("dormitory.txt",ios::in);
char ch;
dormitory *p= new dormitory;
while(infile.get(ch))
{
infile>>p->name>>p->student>>p->dorm;
num++;
}
while(1)
{
cout<<"1.增加 2.删除 3.修改 4.查询 5排序"<<endl;
cout<<"请输入要执行的操作:";
cin>>c;
switch (c)
{
case 1:addDormitory(num);break;
case 2:delDormitory(num);break;
case 3:editDormitory(num);break;
case 4:lookOver(num);break;
case 5:compositor(num);break;
default :cout<<"CHOOSE ERROR!"<<endl;break;
}
}
return 0;
}
void addDormitory(int &num1)
{
dormitory d;
ofstream outfile("dormitory.txt",ios::out|ios::app);
if(! outfile)
{
cerr<<"open error"<<endl;
exit(1);
}
if(num1!=0)
outfile<<endl;
cout<<"请输入姓名:";
cin>>d.name;
outfile<<d.name<<" ";
cout<<"请输入学号:";
cin>>d.student;
outfile<<d.student<<" ";
cout<<"请输入房间号:";
cin>>d.dorm;
outfile<<d.dorm;
num1++;
outfile.close();
}
void delDormitory(int &num2)
{
if(empty())
cout<<"no contents in this file !"<<endl;
else
{
while(1)
{
string s;
//char s[12];
dormitory *store = new dormitory[num2];
cout<<"请输入要删除的学生学号:";
cin>>s;
fstream iofile("dormitory.txt",ios::in|ios::out);
if(! iofile)
{
cerr<<"open error"<<endl;
exit(1);
}
bool found=0;
int temp;
for(int i=0;i<num2;i++)
{
iofile>>store[i].name>>store[i].student>>store[i].dorm;
if(s==store[i].student) {found=1;temp=i;}
}
if(found==0)
{cout<<"您输入的学生不存在!"<<endl;
cout<<"要继续删除吗?(Y/N)"<<endl;
char d;
cin>>d;
if(d=='Y')continue;
else break;
}
else
{
fstream iofile("dormitory.txt",ios::out|ios::trunc);
for(int a=0;a<temp;a++)
{
if(a!=0)
iofile<<endl;
iofile<<store[a].name<<" "<<store[a].student<<" "<<store[a].dorm;
}
for(int b=temp+1;b<num2;b++)
{
if(b!=1)
iofile<<endl;
iofile<<store[b].name<<" "<<store[b].student<<" "<<store[b].dorm;
}
iofile.close();
num2--;
cout<<"删除成功!"<<endl;
break;
}
}
}
}
void editDormitory(int num3)
{
if(empty())
cout<<"no contents in this file !"<<endl;
else
{
while(1)
{
string s;
//char s[12];
dormitory *store = new dormitory[num3];
cout<<"请输入要修改的学生学号:";
cin>>s;
fstream iofile("dormitory.txt",ios::in|ios::out);
if(! iofile)
{
cerr<<"open error"<<endl;
exit(1);
}
bool found=0;
int temp;
for(int i=0;i<num3;i++)
{
iofile>>store[i].name>>store[i].student>>store[i].dorm;
if(s==store[i].student) {found=1;temp=i;}
}
if(found==0)
{
cout<<"您输入的学生不存在!"<<endl;
cout<<"要继续修改吗?(Y/N)"<<endl;
char d;
cin>>d;
if(d=='Y')continue;
else break;
}
else
{
fstream iofile("dormitory.txt",ios::out|ios::trunc);
cout<<"请输入新的学生信息:"<<endl;
cout<<"姓名:";
cin>>store[temp].name;
cout<<"学号:";
cin>>store[temp].student;
cout<<"宿舍号:";
cin>>store[temp].dorm;
for(int a=0;a<num3;a++)
{
if(a!=0)
iofile<<endl;
iofile<<store[a].name<<" "<<store[a].student<<" "<<store[a].dorm;
}
iofile.close();
cout<<"修改成功!"<<endl;
break;
}
}
}
}
void lookOver(int num4)
{
if(empty())
cout<<"no contents in this file !"<<endl;
else
{ string st;
while(1)
{ bool ch=0;
cout<<"输入查询方式:1.全部 2.按姓名 3.按学号 4.按宿舍号";
ifstream infile("dormitory.txt",ios::in);
dormitory *store = new dormitory[num4];
int c;
cin>>c;
for(int i=0;i<num4;i++)
{
infile>>store[i].name>>store[i].student>>store[i].dorm;
}
switch(c)
{
case 1:
for(int i=0;i<num4;i++)
cout<<"姓名:"<<store[i].name<<endl<<"学号:"<<store[i].student<<endl<<"宿舍号:"<<store[i].dorm<<endl;
break;
case 2:
cout<<"请输入学生姓名:"<<endl;
cin>>st;
int v;
ch=0;
for(v=0;v<num4;v++)
{if(store[v].name==st)
{
ch=1;
cout<<"姓名:"<<store[v].name<<endl<<"学号:"<<store[v].student<<endl<<"宿舍号:"<<store[v].dorm<<endl;
}
}
if(ch==0)cout<<"您输入的学生不存在!"<<endl;
break;
case 3:
ch=0;
cout<<"请输入学生学号:"<<endl;
cin>>st;
int a;
for(a=0;a<num4;a++)
{
if(store[a].student==st)
{cout<<"姓名:"<<store[a].name<<endl<<"学号:"<<store[a].student<<endl<<"宿舍号:"<<store[a].dorm<<endl;
ch=1;
}
}
if(ch==0){cout<<"您输入的学生不存在!"<<endl;ch=0;}
break;
case 4:
cout<<"请输入学生宿舍号:"<<endl;
cin>>st;
ch=0;
int b;
for(b=0;b<num4;b++)
{
if(store[b].dorm==st)
{
cout<<"姓名:"<<store[b].name<<endl<<"学号:"<<store[b].student<<endl<<"宿舍号:"<<store[b].dorm<<endl;
ch=1;
}
}
if(ch==0)
cout<<"您输入的学生不存在!"<<endl;
break;
}
cout<<"要继续查询吗?(Y/N)"<<endl;
char d;
cin>>d;
if(d=='Y')continue;
else break;
}
}
}
void Sort_compositor(int head,int tail,string *S,int *K)
{
int Tail;
Tail=tail;
string store;
int istore;
store=S[head];
istore=K[head];
tail--;
while(head<tail)
{
while(1)
{
if(S[tail]<store)
{
S[head]=S[tail];
K[head]=K[tail];
head++;
break;
}
else if(head==tail)break;
else tail--;
}
while(1)
{
if(S[head]>store)
{
S[tail]=S[head];
K[tail]=K[head];
tail--;
break;
}
else if(head==tail)break;
else head++;
}
}
S[head]=store;
K[head]=istore;
if(head-1>0)
{
Sort_compositor(0,head-1,S,K);
}
if(head+1<Tail)
{
Sort_compositor(head+1,Tail,S,K);
}
}
void compositor(int num5)
{
int choose;
fstream iofile("dormitory.txt",ios::in|ios::out);
if(! iofile)
{
cerr<<"open error"<<endl;
exit(1);
}
dormitory *store = new dormitory[num5];
for(int com=0;com<num5;com++)
iofile>>store[com].name>>store[com].student>>store[com].dorm;
//char *T = new char[num5];
string *T=new string[num5];
int *L=new int[num5];
cout<<"1.姓名 2.学号 3.宿舍号";
cin>>choose;
switch(choose)
{
case 1:
for(int i=0;i<num5;i++)
{T[i]=store[i].name;L[i]=i;}
break;
case 2:
for(int i=0;i<num5;i++)
{T[i]=store[i].student;L[i]=i;}
break;
case 3:
for(int i=0;i<num5;i++)
{T[i]=store[i].dorm;L[i]=i;}
break;
}
Sort_compositor(0,num5,T,L);
for(int i=0;i<num5;i++)
{
int t=L[i];
cout<<store[t].name<<" "<<store[t].student<<" "<<store[t].dorm<<endl;
if(t==0)iofile<<endl;
iofile<<store[t].name<<" "<<store[t].student<<" "<<store[t].dorm<<endl;
}
}