单链表的应用:用C语言实现简单的员工管理系统(新建、增、删、改、查、排序)

/*
问题描述:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。
选作内容:实现图形用户界面。
通过链表实现
数据结构:
struct workers
{
    char name[15];//姓名
    char  department[18];//单位
    char gender;//性别
    unsigned int age;//年龄
    unsigned long telephone;//电话
    unsigned long wage;//工资
    unsigned long num;//职工号
    struct workers *next;
};
操作实现:
/*插入职工信息,通过链表实现*/
/*具体实现职工信息的插入*/
/*对职工信息的删除操作*/
/*修改操作*/
/*实现对员工信息的查找*/
/*排序*/
/* 输出员工信息 */
/* 显示职工工资情况 计算平均工资*/

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
typedef struct workers
{
    char name[15];//姓名
    char  department[18];//单位
    char gender;//性别
    unsigned int age;//年龄
    unsigned long tel;//电话
    unsigned long wage;//工资
    unsigned long num;//职工号
    struct workers *next;
}Node;
void input(Node *p)
{
    printf("请输入姓名:\n");
    scanf("%s",p->name);
    printf("请输入单位:\n");
    scanf("%s",p->department);
    getchar();
    printf("请输入性别:\n");
    scanf("%c",&p->gender);
    printf("请输入年龄:\n");
    scanf("%d",&p->age);
    printf("请输入电话:\n");
    scanf("%ld",&p->tel);
    printf("请输入工资:\n");
    scanf("%ld",&p->wage);
    printf("请输入职工号:\n");
    scanf("%ld",&p->num);
    p->next=NULL;
}
Node *create()
{
    int i,n;
    Node *p,*h,*q;
    h=(Node*)malloc(sizeof(Node));
    p=h;
    printf("请输入你想新增员工的人数:\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        q=(Node*)malloc(sizeof(Node));
        input(q);
        p->next=q;
        p=q;
    }
    return h;
}
int update(Node *h)
{
    unsigned long nu;
    Node *p;
    p=h->next;
    printf("请输入你想查找的员工的职工号:\n");
    scanf("%ld",&nu);
    if(!p)
     return 0;
    else
    {
        while(p&&p->num!=nu)
        {
            p=p->next;
        }
        if(!p)
         return 0;
        else
        {
            printf("请重新输入姓名:\n");
            scanf("%s",p->name);
            printf("请重新输入单位:\n");
            scanf("%s",p->department);
            getchar();
            printf("请重新输入性别:\n");
            scanf("%c",&p->gender);
            printf("请重新输入年龄:\n");
            scanf("%d",&p->age);
            printf("请重新输入电话:\n");
            scanf("%ld",&p->tel);
            printf("请重新输入工资:\n");
            scanf("%ld",&p->wage);
            printf("请重新输入职工号:\n");
            scanf("%ld",&p->num);
            return 1;
        }
    }
}
void insert(Node *h)
{
    Node *p,*q;
    p=h;
    q=(Node*)malloc(sizeof(Node));
    input(q);
    while(p->next)
    {
        p=p->next;
    }
    p->next=q;
}
void output(Node *p)
{
    printf("姓名    单位    性别    年龄      电话      工资        职工号   \n");
    printf("%-8s%-8s%-8c%-8d%-12ld%-12ld%-8ld\n",p->name,p->department,p->gender,p->age,p->tel,p->wage,p->num);
}
void output_age(Node *p[],int n)
{
    printf("姓名    单位    性别    年龄      电话      工资        职工号   \n");
    int i;
    for(i=0;i<n;i++)
      printf("%-8s%-8s%-8c%-8d%-12ld%-12ld%-8ld\n",p[i]->name,p[i]->department,p[i]->gender,p[i]->age,p[i]->tel,p[i]->wage,p[i]->num);
}
void travel(Node *h)
{
    Node *p;
    p=h->next;
    if(!h->next)
    {
        printf("现在一个人都没有!\n");
        return;
    }
    printf("姓名    单位    性别    年龄      电话      工资        职工号   \n");
    while(p)
    {
        printf("%-8s%-8s%-8c%-8d%-12ld%-12ld%-8ld\n",p->name,p->department,p->gender,p->age,p->tel,p->wage,p->num);
        p=p->next;
    }
}
Node *search_name(Node *h,char na[])
{
   
  • 19
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单链表可以用来实现员工通讯录管理系统。下面是一种可能的实现方式: 定义员工结构体: ``` typedef struct Employee { int id; // 员工编号 char name[20]; // 员工姓名 char phone[20]; // 员工电话 struct Employee *next; // 指向下一个员工的指针 } Employee; ``` 定义链表结构体: ``` typedef struct EmployeeList { Employee *head; // 链表头指针 int length; // 链表长度 } EmployeeList; ``` 初始化链表: ``` EmployeeList initEmployeeList() { EmployeeList list; list.head = NULL; list.length = 0; return list; } ``` 添加员工: ``` void addEmployee(EmployeeList *list, Employee employee) { Employee *newEmployee = (Employee*)malloc(sizeof(Employee)); *newEmployee = employee; newEmployee->next = NULL; if(list->head == NULL) { list->head = newEmployee; } else { Employee *p = list->head; while(p->next != NULL) { p = p->next; } p->next = newEmployee; } list->length++; } ``` 员工: ``` void deleteEmployee(EmployeeList *list, int id) { if(list->head == NULL) { return; } if(list->head->id == id) { Employee *temp = list->head; list->head = list->head->next; free(temp); list->length--; return; } Employee *p = list->head; while(p->next != NULL) { if(p->next->id == id) { Employee *temp = p->next; p->next = p->next->next; free(temp); list->length--; return; } p = p->next; } } ``` 员工: ``` Employee* findEmployee(EmployeeList *list, int id) { Employee *p = list->head; while(p != NULL) { if(p->id == id) { return p; } p = p->next; } return NULL; } ``` 遍历链表: ``` void traverse(EmployeeList *list) { Employee *p = list->head; while(p != NULL) { printf("id:%d name:%s phone:%s\n", p->id, p->name, p->phone); p = p->next; } } ``` 这样,我们就可以使用单链表实现员工通讯录管理系统了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值