C++课程设计_学生信息管理系统_增删查改、搜索、排序、统计、保存、自动读取

  • Post author:
  • Post category:其他




实现功能


1)录入学生信息

:一次进行多人信息录入并在每次学号输入后判断是否该学号已存在。


2)插入学生信息

:先判断学号是否已存在,再进行顺序插入,结束一次仍可继续该功能。


3)浏览学生信息

:将所有新生人数和每人信息显示到屏幕上。


4)删除学生信息

:先询问用户是否需要根据姓名查找该生学号,若是,则根据用户输入的姓名查找相符的所有新生信息,再根据用户所输学号进行删除,否则直接根据用户所输学号进行删除,删除信息保存于备份文件中。若无该生信息则输出提示“无该生信息”。结束一次仍可继续该功能。


5)学生信息搜索

:按学号或姓名搜索,若一种搜索无果,会提示用户是否需要另一种方式搜索,若需要,则直接跳转到另一种查询方式。


6)修改学生信息

:先询问用户是否需要根据姓名查找该生学号,若是,则根据用户输入的姓名查找相符的所有新生信息,再根据用户所输学号进行修改,否则直接根据用户所输学号进行修改,再判断所要修改的学号是否存在,若存在则根据学号进行单项修改,若修改学号,则对修改后的学号进行查重,若已存在该学号,则提示用户并让用户重新输入想要修改成的学号。结束一次仍可继续该功能修改其他新生。


7)学生信息统计

:有性别,专业,和年龄统计。年龄自动计算。结束一次仍可继续该功能。


8)学生信息排序

:按学号从小到大排序,和按英语入学成绩从大到小排序。


9)学生信息保存

:用C++文件流的格式,将进行操作后的新生信息保存到文件中。 学生信息导入:打开程序时自动导入,若原文件中为空,则显示“文件为空”,否则显示“上次保存信息已自动导入”。



实验效果



运行

在这里插入图片描述



录入学生信息

在这里插入图片描述



插入学生信息

在这里插入图片描述



浏览学生信息

(之前保存过一名学生信息,运行时自动导入该生信息)

在这里插入图片描述



删除学生信息

在这里插入图片描述

其余功能不再展示,可自行复制代码测试



代码

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<iomanip>
#include<cstring>
#include<ctime>
using namespace std;
static int m=0;
template <typename T>
T inspect(T n)//检查输入格式 
{	
	if(cin.fail())
	{
		cin.clear();cin.sync();
	}
	cout<<"输入错误,请重新输入"<<endl;	
	cin>>n;
	return n;
}
class student//信息类 
{
	public:
		void set_num(long int num)	{this->Num=num;}
		void set_name(string name)	{this->Name=name;}
		void set_sex(string sex)	{this->Sex=sex;}
		void set_specialty(string specialty)	{this->Specialty=specialty;}
		void set_year(int year)	{this->Year=year;}
		void set_month(int month)	{this->Month=month;}
		void set_day(int day)	{this->Day=day;}
		void set_score(float score)	{this->Score=score;}
		void set_address(string address)	{this->Address=address;}
		void set_age(int age)	{this->Age=age;}
		void set_next(student *p=NULL)	{this->next=p;}
		long int get_num()	{	return Num;}
		string get_name()	{	return Name;}
		string get_sex()	{return Sex;}
		string get_specialty()	{	return Specialty;}
		int get_year()	{return Year;}
		int get_month()	{return Month;}
		int get_day()	{return Day;}
		string get_address()	{return Address;}
		float get_score()	{return Score;}
		int get_age()	{return Age;}
		student *get_next()	{return this->next;}
		void show();
		private:
		long int Num;
		string Name;
		string Sex;
		string Specialty;
		int Year,Month,Day;
		int Age; 
		string Address;
		float Score;
		student *next;
};
void student::show()//单人输出 
{	
	cout<<"学号:"<<setfill('0')<<setw(10)<<get_num()<<"\t";
	cout<<"姓名:"<<get_name()<<"\t";
	cout<<"性别:"<<get_sex()<<"\t";
	cout<<"专业:"<<get_specialty()<<"\t";
	cout<<"出生日期:";
	cout<<get_year()<<"年";
	cout<<setfill('0')<<setw(2)<<get_month()<<"月";
	cout<<setfill('0')<<setw(2)<<get_day()<<"日";
	cout<<"英语成绩:"<<get_score()<<endl;
	cout<<"家庭住址:"<<get_address()<<endl;
	cout<<"***************************************************************"<<endl;
}
class message:public student//管理类 
{
	public:
		message(){head=NULL;}
		~message();
		student* find1(long int num);
		bool find2(string name);
		void add();
		void show_();
		void charu();
		void delete_();
		void search();
		void revision();
		void save();
		void rank();
		void age_(student *pt);
		void tongji();
		void read();
		private:
			student *p1,*p2,*head;
};
message::~message()
{	
	student *pt;
	while(head)
	{
		pt=head;
		head=head->get_next();
		delete pt;
	}
}
bool message::find2(string name)//按姓名查找 
{
	 student *p3=head;int i=0;
	while(p3)
	{
		if(p3->get_name()==name)
		{
			p3->show();i=1;
		}
		p3=p3->get_next();
	}
	if(i==0) return false;
	 return true;
}
student* message::find1(long int num)//按学号查找 
{
	 student *p3=head;
	while(p3!=NULL)	
		{
			if(num==p3->get_num())
			{
				return p3;
			}
			p3=p3->get_next();
		}
		return p3;
}
void message::add()//批量增加 
{	int n,d,year,month,day;//n为添加新生人数,d为判断男女条件 
	long int num;
	string name,specialty,sex,address;
	float score;
	p2=head;while(p2) {if(!p2->get_next()) break;p2=p2->get_next();}
	cout<<"请输入您要添加新生人数:";
	cin>>n;while(n<=0)n=inspect(n);
	for (int i=0;i<n;i++)
	{	
		cout<<"请输入第"<<i+1<<"个学生的信息"<<endl;
		cout<<"学号:";
		cin>>num;
		while(cin.fail()) num=inspect(num);
		p1=new student();
		while(find1(num))
		{
			cout<<"该学号已存在,请重新输入"<<endl;
			cin>>num;while(cin.fail()) num=inspect(num);
		}
		p1->set_num(num);
		cout<<"姓名:";cin>>name;
		p1->set_name(name);
		cout<<"性别"<<endl<<"1.男	"<<"2.女"<<endl<<"请选择性别";
		cin>>d;
		while(d<=0||(d!=1&&d!=2))
		d=inspect(d);
		if(d==1)
		p1->set_sex("男");
		else
		p1->set_sex("女");
		cout<<"专业:";cin>>specialty;
		p1->set_specialty(specialty);
		cout<<"*****出生日期*****"<<endl<<"年:";cin>>year;
		while(year<=0)year=inspect(year);
		p1->set_year(year);
		cout<<"月:";cin>>month;
		while(month<=0||month>12) 
		month=inspect(month);
		p1->set_month(month);
		cout<<"日:";cin>>day;
		while(day<=0||day>31)
		day=inspect(day);
		p1->set_day(day);
		cout<<"**************"<<endl;
		cout<<"英语成绩:";cin>>score;
		while(cin.fail())
		 score=inspect(score);
		p1->set_score(score);
		cout<<"家庭住址:";cin>>address;
		p1->set_address(address);
		p1->set_next(NULL);
		if(head==NULL) head=p1;
		else 
		p2->set_next(p1);
		p2=p1;
		p2->set_next(NULL);m++;
	}
}
void message::show_()//全部输出 
{	if(head==NULL)
	{
		cout<<"这是一个空列表,请先添加学生信息"<<endl;return;
	}
		cout<<"共"<<m<<"名学生"<<endl;
		p1=head;
		while(p1)
		{
			p1->show();
			p1=p1->get_next();
		}
}
void message::charu()//插入 
{
	p1=head;
	int d,year,month,day;//d为判断男女和是否继续执行条件 
	long int num;
	float score;
	string name,specialty,sex,address;
	cout<<"请输入您要插入的新生信息:";
		cout<<"学号:";
		cin>>num; while(num<=0)num=inspect(num);
		while(find1(num))
		{
			cout<<"该学号已存在,请重新输入"<<endl;
			cin>>num;while(cin.fail()) num=inspect(num);
		}
		student *pt=new student();
		pt->set_num(num);
		cout<<"姓名:";cin>>name;
		pt->set_name(name);
		cout<<"性别"<<endl<<"1.男	"<<"2.女"<<endl<<"请选择性别";
		cin>>d;
		while(d!=1&&d!=2)
		d=inspect(d);
		if(d==1)
		pt->set_sex("男");
		else
		pt->set_sex("女");
		cout<<"专业:";cin>>specialty;
		pt->set_specialty(specialty);
		cout<<"*****出生日期*****"<<endl<<"年:";cin>>year;
		while(year<=0)
		year=inspect(year);
		pt->set_year(year);
		cout<<"月:";cin>>month;
		while(month<=0||month>12)
		month=inspect(month);
		pt->set_month(month);
		cout<<"日:";cin>>day;
		while(day<=0||day>31)
		day=inspect(day);
		pt->set_day(day);
		cout<<"**************"<<endl;
		cout<<"英语成绩:";cin>>score;
		while(cin.fail())
		score=inspect(score);
		pt->set_score(score);
		cout<<"家庭住址:";cin>>address;
		pt->set_address(address);
		pt->set_next(NULL);
		++m;
		if(head==NULL)head=pt;
		else
		{
			while(p1->get_num()<num&&p1->get_next()!=NULL)
			{p2=p1;p1=p1->get_next();}
			if(p1->get_num()>num)
			{	
				pt->set_next(p1);
				if(p1==head)
				head=pt;
				else
				p2->set_next(pt);	
			}
			else 
			{p1->set_next(pt);pt->set_next(NULL);}	
		}
		cout<<"插入成功"<<endl;
	cout<<"是否继续插入?"<<endl<<"1.是   2.否"<<endl;
		cin>>d;
		while(d!=1&&d!=2) d=inspect(d);
		if(d==1) charu();
		else return;
}
void message::delete_()//删除 
{
	long int num1;int n;//n为判断是否按姓名查找学号和是否继续执行条件  
	string name1;p2=head;
	if(head==NULL)
	{
		cout<<"这是一个空列表,请先添加学生信息"<<endl;return;
	}
		cout<<"******************************************************************"<<endl;
		cout<<"*该删除系统按学号删除,若您忘记该生学号可选择根据姓名查找该生学号*"<<endl;
		cout<<"******************************************************************"<<endl;
	    cout<<"请选择是否根据姓名查找该生学号:1.是  2.否"<<endl; 
		cin>>n;while(n!=1&&n!=2) n=inspect(n);
		if(n==1)
		{
			cout<<"请输入您要删除的学生姓名"<<endl;cin>>name1;
			if(!find2(name1)) cout<<"无此人信息"<<endl;
			else n=2; 
		}
		if(n==2)
		{
		    cout<<"请输入您要删除的学生学号:"<<endl;
		    cin>>num1;while(num1<=0) num1=inspect(num1);
		 	p1=find1(num1);
		 if(p1)
		{	
			p1->show();
			ofstream out_("删除文件2.txt",ios::app);
				out_<<"学号:"<<p1->get_num()<<"  "<<"姓名:"<<p1->get_name()<<"   "
				<<"性别:"<<p1->get_sex()<<"   "
				<<"专业:"<<p1->get_specialty()<<"   "
				<<"出生日期:"<<p1->get_year()<<"年  "
				<<setfill('0')<<setw(2)<<p1->get_month()<<"月  "
				<<setfill('0')<<setw(2)<<p1->get_day()<<"日   "
				<<"英语成绩:"<<p1->get_score()<<endl
				<<"家庭地址:"<<p1->get_address()<<endl;
				out_.close();
			if(p1==head)head=p1->get_next();
			else 
				{
					while(p2->get_next()!=p1) p2=p2->get_next(); 
					p2->set_next(p1->get_next());
					p2=p1->get_next();
				}
				delete p1; 
				cout<<"删除成功"<<endl;
				cout<<"***删除文件已保存于删除文件2中***"<<endl;
				--m;
		}
		else cout<<"没有该生信息"<<endl;
	}
	if(head==NULL)
	{	cout<<endl
		<<"+++++++++++++++++++++++++++++++++++"<<endl
	    <<"+++++信息已全部删除,现文件为空+++++"<<endl
	    <<"+++++++++++++++++++++++++++++++++++"<<endl<<endl;
	    return;
	}
	cout<<"是否继续删除?"<<endl<<"1.是  2.否"<<endl;
	cin>>n;
	while(n!=1&&n!=2)n=inspect(n);
	if(n==1) delete_();
	else return;
}
void message::search()//查询 
{
	long int num1;
	string name1;
	int N=0;//N为判断是否换种查询方式条件 
	static int n=0;//n为判断查询条件 
	p1=head;
	if(p1==NULL)
	{
		cout<<"这是一个空列表,请先添加学生信息"<<endl;return;
	}
		if(n==0)
		{cout<<"请选择您要查询的学生信息:"<<"\t"<<"1.学号 2.姓名"<<endl;
		cin>>n;while(n!=1&&n!=2) n=inspect(n);
		}
		if(n==1)
	{	cout<<"请输入您要查询的学生学号"<<endl;cin>>num1;while(num1<=0) num1=inspect(num1);
	if(find1(num1)) find1(num1)->show();
		else
		{
			cout<<"没有该生信息,是否选择另一种查询方式?"<<endl<<"1.是  2.否"<<endl;
			cin>>N;while(N!=1&&N!=2) N=inspect(N);
			if(N==1)
			{ n=2; search(); }
			else 
			{ n=0; return; }
		}
	}
	else
	{
		cout<<"请输入您要查询的学生姓名"<<endl;cin>>name1;
	if(!find2(name1))
	{
			cout<<"没有该生信息,是否选择另一种查询方式?"<<endl<<"1.是  2.否"<<endl;
			cin>>N; while(N!=1&&N!=2) N=inspect(N);
			if(N==1)
			{ n=1; search();}
			else 
			{ n=0; return; }
	}
	} n=0;
}
void message::revision()//修改 
{
	long int num;
	int n,y,year,month,day;//y为修改人数 ,n为修改选项,判断是否继续执行的条件和判断男女选项 
	string name,specialty,sex,address;//name1修改前姓名 
	float score;
	if(head==NULL)
	{
		cout<<"这是一个空列表,请先添加学生信息"<<endl;return;
	}
	cout<<"请输入您要修改的人数:"<<endl;
	cin>>y;
	while(cin.fail()||y>m)
	{	if(y>m)
		cout<<"输入人数大于已录入人数,请重新输入"<<endl;
		else
		cout<<"格式错误,请重新输入"<<endl;
		cin.clear();cin.sync();
		cin>>y;
	}
	for(int j=0;j<y;j++)
	{ p1=head;p2=head;
	 cout<<"******************************************************************"<<endl;
	 cout<<"*该修改系统按学号修改,若您忘记该生学号可选择根据姓名查找该生学号*"<<endl;
	 cout<<"******************************************************************"<<endl;
	 cout<<"请选择是否根据姓名查找该生学号:1.是  2.否"<<endl; 
	 cin>>n;while(n!=1&&n!=2) n=inspect(n);
	 if(n==1)
	 {
	 cout<<"请输入您要修改的学生姓名"<<endl;
	 cin>>name;
		if(find2(name)) 
		{
			n=2;
		}
		else
		{	j--;cout<<"无此人信息"<<endl; } 
		
	 }
		if(n==2)
		{	cout<<"请输入您要修改的学生学号"<<endl;
			cin>>num;while(num<=0) num=inspect(num);
		 p1=find1(num);
		 if(p1)
		 {
			do{ system("pause");
				system("cls");
				cout<<"****************"<<endl
					<<"*****1.学号*****"<<endl
					<<"*****2.姓名*****"<<endl
					<<"*****3.性别*****"<<endl
					<<"*****4.专业*****"<<endl
					<<"*****5.出生日期*"<<endl
					<<"*****6.英语成绩*"<<endl
					<<"*****7.家庭地址*"<<endl
					<<"*****8.返回*****"<<endl
					<<"****************"<<endl; 
				cout<<"请选择您要修改的选项:";
				cin>>n;while(cin.fail()) n=inspect(n);
			switch(n)
			{
			case 1:	 cout<<"请输入您想要修改成的学号:"<<endl;
					cin>>num;
					while(num<=0)	
					num=inspect(num);
					while(find1(num)){cout<<"该学号已存在,请重新输入"<<endl;cin>>num;}
		 			p1->set_num(num);cout<<"修改成功"<<endl;break;
			case 2:  cout<<"姓名:";cin>>name;p1->set_name(name);break;
			case 3: cout<<"性别"<<endl<<"1.男	2.女"<<endl<<"请选择性别";
					cin>>n;
					while(n!=1&&n!=2)
					n=inspect(n);
					if(n==1)
					p1->set_sex("男");
					else
					p1->set_sex("女");break;
			case 4:  cout<<"专业:";cin>>specialty;p1->set_specialty(specialty);break;
			case 5:  cout<<"*****出生日期*****"<<endl<<"年:";cin>>year;
				while(year<=0)
				year=inspect(year);
				p1->set_year(year);
				cout<<"月:";cin>>month;
				while(month<=0||month>12)
				month=inspect(month);
				p1->set_month(month);
				cout<<"日:";cin>>day;
				while(day<=0||day>31)
				day=inspect(day);
				p1->set_day(day);
				cout<<"**************"<<endl;break;
			case 6:  cout<<"英语成绩:";cin>>score;
				while(cin.fail())
				{	cout<<"输入错误,请重新输入"<<endl;
					cin.clear();cin.sync();cin>>score;
		  		}
				p1->set_score(score);break;
			case 7:  cout<<"家庭住址:";cin>>address;
				p1->set_address(address);break;
			case 8:break;
			default:cout<<"选择错误,请重新选择"<<endl;
			}	if(n!=8)cout<<"修改成功"<<endl;
			}while(n!=8);
		}
	 	else
	 	{j--;cout<<"没有该生信息"<<endl;}
	   }	
	}
	cout<<"是否继续修改?"<<endl<<"1.是  2.否"<<endl;
	cin>>n;
	while(n!=1&&n!=2) n=inspect(n);
	if(n==1) revision();
	else return;
}
void message::rank()//排序 
{	if(head==NULL)
	{		
		cout<<"这是一个空列表,请先添加学生信息"<<endl;
		return;
	}	
	int x;//x为排序选项 	
	cout<<"请选择排序方式:1.按英语成绩排序 2.按学号排序"<<endl;
	cin>>x;	while(x!=1&&x!=2)	
	x=inspect(x);	
	student *pend=head,*p0=new student();	
	p0->set_next(head);	
	p1=head->get_next();	
	while(p1)	
	{   student *pt=p0->get_next();
		p2=p0;
     	if(x==1)		 
			while(pt!=p1&&pt->get_score()>=p1->get_score())		
			{	        
				pt=pt->get_next();	       
				p2=p2->get_next();	    
			}	  
		else		
			while(pt!=p1&&pt->get_num()<=p1->get_num())	    
			{	        
				pt=pt->get_next();	    
			    p2=p2->get_next();	    
			}	     
		if(pt==p1)  
			pend=p1;	     
		else	     
		{  
			pend->set_next(p1->get_next());	        
			p1->set_next(pt);	        
			p2->set_next(p1);	      
		}	
     p1=pend->get_next();
	}   		
	head=p0->get_next();
	delete p0;
	show_();
}
void message::save()//保存 
{
	ofstream out[2];
	 out[0].open("学生信息管理1.txt",ios::out);
	 out[1].open("学生信息管理2.txt",ios::out);
	for(int i=0;i<2;i++)
	{
	p1=head;
	if(i==0)
	out[i]<<"共"<<m<<"名学生"<<endl;
	if(i==1)
	out[i]<<m<<endl;
	while(p1!=NULL)
	{	
		if(i==0)
		{
		out[i]<<"学号:"<<p1->get_num()<<"  "<<"姓名:"<<p1->get_name()<<"   "
		<<"性别:"<<p1->get_sex()<<"   "<<"专业:"<<p1->get_specialty()<<"   ";
		out[i]<<"出生日期:"<<p1->get_year()<<"年"<<"  "<<p1->get_month()<<"月"<<"  "<<p1->get_day()<<"日"<<"  ";
		out[i]<<"英语成绩:"<<p1->get_score()<<endl<<"家庭地址:"<<p1->get_address()<<endl;
		p1=p1->get_next();
		}
		if(i==1)
		{out[i]<<p1->get_num()<<"  "<<p1->get_name()<<"   "<<p1->get_sex()<<"   "<<p1->get_specialty()<<"   ";
		out[i]<<p1->get_year()<<"  "<<p1->get_month()<<"  "<<p1->get_day()<<"  ";
		out[i]<<p1->get_score()<<endl<<p1->get_address()<<endl;
		p1=p1->get_next();
		}	
	}
	}
	out[0].close();
	out[1].close();
	cout<<"保存成功"<<endl<<"***信息已保存于学生信息管理1中***"<<endl;
}
void message::age_(student *pt)//计算年龄 
{
	int age_;
	time_t now;
	struct tm *timenow;time(&now);timenow=localtime(&now);
	age_=(timenow->tm_year+1900)-pt->get_year();
	if(pt->get_month() > timenow->tm_mon || (pt->get_month() == timenow->tm_mon && timenow->tm_mday<pt->get_day()))
	--age_;
	pt->set_age(age_);
}
void message::tongji()//统计 
{	int i=0,j=0,k=0,a;p1=head;//i,j,k为各统计人数 
	if(head==NULL)
	cout<<"这是一个空列表,请先添加学生信息"<<endl;
	else{
	cout<<"请选择统计类型:"<<endl;
	cout<<"1.性别"<<"\t"<<"2.专业"<<"\t"<<"3.年龄"<<endl;
	cin>>a;
		while(a!=1&&a!=2&&a!=3)
	{
		a=inspect(a);
	}
	switch(a){
	case 1:cout<<"男性:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_sex()=="男")	
		{ p1->show();++i;} 
		p1=p1->get_next();
	}
	cout<<"男性共"<<i<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"女性:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_sex()=="女")	
		{ p1->show();++j;} 
		p1=p1->get_next();
	}
	cout<<"女性共"<<j<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"性别填写错误:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_sex()!="男"&&p1->get_sex()!="女")
		{ p1->show();++k;}
		p1=p1->get_next();
	}cout<<"有"<<k<<"人性别填写错误"<<endl;break;
	case 2:
	cout<<"文科:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_specialty()=="文科")
			{ p1->show();;++i;}
			p1=p1->get_next();
	}cout<<"文科共"<<i<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"理科:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_specialty()=="理科")
			{ p1->show();++j;} 
		p1=p1->get_next();
	}cout<<"理科共"<<j<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"专业填写错误:"<<endl;while(p1!=NULL)
	{	
		if(p1->get_specialty()!="文科"&&p1->get_specialty()!="理科")
		{ p1->show();++k;} 
		p1=p1->get_next();
	}cout<<"有"<<k<<"人专业填写错误"<<endl;break;
	case 3: 
	cout<<"年龄为16~18:"<<endl;while(p1!=NULL)
	{	
		age_(p1);
		if(p1->get_age()>=16&&p1->get_age()<=18)
		{ cout<<"年龄:"<<p1->get_age()<<endl;p1->show();++i;}
		 p1=p1->get_next();
	}cout<<"年龄为16~18共"<<i<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"年龄为19~21:"<<endl;while(p1!=NULL)
	{	age_(p1);
		if(p1->get_age()>=19&&p1->get_age()<=21)
		{ cout<<"年龄:"<<p1->get_age()<<endl;p1->show();++j;} 
		p1=p1->get_next();
	}cout<<"年龄为19~21共"<<j<<"人"<<endl<<"***************************************************************"<<endl;p1=head;
	cout<<"年龄超出统计范围:"<<endl;while(p1!=NULL)
	{	age_(p1);
		if(p1->get_age()<16||p1->get_age()>21)
		{ cout<<"年龄:"<<p1->get_age()<<endl;p1->show();++k;}
		p1=p1->get_next();
	}cout<<"有"<<k<<"人年龄超出统计范围"<<endl<<"***************************************************************"<<endl;break; 
	default:cout<<"选择错误"<<endl;
	}
}
	cout<<"是否继续统计"<<endl<<"1.是  2.否"<<endl;
	cin>>a;
	while(a!=1&&a!=2) a=inspect(a);
	if(a==1) tongji();
	else return; 
}
void message::read()//读取 
{
	int year,month,day;
	long int num;
	string name,specialty,sex,address;
	float score;
	head=NULL;p2=head;
	ifstream in1("学生信息管理2.txt",ios::in);
	in1>>m;
	if(m==0){ cout<<"*****此为空文件*****"<<endl;return; }
	for(int j=0;j<m;j++)
	{
		p1=new student();
		in1>>num>>
		name>>sex>>specialty>>year>>month>>day
		>>score>>address;
		p1->set_num(num);
		p1->set_name(name);
		p1->set_sex(sex);
		p1->set_specialty(specialty);
		p1->set_year(year);
		p1->set_month(month);
		p1->set_day(day);
		p1->set_score(score);
		p1->set_address(address);p1->set_next(NULL);
		if(head==NULL)head=p1;
		else
		p2->set_next(p1);
		p2=p1;
		p2->set_next(NULL);
	}
	in1.close();p2->set_next(NULL);
	cout<<"***************************************************************"<<endl
	<<"***上次保存信息已自动导入***"<<endl;
}
void menu()//菜单 
{
		system("date/t");system("time/t");
		cout<<"***************************************************************"<<endl;
		cout<<"1.录入学生信息"<<endl;
		cout<<"2.插入学生信息"<<endl;
		cout<<"3.浏览学生信息"<<endl;
		cout<<"4.删除学生信息"<<endl;
		cout<<"5.学生信息搜索"<<endl;
		cout<<"6.修改学生信息"<<endl; 
		cout<<"7.学生信息统计"<<endl;
		cout<<"8.学生信息排序"<<endl;
		cout<<"9.学生信息保存"<<endl;
		cout<<"0.退出"<<endl;
		cout<<"请选择您要使用的功能:"<<endl;
		cout<<"***************************************************************"<<endl;
}
int main()
{
	message s;s.read();
	int i;
	do
	{	menu();
		cin>>i;
		while(cin.fail()) i=inspect(i);
		system("cls");
		switch(i)
		{
			case 1:cin.sync();s.add();break;
			case 2:cin.sync();s.charu();break;
			case 3:cin.sync();s.show_();break;
			case 4:cin.sync();s.delete_();break;
			case 5:cin.sync();s.search();break;
			case 6:cin.sync();s.revision();break;
			case 7:cin.sync();s.tongji();break;
			case 8:cin.sync();s.rank();break;
			case 9:cin.sync();s.save();break;
			case 0:cout<<"***感谢您的使用***"<<endl;system("pause");return 0;
			default:cin.sync();cout<<"选择错误,请重新输入"<<endl;
		}
	}while(i!=0);
	return 0;
}



版权声明:本文为weixin_44929171原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。