📄 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 + -