栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++与数据结构实现简单人事管理系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++与数据结构实现简单人事管理系统

一、问题描述

二、解题思路与源码

在这里我们要处理多个数据,如果使用数组就一定要对其大小进行定义,这在数据处理过程中显得极为不方便,所以我们使用链表。单链表是一种链式存取的数据结构,每个结点既存取数据元素本身的信息(数据域data),又存储数据元素的间接信息(指针域next)。它的存储空间不是预先分配的,是在运行时根据需要动态生成,每个结点存放在一个独立的存储单元中,节点间的逻辑关系依靠存储单元中附加的指针来给出。 

链表

为存储员工信息,我们需要声明定义一个结构体类型,成员变量包括编号、姓名、性别、年龄、部门、入职时间等。给结构体取别名,用Link代替Node*可以使代码更加简洁。

//声明员工结构体作为链表节点
struct Employee{
	string number; 				//编号
	string name;				//姓名
	string sex;					//性别
	string department;			//部门
	string age;					//年龄
	string time;				//入职时间
	struct Employee* Next;  	//用作指向自己的指针
};

//定义结构体变量及取别名
typedef struct Employee Node;
typedef Node* Link;
结构体

分别建立具有录入、修改、删除、查询等功能的子函数,完成相应功能,对程序实现模块化。

//函数声明
Link Create(Link Head);							//初始化链表
void Release(Link Head);						//释放链表
Link Input(Link Head);							//录入员工数据(前插法)
Link Search(Link Head);							//查询员工信息
void Display_List(Link Head);					//显示所有员工信息
void Display_Node(Link pNode);					//显示员工信息
Link Modify(Link Head);							//修改员工信息
Link Del(Link Head);							//删除员工信息
void Save_ByFile(Link Head,fstream& ofile);		//保存员工信息

初始化链表,创建一个带头节点的空链表,头结点的数据域一般不存储任何信息,指针域存储指向开始结点的指针,即第一个元素结点的存储位置。

//创建一个带头节点的空链表
Link Create(Link Head){
    Head=(Link)new Node;
    if(!Head){
        cout<<"分配内存失败!"<number="";				//指针引用结构体中的成员变量
    Head->name="";
    Head->sex="";
    Head->department="";
  	Head->age="";
  	Head->time="";
    Head->Next=NULL;
    return Head;
}
空链表(带头节点)

录入员工数据(前插法插入数据)

//录入员工数据(前插法) 
Link Input(Link Head){
    Link pNew;						//声明新节点
    string n_umber,n_ame,s_ex,d_epartment,a_ge,t_ime;
	pNew=(Link)new Node;               
    cout<>n_umber;
    cout<<"请输入员工姓名:";
    cin>>n_ame;
    cout<<"请输入员工性别:";
    cin>>s_ex;
    cout<<"请输入员工部门:";
    cin>>d_epartment;
    cout<<"请输入员工年龄:";
    cin>>a_ge;
    cout<<"请输入员工入职时间:";
    cin>>t_ime;
	cout<number=n_umber;
    pNew->name=n_ame;
    pNew->sex=s_ex;
	pNew->department=d_epartment;
	pNew->age=a_ge;
	pNew->time=t_ime;
    pNew->Next=Head->Next;		   //新建节点的数据域指向头节点 
    Head->Next=pNew;			   //pNew插入到Head的后面 

	cout<<"已成功录入!";
	return Head;
} 
前插法过程

 释放链表(循环删除各节点直至头指针为空)

//释放链表
void Release(Link Head){
    Link ptr;						//声明一个操作用的指针
    while(Head!=NULL){
        ptr=Head;					//指向首元节点
        Head=Head->Next;			//指针后移
        delete ptr;					//释放节点资源
    }
}
删除节点

 显示单个员工信息(指针引用结构体中的成员变量,指针名->成员名)

//显示员工信息 
void Display_Node(Link pNode){
	cout<number 
		<name
		<sex
		<department
		<age
		<time< 

查询员工信息(利用循环使指针不断后移直至找到)

//查询员工信息 
Link Search(Link Head){
	Link ptr;
    string n_umber;
    ptr=Head;
    cout<>n_umber; 
    while(ptr->Next){
        if(ptr->Next->number==n_umber){
        	cout<Next);			//打印满足条件的节点
        	return ptr;
    	}
       	ptr->Next=ptr->Next->Next;				//查询下一节点
	}
	cout< 

显示所有员工信息

//显示所有员工信息 
void Display_List(Link Head){
    Link ptr;
    ptr=Head->Next;
    cout<<"===========================所有员工信息==========================="<Next;
    }
}

修改员工信息

//修改员工信息 
Link Modify(Link Head){
    Link ptr;
    ptr=Search(Head);
    string n_umber,n_ame,s_ex,d_epartment,a_ge,t_ime;
    if(ptr->Next){ 
        cout<>n_umber;
        cout<<" 请修改员工姓名:";
        cin>>n_ame;
        cout<<" 请修改员工性别:";
        cin>>s_ex;
        cout<<" 请修改员工部门:";
        cin>>d_epartment;
        cout<<" 请修改员工年龄:";
        cin>>a_ge;
        cout<<" 请修改员工入职时间:";
        cin>>t_ime;
		
        ptr->Next->number=n_umber;
        ptr->Next->name=n_ame;
        ptr->Next->sex=s_ex;
		ptr->Next->department=d_epartment;
		ptr->Next->age=a_ge;
		ptr->Next->time=t_ime;
		
		cout< 

删除员工信息

//删除员工信息
Link Del(Link Head){
    Link ptr;
    char flag; 
    Link ptr_front;
    ptr_front=Search(Head);
    ptr=ptr_front->Next;
    if(ptr){
        cout<<"是否要删除该员工的信息!(Y/N):";
        cin>>flag;
        if (flag=='Y'||flag=='y'){
            ptr_front->Next=ptr->Next;
            delete ptr;					//删除此节点
            cout<<"删除成功!";
        }
    }
	return Head;
}

 保存员工信息

//保存信息 
void Save_ByFile(Link Head,fstream& ofile){
    Link pNode;
    pNode=Head->Next;
    ofile.clear();						//清除文件结束状态
    while(pNode){
        ofile<number 
			 <name
			 <sex
			 <department
			 <age
			 <time<Next;
	}
    cout<<"数据文件保存成功!"< 

主函数

int main(){
    Link Head=0;
    Head=Create(Head);			//创建链表 
    fstream iofile;
    iofile.open("mess.txt");	//打开文件 
    if(!iofile){ 
        cout<<"打开文件失败!"<>menu;
	switch(menu){
            case 1:
                Head=Input(Head);					//录入信息
                break;
            case 2:
                Head=Modify(Head);					//修改信息
                break;
            case 3:
                Head=Del(Head);						//删除信息
                break;
            case 4:
                Search(Head); 						//查询信息
                break;
            case 5:
                Display_List(Head);					//显示信息
                break;
            case 6:
            	Save_ByFile(Head,iofile);			//保存信息 
                cout<<"成功退出系统!"< 
三、结果展示  

录入单个员工信息

修改单个员工信息及显示所有员工信息

删除单个员工信息

查询单个员工信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号