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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章