📄 123.cpp
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<iomanip.h>
class student
{
protected:
char number[15]; char name[20];
char sex[6]; char place[20];
char nation[6]; int year; int month; int day;
char party[10]; char id[20];
float score[3];
public:
student *next;
student(){ }
~student(){ }
char * getname()
{
return name;
}
char * getnumber()
{
return number;
}
double getscore(int i)
{
return score[i];
}
float getTotal()
{
return (score[0]+score[1]+score[2]);
}
void input()
{
int e=1;
cout<<"\t\t\t按提示输入:"<<endl;
cout<<"\t\t输入编号: "; cin>>number;
cout<<"\t\t输入姓名: "; cin>>name;
do
{
cout<<"\t\t输入性别: ";
cin>>sex;
if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
{
cout<<"\t\t输入籍贯: ";cin>>place;cout<<"\t\t输入民族: ";cin>>nation;
do
{
cout<<"\t\t输入生日年份(1949—2049): ";
cin>>year;
if(year>=1949&&year<2050) break;
cout<<"\t\t数据输入错误,请重新输入!"<<endl;
}while(1);
do
{
cout<<"\t\t 月份(1—12): ";
cin>>month;
if(month>=1&&month<13) break;
cout<<"\t\t数据输入错误,请重新输入!"<<endl;
}while(1);
while(1)
{
cout<<"\t\t 日期: ";
cin>>day;
if((day>31||day<0)||(month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day==31))
cout<<"\t\t数据输入错误,请重新输入!"<<endl;
else break;
};
cout<<"\t\t输入政治面貌: ";cin>>party;
cout<<"\t\t输入身份证号: ";cin>>id;
cout<<"\t\t输入数学分数: ";cin>>score[0];
cout<<"\t\t输入英语分数: ";cin>>score[1];
cout<<"\t\t输入计算机分数: ";cin>>score[2];
e=0;
}
else
{
cout<<"\t\t\t无此类型性别!重新输入!"<<endl;
e=1;
}
}while(e);
}
void input(ifstream & is)
{
is>>setw(15)>>number>>setw(20)>>name>>setw(6)>>sex>>setw(20)>>place
>>setw(6)>>nation>>setw(6)>>year>>setw(6)>>month>>setw(6)>>day>>setw(20)>>party
>>setw(20)>>id>>setw(6)>>score[0]>>setw(6)>>score[1]
>>setw(6)>>score[2];
is.get();
}
void output()
{
cout<<"学生基本信息如下:"<<endl;
cout<<"编号:"<<number<<" 姓名:"<<name<<" 性别:"<<sex <<" 籍贯:"<<place
<<" 民族:"<<nation<<" 生日:"<<year<<"年"<<month<<"月"<<day<<"日"<<" 政治面貌:"<<party<<endl
<<"身份证号:"<<id<<" 数学:"<<score[0]<<" 英语:"<<score[1]
<<" 计算机:"<<score[2]<<" 总分:"<<getTotal()<<endl<<endl;
}
void output(ofstream & os)
{
os<<setw(15)<<number<<setw(20)<<name<<setw(6)<<sex<<setw(20)<<place
<<setw(6)<<nation<<setw(6)<<year<<setw(6)<<month<<setw(6)<<day<<setw(20)<<party
<<setw(20)<<id<<setw(6)<<score[0]<<setw(6)<<score[1]
<<setw(6)<<score[2]<<endl;
}
};
class school
{
public:
school()
{
head=new student;
head->next=NULL;
key=0;
}
~school()
{
delete head;
}
void input();
void mend();
void del();
int find(student **p,char * nn,char *pn="^");
void found();
void show();
void count();
void save();
void begin();
void clear();
char mainmenu();
int getkey(){ return key;}
void setkey(int k){ key=k; }
private:
student *head;
int key;
};
//录入函数
void school::input()
{
student *p,*p2=NULL;
p=head;
int n;
while(p->next)
p=p->next;
while(n)
{
p2=new student;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
school::setkey(1);
cout<<"\t\t\t按1继续,按0返回 : ";
cin>>n;
}
}
//子查找函数
int school::find(student **p1,char * nn,char *pn)
{
student *p;
p=head;
while(p->next)
{
(*p1)=p;
if( !strcmp( (p->next)->getnumber(),nn)||!strcmp( (p->next)->getname(),pn ) )
return 1;
p=p->next;
}
return 0;
}
//查找函数
void school::found()
{
student *p;
int n=9;
char name[20]="^",num[15]="^";
do
{
cout<<"\t\t1:按编号查找,2:按姓名查找: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入编号: ";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名: ";
cin>>name;
}
if(!find(&p,num,name) )
{
cout<<"\t\t找不到你要查找的内容!"<<endl;
return;
}
(p->next)->output();
}
//删除函数
void school::del()
{
student *p,*p2;
int n;
char name[20],num[15];
do
{
cout<<"\t\t1:按编号查找,2:按姓名查找: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入编号: ";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名: ";
cin>>name;
}
if( !find(&p,num,name) )
{
cout<<"\t\t找不到你要删除的内容!"<<endl;
return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
delete p2;
if(n==1)
{
cout<<"编号为"<<num<<"的学生资料已删除!"<<endl;
}
else cout<<"姓名为"<<name<<"的学生资料已删除!"<<endl;
school::setkey(1);
}
//显示函数
void school::show()
{
student *p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
//修改函数
void school::mend()
{
student *p;
int n;
char name[20]="^",num[15]="^";
do
{
cout<<"\t\t1:按编号修改,2:按姓名修改: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入编号: ";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名: ";
cin>>name;
}
if( !find(&p,num,name) )
{
cout<<"\t\t找不到你要修改的内容!"<<endl;
return;
}
(p->next)->output();
(p->next)->input();
school::setkey(1);
}
//保存函数
void school::save()
{
student *p;
p=head;
ofstream os("student.txt",ios::out);
if (school::getkey()==1)
{
while(p->next)
{
(p->next)->output(os);
p=p->next;
}
}
cout<<"\t\t\t文件已保存! "<<endl;
school::setkey(0);
}
//初始化函数
void school::begin()
{
student *p,*p2;
p=head;
long t;
ifstream is("student.txt",ios::in);
if(!is)
{
ofstream os("student.txt",ios::out);
os.close();
return ;
}
int num=-1;
while(1)
{
num=-1; t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{
is.close();
return;
}
p2=new student; p2->input(is);
p->next=p2; p2->next=NULL; p=p->next;
}
}
//清空函数
void school::clear()
{
ofstream os("student.txt",ios::out);
os.clear();
student *p,*p2;
p=head->next;
while( p )
{
p2=p;
p=p->next;
delete p2;
}
cout<<"\t\t\t数据已清空! "<<endl;
}
//统计函数
void school::count()
{
student *p; p=head;
int n=0;
double g[3]={0,0,0};
float j[3]={0,0,0};
while(p->next)
{
p=p->next;
n++;
for(int i=0;i<3;i++)
{
(p->getscore(i) )>=60.0? j[i]++ : 0;
g[i]=g[i]+( p->getscore(i) );
}
}
cout<<"\n\t\t数学总分:"<<g[0]<<" 平均分:"<<g[0]/n
<<" 及格率:"<<j[0]/n<<endl<<"\t\t英语总分:"<<g[1]
<<" 平均分:"<<g[1]/n<<" 及格率:"<<j[1]/n<<endl
<<"\t\t计算机总分: "<<g[2]<<" 平均分: "<<g[2]/n
<<" 及格率:"<<j[2]/n<<endl;
}
//主选菜单函数
char school::mainmenu()
{
char n[6];
cout<<"\n\n ☆☆☆☆欢迎进入学籍管理系统☆☆☆☆"<<endl<<endl
<<" * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * 1: 录入学生信息 * *"<<endl
<<" * * 2: 显示学生信息 * *"<<endl
<<" * * 3: 查找学生信息 * *"<<endl
<<" * * 4: 删除学生信息 * *"<<endl
<<" * * 5: 修改学生信息 * *"<<endl
<<" * * 6: 统计学生成绩 * *"<<endl
<<" * * 7: 保存学生信息 * *"<<endl
<<" * * 8: 清空学生信息 * *"<<endl
<<" * * 0: 退出系统 * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" 请选择:";
cin>>n;
return n[0];
}
void main()
{
school pp;
int k=1; char n; pp.begin();
while(k==1)
{
n=pp.mainmenu();
switch(n)
{
case '1':pp.input(); break;
case '2':pp.show(); break;
case '3':pp.found(); break;
case '4':pp.del(); break;
case '5':pp.mend(); break;
case '6':pp.count(); break;
case '7':pp.save(); break;
case '8':pp.clear();break;
case '0':
if(pp.getkey()==1)
{
cout<<"\t\t\t是否保存? 1 : 保存 0:不保存 : ";
cin>>k;
if(k==0)
{
pp.clear();
break;
}
else
{
pp.save();
k=0;
}
}
else n=0,k=0;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -