C语言程序设计 之 职工信息管理系统

要做程序设计,好烦哦……




#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N sizeof(struct works)
struct works
{
    int   W_number;
    char  name[20];
    char  sex[5];
    char   W_date_birth[11];
    char  xueli[20];
    char  position[15];
    char  gongzi[20];
    char  address[20];
    char  telephone[11];
    works()
    {
        next=NULL;
    }
    struct works *next;
};
struct works *creat()                               //                建立链表
{
    struct works *head,*p1,*p2;
    int n=1;
    char a;
    printf("输入职工信息:\n");
    do
    {
        p1=(struct works *)malloc(N);/*为p1开辟一个新单元*/
        printf("\n职工号:");
        scanf("%d",&p1->W_number);
        printf("姓名:");
        scanf("%s",p1->name);
        printf("性别:");
        scanf("%s",p1->sex);
        printf("出生年月:");
        scanf("%s",p1->W_date_birth);
        printf("学历:");
        scanf("%s",p1->xueli);
        printf("职务:");
        scanf("%s",p1->position);
        printf("工资:");
        scanf("%s",p1->gongzi);
        printf("住址:");
        scanf("%s",p1->address);
        printf("电话号码:");
        scanf("%s",p1->telephone);
        p1->next=NULL;
        if(n==1)/*n=1时接入表头*/
            head=p1;
        else
            p2->next=p1;/*n!=1时接入表尾*/
        p2=p1;
        n++;
        printf("\n是否输入下一个员工信息?(y/n)\n");
        getchar();
        a=getchar();
    }
    while(a=='y'); /*执行是否输入下一个数据*/
    return head;
}

struct works *cut(struct works *head)                              //              删除
{
    struct works *p1,*p2;
    int   W_number;
    printf("输入要删除职工的职工号:\n");
    scanf("%d",&W_number);
    p1=head;
    while (p1->W_number!=W_number&&p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(p1->W_number==W_number)/*找到了*/
    {
        if(head==p1)
        {
            head=head->next;
        }
        else
        {
            p2->next=p1->next;
        }
        free(p1);
        printf("\n删除%d职工成功!\n",W_number);
    }
    else/*没找到*/
    {
        printf("\n未找到职工号为%d职工!\n",W_number);
    }
    return head;
}

struct works *insert(struct works *head)               //             插入
{
    struct works *p1,*p3;
    works *p2=new works();
    int    W_number;
    printf("\n插入某个职工之后:");
    scanf("%d", &W_number);
    printf("\n输入将要插入职工的数据:\n");
    p3=(struct works *)malloc(N);
    p1=head;
    while(p1->W_number!=W_number&&p1->next!=NULL)
    {
        p1=p1->next;
    }
    if(p1->W_number!=W_number)
    {
        printf("\n未找到%d职工!\n",W_number);
    }
    else
    {
        printf("\n职工号:");
        scanf("%d",&p3->W_number);
        printf("姓名:");
        scanf("%s",p3->name);
        printf("性别:");
        scanf("%s",p3->sex);
        printf("出生年月:");
        scanf("%s",p3->W_date_birth);
        printf("学历:");
        scanf("%s",p3->xueli);
        printf("职务:");
        scanf("%s",p3->position);
        printf("工资:");
        scanf("%s",p3->gongzi);
        printf("住址:");
        scanf("%s",p3->address);
        printf("电话号码:");
        scanf("%s",p3->telephone);
        p2=p1->next;
        p1->next=p3;
        p3->next=p2;
    }
    return head;
}

struct works *seek1(struct works *head)             //                   查找
{
    struct works *p;
    int W_number;
    p=head;
    printf("\n输入查找职工的职工号:\n");
    scanf("%d", &W_number);
    while(p->W_number!=W_number&&p->next!=NULL)
    {
        p=p->next;
    }
    if(p->W_number==W_number)/*找到了*/
    {
        printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
        printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);

    }
    else/*没有找到*/
    {
        printf("\n未找到该职工!\n");
    }
    return p;
}
struct works *seek2(struct works *head)
{
    struct works *p;
    char w_name[20];
    p=head;
    printf("请输入要查找的职工姓名:\n");
    scanf("%s",w_name);
    while(strcmp(p->name,w_name)!=0&&p->next!=NULL)
    {
        p=p->next;
    }
    if(strcmp(p->name,w_name)!=0)
    {
        printf("\n未找到该职工!\n");
    }
    else
    {
        printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
        printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
    }
    return p;
}

struct works *xiugai(struct works *head)             //                   修改
{
    struct works *p;
    int W_number;
    p=head;
    printf("\n输入要修改职工的职工号:");
    scanf("%d",&W_number);
    while(p->W_number!=W_number&&p->next!=NULL)
    {
        p=p->next;/*后一一个结点*/
    }
    if(p->W_number==W_number)/*找到了*/
    {
        printf("\n职工号:");
        scanf("%d",&p->W_number);
        printf("姓名:");
        scanf("%s",p->name);
        printf("性别:");
        scanf("%s",p->sex);
        printf("出生年月:");
        scanf("%s",p->W_date_birth);
        printf("学历:");
        scanf("%s",p->xueli);
        printf("职务:");
        scanf("%s",p->position);
        printf("工资:");
        scanf("%s",p->gongzi);
        printf("住址:");
        scanf("%s",p->address);
        printf("电话号码:");
        scanf("%s",p->telephone);
        printf("\n修改成功!\n");
    }
    else/*未找到*/
    {
        printf("\n未找到该职工 !\n");
    }
    return head;
}
struct works *sort(struct works *head)
{
    struct works *p1,*p2,*p3;

    char a[20];
    int w_number;
    p3=(struct works *)malloc(N);
    for(p1=head; p1!=NULL; p1=p1->next)
    {
        for(p2=p1->next; p2!=NULL; p2=p2->next)
        {
            if(p1->W_number>p2->W_number)
            {
                p3->W_number=p2->W_number;
                p2->W_number=p1->W_number;
                p1->W_number=p3->W_number;
                strcpy(a,p1->name);
                strcpy(p1->name,p2->name);
                strcpy(p2->name,a);
                strcpy(a,p1->sex);
                strcpy(p1->sex,p2->sex);
                strcpy(p2->sex,a);
                strcpy(a,p1->W_date_birth);
                strcpy(p1->W_date_birth,p2->W_date_birth);
                strcpy(p2->W_date_birth,a);
                strcpy(a,p1->xueli);
                strcpy(p1->xueli,p2->xueli);
                strcpy(p2->xueli,a);
                strcpy(a,p1->position);
                strcpy(p1->position,p2->position);
                strcpy(p2->position,a);
                strcpy(a,p1->gongzi);
                strcpy(p1->gongzi,p2->gongzi);
                strcpy(p2->gongzi,a);
                strcpy(a,p1->address);
                strcpy(p1->address,p2->address);
                strcpy(p2->address,a);
                strcpy(a,p1->telephone);
                strcpy(p1->telephone,p2->telephone);
                strcpy(p2->telephone,a);
            }
        }

    }
    return head;
}
void save(struct works *head)                              //                       保存
{
    FILE *fp;
    struct works *p;
    p=head;
    if((fp=fopen("D:\\file.txt","w"))==NULL)
    {
        printf("打开失败\n");
        exit(0);
    }
    while(p!=NULL)
    {
        fprintf(fp,"%d %s %s %s %s %s %s %s %s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
        p=p->next;
    }
    printf("保存成功\n");
    fclose(fp);
    printf("\n");

}
void print(struct works *head)
{
    struct works *p;
    p=head;
    printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
    while(p!=NULL)
    {

        printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
        p=p->next;
    }

}
void menu1()
{

    printf("*********欢迎进入查询系统***********\n");
    printf("\t\t》》》1.按职工号查找\n");
    printf("\t\t》》》2.按姓名查找\n");
    printf("\t\t》》》3.退出\n");
    printf("************谢谢使用*******************\n");


}
void seek(struct works *head)
{
    int i;
    char ch;
    printf("请选择查找方式\n");
    scanf("%d",&i);
    do
    {
        switch(i)
        {
        case 1:
            seek1(head);
            break;
        case 2:
            seek2(head);
            break;
        case 3:
            printf("成功退出\n");
            break;
        default:
            printf("请输入正确指令!\n");
            break;

        }
        printf("是否继续查询是(Y/y)否(N/n)\n");
        getchar();
        ch=getchar();
    }
    while(ch=='Y'||ch=='y');

}

void menu()                                                  //              菜单
{
    printf("********************************************************************************\n");
    printf("\t\t\t  欢迎使用职工管理系统\n");
    printf("\t**************************************************************\n");
    printf("\t\t\t     1.录入职工信息。\n");
    printf("\t\t\t     2.查询职工信息。\n");
    printf("\t\t\t     3.删除职工信息。\n");
    printf("\t\t\t     4.插入职工信息。\n");
    printf("\t\t\t     5.修改职工信息。\n");
    printf("\t\t\t     6.打印职工信息。\n");
    printf("\t\t\t     7.按职工号排序。\n");
    printf("\t\t\t     8.保存职工信息。\n");
    printf("\t\t\t     9.退出职工信息系统。\n");
    printf("********************************************************************************\n");
    printf("\t\t\t     选择对应编号:");
}
int main()
{
    struct works *head;

    char ch;
    int a;
    while(1)
    {
        menu();
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            head=creat();
            break;
        case 2:
            menu1();
            seek(head);
            break;
        case 3:
            head=cut(head);
            break;
        case 4:
            head=insert(head);
            break;
        case 5:
            head=xiugai(head);
            break;
        case 6:
            print(head);
            break;
        case 7:
            head=sort(head);
            print(head);
            break;
        case 8:
            save(head);
            break;
        case 9:
            exit(0);
            break;
            printf("请输入正确指令!\n");
            break;
        }
    }

    printf("************************************谢谢使用************************************\n");
    return 0;
}


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值