顺序表应用-学生学籍管理

学生学籍主要有:

每个学生的学号(唯一),姓名,性别,出生日期,地址等数据项构成数据元素

要完成如下 功能:

1、插入

2、删除

3、修改

4、查询

5、输出

考虑到学生学籍表一般只会在开学毕业会有增加或者删除操作,而平时会进行频繁的查找或者小部分修改,所以采用顺序表比较好。为学籍表设计一个模板类,类中包含存储学生的基本信息的顺序表以及在上面的操作成员函数。为每个学生涉及的数据建立一个结构类型,并用此结构类型对学籍表模板类进行实例化:

const int MAX=200;

struct stu{
int id;
char name[20];
char sex;
int date;
char add[20];
};
template<typename T>
void change(T &x){
 int y;
 cout<<"enter 1,2 3 4 for name,sex,date,add"<<endl;
 cin>>y;
 switch(y){
 case 1:{cout<<"enter the name ";char name[20];cin>>name;strcpy(x.name,name);break;}
case 2:{cout<<"enter the sex ";char sex;cin>>sex;x.sex=sex;break;}
case 3:{cout<<"enter the date ";int t;cin>>t;x.date=t;break;}
 case 4:{cout<<"enter the add ";char add[20];cin>>add;strcpy(x.add,add);break;}
 default:cout<<"error"<<endl;}
 }
template<typename T>
 class seqlist{
 private:
 T data[MAX];
 int size;
 public:
	 seqlist(){size=0;}
	 
	 seqlist(T a[],int n){
	 if(n>MAX)throw"n error";
	 for(int i=0;i<n;i++)
	 data[i]=a[i];
	 size=n;}
	 ~seqlist(){};
	 int getsize(){return size;}
	 T get(int i){
	 if(i>size||i<1)throw"i error";
	 return data[i-1];}
	 void prt(){
	 if(size<1)cout<<"empty"<<endl;
else {
for(int i=0;i<size;i++)
{cout<<setw(5)<<data[i].id<<" "<<setw(5)<<data[i].name<<" "<<setw(5)<<data[i].sex<<" "<<setw(5)<<data[i].date<<" "<<setw(5)<<data[i].add<<" ";
cout<<endl;}
cout<<endl;}}
	 int loc(T x){
	 for(int i=0;i<size;i++)
	   if(data[i]==x)return i+1;
	 return -1;}
	 void insert(int i,T x){
	 if(size>=MAX)throw"overflow";
	 if(i>size+1||i<1)throw"i error";
	 for(int j=size;j>=i;j--)
	   data[j]=data[j-1];
	 data[i-1]=x;
	 size++;}
	 T del(int i){
	 if(size<1)throw"downflow";
	 if(i>size||i<1)throw"i error";
	 T x=data[i-1];
	 for(int j=i;j<size;j++)
	   data[j-1]=data[j];
	 size--;
	 return x;}
	 void fun(int ids){
		 int f=1;
	  for(int i=0;i<size;i++)
		  if(data[i].id==ids){f=0;cout<<"you find:"<<endl;
	 cout<<setw(5)<<data[i].id<<" "<<setw(5)<<data[i].name<<" "<<setw(5)<<data[i].sex<<" "<<setw(5)<<data[i].date<<" "<<setw(5)<<data[i].add<<" ";
	 cout<<endl;
	 change(data[i]);break;}
	 if(f==0)cout<<"change done"<<endl;
	 else cout<<"change failed"<<endl;}
 };

调用:

int main(){
	stu a[]={{100,"yan",'a',1992,"anhui"},{101,"wu",'a',1993,"jiangxi"},
	{102,"zhang",'b',1992,"shanghai"}};
   seqlist<stu>l(a,3);
   l.prt();
   stu b={0,"none",'a',1990,"beijing"};
   l.insert(2,b);
   l.prt();
   l.del(1);
   l.prt();
   l.fun(102);
   l.prt();
system("pause");
return 0;}

结果:

顺序表应用-学生学籍管理_第1张图片

你可能感兴趣的:(顺序表应用-学生学籍管理)