⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 student.cpp

📁 1、设计一个学生类Student
💻 CPP
字号:
#include<iostream>
#include<iomanip>
#include<fstream>	//输入输出文件流类的头文件
using namespace std;
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 100		//学生记录最大容量
int count=0;//统计学生记录个数

class Date{			//Date的声明
public:
	int year;
	int month;
	int day;
	Date(int,int,int);
	Date(){} 
};

class student{	//student类的声明
private:
	char num[6];	 	//学号
	char name[8]; 	//姓名
	char sex[3]; 		//性别
	Date birth;  	//出生日期
	int age;     	//年龄
	char jiguan[10]; 	//籍贯
	char add[50];   //家庭住址
public:
	student(){}  	//空构造函数
	student(char x1[6],char x2[8],char x3[3], int a,int b,int c,int x5,char x6[10],char x7[50]);//带参的构造函数
	~student(){}  //空析构函数据
	void Accept(student stu[N]);  //添加学生信息成员函数
	void enter();  //输入一个学生信息成员函数
	void Display(student stu[N]);  //显示全部学生信息成员函数
	void print();  //显示一个学生信息成员函数
	void Modify(student stu[N]);//修改
	int Remove(student stu[N]);  //删除
	void Search(student stu[N]); //查找
	void Save(char *filename,student stu[N]);  //保存文件
	void Load(char *filename,student stu[N]);  //取出文件
	void id_identical(student stu[N]);  //判断两个学生的学号是否相等
	int operator ==(student s2);  //重载"=="运算符
	student operator =(student s2);   //重载"="运算符
	friend void main( ); 
}; 
student::student(char x1[6],char x2[8],char x3[3], int a,int b,int c,int x5,char x6[10],char x7[50]):birth()
{	
	strcpy(num,x1);
	strcpy(name,x2);
	strcpy(sex,x3);	
	age=x5;
	strcpy(jiguan,x6);
	strcpy(add,x7); 
}
int student::operator ==(student s2)   //重载"=="运算符
{	
	if(strcmp(num,s2.num)==0) 
		return 1;
	else return 0;
}
student student::operator =(student s2)//重载"="运算符
{	
	strcpy(num,s2.num);
	birth=s2.birth;
	strcpy(name,s2.name);
	strcpy(sex,s2.sex);
	strcpy(add,s2.add);
	birth.year=s2.birth.year;
	birth.month=s2.birth.month;
	birth.day=s2.birth.day;
	strcpy(jiguan,s2.jiguan);
	return *this;
}
void student::enter()//输入一个学生信息成员函数
{	
	cout<<"学号:";
	cin>>num;getchar();
	cout<<"姓名:";
	gets(name);
	cout<<"性别:"; 
	gets(sex);;
	cout<<"生日(年月日):";
	cin>>birth.year>>birth.month>>birth.day;
	getchar();
	cout<<"籍贯:";
	gets(jiguan);
	cout<<"住址:";
	gets(add);
}
void student::print()//显示一个学生信息成员函数
{	
	cout<<setiosflags(ios_base::left)
		<<setw(7)<<"学号"
		<<setw(9)<<"姓名"
		<<setw(6)<<"性别"
		<<setw(10)<<"生日"
		<<setw(5)<<"年龄"
		<<setw(11)<<"籍贯"<<endl;
	cout<<setw(7)<<num
		<<setw(9)<<name
		<<setw(6)<<sex
		<<setw(0)<<birth.year
		<<setw(0)<<"/"<<birth.month
		<<setw(0)<<"/"
		<<setw(6)<<birth.day
		<<setw(5)<<2007-birth.year
		<<setw(11)<<jiguan
		<<resetiosflags(ios_base::left)<<endl;
	cout<<"住址:"<<add<<endl;
}
void student::Accept(student stu[N])  //添加学生信息
{
	char ch;
	do
	{	
		cout<<"添加学生信息:"<<endl;
		stu[count++].enter();
		cout<<"是否继续添加学生信息(Y/N)?";
		cin>>ch;
	}while(ch=='y'||ch=='Y');
}
void student::Display(student stu[N])//显示全部学生信息
{
	cout<<"***********显示学生信息***********"<<endl;
	for(int i=0;i<count;i++)
		stu[i].print();
}
void student::Search(student stu[N])//查找
{	
	int i;
	char ch,tempnum[6],tempname[8]; 
	int flag=0;
	cout<<"***********查找学生信息***********"<<endl;
	cout<<"1-按学号查找"<<"\n"<<"2-按姓名查找"<<"\n"<<"3-退出子操作"<<endl;
	cout<<"输入你的选择:";
	cin>>ch;
	while(1)
	{	if(ch=='1')//按学号查找
		{	
			cout<<"学号:";
			cin>>tempnum;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].num,tempnum)==0)
				{
					flag=1;
					stu[i].print();
				}
			if(flag==0) 
				cout<<"查询失败!"<<endl;
			return;
		}
		if(ch=='2')//按姓名查找
		{	
			cout<<"姓名:";
			cin>>tempname;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].name,tempname)==0)	
				{
					flag=1; 
					stu[i].print();
				}
				if(flag==0) 
					cout<<"查询失败!"<<endl;
				return;
		}
		if(ch=='3')
		{cout<<"退出!"<<endl;  return;}//不进行操作
		else cout<<"wrong order!";
	}
}
void student::Modify(student stu[N])//修改
{
	
	int i; 
	int flag=0;
	char ch1,tempnum[6],tempname[8];
	cout<<"先查找学生信息"<<endl;
	cout<<"1-按学号查找"<<"\n"
		<<"2-按姓名查找"<<"\n";
	cout<<"输入你的选择:";
	cin>>ch1;
	while(1)
	{	
		if(ch1=='1')//按学号查找
		{	
			cout<<"学号:";
			cin>>tempnum;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].num,tempnum)==0)
				{
					flag=1; 
					stu[i].print();
					break;
				}
			if(flag==0)
			{
				cout<<"查询失败!"<<endl;
			}
			break;
		}
		if(ch1=='2')//按姓名查找
		{	
			cout<<"姓名:";
			cin>>tempname;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].name,tempname)==0)
				{
					flag=1;
					stu[i].print();
					break;
				}		
			if(flag==0) 
			{cout<<"查询失败!"<<endl;}	
			break;
		}
		if(ch1=='3'){cout<<"退出!"<<endl;break;}
	}
	if(flag==1)//对查找到的学生信息进行修改
	{	
		char ch2;
		cout<<"***********修改学生信息***********"<<endl;
		cout<<"1---修改学号;"<<"\n"
			<<"2---修改姓名;"<<"\n"
			<<"3---修改性别;"<<"\n"
			<<"4---修改生日;"<<"\n"
			<<"5---修改籍贯;"<<"\n"
			<<"6---修改住址;"<<"\n"
			<<"7---结束修改!"<<endl;
		cout<<"输入你的选择:";	
		cin>>ch2;
		while(1)
		{
			switch(ch2)
			{
			case '1':
				cout<<"输入新的学号:";
				char n[6];
				cin>>n;
				strcpy(stu[i].num,n); 
				break;
			case '2':	
				cout<<"输入新的姓名:"; 
				char na[8];
				cin>>na; 
				strcpy(stu[i].name,na);
				break;
			case '3':	
				cout<<"输入新的性别:";
				char s[3];
				cin>>s;
				strcpy(stu[i].sex,s); 
				break;
			case '4':	
				cout<<"输入新的生日(年月日):";
				int a,b,c; 
				cin>>a>>b>>c;	
				stu[i].birth.year=a;							 
				stu[i].birth.month=b;
				stu[i].birth.day=c; 
				break;
			case '5':	
				cout<<"输入新的籍贯:"; 
				char j[10];
				cin>>j;
				strcpy(stu[i].jiguan,j); 
				break;
			case '6':
				cout<<"新的住址:";
				char ad[50];
				cin>>ad;
				strcpy(stu[i].add,ad); 
				break;
			case '7':	
				cout<<"退出!"; 
				return;
			default:	
				cout<<"选择出错!退出!"; 
				return;	
			}
			cout<<"输入你的选择:";	cin>>ch2;
		}
	}
}
int student::Remove(student stu[N])//删除
{	
	int i,poisition; 
	int flag=0;  
	char ch,tempnum[6],tempname[8];
	
	cout<<"先查找学生信息"<<endl;
	cout<<"1-按学号查找"<<"\n"
		<<"2-按姓名查找"<<"\n";
	cout<<"输入你的选择:";	
	cin>>ch;
	while(1)
	{	
		if(ch=='1')//按学号查找
		{	cout<<"学号:";
			cin>>tempnum;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].num,tempnum)==0)
				{	
					flag=1; 	
					stu[i].print();	
					poisition=i;
					break;	
				}
			if(flag==0) 
				{cout<<"查询失败!"<<endl;return count;	}
			break;
		}
		if(ch=='2')//按姓名查找
		{	
			cout<<"姓名:";
			cin>>tempname;
			for(i=0;i<count;i++)
				if(strcmp(stu[i].name,tempname)==0)
					{
						flag=1;  
						stu[i].print(); 
						poisition=i;
						break;	
					}
			if(flag==0) 
				{cout<<"查询失败!"<<endl;return count;}	
			break;	
		}
		if(ch=='3'){cout<<"退出!"<<endl;break;}
	}

	if(flag==1)//对查找到的学生信息进行修改
	{	for(i=poisition;i<count;i++)
	{stu[i]=stu[i+1];}//利用"="运算符重载函数将记录前移,对stu[i]进行删除
	cout<<"删除成功!"<<endl;count--;
	}
	return count;
}
void student::id_identical(student stu[N])//判断两个学生的学号是否相等
{
	char n[6];
	int flag=0,poisition;
	cout<<"判断两个Student类对象的id属性是否相等"<<endl;
	cout<<"输入要判断两个Student类对象的学号:"<<endl;
	cin>>n;
	for(int i=0;i<count;i++)
		if(strcmp(stu[i].num,n)==0)
		{	
			flag=1;	
			stu[i].print();
			poisition=i;
			break; 
		}
		if(flag==0) {cout<<"查询失败!"<<endl;}
		if(flag==1)
		{	for(int k=0;k<count&&poisition==k?k+=1:k;k++)
		if(stu[i]==stu[poisition])
		{cout<<"学号有重复"<<endl;break;}			
		if(!(stu[i]==stu[poisition]))
			cout<<"学号无重复"<<endl;
		}
}
void student::Save(char *filename,student stu[N])//保存文件
{	FILE *fp;
if((fp=fopen(filename,"w"))==NULL) 
{  
	cout<<"打不开此文件!"<<endl; 
	exit(1); 
}
cout<<"正在保存......."<<endl;
for(int i=0;i<count;i++)
{
	fprintf(fp,"%-7s%-9s%-6s%-5d%-2d%-3d%-5d%-11s%-50s",stu[i].num,stu[i].name,stu[i].sex,stu[i].birth.year,stu[i].birth.month,stu[i].birth.day,stu[i].age,stu[i].jiguan,stu[i].add);
	fprintf(fp,"\r\n"); 
}
fclose(fp); cout<<"保存成功!"<<endl;	
}
void student::Load(char *filename,student stu[N])//取出文件
{	
	FILE *fp;
	if((fp=fopen(filename,"r"))==NULL)
	{ 
		cout<<"不能打开此文件!"<<endl; 
		exit(0); 
	}
	for(int i=0;i<count;i++)
	{		
		if(fscanf(fp,"%7s%9s%6s%5d%2d%3d%5d%11s%50s",stu[i].num,stu[i].name,stu[i].sex,stu[i].birth.year,stu[i].birth.month,stu[i].birth.day,stu[i].age,stu[i].jiguan,stu[i].add));
		else break;	
	}
	fclose(fp);
	cout<<"文件已取出!"<<endl;
}
int Menu()//目录
{   char choice;	
int temp;
system("cls");
cout<<"    ***********欢迎使用学生基本信息管理系统**********"<<endl;
cout<<"    *                1-添加学生信息                 *"<<endl;
cout<<"    *                2-显示学生信息                 *"<<endl;
cout<<"    *                3-删除学生信息                 *"<<endl;
cout<<"    *                4-修改学生信息                 *"<<endl;
cout<<"    *                5-查找学生信息                 *"<<endl;	    
cout<<"    *                6-比较两个学生的ID是否相等     *"<<endl;
cout<<"    *                7-退出,保存                    *"<<endl;
cout<<"    *************************************************"<<endl;
do
{  
	cout<<"输入你的选择(1-7):"<<endl;  
	cin>>choice;  
	temp=atoi(&choice);
}while(temp<1||temp>7);
return temp;
}
void main()
{	
	student stu[N],s; 	
	FILE *p;
	if((p=fopen("student.txt","r"))==NULL)
	{	
		p=fopen("student.txt","w");
		fclose(p);
	}
	s.Load("student.txt",stu);
	while(1)
    {   
		switch(Menu())
        {
		case 1:		
			s.Accept(stu);
			system("pause");
			break;
		case 2:		
			s.Display(stu);
			system("pause");
			break;
		case 3:		
			s.Remove(stu);
			system("pause");
			break;
		case 4:   
			s.Modify(stu);
			system("pause");
			break;
		case 5:		
			s.Search(stu);
			system("pause");
			break;
		case 6:	   
			s.id_identical(stu); 
			system("pause");
			break;
		case 7:
			{
				s.Save("student",stu); 
				cout<<"正在退出,请稍后......."<<endl;
				for(int i=0;i<500000000;i++){}  
				exit(0);
			}
        }   
	}		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -