C++ 数构 关于编写人事档案遇到的问题
题目为:人才市场中有大量的人事档案,档案号从1开始。暂时没有找到就业岗位的毕业生档案要放入这里,从单位辞职的人档案要放入这里。就业后,档案就要调到单位所在的人才管理处。管理档案的主要操作是:L:当前有多少档案;
Q N:查询档案是N的人是否有档案在,有输入他的信息;没有就输出“Can‘t find”
G M:取走M号人的档案;
I M:插入M号人的档案;
O:输出档案库的信息。
Input
先输入一个正整数T表示有T个地方的人事档案。每处的档案输入第一行是一个正整数k表示现有k个人的档案,接着K行,每行是一个人的信息No、Name、Sex、University、Major,分别表示档案号、姓名、性别、毕业学校、专业。然后输入一个正整数m表示有m个问题,这些问题就上面列的L、Q、G、I、O。假设档案号是从小到大排列。
我遇到的问题是:
程序执行时插入5组数据,删除一个数据,又插入了个数据,长度应该是5,但是运行结果长度是4,输出时我最后插入的那组数据也没有显示出来,请大家帮忙看下是哪里出错了,谢谢!
#include <iostream>
using namespace std;
class People
{
public:
int no;
char sex;
char name[10];
char university[20];
char major[20];
};
template <class T>
class LinearList
{
public:
virtual int Search(T x)const=0;
virtual bool Insert(int i,T x)=0;
virtual bool Insert(T x)=0;
virtual bool Delete(T x)=0;
virtual int Length()const=0;
virtual void Output(ostream & out)const =0;
protected:
int n;
};
template <class T>
class SeqList:public LinearList<T>
{
public:
SeqList(int msize);
~SeqList();
int Length()const;
int Search(T x)const;
bool Delete(T x);
bool Insert(T x);
bool Insert(int i,T x);
void Output(ostream & out)const;
private:
int maxLength;
T *elements;
};
template <class T>
SeqList<T>::SeqList(int msize)
{
maxLength=msize;
elements=new T[maxLength];
n=0;
}
template <class T>
SeqList<T>::~SeqList()
{
delete []elements;
}
template <class T>
bool SeqList<T>:: Delete(T x)
{
if(!n)
{
return false;
}
for(int i=0;i<n;i++)
{
if(elements[i].no==x.no)
{
break;
}
}
if(i<0||i>n-1)
{
return false;
}
for(int j=i+1;j<n;j++)
{
elements[j-1]=elements[j];
}
n--;
return true;
}
template <class T>
SeqList<T>::Length()const
{
return n;
}
template <class T>
bool SeqList<T>::Insert(T x)
{
for(int i=0;i<n;i++)
{
if(elements[i].no<=x.no)
{
i++;
break;
}
}
if(i<-1||i>n - 1)
{
return false;
}
if(n==maxLength)
{
return false;
}
for(int j=n-1;j>i;j--)
{
elements[j+1]=elements[j];
}
elements[i+1]=x;
n++;
return true;
}
template <class T>
bool SeqList<T>::Insert(int i,T x)
{
if(i<-1 ||i>n-1)
{
return false;
}
if(n==maxLength)
{
return false;
}
for(int j=n-1;j>i;j--)
{
elements[j+1]=elements[j];
}
elements[i+1]=x;
n++;
return true;
}
template <class T>
int SeqList<T>::Search(T x)const
{
int s;
for(int j=0;j<n;j++)
{
if(elements[j].no==x.no)
{
s=1;
break;
}
}
if(s!=1)
{
cout<<"Can't find"<<" "<<elements[j].no<<endl;
}
else
cout<<elements[j].no<<" "<<elements[j].name<<" "<<elements[j].sex<<" "<<elements[j].university<<" "<<elements[j].major<<endl;
return 0;
}
template <class T>
void SeqList<T>:: Output(ostream & out)const
{out<<"Show All Files:"<<endl;
for(int i=0;i<n;i++)
{
out<<elements[i].no<<" "<<elements[i].name<<" "<<elements[i].sex<<" "<<elements[i].university<<" "<<elements[i].major<<endl;
}
}
const int SIZE=20;
void main()
{
SeqList<People> LA(SIZE);
People p[SIZE],p1;
int t;
while(cin>>t)
{
int k,h;
cin>>k;
for(int z=0;z<k;z++)
{
cin>>p[z].no>>p[z].name>>p[z].sex>>p[z].university>>p[z].major;
}
for(int i=0;i<k;i++)
{
LA.Insert(i-1,p[i]);
}
cin>>h;
cout<<"Case "<<t<<":"<<endl;
for(int j=0;j<h;j++)
{
char m;
cin>>m;
switch(m)
{
case'L':cout<<"L="<<LA.Length()<<endl;break;
case'Q':cin>>p1.no;LA.Search(p1);break;
case'G':cin>>p1.no;LA.Delete(p1);break;
case'I':cin>>p1.no>>p1.name>>p1.sex>>p1.university>>p1.major;LA.Insert(p1);break;
case'O':LA.Output(cout);break;
default:cout<<"error"<<endl;
}
}
}
}