学生信息表管理

#include <iostream>
using namespace std;

struct Student
{
	char number[10];
	char name[20];
	double score;
	friend ostream &operator<<(ostream &out,Student &stu);
};

ostream &operator<<(ostream &out,Student &stu)
{
	out<<"("<<stu.number<<","<<stu.name<<","<<stu.score<<")";
	return out;
}
#include <iostream>
using namespace std;

template<class T>
class SeqList
{
public:
	SeqList(int size=64);
	SeqList(T value[],int n);
	~SeqList();

	bool isEmpty();
	int length();
	T get(int i);
	bool set(int i,T x);
	friend ostream &operator<<<T>(ostream &out,SeqList<T> &list);
	void insert(int i,T x);
	void insert(T x);
	bool remove(int i,T &old);
	void clear();

private:
	T *element;
	int size;
	int len;
};

template<class T>
SeqList<T>::SeqList(int size)
{
	this->size=size<64?64:size;
	this->element=new T[this->size];
	this->len=0;
}

template<class T>
SeqList<T>::SeqList(T value[],int n)
{
	if (n>0)
	{
		this->element=new T[2*n];
		this->size=2*n;
		this->len=n;

		for(int i=0;i <n;i ++)
		{
			this->element[i]=value[i];
		}
	}
}

template<class T>
SeqList<T>::~SeqList()
{
	delete []this->element;
}

template<class T>
bool SeqList<T>::isEmpty()
{
	return len==0;
}

template<class T>
int SeqList<T>::length()
{
	return len;
}

template<class T>
T SeqList<T>::get(int i)
{
	return element[i];
	/*if (i >=0&&i<len)
	{
	return element[i];
	}
	return "false";*/
}

template<class T>
bool SeqList<T>::set(int i,T x)
{
	if (i>=0&&i<len)
	{
		element[i]=x;
		return true;
	}
	return false;
}

template<class T>
ostream &operator<<(ostream &out,SeqList<T> &list)
{
	out<<"(";
	if (list.len>0)
	{
		out<<list.element[0];
		for (int i=1;i<list.len;i++)
		{
			out<<","<<list.element[i];
		}
	}
	out<<")\n";
	return out;
}

template<class T>
void SeqList<T>::insert(int i,T x)
{
	if (len==size)
	{
		T *temp=element;
		element=new T[size*2];
		for (int i=0;i<size;i ++)
		{
			element[i]=temp[i];
		}
		size*=2;
	}
	if (i<0)
	{
		i=0;
	}
	if (i>len)
	{
		i=len;
	}
	for (int j=len-1;j>=i;j--)
	{
		element[j+1]=element[j];
	}
	element[i]=x;
	len++;
}

template<class T>
void SeqList<T>::insert(T x)
{
	insert(len,x);
}

template<class T>
bool SeqList<T>::remove(int i,T &old)
{
	if (len>0&&i>=0&&i<len)
	{
		old=element[i];
		for (int j=i;j<len;j++)
		{
			element[j]=element[j+1];
		}
		len--;
		return true;
	}
	return false;
}

template<class T>
void SeqList<T>::clear()
{
	len=0;
}

#include "SeqList.h"
#include "Student.h"
#include <iostream>
using namespace std;

double average(SeqList<Student> &stulist)
{
	int n=stulist.length();
	if (n>0)
	{
		double sum=0;
		for (int i=0;i<n;i ++)
		{
			sum+=stulist.get(i).score;
		}
		return sum/n;
	}
	return 0.0;
}

void printGrade(SeqList<Student> &stulist)
{
	int n=stulist.length();
	if (n>0)
	{
		int grade[5]={0};
		for (int i=0;i<n;i++)
		{
			double x=stulist.get(i).score;
			if (x>=90&&x<=100)
			{
				grade[0]++;
			}
			else if (x>=80&&x<=90)
			{
				grade[1]++;
			}
			else if (x>=70&&x<80)
			{
				grade[2]++;
			}
			else if (x>=60&&x<70)
			{
				grade[3]++;
			}
			else
			{
				grade[4]++;
			}
		}
		cout<<"优秀"<<grade[0]<<",良好"<<grade[1]<<",中等" <<grade[2]<<",及格"<<grade[3]<<",不及格"<<grade[4]<<endl;
	}
}

int main()
{
	Student group[]={{"20208301","王红",80},{"20208302","张明",75},{"20208303","李强",90},{"20208304","郑小春",80},{"20208305","陈鑫诺",60},{"20208306","吴宁",65}};
	SeqList<Student> stulist(group,6);
	Student stu={"20208307","崔小兵",70};
	stulist.insert(stu);
	cout<<"学生成绩表("<<stulist.length()<<"人):\n";
	cout<<stulist;
	cout<<"平均成绩"<<average(stulist)<<endl;
	if (stulist.remove(0,stu))
	{
		cout<<"删除了"<<stu.name<<endl;
	}
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很小但很精悍希望给大家有点帮助//--------------------------------------------------------------------------- #pragma hdrstop #include "StudentSeqList.h" //引入顺序的类 //--------------------------------------------------------------------------- /* * 有参构造函数SeqList */ template <class T > SeqList<T>:: SeqList(T a[ ], int n) { int i; if (n>MaxSize) throw "参数非法"; for (i=0; i<n; i++) data[i]=a[i]; length=n; } /* * 插入函数Insert,将x插入到顺序第i个位置 */ template <class T > void SeqList<T>::Insert(int i, T x) { int j; if (length>=MaxSize) throw "上溢"; if (i<1 || i>length+1) throw "位置错误"; for (j=length; j>=i; j--) data[j]=data[j-1]; //注意第j个元素存在数组下标为j-1处 data[i-1]=x; length++; } /* * 删除函数Delete,删除顺序中第i个元素 */ template <class T > T SeqList<T>::Delete(int i) { int j; if (length==0 ) throw "下溢"; if (i<1 || i>length) throw "位置错误"; T x=data[i-1]; for (j=i; j<length; j++) data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标 length--; return x; } /* * 遍历输出函数PrintList,输出所有顺序中元素 */ template <class T > void SeqList<T>::PrintList( ) { int i; for (i=0; i<length; i++) { cout << "学号:" << data[i].num << "\n"; cout << "姓名:" << data[i].name << "\n"; cout << "性别:" << data[i].sex << "\n"; cout << "出生日期:" << data[i].born << "\n"; cout << "政治面貌:" << data[i].p << "\n"; cout << "住址:" << data[i].addr << "\n"; } } /* * 输出函数PrintStudent,输出顺序中元素x */ template <class T > void SeqList<T>::PrintStudent(T x) { cout << "学号:" << x.num << "\n"; cout << "姓名:" << x.name << "\n"; cout << "性别:" << x.sex << "\n"; cout << "出生日期:" << x.born << "\n"; cout << "政治面貌:" << x.p << "\n"; cout << "住址:" << x.addr << "\n"; } //取函数Get,从顺序中返回第i个元素,并作为返回值返回 template <class T> T SeqList<T>::Get(int i) { if (i>=0 && i<=length-1) return data[i]; else { T stu; return stu; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值