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

📄 keshe.cpp

📁 用C++实现的学生信息管理系统
💻 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 + -