C++学习之人事管理系统

#include<iostream>
#include<string>
#include <iomanip>
#include<fstream>
using namespace std;
//声明函数
struct Employee
{
    //声明职工的结构作为列表节点
    string m_Code;                //职工编号
    string m_Name;                //职工姓名
    unsigned short int m_Year;  //职工出生年月
    string m_Sex;                //职工性别
    string m_Post;                //职工职称
    string m_Department;        //职工部门
    unsigned int m_Wage;        //职工工资
    //链表节点的指针域
    struct Employee* Next;
};
typedef struct Employee Node;  //链表节点
typedef Node *Link;               //链表指针域

//------函数声明-------
Link Add(Link Head);                         //添加职工
Link Del(Link Head);                         //删除职工
Link Modify(Link Head);                         //修改职工
Link Search_front(Link Head);                         //查找职工
void Display_One(Link Head);                 //显示一个职工信息
void Display_List(Link Head);                 //显示全部职工信息
void Save_ByFile(Link Head,fstream &ofile);     //保存职工信息
Link Sort_ByWage(Link Head);                 //按照工资排序
Link Create(Link Head);                         //创建一个链表
void Release(Link Head);                     //释放链表
//----------函数实现---------
Link Add(Link Head)
{
    //前插法添加数据
    Link ptr;
    ptr = Head;
    Link pNew;
    char again;
    string code,name,sex,post,department;
    unsigned short int year;
    unsigned int wage;
    do
    {
        pNew = (Link)new Node;
        cout<<"请输入职工代码:";
        cin >> code;
        cout<<endl<<"请输入职工姓名:";
        cin >> name;
        cout<<endl<<"请输入职工出生年月:";
        cin >> year;
        while(cin.fail())
        {
            cout<<"请输入正确的年份格式"<<endl;
            cin.clear();
            fflush(stdin);
            cin >> year;
        }
        cout<<"请输入职工性别:";
        cin >> sex;
        cout<<endl<<"请输入职工职称:";
        cin >> post;
        cout<<endl<<"请输入职工部门:";
        cin >> department;
        cout<<endl<<"请输入职工工资:";
        cin >> wage;
        while(cin.fail())
        {
            cout<<"请输入正确的工资格式"<<endl;
            cin.clear();
            fflush(stdin);
            cin >> wage;
        }
        cout<<endl;
        pNew->m_Code = code;
        pNew->m_Name = name;
        pNew->m_Year = year;
        pNew->m_Sex = sex;
        pNew->m_Post = post;
        pNew->m_Department = department;
        pNew->m_Wage = wage;
        pNew->Next = ptr->Next;
        ptr->Next = pNew;
        ptr = pNew;
        cout<<"是否继续添加:Y/N";
        cin >> again;
    }while(again == 'Y' || again == 'y');
    return Head;
}
Link Del(Link Head)                         //删除职工
{
    Link ptr;
    char Flag;
    Link ptr_front;
    ptr_front = Search_front(Head);//获取删除节点的前驱指针
    ptr = ptr_front->Next;
    if(ptr)
    {
        cout<<"是否确认该职工离职?(Y/N)";
        cin>>Flag;
        if(Flag == 'Y' || Flag == 'y')
        {
            ptr_front->Next = ptr ->Next;
            delete ptr;
        }
    }
    else
    {
        cout<<"没有找到此职工的记录,无法删除。"<<endl;
    }
    return Head;

}
Link Modify(Link Head)                     //修改职工
{
    Link ptr;
    ptr = Search_front(Head);
    string code,name,sex,post,department;
    unsigned short int year;
    unsigned int wage;
    if(ptr->Next)
    {
        cout<<"-------现在可以修改此职工的信息了--------------"<<endl;
        cout<<"请输入职工代码:";
        cin >> code;
        cout<<endl<<"请输入职工姓名:";
        cin >> name;
        cout<<endl<<"请输入职工出生年月:";
        cin >> year;
        while(cin.fail())
        {
            cout<<"请输入正确的年份格式"<<endl;
            cin.clear();
            fflush(stdin);
            cin >> year;
        }
        cout<<"请输入职工姓名:";
        cin >> sex;
        cout<<endl<<"请输入职工职称:";
        cin >> post;
        cout<<endl<<"请输入职工部门:";
        cin >> department;
        cout<<endl<<"请输入职工工资:";
        cin >> wage;
        while(cin.fail())
        {
            cout<<"请输入正确的工资格式"<<endl;
            cin.clear();
            fflush(stdin);
            cin >> wage;
        }
        cout<<endl;
        ptr->Next->m_Code = code;
        ptr->Next->m_Name = name;
        ptr->Next->m_Year = year;
        ptr->Next->m_Sex = sex;
        ptr->Next->m_Post = post;
        ptr->Next->m_Department = department;
        ptr->Next->m_Wage = wage;
        cout<<"----------------修改成功----------------"<<endl;

    }
    else
    {
        cout<<"没有找到此职工的记录,无法修改。"<<endl;
    }
    return Head;
}
Link Search_front(Link Head)                     //查找职工
{
    //查询满足职工姓名的职工信息(职工姓名目前只能唯一不能重复)
    Link ptr;
    Link front;
    string name;
    front = Head;
    ptr = Head->Next;

    cout<<"请输入职工姓名:";
    cin >> name;

    while(ptr != NULL)
    {
        if(ptr->m_Name == name)
        {
            //输出一行查询信息
            Display_One(ptr);
            return front;
        }
        ptr = ptr->Next;
        front = front->Next;
    }
    cout<<"search while end"<<endl;
    Display_One(ptr);
    return front;
}
void Display_One(Link Head)                 //显示一个职工信息
{
    Link ptr;
    ptr = Head;
    cout <<"------------------------查询结果-------------------------------"<<endl;
    cout<<setw(10)<<left<<"职工编号"
        <<setw(10)<<left<<"职工姓名"
        <<setw(10)<<left<<"出生年月"
        <<setw(10)<<left<<"职工性别"
        <<setw(10)<<left<<"职工职称"
        <<setw(10)<<left<<"职工部门"
        <<setw(10)<<left<<"职工工资"<<endl;
    cout<<setw(10)<<left<<ptr->m_Code
        <<setw(10)<<left<<ptr->m_Name
        <<setw(10)<<left<<ptr->m_Year
        <<setw(10)<<left<<ptr->m_Sex
        <<setw(10)<<left<<ptr->m_Post
        <<setw(10)<<left<<ptr->m_Department
        <<setw(10)<<left<<ptr->m_Wage<<endl;
}
void Display_List(Link Head)                 //显示全部职工信息
{
    Link ptr;
    ptr = Head->Next;
    cout <<"------------------------查询结果-------------------------------"<<endl;
    cout<<setw(10)<<left<<"职工编号"
        <<setw(10)<<left<<"职工姓名"
        <<setw(10)<<left<<"出生年月"
        <<setw(10)<<left<<"职工性别"
        <<setw(10)<<left<<"职工职称"
        <<setw(10)<<left<<"职工部门"
        <<setw(10)<<left<<"职工工资"<<endl;
    while(ptr)
    {
        cout<<setw(10)<<left<<ptr->m_Code
            <<setw(10)<<left<<ptr->m_Name
            <<setw(10)<<left<<ptr->m_Year
            <<setw(10)<<left<<ptr->m_Sex
            <<setw(10)<<left<<ptr->m_Post
            <<setw(10)<<left<<ptr->m_Department
            <<setw(10)<<left<<ptr->m_Wage<<endl;
        ptr = ptr->Next;
    }
}

void Save_ByFile(Link Head,fstream &ofile)     //保存职工信息
{
    Link pNode;
    pNode = Head->Next;
    ofile.clear();
    while(pNode)
    {
        ofile<<setw(10)<<left<<pNode->m_Code
             <<setw(10)<<left<<pNode->m_Name
             <<setw(10)<<left<<pNode->m_Year
             <<setw(10)<<left<<pNode->m_Sex
             <<setw(10)<<left<<pNode->m_Post
             <<setw(10)<<left<<pNode->m_Department
             <<setw(10)<<left<<pNode->m_Wage<<endl;
        pNode = pNode->Next;

    }
    cout<<"数据文件保存成功!"<<endl;
}
Link Create(Link Head)                     //创建一个链表
{
    Head = (Link)new Node;
    if(!Head)
    {
        cout<<"分配内存失败!"<<endl;
        return NULL;
    }
    Head->m_Code="";
    Head->m_Name="";
    Head->m_Year=0;
    Head->m_Sex = "";
    Head->m_Post="";
    Head->m_Department="";
    Head->m_Wage=0;
    Head->Next=NULL;
    return Head;
}
void Release(Link Head)                     //释放链表
{
    Link ptr;
    while(Head != NULL)
    {
        ptr = Head;
        Head = Head->Next;
        delete ptr;
    }
}

int main(int argc[],char *argv[])
{
    Link Head = 0;
    Head = Create(Head);
    fstream iofile;
    iofile.open("f:\\salary.txt");
    if(!iofile)
    {
        cout<<"文件打开失败!"<<endl;
        system("pause");
        return -1;
    }
    int menu;
    while(1)
    {
        cout<<"****************************************************"<<endl;
        cout<<"*=================菜单选项==========================*"<<endl;
        cout<<"*===================================================*"<<endl;
        cout<<"*1.注册职工 2.修改信息 3.删除信息 4.信息查询 *"<<endl;
        cout<<"*5.保存文件 6.工资排行 7.信息显示 0.退出系统 *"<<endl;
        cout<<endl<<"请选择相应的操作菜单项:";
        cin>>menu;
        while(cin.fail())
        {
            cout<<"请选择正确的菜单选项。"<<endl;
            cin.clear();
            fflush(stdin);
            cin>>menu;
        }
        switch(menu)
        {
        case 0:
            cout<<"成功退出系统!"<<endl;
            return 0;
        case 1:
            Head = Add(Head);
            break;
        case 2:
            Head = Modify(Head);
            break;
        case 3:
            Head = Del(Head);
            break;
        case 4:
            cout<<"信息查询,功能维护中...";
            break;
        case 5:
            Save_ByFile(Head,iofile);
            break;
        case 6:
            cout<<"功能维护中...";
            break;
        case 7:
            Display_List(Head);
            break;
        default:
            cout<<"请选择正确的菜单选项进行操作,多谢合作!"<<endl;

        }
    }
    Release(Head);
    iofile.close();
    system("pause");
    return 0;
}

你可能感兴趣的:(C++学习之人事管理系统)