curriculum-design 




公司人事管理系统课程设计文档	
 



指导老师：李倩伟
班级：12级软工移动1班
学生：茆明辉
学号：1215115024
日期：2013年6月17日



 




目录
一、软件需求分析	1
1、可行性分析	1
（1）经济可行性	1
（2）法律可行性	1
（3）技术可行性	1
2、用户需求概述	1
3、数据流图	2
二、软件分析与设计	2
1、整体设计（概要设计）	2
2、详细设计	8
三、编码实现	9
四、测试结果图	26
五、课程设计总结	36
六、参考资料	36



 
一、软件需求分析
1、可行性分析
	（1）经济可行性
	使用本软件无经济上的损失。
	（2）法律可行性
本软件没有违反相应的法律，可以安全使用。

	（3）技术可行性
为适应当前信息化潮流以及公司日益扩大和延伸的业务范畴，急切需要一款适合公司实际情况的企业管理系统以管理企业日常工作，针对公司经营状况以及公司实际规模量身定制，旨在真正提高企业信息化管理水平，提高工作效率，降低管理成本，全面实现管理的标准化和信息化
2、用户需求概述
随着计算机技术、网络技术和信息技术的发展，现在办公系统更趋于系统化、科学化和网络化。网络办公自动化系统是计算机技术和网络迅速发展的一个办公应用解决方案，它的主要目的是实现信息交流和信息共性，提供协同工作的手段，提高办公的效率，让人们从繁琐的有纸办公中解脱出来。
本系统是为了更好的实现人事信息管理。本系统主要针对查看员工的各种信息需求所设计的，可以很好的管理数据。主要功能有：数据入库、查询、修改和删除等。因此，本系统的主要功能由以下几个部分组成：员工基本信息模块
3、数据流图
 
二、软件分析与设计
1、整体设计（概要设计）
如图1所示，整个公司人事管理系统由十大模块组成，
 
	图一

如图2所示，主函数功能图
 
图二
如图3所示，进入选项1增加员工信息
 
图三

如图4所示，进入选项2删除员工信息

 
图4




如图5所示，进入选项3修改员工信息

 
图5


如图6所示，进入选项4显示所有员工信息

 
图6



如图7所示，进入选项5设置员工基本数据

 
图7
2、详细设计

一.定义一个员工基类和公司类
二.由员工类派生出经理类、业务经理类、技术员类、销售员类，文秘类。
三.该系统需要调用以下函数
virtual void CalcSalary()=0;   //薪水的虚函数
virtual void Output()=0;       //输出的虚函数
void SetAmount(double s);    //业务经理的销售额
double GetT();				//技术员得到的工资
void SetT(double T);			//技术员的工作付出		
double GetAmount();        //销售员得到的工资
void SetAmount(double Amount);//销售员的销售额
void Clear(); 				//清除内存中数据
void Add(); 					//增加人员
void Delete(); 				//删除人员
void Modify(); 				//修改人员
void Query(); 				//查询人员
void Set(); 					//基础数据设置
void Save(); 				//数据存盘(包括基础数据，人员数据)
void Load();				 //数据装入(包括基础数据，人员数据)
四.
(1).编写主菜单int main()，内容包括：1.增加人员 ，2.删除人员，3.修改人员，4.查询信息，5.数据设置，6.数据存盘，7.数据装入
(2).定义六个全局变量，包括经理固定月薪，销售经理固定月薪，销售经理提成％，销售人员提成％，技术人员每小时工资，员工的ID标识。
(3).员工类属于基类包括编号，姓名，岗位，收入，还有链表的节点。虚函数通过重写虚拟函数来实现对基类虚拟函数的覆盖，友元类Company，所有类都可以使用其成员变量。
(4).经理类中包括其ID，姓名和职位，薪水收入函数和输出函数
(5) 销售经理类中包括其ID，姓名和职位，薪水收入函数和输出函数
(6). 技术员类中包括其ID，姓名和职位，薪水收入函数和输出函数
(7). 销售员类，文秘类中包括其ID，姓名和职位，薪水收入函数和输出函数
(8). void password() 设置密码函数，在Complany中定义
(9).void Welcom() 欢迎用户界面，在类外定义
(10).DelAll() //清除内存中人员数据(内部使用)).两个指针分别指向头和尾，如果查找到就删除。
(11). virtual void CalcSalary()=0; virtual void Output()=0;出的虚函数和
薪水的虚函数,通过重写虚函数实现对基类的覆盖
(12). void Clear(); 				//清除内存中数据
void Add(); 					//增加人员
void Delete(); 				//删除人员
void Modify(); 				//修改人员
void Query(); 				//查询人员
void Set(); 					//基础数据设置
void Save(); 				//数据存盘(包括基础数据，人员数据)
void Load();				 //数据装入(包括基础数据，人员数据)
均用链表实现其基本功能
(13).主菜单int main()，用do-while循环实现界面管理，选项采用数字形式实现选择
三、编码实现
    /**
题目: 公司人事管理系统

信息描述
公司共有4类人员：老板、技术人员、业务人员、财务人员、文秘、业务经理、
技术经理。现在，需要存储这些人员的姓名、编号、级别、当月薪水，计算月
薪总额并显示全部信息,并且老板可以对各种人员进行增加、查寻、修改、删除。

功能描述
1)其中，人员编号在生成人员信息时同时生成，每输入一个人员信息编号顺序加1。
2)程序对所有人员有提升级别的功能。
3)月薪的计算方法是：经理拿固定月薪（5000元），技术人员按完成的代码
量（1000元/每千行代码）领取月薪，业务人员的报酬按该推销员当月销售
额(15%)与承接的项目额(10%)提成,业务经理既拿固定月薪(2000元)也领取
提成，财务人员固定工资(2000元)，文秘为固定工资（1500元）。
4)可按姓名显示、查找、增加、删除、修改和保存各类人员的信息。
*/

#include <iostream> 		    // 标准输入输出流头文件
#include <fstream>				// 文件流头文件
#include<cstdlib>	 			// 一个常用函数库的头文件
#include <cstring>   			// 字符串头文件
#include<windows.h>  			// 显示windows窗口头文件
#include <iomanip>
#include <conio.h>              //
using namespace std; 			// 标准命名空间



//全局变量
double Manager_Money;			//经理固定月薪
double SalesManager_Money; 		//销售经理固定月薪
double SecretarySalary;      //文秘固定月薪
double SalesManager_Add; 		//销售经理提成％
double Sales_Add;			    //销售人员提成％
double Technicist_Every_Hour;   //技术人员每小时工资
int ID; 					    //员工的ID标识



class Person                    //员工类
{
protected:                      // private成员是不能被继承的，只有public，protected的成员才可以被继承。
	// 被保护的成员变量
	int Number;                     //编号
	char Name[20];              //姓名
	int Duty;                   //岗位
	double Income;              //收入
	Person *next;				//链表的节点
public:
	Person(char ID,char *Name,int Duty)
	{
	this->Duty=Duty;
	strcpy(this->Name,Name);
	this->Number=ID;
	}
	virtual void CalcSalary()=0;// 虚函数作用
	virtual void Output()=0;    // 通过重写虚拟函数来实现对基类虚拟函数的覆盖
    virtual void SetAmount(double){}
	friend class Company;       // 友元类，所有类都可以使用其成员变量
};



class Manager:public Person     //经理类
{
public:
	Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty){}
	void CalcSalary(){Income=Manager_Money;}
	void Output()
	{
		CalcSalary();
		cout<<Number<<"\t"<<Name<<"\t经理\t"<<Income<<endl;
	}
};



class SalesManager:public Person //销售经理类
{
private:
	double Amount;
public:
	SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty){}
	void SetAmount(double s)
	{
		Amount=s;
	}
	void CalcSalary()
	{
		Income=SalesManager_Money+Amount*SalesManager_Add/100;
	}
	void Output()
	{
		CalcSalary();
		cout<<Number<<"\t"<<Name<<"\t销售经理\t"<<Income<<endl;
	}
};



class Secretary:public Person  //文秘类
{
public:
	Secretary(char ID,char *Name,int Duty):Person(ID,Name,Duty){}
	void CalcSalary()
	{Income=SecretarySalary;}
	void Output()
	{
		CalcSalary();
		cout<<Number<<"\t"<<Name<<"\t文秘\t"<<Income<<endl;
   }
};


class Technician:public Person //技术员类
{
private:
	double t;
public:
	Technician(char ID,char *Name,int Duty,double T):Person(ID,Name,Duty)
	{
		this->t=T;
	}
	double GetT()
	{
		return t;
	}
	void SetT(double T)
	{
		this->t=T;
	}
	void CalcSalary()
	{
		Income=Technicist_Every_Hour*t;
	}
	void Output()
	{
		CalcSalary();
		cout<<Number<<"\t"<<Name<<"\t技术员\t"<<t<<"\t"<<Income<<endl;
	}
};



class Sales:public Person //销售员类
{
private:
	double Amount;
public:
	Sales(char ID,char *Name,int Duty,double Amount):Person(ID,Name,Duty)
	{
		this->Amount=Amount;
	}
	double GetAmount()
	{
		return Amount;
	}
	void SetAmount(double Amount)
	{
		this->Amount=Amount;
	}
	void CalcSalary()
	{
		Income=Sales_Add/100*Amount;
	}
	void Output()
	{
		CalcSalary();
		cout<<Number<<"\t"<<Name<<"\t销售员\t"<<Amount<<"\t"<<Income<<endl;
	}
};
class Company //公司类
{
private:
	Person *Worker; //员工表
	void Clear(); //清除内存中数据
public:
		Company()
		{
			Worker=0;
			Load();
		}
		~Company()
		{
			Person *p;
			p=Worker;
			while(p)
			{
				p=p->next;
				delete Worker;
				Worker=p;
			}
			Worker=0;
		}
	void Add(); //增加人员
	void Delete(); //删除人员
	void Modify(); //修改人员
	void Query(); //查询人员
	void Set(); //基础数据设置
	void Save(); //数据存盘(包括基础数据，人员数据)
	void Load(); //数据装入(包括基础数据，人员数据)
	void DelAll(); // 清空人员信息
};


void Company::Clear()   //清除内存中人员数据
{
   Person* p=Worker;
   while(p)
   {
	   Worker=p->next;
	   delete p;
	   p=Worker;
   }
}//



void password()              //设置密码
{
    FILE *fp;
    char num1[10],num2[10],ch;
    int i=0;
    if((fp=fopen("password.bin","r"))==NULL)
    {
	loop1://创建密码
		cout<<setw(40)<<"首次使用，请创建密码："<<endl;
		if((fp=fopen("password.bin","w"))==NULL)
			exit(1);
		while ((ch=getch())!='\r')
		{
			if (i<10 && isprint(ch))
			{
				num1[i++]=ch;
				putchar('*');
			}
			else if (i>0 && ch=='\b')
			{
				--i;
				putchar('\b');
				putchar(' ');
				putchar('\b');
			}
		}
		num1[i]='\0';
		cout<<endl;
		cout<<"请重新输入："<<endl;
		i=0;
		while ((ch=getch())!='\r')
		{
			if (i<10 && isprint(ch))
			{
				num2[i++]=ch;
				putchar('*');
			}
			else if (i>0 && ch=='\b')
			{
				--i;
				putchar('\b');
				putchar(' ');
				putchar('\b');
			}
		}
		num2[i]='\0';
		if(strcmp(num1,num2)!=0)
		{

			cout<<"输入错误："<<endl;
			getch();
			goto loop1;
		}
		fputs(num1,fp);
		fclose(fp);
		cout<<endl;
		cout<<"创建成功！"<<endl;
		getch();
    }
    else
    {
	   loop://输入密码
		cout<<endl;
		cout<<"输入密码："<<endl;
		int flag=0;
		i=0;
		while ((ch=getch())!='\r')
		{

			flag=1;
			if (i<10 && isprint(ch))
			{
				num1[i++]=ch;
				putchar('*');
			}
			else if (i>0 && ch=='\b')
			{
				--i;
				putchar('\b');
				putchar(' ');
				putchar('\b');
			}

		}
		num1[i]='\0';
		if(flag==0)
			//gets(num1);
		goto loop;

		if((fp=fopen("password.bin","r"))==NULL)
		{
			cout<<"不能打开！"<<endl;
			getch();
			exit(1);
		}
		fgets(num2,11,fp);
		if(strcmp(num1,num2)!=0)
		 goto loop;
    }


}

void welcome()            //欢迎界面
{
    system("color 05e");
	cout<<"\n\n\n\n\n\n\n\n\n\n\n";
	cout<<"\t\t\t     欢迎进入企业管理系统"<<endl;
	Sleep(1000);
	system("cls");
}

void Company::DelAll() //清除内存中人员数据(内部使用)
{

	Person* p=Worker;

	while(p)
	{
		Worker=p->next;
		delete p;
		p=Worker;
	}
}

void Company::Add()
{
	Person *p; //新结点指针
	int Duty;
	char Name[20];
	double Amount,T;
	cout<<"\n** 新增员工 **\n";
	//输入员工信息
	ID++;
		cout<<"请选择新增的岗位"
		<<"\n\t\t1-经理"
		<<"\n\t\t2-销售经理"
		<<"\n\t\t3-销售员"
		<<"\n\t\t4-技术员"
		<<"\n\t\t5-文秘\n";
	cin>>Duty;
	cout<<"输入姓名:"; cin>>Name;
	if(Duty==3)
	{
		cout<<"本月销售额:"; cin>>Amount;
	}
	else if(Duty==4)
	{
		cout<<"本月完成代码量（1000元/每千行代码）:";
		cin>>T;
	}
	//创建新员工结点
	switch(Duty)
	{
		case 1:p=new Manager(ID,Name,Duty); break;
		case 2:p=new SalesManager(ID,Name,Duty); break;
		case 3:p=new Sales(ID,Name,Duty,Amount); break;
		case 4:p=new Technician(ID,Name,Duty,T); break;
	}
	p->next=0;
	//员工结点加入链表
	if(Worker) //若已经存在结点
	{
		Person *p2;
		p2=Worker;
		while(p2->next) //查找尾结点
		{
			p2=p2->next;
		}
		p2->next=p; //连接
	}
	else //若不存在结点(表空)
	{
		Worker=p; //连接
	}

}

void Company::Delete() //删除人员
{

	int Number;
	cout<<"\n** 删除员工 **\n";
	cout<<"ID:"; cin>>Number;
	//查找要删除的结点
	Person *p1,*p2; p1=Worker;
	while(p1)
	{
		if(p1->Number==Number)  break;
		else
		{
		p2=p1;
		p1=p1->next;
		}
	}

	//删除结点

	if(p1!=NULL)//若找到结点，则删除
	{
		if(p1==Worker) //若要删除的结点是第一个结点
		{
			Worker=p1->next;
			delete p1;
		}
		else //若要删除的结点是后续结点
		{
			p2->next=p1->next;
			delete p1;
		}
		cout<<"找到并删除\n";
	}
	else //未找到结点
	cout<<"未找到!\n";
}

void Company::Modify()
{
	int Number,Duty;
	char Name[20];
	double Amount,T;
	cout<<"\n** 修改员工 **\n";
	cout<<"ID:";
	cin.get();
    cin>>Number;
	//查找要修改的结点
	Person *p1,*p2; p1=Worker;
	while(p1)
	{
		if(p1->Number==Number)
		break;
		else
		{
		p2=p1;
		p1=p1->next;
		}
	}
	//修改结点
	if(p1!=NULL)//若找到结点
	{
		p1->Output();
		cout<<"请选择需要修改的岗位"
		<<"\n\t\t1-经理"
		<<"\n\t\t2-销售经理"
		<<"\n\t\t3-销售员"
		<<"\n\t\t4-技术员"
		<<"\n\t\t5-文秘\n";
        cin>>Duty;
		if(p1->Duty!=Duty) //若岗位发生变动
		{
		//修改其它数据
		cout<<"输入姓名:"; cin>>Name;
		if(Duty==3)
		{
			cout<<"本月销售额:"; cin>>Amount;
		}
		else if(Duty==4)
		{
			cout<<"本月完成代码量（1000元/每千行代码）:";
			cin>>T;
		}
		//创建新员工结点
		Person *p3;
		switch(Duty)
		{
			case 1:p3=new Manager(p1->Number,Name,Duty); break;
			case 2:p3=new SalesManager(p1->Number,Name,Duty); break;
			case 3:p3=new Sales(p1->Number,Name,Duty,Amount); break;
			case 4:p3=new Technician(p1->Number,Name,Duty,T); break;
		}
		//员工结点替换到链表
		p3->next=p1->next;
		if(p1==Worker) //若要替换的结点是第一个结点
			Worker=p3;
			else //若要删除的结点是后续结点
			p2->next=p3;
			//删除原来的员工结点
			delete p1;
		}
		else //若岗位没有变动
		{

			cout<<"输入姓名:"; cin>>p1->Name;
			if(Duty==3)
			{
				cout<<"本月销售额:";cin>>Amount; ((Sales *)p1)->SetAmount(Amount);
			}
			else if(Duty==4)
			{

				cout<<"本月完成代码量（1000元/每千行代码）:";
				cin>>T;
				((Technician *)p1)->SetT(T);
			}
		}
		cout<<"修改成功!\n";
	}
	else //未找到结点
	cout<<"未找到!\n";
	cin.get();
	cin.get();

}

void Company::Query()
{
	cout<<"\n** 查询人员本月销售信息 **\n";
	cout<<"ID\t姓名\t职位\t工资\n";
	double sum=0; //销售额总和
	Person *p=Worker;
	while(p)
	{
		if(p->Duty==3)sum+=((Sales *)p)->GetAmount();
		p=p->next;
	}
		p=Worker;
		double sum2=0; //工资总和
	while(p)
	{
		if(p->Duty==2)
		((SalesManager *)p)->SetAmount(sum);
		p->Output();
		sum2+=p->Income;
		p=p->next;
	}
	cout<<"本月盈利:"<<sum*0.10-sum2<<endl;
	cout<<"(按照10％利润计算)\n";
}

void Company::Set()
{
	cout<<"\n** 设置基础数据 **\n";
	cout<<"经理固定月薪["<<Manager_Money<<"元]:";
	cin>>Manager_Money;
    cout<<"文秘固定月薪["<<SecretarySalary<<"元]:";
    cin>>SecretarySalary;
	cout<<"销售经理固定月薪["<<SalesManager_Money<<"元]:";
	cin>>SalesManager_Money;
	cout<<"销售经理提成["<<SalesManager_Add<<"％]:";
	cin>>SalesManager_Add;
	cout<<"销售人员提成["<<Sales_Add<<"％]:";
	cin>>Sales_Add;
	cout<<"技术人员小时工资["<<Technicist_Every_Hour<<"(元/小时)]:";
	cin>>Technicist_Every_Hour;
	cout<<"员工标识[>="<<ID<<"]:";
	cin>>ID;
}

void Company::Save() //数据存盘(包括基础数据，人员数据),均采用文本文件

{

		ofstream fPerson,fBase;

		char c;

		cout<<"\n保存人员和基础数据,是否继续?[Y/N]:"; cin>>c;

		if(toupper(c)!='Y')return;

		//保存人员编号、姓名、岗位

		fPerson.open("person.txt",ios::out);

		Person *p=Worker;

		while(p)
		{
			fPerson<<p->Number<<"\t"<<p->Name<<"\t"<<p->Duty<<"\t";
			if(p->Duty==3)
			fPerson<<((Sales*)p)->GetAmount()<<"\t";
			else if(p->Duty==4)
			fPerson<<((Technician *)p)->GetT()<<"\t";
			fPerson<<endl;
			p=p->next;
		}
		fPerson.close();
		//保存基础数据
		fBase.open("base.txt",ios::out);
		fBase<<"经理固定月薪\t"<<Manager_Money<<endl;
        fBase<<"文秘固定月薪\t"<<SecretarySalary<<endl;
		fBase<<"销售经理固定月薪\t"<<SalesManager_Money<<endl;
		fBase<<"销售经理提成％\t"<<SalesManager_Add<<endl;
		fBase<<"销售人员提成％\t"<<Sales_Add<<endl;
		fBase<<"技术人员小时工资\t"<<Technicist_Every_Hour<<endl;
		fBase<<"ID\t"<<ID<<endl;
		fPerson.close();
		cout<<"\n保存人员和基础数据已经完成...\n";
}

void Company::Load() //数据装入(包括基础数据，人员数据)
{
	//基础数据装入
	ifstream fBase;
	char buf[80]; //buf用于保存数据文件中的注释字符串
	fBase.open("base.txt",ios::in);
	fBase>>buf>>Manager_Money; //经理固定月薪
    fBase>>buf>>SecretarySalary;      //文秘固定月薪
	fBase>>buf>>SalesManager_Money; //销售经理固定月薪
	fBase>>buf>>SalesManager_Add; //销售经理提成％
	fBase>>buf>>Sales_Add; //销售人员提成％
	fBase>>buf>>Technicist_Every_Hour; //技术人员小时工资
	fBase>>buf>>ID; //员工标识
	fBase.close();
	//清除内存人员数据
	Clear();
	//人员数据数据装入
	ifstream fPerson;
	Person *p=Worker;
	int Number;
	char Name[20];
	int Duty;
	double Amount,T;
	fPerson.open("person.txt",ios::in);
	//读一条记录
	fPerson>>Number>>Name>>Duty;
	if(Duty==3)fPerson>>Amount;
	else if(Duty==4)
	fPerson>>T;
	while(fPerson.good())
	{
		//创建员工结点
		switch(Duty)
		{
		case 1:p=new Manager(Number,Name,Duty); break;
		case 2:p=new SalesManager(Number,Name,Duty); break;
		case 3:p=new Sales(Number,Name,Duty,Amount); break;
		case 4:p=new Technician(Number,Name,Duty,T); break;
        case 5:p=new Secretary(ID,Name,Duty);       break;
		}
		p->next=0;
		//员工结点加入链表
		if(Worker) //若已经存在结点
		{
			Person *p2;
			p2=Worker;
			while(p2->next) //查找尾结点
			{
				p2=p2->next;

			}
				p2->next=p; //连接
		}
		else //若不存在结点(表空)
		{
			Worker=p; //连接
		}
		//读下一条记录
		fPerson>>Number>>Name>>Duty;
		if(Duty==3)
		fPerson>>Amount;
		else if(Duty==4)
		fPerson>>T;
	}
	fPerson.close();
	cout<<"\n人员和基础数据已经装入...\n";

}
int main()
{
    welcome();
    password();
	char Select;

	Company A;
    int c;
    do
    {

	system("color 04e");
    cout<<"********************************************************************************"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓〓  ☆    公 司 人 事 管 理 系 统     ☆  〓〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓★★★★★         ★★★★★★★         ★★★★★〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          1.增加人员信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          2.删除人员信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          3.修改人员信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          4.查询人员信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          5.员工数据设置        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          6.员工数据存盘        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          7.员工数据装入        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          8.员工信息清空        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
    cout<<"〓〓〓〓〓〓〓〓〓★  ☆          9.安全退出系统        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;

	cout << "请输入编号【1~8】：";
	cin>>Select;
	system("cls");
	switch(Select)
	{
		case '1': A.Add(); break;
		case '2': A.Delete();break;
		case '3': A.Modify();break;
		case '4': A.Query();cin.get();cin.get(); break;
		case '5': A.Set(); break;
		case '6': A.Save(); break;
		case '7': A.Load(); break;
        case '8': A.DelAll();break;
	}
    }
	while(c!='9');
	return 0;
}
四、测试结果图



1、欢迎界面
 
2、首次使用，请创建密码
 





3、确认密码
 
4、进入主界面
 




5、选择1增加人员信息
 
6、选择1.输入一个经理，一个销售经理，一个销售员，一个技术员，一个文秘
 




7、选择5.员工数据设置
 
8、选择4.查询员工信息
 




9、选择2进行删除人员，首先删除ID为1的经理进行测试
 
9、选择4，查询员工信息，如图所示，经理已经被删除
 




10、选择3，进行修改员工信息
 
11、修改ID为2的销售经理进行测试
 




12、修改到经理这个岗位
 
13、再次选择4，查询信息，显示李华已经变成经理
 




14、选择6，进行员工信息的存盘
 
15、选择7，装入基础数据
 




16、在桌面看到两个文件
   
17、选择8，进行员工信息的清空，然后选择4，查看信息，此时，信息全无
 








18、选择0，退出系统
 
五、课程设计总结
通过本次课程设计，可以更加充分的对C++语言基础知识进行认识和了解，设计只是一个对前面所学内容的一个总结，主要是对今后进行项目的制作打下基础。进而了解软件工程这个专业的精髓。
从知识获得方面来说，各种已经学习到的C++知识以及各种从网上搜索来的案例，我们都是随着设计的不断深入而不断熟悉的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识，也对自己提出了新的要求。 提高是有限的但提高也是全面的。正是这一次设计让我积累了许多实际经验。也必然会让我在未来的工作学习中表现出更高的耐力、理解力、实践力。 顺利如期的完成本次课程设计给了我很大的信心，但是也为我指出很多不足的地方。学习其实就是一个不断完善的过程，正视自己的不足之处。在以后的工作和学习中不断的弥补这些不足之处，在以后的生活中也要保持同样的态度，不断地完善自己。

六、参考资料
《c++  primer plus》第五版