📄 keshe.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include "show.h"
//人员基类
class people
{
protected:
int num;//编号
char *name;//姓名
char sex;//性别
int age;//年龄
public:
people();
~people(){}
int getnum();//得到编号
virtual void display()=0; //
};
people::people()
{
char name1[20];
char sex1;
int num1;
int age1;
cout<<"请输入姓名:";
cin>>name1;
name=new char[strlen(name1)+1];
strcpy(name,name1);
cout<<"请输入编号:";
cin>>num1;
num=num1;
cout<<"请输入性别(f/m):";
for(;;)
{
cin>>sex1;
if(sex1!='f'&&sex1!='m')
cout<<"输入有误!重新输入!";
else break;
}
sex=sex1;
cout<<"请输入年龄:";
cin>>age1;
age=age1;
}
int people::getnum()
{
return num;
}
//学生类
class student:public people
{
private:
int grade;//年级
float score;//分数
student *next;
public:
student();
void display();
student reset();
student* getnext();
student* setnext(student *node);
};
student::student()
{
int grade1;
float score1;
cout<<"请输入年级:";
cin>>grade1;
grade=grade1;
cout<<"请输入成绩:";
cin>>score1;
score=score1;
next=0;
}
student student::reset()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入编号:";
cin>>num;
cout<<"请输入性别(f/m):";
for(;;)
{
cin>>sex;
if(sex!='f'&&sex!='m')
cout<<"输入有误!重新输入!";
else break;
}
cout<<"请输入年龄:";
cin>>age;
cout<<"请输入年级:";
cin>>grade;
cout<<"请输入成绩:";
cin>>score;
return(*this);
}
void student::display() //输出学生信息
{
cout<<"学生的姓名"<<name<<endl;
cout<<" 学生的编号"<<num<<endl;
cout<<" 学生的性别(f/m)"<<sex<<endl;
cout<<" 学生的年龄"<<age<<endl;
cout<<" 学生的年级"<<grade<<endl;
cout<<"学生的成绩 "<<score<<endl;
}
student* student::setnext(student *node)
{
next=node;
return next;
}
student* student::getnext()
{
return next;
}
//教师类
class teacher:public people
{
private:
char *protise;//职称
char *speciality;//专业属性
teacher *next;
public:
teacher();
~teacher(){}
void display();
teacher reset();
teacher *getnext();
teacher* setnext(teacher *node);
};
teacher::teacher()
{
char protise1[50];
char speciality1[50];
cout<<"请输入教师的职称:";
cin>>protise1;
protise=new char[strlen(protise1)+1];
strcpy(protise,protise1);
cout<<"请输入教师的专业属性:";
cin>>speciality1;
speciality=new char[strlen(speciality1)+1];
strcpy(speciality,speciality1);
next=0;
}
teacher teacher::reset()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入编号:";
cin>>num;
cout<<"请输入性别(f/m):";
for(;;)
{
cin>>sex;
if(sex!='f'&&sex!='m')
cout<<"输入有误!重新输入!";
else break;
}
cout<<"请输入年龄:";
cin>>age;
cout<<"请输入教师的职称:";
cin>>protise;
cout<<"请输入教师的专业属性:";
cin>>speciality;
return(*this);
}
teacher *teacher::setnext(teacher* node)
{
next=node;
return next;
}
teacher *teacher::getnext()
{
return next;
}
void teacher::display()
{
cout<<"教师的姓名"<<*name<<endl;
cout<<" 教师的的编号"<<num<<endl;
cout<<" 教师的性别(f/m)"<<sex<<endl;
cout<<" 教师的年龄"<<age<<endl;
cout<<" 教师的职务"<<protise<<endl;
cout<<"教师所在系 "<<speciality<<endl;
}
//机关人员类
class office:public people
{
private:
int level;//级别
office* next;
public:
office();
void display();
office reset();
office *getnext();
office *setnext(office *node);
};
office::office()
{
int level1;
cout<<"请输入机关人员的级别:";
cin>>level1;
level=level1;
next=0;
}
office office::reset()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入编号:";
cin>>num;
cout<<"请输入性别(f/m):";
for(;;)
{
cin>>sex;
if(sex!='f'&&sex!='m')
cout<<"输入有误!重新输入!";
else break;
}
cout<<"请输入年龄:";
cin>>age;
cout<<"请输入机关人员的级别:";
cin>>level;
return(*this);
}
office *office::setnext(office *node)
{
next=node;
return next;
}
office* office::getnext()
{
return next;
}
void office::display()
{
cout<<"机关人员的姓名"<<*name<<endl;
cout<<" 机关人员的编号"<<num<<endl;
cout<<"机关人员的性别(f/m) "<<sex<<endl;
cout<<"机关人员的年龄 "<<age<<endl;
cout<<"机关人员的级别 "<<level<<endl;
}
//链表类
template <class T>
class list
{
private:
T *phead;
T *end();
public:
list();
void add();
void search();
void reset();
void dele();
void count();
void displays();
};
template <class T>
list<T>::list()
{
phead=0;
}
//添加结点
template <class T>
void list<T>::add()
{
T d;
T *searchp;
T *pnode=new T(d);
searchp=phead;
if(pnode==0) exit(0);
if(phead==0)
{
phead=pnode;
}
else
(end())->setnext(pnode);
}
//查找结点
template <class T>
void list<T>::search()
{
if(phead==0)
{
cout<<"该链表没有任何记录!"<<endl;
}
else
{
int n;
bool flag=0;
cout<<"请输入查找人员的编号:";
cin>>n;
T *p1;
p1=phead;
while(p1)
{
if(n==p1->getnum())
{
cout<<"查找到的人员信息如下:"<<endl;
p1->display();
flag=1;
}
p1=p1->getnext();
}
if(flag==0)
{
cout<<"\t对不起,没有查到相关记录!"<<endl;
}
}
}
//修改结点
template <class T>
void list<T>::reset()
{
if(phead==0)
{
cout<<"该链表没有任何记录!"<<endl;
}
else
{
int n;
bool flag=0;
cout<<"请输入修改人员的编号:";
cin>>n;
T *p1;
p1=phead;
while(p1)
{
if(n==p1->getnum())
{
p1->reset();flag=1;
}
p1=p1->getnext();
}
if(flag==0)
{
cout<<"\t对不起,没有查到相关记录!"<<endl;
}
}
}
//删除结点
template <class T>
void list<T>::dele()
{
int n;
bool flag=0;
T *p1,*p2;
cout<<"请输入需要删除的人员的编号:";
cin>>n;
p2=phead;
if((n==phead->getnum())&&(n==(end())->getnum()))
{
phead=0;flag=1;
}
else if((n==phead->getnum())&&(n!=(end())->getnum()))
{
phead=phead->getnext();flag=1;
}
else
{
while(p2)
{
p1=p2;
p2=p2->getnext();
if((n==p2->getnum())&&(n!=(end())->getnum()))
{
p1->setnext(p2->getnext());flag=1;
}
if((n==(end())->getnum())&&(n==p2->getnum()))
{
p1=(end());flag=1;
}
}
}
if(flag==0)
{
cout<<"\t没有找到要删除的相关记录!"<<endl;
}
}
//统计人员
template <class T>
void list<T>::count()
{
int n=0;
T* P1=phead;
while(P1)
{
P1=P1->getnext();
n++;
}
cout<<"该单位有"<<n<<"人。"<<endl;
}
//显示数据
template <class T>
void list<T>::displays()
{
int i=0;
if(phead==0)
{
cout<<"\t当前记录为空!"<<endl;
}
else
{
T *p;
p=phead;
while(p)
{
if(++i%40==1&&i!=1)
cout<<endl;
else
{
p->display();
p=p->getnext();
}
}
}
}
//私有成员,求尾结点
template <class T>
T *list<T>::end()
{
T *prev,*p;
prev=p=phead;
while(prev)
{
p=prev;
prev=prev->getnext();
}
return p;
}
void face()
{
char * string[]={" ",
"╭─────┬┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┬────╮",//1
"│ ├汽┤├院┤├人┤├员┤├管┤├理┤├系┤├统┤ │",//2
"├─────┴┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┴────┤",//3
"│ [a]:学生管理 │",//4
"│ │",//5
"│ [b]:教师管理 │",//6
"│ │",//7
"│ [c]:机关人员管理 │",//8
"│ │",//9
"│ [d]:浏览所有信息 │",//10
"│ │",//11
"│ [e]:退出系统 │",//12
"│ │",//13
"├─────────────────────────────────┤",//14
"│ ╱◥██◣ ¤╭⌒╮ ╭制作:李璐,石冰怡 │",//15
"│ ︱田︱田田| ╰----------------------------------------- │",//16
"│ ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬ │",//17
"╰─────────────────────────────────╯"};//18
CShow show; //调用显示函数
show.SetType(string,19,CShow::SH_LEFTTORIGHT,100);
show.Show();
}
void face2()
{
char *string2[]={"",
"\t┏━━━━━━━━━━━━━━━━━━━━┓",
"\t┃ [1]:添加学生记录 ┃",
"\t┃ [2]:修改学生记录 ┃",
"\t┃ [3]:删除学生记录 ┃",
"\t┃ [4]:查找学生记录 ┃",
"\t┃ [5]:统计学生记录 ┃",
"\t┃ [6]:显示所有学生记录 ┃",
"\t┃ [7]:返回 ┃",
"\t┗━━━━━━━━━━━━━━━━━━━━┛",
"\t********************************************"};
for(int i=0;i<11;i++)
{
cout<<string2[i]<<endl;
}
}
void face3()
{
char *string3[]={"",
"\t┏━━━━━━━━━━━━━━━━━━━━┓",
"\t┃ [1]:添加教师记录 ┃",
"\t┃ [2]:修改教师记录 ┃",
"\t┃ [3]:删除教师记录 ┃",
"\t┃ [4]:查找教师记录 ┃",
"\t┃ [5]:统计教师记录 ┃",
"\t┃ [6]:显示所有教师记录 ┃",
"\t┃ [7]:返回 ┃",
"\t┗━━━━━━━━━━━━━━━━━━━━┛",
"\t********************************************"};
for(int i=0;i<11;i++)
{
cout<<string3[i]<<endl;
}
}
void face4()
{
char *string4[]={"",
"\t┏━━━━━━━━━━━━━━━━━━━━┓",
"\t┃ [1]:添加机关人员记录 ┃",
"\t┃ [2]:修改机关人员记录 ┃",
"\t┃ [3]:删除机关人员记录 ┃",
"\t┃ [4]:查找机关人员记录 ┃",
"\t┃ [5]:统计机关人员记录 ┃",
"\t┃ [6]:显示所有机关人员记录 ┃",
"\t┃ [7]:返回 ┃",
"\t┗━━━━━━━━━━━━━━━━━━━━┛",
"\t********************************************"};
for(int i=0;i<12;i++)
{
cout<<string4[i]<<endl;
}
}
void x()
{
cout<<"*********************************"<<endl;
}
//主函数
void main()
{
list<student> l1;
list<teacher> l2;
list<office> l3;
int m;
char k;
loop:
do
{
face();
cout<<"请输入选择:";
cin>>k;
switch(k)
{
case 'a':
{
do
{
system("cls");
face2();
cout<<"请输入选择:";
cin>>m;
switch(m)
{
case 1:l1.add();break;
case 2:l1.reset();break;
case 3:l1.dele();break;
case 4:l1.search();break;
case 5:l1.count();break;
case 6:l1.displays();break;
case 7:goto loop;break;
default:
cout<<"对不起,输入的操作数错误!"<<endl;break;goto loop;
}
cout<<endl<<"请按任意键重复运行"<<endl;
cin.get(); //清除回车键
getch();
}while(m!=0);
}
break;
case 'b':
{
do
{
system("cls"); //清屏函数
face3();
cout<<"请输入选择:";
cin>>m;
switch(m)
{
case 1:face3();x();l2.add();break;
case 2:face3();x();l2.reset();break;
case 3:face3();x();l2.dele();break;
case 4:face3();x();l2.search();break;
case 5:face3();x();l2.count();break;
case 6:face3();x();l2.displays();break;
case 7:goto loop;break;
default:
cout<<"对不起,输入的操作数错误!"<<endl;break;goto loop;
}
cout<<endl<<"请按任意键重复运行"<<endl;
cin.get(); //清除回车键
getch();
}while(m!=0);
}break;
case 'c':
{
do
{
system("cls");
face4();
cout<<"请输入选择:";
cin>>m;
switch(m)
{
case 1:face4();x();l3.add();break;
case 2:face4();x();l3.reset();break;
case 3:face4();x();l3.dele();break;
case 4:face4();x();l3.search();break;
case 5:face4();x();l3.count();break;
case 6:face4();x();l3.displays();break;
case 7:goto loop;break;
default:
cout<<"对不起,输入的操作数错误!"<<endl;break;goto loop;
}
}while(m!=0);
}break;
case 'd':
{
system("cls");
cout<<"\t\t学院人员信息"<<endl;
cout<<"学生当前记录:"<<endl;l1.displays();
cout<<"教师当前记录:"<<endl;l2.displays();
cout<<"机关人员当前记录:"<<endl;l3.displays();
} cout<<"返回主界面请输入选择1:";
cin>>m;
system("cls");
switch(m)
{
case 1:goto loop;break;
default:
cout<<"对不起,输入的操作数错误!"<<endl;break;goto loop;
}
case 'e':
{
exit(0);
}
default:
{
system("cls");
cout<<"对不起,输入的操作数错误!"<<endl;break;goto loop;
}
}
break;
}while(k!='e');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -