学校档案管理系统
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、读取
因为把三号删了,所以读取只有前两个
之后其他的两个实现的功能差不多
有不懂的地方可以随时在评论区留言,及时为你解答