C++课设 学校档案管理系统

学校档案管理系统

1.需求分析:
学校在职工作人员有教师、行政人员和学生,教师信息有:职编号、姓名、性别、专业、所属部门、职称、奖惩情况等,学生信息有:编号、姓名、性别、专业、班级、奖惩情况等,行政人员信息有:编号、姓名、性别、专业、所属部门、职务、奖惩情况等。
2.程序的基本功能:
(1)、增加、修改、删除教师、行政人员以及学生的资料。
(2)、按条件查询显示教师、行政人员以及学生的资料(条件有按编号、姓名、性别等)。
这些都是我们在做课设时做的相关题目,而且我们用到用到文件进行输入输出

一、总体设计

利用继承和派生构造出整体结构,之后利用虚基类将数据传递,利用文件将录入的信息写入txt中,也可以将文件中的数据读取出来,利用for循环进行对人员的查询,删除,修改。用switch进行操作。
在这里插入图片描述

二、详细设计

(1)、头文件
#include
#include<stdlib.h>
#include
#include
(2)、定义的基类与派生类
class person{};
class Teacher:virtual public person{};
class Student :virtual public person{};
class Administrator :virtual public person{};
class TeaManagement{};
class StuManagement{};
class Administrator{};
(3)、函数
int main()//主函数
void Input()//输入信息
void Output()//输出函数
void TeaManagement/StuManagement/Administrator::Save()//文件录入
void TeaManagement/StuManagement/Administrator::Read()//读取
void TeaManagement/StuManagement/Administrator::Add()//添加
void TeaManagement/StuManagement/Administrator::Search()//查找
void TeaManagement/StuManagement/Administrator::Revise()//修改
void TeaManagement/StuManagement/Administrator::Delete()//删除

教师、学生、管理员对应的代码部分其实差不多,好多就是在自己写完后直接Crtl+C/V,话不多说,直接上代码
教师的操作

#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<string>
using namespace std;
const int MAX=100;//存放最多人数
class person//共同的信息
{
public:
	int num;//编号
	string name;//姓名
	string sex;//性别
	string course;//专业
};
class Teacher:virtual public person//教师的信息
{
public:
	string department;//部门
	string title;//职称
	string situation;//奖惩
	void Input()
	{
		cout<<"Input num:";           cin>>num;
		cout<<"Input name:";          cin>>name;
		cout<<"Input sex:";           cin>>sex;
		cout<<"Input course:";        cin>>course;
		cout<<"Input department:";    cin>>department;
		cout<<"Input title:";         cin>>title;
		cout<<"Input situation:";     cin>>situation;
	}
	void Output()
	{
		cout<<"编号:"<<num<<" "<<"姓名:"<< name<<" "<<"性别:"<<sex<<" "<<"专业:"<<course<<" "<<"部门:"<<department<<" "<<"职称:"<<title<<" "<<"奖惩:"<<situation<<endl;
	}
};
Teacher Tea[MAX];
static int Teamax;//教师的最大人数
class TeaManagement//教师管理类
{
public:
	int Add();// 增加
	int Search();//查询
	int Revise();//修改
	int Delete();//删除
	void Save();//保存
	void Read();//读取
	void Showout();//展示
};
void TeaManagement::Save()//录入
{
	ofstream it("Teamax.txt");
	for(int i=0;i<Teamax;i++)
	{
		it <<Tea[i].num <<"\t" <<Tea[i].name<<"\t"<<Tea[i].sex <<"\t"<<Tea[i].course <<"\t"
		<<Tea[i].department <<"\t"<<Tea[i].title<<"\t"<<Tea[i].situation  <<endl;
	}
	it.close();
}
void TeaManagement::Read()//读取
{
	int num;//编号
	string name;//姓名
	string sex;//性别
	string course;//专业
	string department;//部门
	string title;//职称
	string situation;//奖惩
	ifstream it("Teamax.txt");
	int i = 0;
	while(!it.eof())
	{
		it >> num>> name >> sex >> course >> department >> title >> situation;
        Tea[i].num =num;
		Tea[i].name = name;
		Tea[i].sex = sex;
		Tea[i].course = course;
		Tea[i].department = department;
		Tea[i].title = title;
		Tea[i].situation = situation;
		++i;
     }
     Teamax = i - 1;//ifstream中使用eof最后一个字符输出两次,减一去减少一次代码重复
}
void TeaManagement::Showout()
{
    if(Teamax==0)
    {cout<<"记录为空"<<endl;
         }
    for(int i=0;i<Teamax;i++)
    Tea[i].Output();
}
int TeaManagement::Add()//添加
{
	system("cls");//清屏
	Teacher t;
	int i,num;
	if(Teamax==MAX)//数组已满
	{
		cout<<"人数已满"<<endl;
		return 0;
	}
	cout<<"输入编号:";//如果没满,则输入记录
	cin>>num;
	for(i=0;i<Teamax;i++)//在Teatop条记录中比较,是否存在相同编号
	{
		if(num==Tea[i].num)
		{
			cout<<"已有编号"<<endl;
			return 0;
		}
	}
	t.Input();//不存在相同编号,调用Input()函数,输入记录
	Tea[Teamax]=t;//把记录存入数组
	Teamax++;//元素个数加一
	Save();//存入文件
	cout<<"添加成功!"<<endl;
	return 1;
}
int TeaManagement::Search()//查询
{
	system("cls");//清屏
	int j,way,num;
	string sex;
	char name[10];
	cout<<"选择查找方式,按编号查找(0)|按姓名查找(1)|按性别查找(2):";
	cin>>way;
	switch(way)
	{
	case 0:
	cout << "请输入编号:";
	cin >> num;
	for (j = 0; j <Teamax; j++)//找到
	{
		if (num == Tea[j].num)
		break;
	}
	if (j == Teamax)//没找到
	{
		cout << "没有此人!" << endl;
	}
	else
	{
		Tea[j].Output();//找到并输出
	}
	break;
	case 1:
	cout<<"请输入姓名:";
	cin>>name;
	for (j = 0; j <Teamax; j++)
	{
		if (name == Tea[j].name)
		break;
	}
	if (j == Teamax)
	{
		cout << "没有此人!" << endl;
	}
	else
	{
		Tea[j].Output();//找到并输出
	}
	break;
	case 2:

	cout<<"请输入性别:";
	cin>>sex;
	for (j = 0; j <Teamax; j++)
	{
		if (Tea[j].sex==sex)
            {Tea[j].Output();}//找到并输出

	}
	break;
	}
	return 1;
}
int TeaManagement::Revise()//修改
{
	system("cls");//清屏
	Teacher t1;
	int j,num;
	cout<<"输入要编辑人的编号:";
	cin>>num;
	for(j=0;j<Teamax;j++)//查找与输入学号相同的记录
	{
		if(num==Tea[j].num) break;
	}
	if(j==Teamax)
	{cout<<"没有此人!"<<endl;
	return 0;
	}
	cout<<"输入修改后的信息,编号不能改:"<<endl;
	t1.Input();//重新输入该记录的信息
	Tea[j] = t1;//将该记录写入数组
	Save();
	cout << "编辑成功!" << endl;
	return 1;
}
int TeaManagement::Delete() //删除功能
{
	system("cls"); //清屏
	int j, num;
	cout << "请输入要删除的人的编号:";
	cin >> num;
	for (j = 0; j < Teamax; j++)//查找与输入学号相同的记录
	{
		if (num == Tea[j].num)
            break;
	}
	if (j == Teamax)
	{
		cout << "没有此人!" << endl;
		return 0;
	}
	for (j=0; j < Teamax; j++)//在数组中删除该记录,后面的记录往前移
	{
		Tea[j] = Tea[j + 1];
	}
	Teamax--;//记录数减一
	Save();//文件保存
	cout << "删除成功!" << endl;
	return 1;
}


int Tea_mune(TeaManagement T) //用一个管理教师的类来实现结果的显示
{
	system("cls");
	int choice;
	do {
		cout << endl; cout << endl;
		cout << "教师管理" << endl;
		cout << "==========================================================================================" << endl;
		cout << "| 1.录入 ";
		cout << "2.查询    ";
		cout << "3.修改    ";
		cout << "4.删除    ";
		cout << "5.读取    ";
		cout << "0.退出 |" << endl;
		cout << "==========================================================================================" << endl;
		cout << "请选择:";
		cin >> choice;
		switch (choice)
		{
		case 1:T.Add(); break;
		case 2:T.Search(); break;
		case 3:T.Revise(); break;
		case 4:T.Delete(); break;
		case 5:T.Showout();break;
		default:cout << "\n 选择错误" << endl; break;
		case 0:break;
		}
	} while (choice!= 0);//choice不为零时进入循环
	return 0;
}

学生的操作

class Student :virtual public person //学生
{
public:
	string classes;
	string situation;
	void Input()
	{
		cout << "Input num : ";       cin >> num;
		cout << "Input name : ";      cin >> name;
		cout << "Input sex : ";       cin >> sex;
		cout << "Input course : ";    cin >> course;
		cout << "Input classes : ";   cin >>classes;
		cout << "Input situation: ";  cin >> situation;
	}
	void Output()
	{
		cout << "编号: " << num << " " << "姓名: " << name << " " << "性别: " << sex << " " << "专业: " <<course <<" " << "班级: " <<classes << " " << "奖惩: " << situation << endl;
	}

};
Student Stu[MAX]; //定义一个学生的对象数组
static int Stumax;
class StuManagement //管理学生的类
{
public:
	int Add();//添加
	int Search();//查询
	void Revise();//修改
	int Delete();//删除
	void Save();
	void Read();
	void Showout();
};
void StuManagement::Save()
{
	ofstream it("Stumax.txt");
	for(int i=0;i<Stumax;i++)
	{
		it << Stu[i].num << "\t" << Stu[i].name << "\t"<< Stu[i].sex
		<< "\t"<< Stu[i].course << "\t" << Stu[i].classes  << "\t"<< Stu[i].situation <<endl;
	}
	it.close();
}
void StuManagement::Read()
{
	int num;//编号
	string name;//姓名
	string sex;//性别
	string course;//专业
	string classes;
	string situation;
	ifstream it("Stumax.txt");
	int i = 0;
	while(!it.eof())
	{
		it >> num >>  name >> sex >> course >> classes>>situation;
		Stu[i].num = num;
		Stu[i].name = name;
		Stu[i].sex = sex;
		Stu[i].course = course;
		Stu[i].classes =classes;
		Stu[i].situation = situation;
		++i;
	}
	Stumax= i -1;
}
void StuManagement::Showout()
{
    if(Stumax==0)
    {cout<<"记录为空"<<endl;
    }
    for(int i=0;i<Stumax;i++)
    Stu[i].Output();
}
int StuManagement::Add() //添加功能
{
	system("cls");
	Student t;
	int i, num;
	if (Stumax == MAX)//数组已满
	{
		cout << "人数已满" << endl;
		return 0;
	}
	cout << "请输入编号:"; //如果没满,则输入记录
	cin >> num;
	for (i = 0; i < Stumax; i++)//在Stutopt条记录中比较,是否存在相同的编号
	{
		if (num == Stu[i].num)//存在相同的编号
		{
			cout << "已有该编号" << endl;
			return 0;
		}
	}
	t.Input();//不存在相同的学号,调用Input函数,输入记录
	Stu[Stumax] = t;//把记录存入数组
	Stumax++;//元素个数加一
	Save();
	cout << "添加成功!" << endl;
	return 1;
}
int StuManagement::Search() //查询功能
{
	system("cls");
	int j,way,num;
	char name[20],sex[4];
	cout<<"选择查找方式,按编号查找(0)|按姓名查找(1)|按性别查找(2):";
	cin>>way;
	switch(way)
	{
	case 0:
	cout << "请输入编号:";
	cin >> num;
	for (j = 0; j <Stumax ; j++)//找到
	{
		if (num == Stu[j].num)
		break;
	}
	if (j == Stumax)//没找到
	{
		cout << "没有此人!" << endl;
	}
	else
	{
		Stu[j].Output();//找到并输出
	}
	break;
	case 1:
	cout<<"请输入姓名:";
	cin>>name;
	for (j = 0; j < Stumax; j++)
	{
		if (Stu[j].name==name)
		break;
	}
	if (j == Stumax)
		cout << "没有此人!" << endl;
	else
		Stu[j].Output();//找到并输出
	break;
	case 2:
	cout<<"请输入性别:";
	cin>>sex;
	for (j = 0; j < Stumax; j++)
	{
		if (Stu[j].sex==sex)
        Stu[j].Output();//找到并输出
	}
	break;
	}
	return 1;
}

void StuManagement::Revise() //修改功能
{
	system("cls");
	Student t1;
	int j, num;
	cout << "请输入要修改的人的编号:";
	cin >> num;
	for (j = 0; j < Stumax; j++)//查找与输入学号相同的记录
	{
		if (num == Stu[j].num)
		break;
	}
	if (j == Stumax)
	{
		cout << "没有此人!" << endl;
		return;
	}
	cout << "输入修改后的信息,编号不能改:" << endl;
	t1.Input();//重新输入该记录的信息
	Stu[j] = t1;//将该记录写入数组
	Save();
	cout << "修改成功!" << endl;
}
int StuManagement::Delete() //删除功能
{
	system("cls");
	int j, num;
	cout << "请输入要删除的人的编号:"; cin >> num;
	for (j = 0; j < Stumax; j++)//在数组中删除该记录,后面的记录往前移
	{
		if (num == Stu[j].num)
		break;
	}
	if (j == Stumax)
	{
		cout << "没有此人!" << endl; return 0;
	}
	for (j=0; j < Stumax; j++)//在数组中删除该记录,后面的记录往前移
	{
		Stu[j] = Stu[j + 1];
	}
	Stumax--;//记录数减一
	Save();
	cout << "删除成功!" << endl;
	return 1;
}
void Stu_mune(StuManagement S)
{
	system("cls");
	int choice;
	do {
		cout << endl; cout << endl;
		cout << "学生管理" << endl;
        cout << "==========================================================================================" << endl;
		cout << "| 1.录入  ";
		cout << "2.查询    ";
		cout << "3.修改    ";
		cout << "4.删除    ";
		cout << "5.读取    ";
		cout << "0.退出 | " << endl;
        cout << "==========================================================================================" << endl;
		cout << "请选择:";
		cin >> choice;
		switch (choice)
		{
		case 1:S.Add(); break;
		case 2:S.Search(); break;
		case 3:S.Revise(); break;
		case 4:S.Delete(); break;
		case 5:S.Showout();break;
		default:cout << "\n error" << endl; break;
		case 0:break;
		}

	} while (choice!= 0);

}

管理员的操作

class Administrator :virtual public person //行政人员
{
public:
	string department;
	string title;
	string situation;
	void Input()
	{
		cout << "Input num : ";          cin >> num;
		cout << "Input name : ";         cin >> name;
		cout << "Input sex : ";          cin >> sex;
		cout << "Input course: ";        cin >> course;
		cout << "Input department: ";    cin >>department;
		cout << "Input title : ";        cin >> title;
		cout << "Input situation : ";    cin >> situation;
	}
	void Output()
	{
		cout << "编号: " << num << " " << "姓名: " << name << " " << "性别: " << sex << " " << "专业: " <<course <<" " << "部门: " <<department << " " << "职称: " <<title << " " << "奖惩: " << situation << endl;
	}

};
Administrator Adm[MAX];
static int Admmax;
class AdmManagement //管理行政人员的类
{
public:
	int Add();//添加
	int Search();//查询
	void Revise();//修改
	int Delete();//删除
	void Save();
	void Read();
	void show();
};
void AdmManagement::Save()
{
	ofstream it("Admmax.txt");
	for(int i=0;i<Admmax;i++)
	{
		it << Adm[i].num << "\t" << Adm[i].name << "\t"<< Adm[i].sex
		<< "\t"<< Adm[i].course << "\t" << Adm[i].department << "\t"<<
		 Adm[i].title << "\t"<< Adm[i].situation <<endl;
	}
	it.close();
}
void AdmManagement::Read()
{
	int num;//编号
	string name;//姓名
	string sex;//性别
	string course;//专业
	string department;
	string title;
	string situation;
	ifstream it("Admmax.txt");
	int i = 0;
	while(!it.eof())
	{
		it >>num>>  name >> sex >> course >> department >> title >> situation;
		Adm[i].num=num;
		Adm[i].name = name;
		Adm[i].sex = sex;
		Adm[i].course = course;
		Adm[i].department = department;
		Adm[i].title = title;
		Adm[i].situation = situation;
		++i;
	}
	Admmax = i - 1;
}
void  AdmManagement::show(){
        if(Admmax==0)
         {cout<<"记录为空"<<endl;
         }
         for(int i=0;i<Admmax;i++)
         {Adm[i].Output();}
}
int AdmManagement::Add()
{
	system("cls");
	Administrator t;
	int i, num;
	if (Admmax == MAX)//数组已满
	{
		cout << "人数已满" << endl;
		return 0;
	}
	cout << "请输入编号:";//如果没满,则输入记录
	cin >> num;
	for (i = 0; i < Admmax; i++)//在Admtop条记录中比较,是否存在相同的编号
	{
		if (num == Adm[i].num)//编号存在相同的,返回0
		{
			cout << "已有编号,重新输入" << endl;
			return 0;
		}
	}
	t.Input();//不存在学号相同的,调用Input函数,输入记录
	Adm[Admmax] = t;//把记录存入数组
	Admmax++;//元素加一
	Save();
	cout << "添加成功!" << endl;
	return 1;
}
int AdmManagement::Search()
{
	system("cls");
    int j,way,num;
	char name[20],sex[4];
	cout<<"选择查找方式,按编号查找(0)|按姓名查找(1)|按性别查找(2):";
	cin>>way;
	switch(way)
	{
	case 0:
	cout << "请输入编号:";
	cin >> num;
	for (j = 0; j <Admmax; j++)
	{
		if (num == Adm[j].num)
		break;
	}
	if (j == Admmax)
		cout << "没有此人!" << endl;
	else
		Adm[j].Output();//找到并输出
	break;
	case 1:
	cout<<"请输入姓名:";
	cin>>name;
	for (j = 0; j <Admmax; j++)
	{
		if (Adm[j].name==name)
		break;
	}
	if (j == Admmax)
		cout << "没有此人!" << endl;
	else
		Adm[j].Output();//找到并输出
	break;
	case 2:
	cout<<"请输入性别:";
	cin>>sex;
	for (j = 0; j < Admmax; j++)
	{
		if (Adm[j].sex==sex)
		break;
	}
	if (j == Admmax)
		cout << "没有此人!" << endl;
	else
		Adm[j].Output();//找到并输出
	break;
	}
	return 1;
}
void AdmManagement::Revise()
{
	system("cls");
	Administrator t1;
	int j, num;
	cout << "请输入要修改的人的编号:"; cin >> num;
	for (j = 0; j < Admmax; j++)
	{
		if (num == Adm[j].num) break;
	}
	if (j == Admmax)
	{
		cout << "没有此人!" << endl; return;
	}
	cout << "输入修改后的信息,编号不能改:" << endl;
	t1.Input();
	Adm[j] = t1;
	Save();
	cout << "修改成功!" << endl;
}
int AdmManagement::Delete()
{
	system("cls");
	int j, num;
	cout << "请输入要删除的人的编号:";
	cin >> num;
	for (j = 0; j < Admmax; j++)
	{
		if (num== Adm[j].num) break;
	}
	if (j == Admmax)
	{
		cout << "没有此人!" << endl; return 0;
	};
	for (j=0; j < Admmax; j++)
	{
		Adm[j] = Adm[j + 1];
	}
	Admmax--;
	Save();
	cout << "删除成功!" << endl;
	return 1;
}
void Adm_mune(AdmManagement A)
{
	system("cls");
	int choice;
	do {
		cout << endl; cout << endl;
		cout << "行政人员管理"<<endl;
        cout << "==========================================================================================" << endl;
		cout << "| 1.录入  ";
		cout << "2.查询    ";
		cout << "3.修改    ";
		cout << "4.删除    ";
		cout << "5.读取    ";
		cout << "0.退出 | " <<endl;
        cout << "==========================================================================================" << endl;
		cout << "请选择:";
		cin >> choice;
		switch (choice)
		{
		case 1:A.Add(); break; //TM去调用add类
		case 2:A.Search(); break;
		case 3:A.Revise(); break;
		case 4:A.Delete(); break;
		case 5:A.show();break;
		default:cout << "\n error" << endl; break;
		case 0:break;
		}
	} while (choice != 0);
}

主函数代码

int main() //主函数
{
	TeaManagement  Teame;
	StuManagement Stume;
	AdmManagement Admme;
	Teame.Read();
	Stume.Read();
	Admme.Read();
	int a = 1;
	char c;//获取单个字符,以实现暂停
	while (a)
	{
		system("cls");
		cout << endl;
		cout << "                               *****欢迎使用高校人员信息管理系统********" << endl;
		cout << "                                                              " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *********************************    " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *        1.教师管理             *    " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *        2.学生管理             *    " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *        3.行政人员管理         *    " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *        0.退出                 *    " << endl;
		cout << "                                                              " << endl;
		cout << "                                   *********************************    " << endl;
		cout << "请选择所需要的操作人员系统:";
		cin >> a;
		switch (a)  //用switch语句来判断输入的数字
		{
		case 1:Tea_mune(Teame); break;
		case 2:Stu_mune(Stume); break;
		case 3:Adm_mune(Admme); break;
		case 0:break;
	    default:cout << "\n 选择错误" << endl;
		}
	}
	system("cls");
	cout << endl << "谢谢使用" << endl;
	c = getchar();//读入函数
	return 0;
}

最后一定要记得在代码对应的文件夹下建立Admmax.txt,Stumax.txt,Teamax.txt,

不要问我为啥取这个名字,我只能告诉你当时瞎取的
以下展示结果,只以教师为例,其他啥的都一样
1、这是录入好的信息

2、进入界面在这里插入图片描述
3、录入人员
在这里插入图片描述

4、查询
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
5、修改
在这里插入图片描述
在这里插入图片描述
6、删除
在这里插入图片描述
7、读取
因为把三号删了,所以读取只有前两个
在这里插入图片描述
之后其他的两个实现的功能差不多
有不懂的地方可以随时在评论区留言,及时为你解答

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂月二二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值