职工信息管理系统

main.cpp

#include"worker.h"
int main()
{
    LNode *head=NULL;
    InitList(head);
    Menu(head);
   return 0;
}

worker.cpp

#include <iostream>
#include<iomanip>
#include<stdio.h>
#include<fstream>
#include<conio.h>//catch() 任意键继续
#include <windows.h>//system("cls") 清屏
#include"worker.h"

/************************************
* 功能描述:申请一个新结点,并将其初始化
* 输入参数:无
* 输出参数:无
************************************/
void InitList(LinkList *&head)//创建一个头结点
{
head=(LinkList *)malloc(sizeof(LinkList));
head->next=NULL;
}
void NewNode(LNode *head)// 创建完成调用CreatList()函数将新节点尾插法插入链表
{
        LNode *a;
        string i;
a=new LNode;//申请空间
cout<<"职工工号"<<endl;
cin>>i;
if(id(i,head)==1)
{
    a->id=i;
    cout<<"职工姓名"<<endl;
cin>>a->name;
cout<<"职工性别: "<<endl;
cin>>a->sex;
cout<<"职工年龄: "<<endl;
cin>>a->age;
cout<<"职工学历"<<endl;
cin>>a->xueli;
cout<<"职工职务:  "<<endl;
cin>>a->zhiwu;
cout<<"职工地址"<<endl;
cin>>a->dizhi ;
CreatList(a,head);
}
else
    cout<<"工号重复"<<endl;
}


void CreatList(LNode *a,LNode *head)//添加职工
{
   LNode *p;
if(head->next==NULL)//如果链表为空
{
head->next=a;
a->next=NULL;
return;//插入完成返回
}
    p = head->next;//从头结点开始找
     while(p)//p非空则一直循环
 {
  if(p->next==NULL)//找到尾节点
  {
    p->next =a;
    a->next =NULL;
    return;//插入完成返回
  }
   p= p->next;//找下一个节点

}

}

int id(string a,LNode *head)//判断工号是否重复
{
LNode *p=head->next;
while(p)
{
  if (p->id==a)
  {
return 0;
  }
   p= p->next;
}
    return 1;
}

void Destroy(LinkList *&head)//销毁线性表
{
LinkList *pre=head->next,*p=head->next->next; //准备好前驱后置指针
while (p!=NULL)
{
free(pre);//释放内存空间
pre=p;
p=pre->next;
}
free(pre);
head->next=NULL;
cout<<"职工信息已清空"<<endl;
}
void ListLength(LinkList *head)
{    int n=0;
  LinkList *p=head->next;
  while (p->next!=NULL)
  {
 n++;
 p=p->next;
  }
  cout<<"一共有"<<n+1<<"个职工."<<endl;
}
/************************************
* 功能描述:显示所有职工的信息
* 输入参数:无
* 输出参数:输出职工信息
************************************/
void DispList(LNode *head)//输出线性表
{
LinkList *p=head->next;
if(head->next==NULL)
{
cout<<"该信息表为空!"<<endl;
return;
}
else
{
while (p!=NULL)
 {
    paixu(head);
cout<<"姓名"<<setw(10)<<"工号"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"学历"<<setw(10)<<"地址"<<setw(10)<<"职位\n";
cout<<"----------------------------------------------------------------------------"<<endl;
cout<<p->name<<setw(10)<<p->id<<setw(10)<<p->age<<setw(10)<<p->sex<<setw(10)<<p->xueli<<setw(10)<<p->dizhi<<setw(10)<<p->zhiwu<<endl;

        p=p->next;
 }
}
ListLength(head);
}
/************************************
* 功能描述:根据输入的工号删除职工信息
* 输入参数:职工工号
* 输出参数:无
************************************/
void Del(LNode *head)//删除职工
{
string id;
int m;
LNode *p,*pre;
cout<<"请输入要删除职工的工号:";
   cin>>id;
 if (head->next==NULL)
 {
 cout<<"该信息表为空!"<<endl;
     return;
 }
 else
 {
    p=pre=head->next;
while(p)
{
     if (p->id==id)
 {
cout<<"姓名"<<setw(10)<<"工号"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"学历"<<setw(10)<<"地址"<<setw(10)<<"职位\n";
cout<<p->name<<setw(10)<<p->id<<setw(10)<<p->age<<setw(10)<<p->sex<<setw(10)<<p->xueli<<setw(10)<<p->dizhi<<setw(10)<<p->zhiwu<<endl;
    cout<<"是否要删除职工信息?"<<endl;
    cout<<" 1.是    2.不是    "<<endl;
    cin>>m;
if(m==1)
{
if(p==head->next)
{
head->next = head->next->next;
free(p);
p=NULL;
cout<<"信息已删除!"<<endl;
return;
}
 else
 {
pre->next =p->next;
free(p);
p=NULL;
cout<<"信息已删除!"<<endl;
return;
 }
}


if(m==2)
{
return;
}
}
             else
 {
pre=p;
p=p->next;
 }

 }
}
cout<<"工号输入有误"<<endl;
Del(head);
}
/************************************
* 功能描述:根据输入的姓名查找职工信息
* 输入参数:职工姓名
* 输出参数:无
************************************/
void SearchName(LNode *head)//按姓名查找职工
{
   string name;
   int i;
cout<<"请输入要查找的职工姓名"<<endl;
cin>>name;
LNode *p=head->next;
if (head->next==NULL)
{
cout<<"该信息表为空!"<<endl;
return;
}
p=head->next;
while(p)
{
  if (p->name==name)
  {
      i++;
   cout<<"姓名"<<setw(10)<<"工号"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"学历"<<setw(10)<<"地址"<<setw(10)<<"职位\n";
   cout<<p->name<<setw(10)<<p->id<<setw(10)<<p->age<<setw(10)<<p->sex<<setw(10)<<p->xueli<<setw(10)<<p->dizhi<<setw(10)<<p->zhiwu<<endl;
  }
   p= p->next;


}
if(i==0)
cout<<"没有该职工!"<<endl;

}
/************************************
* 功能描述:根据输入的ID查找信息
* 输入参数:职工ID
* 输出参数:无
************************************/
void SortID(LNode *head)//按工号查找职工
{
string id;
cout<<"请输入要查找的职工号"<<endl;
cin>>id;
LNode *p=head->next;
if (head->next==NULL)
{
cout<<"该信息表为空!"<<endl;
return;
}
p=head->next;
while(p)
{
  if (p->id==id)
  {

cout<<"姓名"<<setw(10)<<"工号"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"学历"<<setw(10)<<"地址"<<setw(10)<<"职位\n";
cout<<p->name<<setw(10)<<p->id<<setw(10)<<p->age<<setw(10)<<p->sex<<setw(10)<<p->xueli<<setw(10)<<p->dizhi<<setw(10)<<p->zhiwu<<endl;

return;
  }
   p= p->next;


}
cout<<"没有该职工!"<<endl;


}
/************************************
* 功能描述:根据输入的职工号
* 输入参数:职工ID,要修改的选项
* 输出参数:无
************************************/
void change(LNode *head)
{
     LNode *p;//
    string id;
    int m,c;
   string sex;
string age;
string xueli;
string zhiwu;
string dizhi;
    p=head->next;//
    if(head->next==NULL)
{
cout<<"该信息表为空!"<<endl;
return;
}
else
{
    cout<<"请输入职工号: "<<endl;
    cin>>id;
    while(p)
    {
        if(p->id==id)
        {
         cout<<"姓名"<<setw(10)<<"工号"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"学历"<<setw(10)<<"地址"<<setw(10)<<"职位\n";
         cout<<p->name<<setw(10)<<p->id<<setw(10)<<p->age<<setw(10)<<p->sex<<setw(10)<<p->xueli<<setw(10)<<p->dizhi<<setw(10)<<p->zhiwu<<endl;
         cout<<"是否要修改职工信息?"<<endl;
cout<<" 1.是    2.不是    "<<endl;
cin>>m;
if(m==1)
{
      cout<<"请输入要修改的选项(1编号,2姓名,3性别,4学历,5职务,6地址,7年龄"<<endl;
            cin>>c;

            switch(c)
            {
            case 1:
                {
                    cout<<"请输入修改员工编号"<< "更改后的编号是"<<endl;
                    cin>>p->id;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 2:
                {
                    cout<<"请输入员工更改后的姓名是"<<endl;
                    cin>>p->name;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 3:
                {
                    cout<<"请输入员工更改后的性别是"<<endl;
                    cin>>p->sex;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 4:
                {

                    cout<<"请输入员工更改后的学历是"<<endl;
                    cin>>p->xueli;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 5:
                {
                    cout<<"请输入员工更改后的职务是"<<endl;
                    cin>>p->zhiwu;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 6:
                {
                    cout<<"请输入员工更改后的地址是"<<endl;
                    cin>>p->dizhi;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            case 7:
                {
                    cout<<"请输入修改员工年龄"<< "更改后的年龄是"<<endl;
                    cin>>p->age;
                    cout<<"修改员工信息成功!"<<endl;
                    break;
                }
            }
return;
}
if(m==2)
{
cout<<"职工信息保留!"<<endl;
return;
}
            break;
        }
        p=p->next;
    }
}
       cout<<"对不起,不存在工号为"<<id<<"的职工,请重新输入"<<endl;
       change(head);
}
void paixu(LNode *head)//按工号排序
{
LNode t,*p,*q,*r;
r=head->next;
 while(r)
 {
    p=r;
    q=r->next;
    while(q)
{
if((q->id)<(p->id))
{
t.name=q->name;//将q结点的信息给t
t.id=q->id;
t.sex=q->sex;
t.age=q->age;
t.xueli=q->xueli;
t.zhiwu=q->zhiwu;
t.dizhi=q->dizhi;

q->name=p->name;//将p结点的信息给q
q->id=p->id;
q->sex=p->sex;
q->age=p->age;
q->xueli=p->xueli;
q->zhiwu=p->zhiwu;
q->dizhi=p->dizhi;

p->name=t.name;//将t结点的信息给p
p->id=t.id;
p->sex=t.sex;
p->age=t.age;
p->xueli=t.xueli;
p->zhiwu=t.zhiwu;
p->dizhi=t.dizhi;
}
q=q->next;
}
r=r->next;
 }

}
/************************************
函数功能:保存链表数据到文件中
************************************/
void save(LNode *head)                           //保存操作结果
{
    /*int i;*/
    LNode *p=head->next;
    LNode *q=head->next;
    FILE *fp;                                //文件指针
    if(p==NULL)
    {
        printf("现在没有职工信息,请先输入信息再进行操作\n");
        return;
    }
    fp=fopen("worker.txt","w");                 //在当前目录下打开goods.txt文件并设置只允许“写”操作
    if(!fp)
    {
        printf("文件不存在\n");
        return;
    }
    //将商品信息写入文件
    fprintf(fp,"===========================职工信息一览表===========================\n");
    fprintf(fp,"姓名\t工号\t性别\t学历\t职务\t地址\n");
    while(p!=NULL)
    {
        fprintf(fp,"%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t",p->name.c_str(),p->id.c_str(),p->age.c_str(),p->sex.c_str(),p->xueli.c_str(),p->zhiwu.c_str(),p->dizhi.c_str());
        fprintf(fp,"\n");
        p=p->next;
    }

    fclose(fp);                                //把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针
    printf("数据已成功导入文件worker.txt!\n");
}

void Menu(LNode *head)
{

    int choose;


cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t 职工信息管理系统 "<<endl<<endl;
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※"<<endl<<endl;
cout<<"请按键选择需要的操作 (请输入数字)"<<endl; cout<<"\n";
cout<<" ╭--------------------------------------—---------------------- ╮"<<endl;
cout<<" │ 1 录入职工信息:       │";       cout<<" │ 2 输出职工信息:     │"<<endl;
cout<<" │ 3 删除职工信息:       │";       cout<<" │ 4 清除所有信息:     │"<<endl;
cout<<" │ 5 按姓名查找职工信息: │";       cout<<" │ 6 按ID查找职工信息: │"<<endl;
cout<<" │ 7 修改职工信息:       │";       cout<<" │ 8 保存职工信息      │"<<endl;
cout<<" │ 9 退出系统:                                                  │"<<endl;
cout<<" ╰------------------------------------------------------------- ╮"<<endl;
    cin>>choose;/*取得用户的选择*/
    switch(choose)
    {
    case 1:
        system("cls");
        NewNode(head);
cout<<"按任意键继续"<<endl;
        getch();
        break;
    case 2:
        system("cls");
   DispList(head);
        cout<<"按任意键继续"<<endl;
getch();
        break;
    case 3:
        system("cls");
     Del(head);
//根据姓名查找学生信息
cout<<"按任意键继续"<<endl;
        getch();
        break;
    case 4:
       system("cls");
   Destroy(head);

  cout<<"按任意键继续"<<endl;
       getch();
       break;
    case 5:
       system("cls");
       SearchName(head);
        cout<<"按任意键继续"<<endl;
        getch();
        break;
    case 6:
       system("cls");
        SortID(head);

        getch();
        break;
    case 7:
       system("cls");
       change(head);
        getch();
        break;
        case 8:
       system("cls");
       save(head);
        getch();
        break;
         case 9:
       system("cls");
       exit(0);
        break;

    default:
        break;
    }
    Menu(head);/*递归调用*/
}

worker.h

#ifndef WORKER_H_INCLUDED
#define WORKER_H_INCLUDED
#include <string>  //string 类型
using namespace std;
typedef struct LNode//职工结构体
{
     string name;
     string id;
     string sex;
     string age;
     string xueli;
     string zhiwu;
     string dizhi;
     struct LNode *next;//指针域,指向后继节点
} LinkList;
void InitList(LinkList *&head);
void NewNode(LNode *head);//
int id(string a,LNode *head);
void CreatList(LNode *a,LNode *head);//尾插法生成单链表
void Display(LNode *head);//显示职工信息
void SortID();//ID查询
void SearchName();//姓名查询
void Del(LNode *head);//按ID删除
void Destroy(LinkList *&head);
void paixu(LNode *head);
void change(LNode *head);
void Menu(LNode *head);
void save(LNode *head);

#endif // WORKER_H_INCLUDED

执行结果

1.录入

2.输出信息


3.按姓名查找


4.按ID查找


5.修改信息


修改后:


6.删除


7.保存至文件


8.清空所有



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值