#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

typedef struct employee
{
    char number[10];    // 职工编号
    char name[20];      // 姓名
    char sex[10];       // 性别
    char birthday[20];  // 出生年月
    char date[20];      // 入职年月
    char degree[20];    // 学历
    char position[20];  // 职务
    char add[50];       // 地址
    char tel[20];       // 电话
    struct employee *next;
}employee;

employee em[MAX_SIZE];
int n = 0;
employee *head = NULL;

//  读取函数

void read()
{
    FILE *fp;
    fp = fopen("employee.dat", "rb");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    fread(&n, sizeof(int), 1, fp);
    fread(em, sizeof(employee), n, fp);
    fclose(fp);
}

//  写入函数

void write()
{
    FILE *fp;
    fp = fopen("employee.dat", "wb");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    fwrite(&n, sizeof(int), 1, fp);
    fwrite(em, sizeof(employee), n, fp);
    fclose(fp);
}

//  录入函数

void input()
{
    char c;
    while (1)
    {
        system("cls");
        printf("请输入职工信息:\n");
        printf("职工编号: ");
        scanf("%s", &em[n].number);
        printf("姓名: ");
        scanf("%s", &em[n].name);
        printf("性别: ");
        scanf("%s", &em[n].sex);
        printf("出生年月: ");
        scanf("%s", &em[n].birthday);
        printf("入职年月: ");
        scanf("%s", &em[n].date);
        printf("学历: ");
        scanf("%s", &em[n].degree);
        printf("职务: ");
        scanf("%s", &em[n].position);
        printf("地址: ");
        scanf("%s", &em[n].add);
        printf("电话: ");
        scanf("%s", &em[n].tel);
        n++;
        printf("是否继续录入?(Y/N): ");
        scanf("%c", &c);
        if (c == 'N' || c == 'n') break;
    }
    write();
}

//  查找函数

void search()
{
    char a[10];
    int i, flag;
    char c;
    read();
    while (1)
    {
        flag = 0;
        system("cls");
        printf("请输入要查找的职工编号: ");
        scanf("%s", &a);
        for (i = 0; i < n; i++)
        {
            if (strcmp(em[i].number, a) == 0)
            {
                printf("职工信息如下:\n");
                printf("职工编号: %s\n", em[i].number);
                printf("姓名: %s\n", em[i].name);
                printf("性别: %s\n", em[i].sex);
                printf("出生年月: %s\n", em[i].birthday);
                printf("入职年月: %s\n", em[i].date);
                printf("学历: %s\n", em[i].degree);
                printf("职务: %s\n", em[i].position);
                printf("地址: %s\n", em[i].add);
                printf("电话: %s\n", em[i].tel);
                flag = 1;
                break;
            }
        }
        if (!flag)
            printf("!!!无此员工信息!!!\n");
        printf("是否继续查找?(Y/N): ");
        scanf("%c", &c);
        if (c == 'N' || c == 'n') break;
    }
}

//  修改函数

void modify()
{
    int num, flag, i, j;
    char a[10];
    char change[20];
    char c;
    read();
    while (1)
    {
        flag = 0;
        printf("\n请输入需要修改的职工编号:");
        scanf("%s", &a);
        for (i = 0; i < n; i++)
        {
            if (strcmp(em[i].number, a) == 0)
            {
                j = i;
                flag = 1;
            }
        }
        if (!flag)
        {
            printf("\n\n!!!无此员工的信息!!!\n\n");
            printf("\n\n是否继续修改(Y/N):");
            scanf("%c", &c);
            if(c == 'N' || c == 'n') break;
        }
        printf("\n");
        printf("+-------------------------------+\n");
        printf("|    职 工 信 息 修 改 系 统    |
");
        printf("|           1.修改姓名          |
");
        printf("|           2.修改学历          |
");
        printf("|           3.修改职务          |
");
        printf("|           4.修改地址          |
");
        printf("|           5.修改出生年月      |
");
        printf("|           6.修改入职年月      |
");
        printf("|           7.修改电话          |
");
        printf("|           8.修改职工编号      |
");
        printf("|    输入其他任意键退出本模块   |
");
        printf("+-------------------------------+\n");
        printf("请选择操作:");
        scanf("%d", &num);
        if (num < 1 || num > 8)
        {
            printf("!!!操作错误!!!\n\n");
            continue;
        }
        system("cls");    // 清屏
        printf("\n请输入修改后的信息:");
        scanf("%s", &change);
        switch (num)
        {
            case 1 : strcpy(em[j].name, change);
                    break;
            case 2 : strcpy(em[j].degree, change);
                    break;
            case 3 : strcpy(em[j].position, change);
                    break;
            case 4 : strcpy(em[j].add, change);
                    break;
            case 5 : strcpy(em[j].birthday, change);
                    break;
            case 6 : strcpy(em[j].date, change);
                    break;
            case 7 : strcpy(em[j].tel, change);
                    break;
            case 8 : strcpy(em[j].number, change);
                    break;
        }
        printf("\n\n是否继续修改?(Y/N):");
        scanf("%*c%c", &c);
        if (c == 'N' || c == 'n')
            break;
        continue;
    }
    write();
}

//  删除函数

void Delete()    
{
    char a[10];           
    int i, j, flag;          
    char c;
    read();
    while (1)
    {
        system("cls");    // 清屏
        flag = 0;
        printf("\n请输入需要删除的职工编号:");
        scanf("%s", &a);
        for (i = 0; i < n; i++)
        {
            if (strcmp(em[i].number, a) == 0)
            {
                n--;
                flag = 1;
                for (j = i; j < n; j++)
                {
                    em[j] = em[j + 1];
                }
                break;
            }
        }
        if (!flag)
            printf("\n\n!!!无此员工信息!!!\n\n");
        else
            printf("\n\n!!!删除成功!!!\n");
        printf("\n\n是否继续删除?(Y/N):");
        scanf("%c", &c);
        if (c == 'N' || c == 'n') break;
        continue;
    }
    write();
}

//输出函数 
  
void show(employee *head)
{
    employee *p = head;
    int j = 1;
    int i;
    char c;
    while (p != NULL)
    {
        for (i = 1; i < n; i++)
        {
            printf("%d. %s  %s  %s  %s  %s  %s  %s  %s  %s\n",j++,p->number,p->name ,p->sex ,p->birthday,
                            p->date, p->degree, p->position, p->add, p->tel);
            p = p->next;
        }
    }
}

//交换

void exchange(char *p,char *q) 
{
    read();
    char c[20];
    strcpy(c, p);
    strcpy(p, q);
    strcpy(q, c);
}

//排序

void sort() 
{
    char ch;
    char c;
    employee *p, *q, *r;
    read() ;
    while (1)
    {
        printf("按职工编号从小到大的排序信息如下:\n");
        p = head;
        while (p->next != NULL)   //选择排序 
        {
            q = p->next;
            r = p;
            if (r != p)      //交换信息
            {
                exchange(r->number, p->number);
                exchange(r->name, p->name);
                exchange(r->sex, p->sex);
                exchange(r->birthday, p->birthday);
                exchange(r->date, p->date);
                exchange(r->degree, p->degree);
                exchange(r->position, p->position);
                exchange(r->add, p->add);
                exchange(r->tel, p->tel);
            }
        }
        show();
        system("pause");
    }
}

//菜单

void menu()
{
    printf("*************************\n"); 
    printf("*      ○主菜单 ○      *\n");
    printf("*    0.退 出 菜 单      *\n");
    printf("*    1.录入职工信息     *\n"); 
    printf("*    2.显示职工信息     *\n");
    printf("*    3.查询职工信息     *\n");
    printf("*    4.修改职工信息     *\n");
    printf("*    5.删除职工信息     *\n");
    printf("*    6.职工信息排序     *\n");
    printf("*************************\n"); 
    printf("请输入操作: ");
}

int main()
{
    int choice;
    read();
    while (1)
    {
        menu();
        scanf("%d", &choice);
        switch (choice)
        {
            case 0:
                printf("退出程序!\n");
                return 0;
            case 1:
                input();
                break;
            case 2:
                read();
                show(head);
                system("pause");
                break;
            case 3:
                search();
                break;
            case 4:
                modify();
                break;
            case 5:
                Delete();
                break;
            case 6:
                sort();
                break;
            default:
                printf("输入错误,请重新输入!\n");
        }
    }
    return 0;
}
C语言职工信息管理系统:修改、删除、排序功能实现

原文地址: https://www.cveoy.top/t/topic/fwYh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录