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

📄 abc.cpp

📁 学生管理系统
💻 CPP
字号:

#include <list>
#include <iostream>
#include <fstream>
using namespace std ;


#include "student.h"
#include "graduated.h"
#include "doctor.h"

typedef list<Doctor> LISTDOCTOR;
typedef list<Graduated> LISTGRADUATED;
typedef list<Student> LISTSTUDENT;

LISTDOCTOR dlist;
LISTGRADUATED glist;
LISTSTUDENT slist;


void DisplayMenu();
int Load();
void look();
void ReSearch();
void Add();
void Edit();
void Delete();
void Save();


void main(void)  
{ 
	char ch;

	DisplayMenu();
	if (Load()!=0)
		return;
    cout<<"#";
	cin>>ch;
	while (ch!='q')
	{
		switch (ch)
		{
		case 'h':DisplayMenu();
			      break;
		case 'l':look();
			      break;
		case 'a':Add();
			      break;
        case 'e':Edit();
			      break;
		case 'd':Delete();
			      break;
		case 'r':ReSearch();
			      break;
		case 's':Save();
			      break;
		default:break;
		}
        cout<<endl<<"#";
	    cin>>ch;
	}	 	
}
//显示菜单
void DisplayMenu()
{
	cout<<"#系统主菜单:"<<endl;
	cout<<" h帮助"<<endl
		<<" l显示"<<endl
		<<" a增加"<<endl
		<<" e编辑"<<endl
		<<" d删除"<<endl
		<<" r查找"<<endl
		<<" s保存"<<endl
		<<" q退出"<<endl;
}
//读取文件
int Load()
{
	
	//打开文件
	ifstream infile("学生信息.txt");
	if (infile.fail())
	{	
		cout<<"学生信息文件打开错误!"<<endl;
		return -1;
	}

	//读列信息数据
	char info[1023];
	infile.getline(info,sizeof(info));
	while(!infile.eof())
    {
		infile>>info;
		//博士生
		if (strcmp(info,"D")==0)
		{
			//存储数据
			Doctor dstu;
			infile>>info;
			strcpy(dstu.name,info);
			infile>>info;
			strcpy(dstu.ID,info);
			infile>>info;
			dstu.age = atoi(info);
			infile>>info;
			strcpy(dstu.depart,info);
			infile>>info;
			strcpy(dstu.lab,info);
			infile>>info;
			dstu.paper = atoi(info);

			dlist.insert(dlist.end(),dstu);
		}
		//硕士生
		if (strcmp(info,"M")==0)
		{
			
			//存储数据
			Graduated gstu;
			infile>>info;
			strcpy(gstu.name,info);
			infile>>info;
			strcpy(gstu.ID,info);
			infile>>info;
			gstu.age = atoi(info);
			infile>>info;
			strcpy(gstu.depart,info);
			infile>>info;
			strcpy(gstu.lab,info);
			
			glist.insert(glist.end(),gstu);
		}
		//本科生
		if (strcmp(info,"B")==0)
		{
		
			//存储数据
			Student sstu;
			infile>>info;
			strcpy(sstu.name,info);
			infile>>info;
			strcpy(sstu.ID,info);
			infile>>info;
			sstu.age = atoi(info);
			infile>>info;
			strcpy(sstu.depart,info);
					
			slist.insert(slist.end(),sstu);
		}
	}
	infile.close();
	return 0;
}
//显示数据
void look()
{
    LISTDOCTOR::iterator i;
	LISTGRADUATED::iterator j;
	LISTSTUDENT::iterator k;
	Doctor dstu;
	Graduated gstu;
	Student sstu;

	//显示博士生
	cout<<"博士生:"<<dlist.size()<<endl;
	for (i = dlist.begin(); i != dlist.end(); ++i)
	{
		dstu=*i;
		dstu.display();
	}


	//显示硕士生
	cout<<"硕士生:"<<glist.size()<<endl;
	for (j = glist.begin(); j != glist.end(); ++j)
	{
		gstu=*j;
		gstu.display();
	} 
		
	//显示本科生
	cout<<"本科生:"<<slist.size()<<endl;
    for (k = slist.begin(); k != slist.end(); ++k)
	{
		sstu=*k;
		sstu.display();
	}
}
//添加数据 
void Add()
{

	char ch;
	char info[256];
	
	cout<<"输入学生类别,D博士 M硕士 B本科:";
    cin>>ch;
  
	Doctor dstu;
	Graduated gstu;
	Student sstu;

	switch(ch)
	{
	case 'D':
		cout<<"输入学生姓名:";
		cin>>info;
		strcpy(dstu.name,info);
		cout<<"输入学生学号:";
		cin>>info;
		strcpy(dstu.ID,info);
		cout<<"输入学生年龄:";
		cin>>info;
		dstu.age = atoi(info);
		cout<<"输入学生系别:";
		cin>>info;
		strcpy(dstu.depart,info);
		cout<<"输入学生实验室:";
		cin>>info;
		strcpy(dstu.lab,info);
		cout<<"输入学生发表文章数:";
		cin>>info;
		dstu.paper = atoi(info);
		dlist.insert(dlist.end(),dstu);
		break;
	case 'M':
		cout<<"输入学生姓名:";
		cin>>info;
		strcpy(gstu.name,info);
		cout<<"输入学生学号:";
		cin>>info;
		strcpy(gstu.ID,info);
		cout<<"输入学生年龄:";
		cin>>info;
		gstu.age = atoi(info);
		cout<<"输入学生系别:";
		cin>>info;
		strcpy(gstu.depart,info);
		cout<<"输入学生实验室:";
		cin>>info;
		strcpy(gstu.lab,info);
		glist.insert(glist.end(),gstu);
	    break;
    case 'B':
		cout<<"输入学生姓名:";
		cin>>info;
		strcpy(sstu.name,info);
		cout<<"输入学生学号:";
		cin>>info;
		strcpy(sstu.ID,info);
		cout<<"输入学生年龄:";
		cin>>info;
		sstu.age = atoi(info);
		cout<<"输入学生系别:";
		cin>>info;
		strcpy(sstu.depart,info);
		slist.insert(slist.end(),sstu);
	    break;
	default:
		cout<<"输入学生类别错误!"<<endl;
	}
	cout<<"输入结束!"<<endl;
}
//编辑数据
void Edit()
{
	LISTDOCTOR::iterator i;
	LISTGRADUATED::iterator j;
	LISTSTUDENT::iterator k;
	Doctor dstu;
	Graduated gstu;
	Student sstu;
	char info[256];
	char ch;
    
	cout<<"要编辑的学生姓名或学号:";
    cin>>info;
	
	for (i = dlist.begin(); i != dlist.end(); ++i)
	{
		dstu=*i;
		if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
		{
			dlist.erase(i);
			dstu.display();
			cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室6文章"<<endl;
			cin>>ch;
			while (ch!='0')
			{
				switch(ch)
				{
				case '1':cout<<"输入学生姓名:";
						 cin>>info;
						 strcpy(dstu.name,info);
						 break;				   
				case '2':cout<<"输入学生学号:";
					     cin>>info;
						 strcpy(dstu.ID,info);
						 break;
				case '3':cout<<"输入学生年龄:";
						 cin>>info;
						 dstu.age = atoi(info);
		                 break;
				case '4':cout<<"输入学生系别:";
		                 cin>>info;
	        	         strcpy(dstu.depart,info);
						 break;
				case '5':cout<<"输入学生实验室:";
		                 cin>>info;
		                 strcpy(dstu.lab,info);
		                 break;
				case '6':cout<<"输入学生发表文章数:";
		                 cin>>info;
		                 dstu.paper = atoi(info);
						 break;
				default:break;
				}
				cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室6文章"<<endl;
				cin>>ch;
			}
			dlist.insert(dlist.end(),dstu);
			return;
		}
	}
    for (j = glist.begin(); j != glist.end(); ++j)
	{
		gstu=*j;
		if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
		{
			gstu.display();
			glist.erase(j);
			cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室"<<endl;
			cin>>ch;
			while (ch!='0')
			{
				switch(ch)
				{
				case '1':cout<<"输入学生姓名:";
						 cin>>info;
						 strcpy(gstu.name,info);
						 break;				   
				case '2':cout<<"输入学生学号:";
					     cin>>info;
						 strcpy(gstu.ID,info);
						 break;
				case '3':cout<<"输入学生年龄:";
						 cin>>info;
						 gstu.age = atoi(info);
		                 break;
				case '4':cout<<"输入学生系别:";
		                 cin>>info;
	        	         strcpy(gstu.depart,info);
						 break;
				case '5':cout<<"输入学生实验室:";
		                 cin>>info;
		                 strcpy(gstu.lab,info);
		                 break;
				default:break;
				}
				cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别5实验室"<<endl;
				cin>>ch;
			}
			glist.insert(glist.end(),gstu);
			return;
		}
	}
    for (k = slist.begin(); k != slist.end(); ++k)
	{
		sstu=*k;
		if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
		{
			sstu.display();
			slist.erase(k);
			cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别"<<endl;
			cin>>ch;
			while (ch!='0')
			{
				switch(ch)
				{
				case '1':cout<<"输入学生姓名:";
						 cin>>info;
						 strcpy(sstu.name,info);
						 break;				   
				case '2':cout<<"输入学生学号:";
					     cin>>info;
						 strcpy(sstu.ID,info);
						 break;
				case '3':cout<<"输入学生年龄:";
						 cin>>info;
						 sstu.age = atoi(info);
		                 break;
				case '4':cout<<"输入学生系别:";
		                 cin>>info;
	        	         strcpy(sstu.depart,info);
						 break;
				default:break;
				}
				cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别"<<endl;
				cin>>ch;
			}
			slist.insert(slist.end(),sstu);
			return;
		}
	}
    cout<<"指定的学生已删除!"<<endl;
}
//删除数据
void Delete()
{
	LISTDOCTOR::iterator i;
	LISTGRADUATED::iterator j;
	LISTSTUDENT::iterator k;
	Doctor dstu;
	Graduated gstu;
	Student sstu;
	char info[256];
	
    
	cout<<"要删除的学生姓名或学号:";
    cin>>info;
	
	for (i = dlist.begin(); i != dlist.end(); ++i)
	{
		dstu=*i;
		if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
		{
			dstu.display();
			dlist.erase(i);
			return;
		}
	}
    for (j = glist.begin(); j != glist.end(); ++j)
	{
		gstu=*j;
		if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
		{
			gstu.display();
			glist.erase(j);
			return;
		}
	}
    for (k = slist.begin(); k != slist.end(); ++k)
	{
		sstu=*k;
		if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
		{
			sstu.display();
			slist.erase(k);
			return;
		}
	}
    cout<<"指定的学生已删除!"<<endl;
    
}
//查询数据
void ReSearch()
{
	LISTDOCTOR::iterator i;
	LISTGRADUATED::iterator j;
	LISTSTUDENT::iterator k;
	Doctor dstu;
	Graduated gstu;
	Student sstu;
	char info[256];
	
	   
	cout<<"要查询的学生姓名或学号:";
    cin>>info;
	
	for (i = dlist.begin(); i != dlist.end(); ++i)
	{
		dstu=*i;
		if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
		{
		    dstu.display();
			return;
		}
	}
    
	for (j = glist.begin(); j != glist.end(); ++j)
	{
		gstu=*j;
		if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
		{
		    gstu.display();
			return;
		}
	}
	
	for (k = slist.begin(); k != slist.end(); ++k)
	{
		sstu=*k;
		if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
		{
		    sstu.display();
			return;
		}
	}
	
}
//保存数据
void Save()
{
	LISTDOCTOR::iterator i;
	LISTGRADUATED::iterator j;
	LISTSTUDENT::iterator k;
	Doctor dstu;
	Graduated gstu;
	Student sstu;
	
	//打开文件
	ofstream outfile("学生信息.txt");
	if (outfile.fail())
	{	
		cout<<"学生信息文件保存错误!"<<endl;
		return ;
	}

	outfile<<"类别"<<"\t"<<"姓名"<<"\t"
		   <<"学号"<<"\t"<<"年龄"<<"\t"
		   <<"系别"<<"\t"<<"实验室"<<"\t"
		   <<"文章"<<endl;
	//写入博士数据
	for (i = dlist.begin(); i != dlist.end(); ++i)
	{
		dstu=*i;
	    outfile<<'D'<<"\t"
			   <<dstu.name<<"\t"
			   <<dstu.ID<<"\t"
			   <<dstu.age<<"\t"
			   <<dstu.depart<<"\t"
			   <<dstu.lab<<"\t"
			   <<dstu.paper<<endl;
	}
    //写入硕士数据
	for (j = glist.begin(); j != glist.end(); ++j)
	{
		gstu=*j;
	    outfile<<'M'<<"\t"
			   <<gstu.name<<"\t"
			   <<gstu.ID<<"\t"
			   <<gstu.age<<"\t"
			   <<gstu.depart<<"\t"
			   <<gstu.lab<<endl;
	}
	//写入本科生数据
	for (k = slist.begin(); k != slist.end(); ++k)
	{
		sstu=*k;
		outfile<<'B'<<"\t"
			   <<sstu.name<<"\t"
			   <<sstu.ID<<"\t"
			   <<sstu.age<<"\t"
			   <<sstu.depart<<endl;
	}
			
	outfile.close();
	cout<<"学生信息文件已保存!"<<endl;
}

⌨️ 快捷键说明

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