微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

devc++运行不懂

include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<windows.h>
#define N sizeof(struct works) /* N的值为struct works长度*/
typedef struct works
{
    char  num[15];    //职工号
    char  name[20];      //名字
    char  sex[5];        //性别
    char  birth[11];     //出生日期
    char  study[20];     //学历
    char  position[15];  // 职位
    char  salary[20];    //工资
    char  addr[20];      //地址
    char  tel[11];       //电话号码
    struct works *next;  //定义了
}Node;

void menu() 
{                                                
    printf("********************************************************************************\n");
    printf("\t\t\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     0.退出系统。\n");
    printf("\t\t\t     选择对应编号:");

}

Node *create(Node *&head) 
{                             //                建立链表
    Node *p1,*p2,*p;
    int n=1;
    char a;
    do {        
        p1=(Node *)malloc(N);/*为p1开辟一个新单元,后面的都与之相似*/
        printf("输入职工信息:\n");    
        printf("\n职工号:");
        scanf("%s",p1->num);/*存入p1*/
        p=head;    //开辟新节点为了查询重复
//        do{
//                printf("\n输入职工号:");
//                scanf("%s",p->num); 
//                if(strcmp(p1->num,p->num)==0)
//                {
//                    printf("职工号重复!");
//                }
//            
//        };/*这里查重复可以使用调用函数包括下边的性别也是*/
//int isExist(char number[],Node *&head){
//    
//    Node* p ;
//    p= head;
//
//    while(p){
//        if(strcmp(p -> num,num) == 0){
//            printf("该职工号已重复,请重新输入:\n");
//            return 1;
//        }
//        p = p->next;
//    }
//    return 0;
//}
        printf("姓名:");
        scanf("%s",p1->name);
        printf("性别(输入男或女):");
        scanf("%s",p1->sex);
        
        while(strcmp(p1->sex,"男")&&strcmp(p1->sex,"女"))  /*判断男女*/
        {
        /*strcmp的作用是比较字符串1和字符串2。
        (1) 如果字符串1=字符串2,函数值为0。
        (2) 如果字符串1>字符串2,函数值为一正整数。
        (3) 如果字符串1<字符串2,函数值为一负整数
        注:strcpy也是字符串的用法*/
            printf("请重新输入!");
            scanf("%s",p1->sex);
        }
        printf("出生年月(例如:2002-02-02):");
        scanf("%s",p1->birth);
        printf("学历----(本科/专科):");
        scanf("%s",p1->study);
        printf("职务----(现处于职务):");
        scanf("%s",p1->position);
        printf("工资-----:");
        scanf("%s",p1->salary);
        printf("住址----:");
        scanf("%s",p1->addr);
        printf("电话号码:");
        scanf("%s",p1->tel);
        p1->next=NULL;
        if(n==1) {
            head=p1;
        }
        p2->next=p1;
        p2=p1;
        n++;

        printf("\n输入 y 继续输入,输入其他返回主菜单\n");
        getchar();  //可以吸收输入的空格 或者一个字符
        a=getchar();
    } while(a=='y'||a=='Y');
    //执行是否输入下一个数据
    return head;
}
Node *seek1(Node *head)
 {           //                   查找
    Node *p;
    char k[15];
    p=head;
    printf("\n输入查找职工的职工号:\n");
    scanf("%s", k);
    while(strcmp(p->num,k)!=0&&p->next!=NULL) 
    {
        p=p->next;
    }
    if(strcmp(p->num,k)==0)
     {   //找到了
        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->num,p->name,p->sex,p->birth,p->study,p->position,p->salary,p->addr,p->tel);

    }
     else 
    { //*没有找到
        printf("\n未找到该职工!\n");
    }
    return p;
}

Node *seek2(Node *&head)
{
    Node *p;
    char M[20];
    p=head;
    printf("请输入要查找的职工姓名:\n");
    scanf("%s",M);
    while(strcmp(p->name,M)!=0&&p->next!=NULL) 
    {
        p=p->next;
    }
    if(strcmp(p->name,M)==0)
    {
        printf("\n未找到该职工!\n");
    } 
    else {
    if(strcmp(p->name,M)!=0)
        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->num,p->name,p->sex,p->birth,p->study,p->position,p->salary,p->addr,p->tel);
    }
    return p;
}
void menu1()
 {
    printf("*********欢迎进入查询系统***********\n");
    printf("\t\t1.按职工号查找\n");
    printf("\t\t2.按姓名查找\n");
    printf("\t\t  3.退出  \n");
    printf("************结束使用*******************\n");
}

Node *sort(Node *&head) 
{
    Node *p1,*p2,*p3;
    char a[20];
    p3=(Node *)malloc(N);
    for(p1=head; p1!=NULL; p1=p1->next)
     {
        for(p2=p1->next; p2!=NULL; p2=p2->next)
         {
            if(p1->num>p2->num)
             {    
                strcpy(p3->num,p2->num);   //后面的字符赋值给前面的字符串
                strcpy(p2->num,p1->num);
                strcpy(p1->num,p3->num);                
                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->birth);
                strcpy(p1->birth,p2->birth);
                strcpy(p2->birth,a);
                strcpy(a,p1->study);
                strcpy(p1->study,p2->study);
                strcpy(p2->study,a);
                strcpy(a,p1->position);
                strcpy(p1->position,p2->position);
                strcpy(p2->position,a);
                strcpy(a,p1->salary);
                strcpy(p1->salary,p2->salary);
                strcpy(p2->salary,a);
                strcpy(a,p1->addr);
                strcpy(p1->addr,p2->addr);
                strcpy(p2->addr,a);
                strcpy(a,p1->tel);
                strcpy(p1->tel,p2->tel);
                strcpy(p2->tel,a);
            }
        }
    }
    return head;
}

void Delete(Node *&head) 
{
    Node *p, *r;
    
    char k[15];
    p = head;
    if (p == NULL) 
    {
        printf("提示:没有职工信息可以删除!\n ");
        return ;
    }
    printf(" \n提示:请输入你要删除的职工号!\n ");
    scanf("%s",k);
    if(strcmp(p->num,k)==0)
    {
        head = head->next;     //头节点指向下一个的下一个,直接把下一个隔了过去,就这样把下一个删除了,
        printf("删除成功!");
        return;
    }
    while (p->next != NULL) 
    {
        if (strcmp(p->next->num,k)==0) 
        {
            p->next = p->next->next;
            printf("删除成功!");
            break;
        }
        p = p->next;

    }
    
}

Node *change(Node *&head)
 {           //                   修改
    Node *p;
    char k[15];
    p=head;
    printf("\n输入要修改职工的职工号:");
    scanf("%s",k);
    while(strcmp(p->num,k)!=0&&p->next!=NULL)
     {
        p=p->next;/*后一一个结点*/
    }
    if(strcmp(p->num,k)==0)
     { /*找到了*/
        printf("\n职工号:");
        scanf("%s",p->num);
//        p1=head;
//    while(strcmp(p1->num,k)!=0&&p1->next!=NULL) 
//    {
//        p2=p1;
//        p1=p1->next;
//    }
        printf("姓名:");
        scanf("%s",p->name);
        printf("性别(输入男或女):");
        scanf("%s",p->sex);
        while(strcmp(p->sex,"男")&&strcmp(p->sex,"女"))            {
            printf("请重新输入!");
            scanf("%s",p->sex);
        }
        printf("出生年月    (例如:2002-02-02):");
        scanf("%s",p->birth);
        printf("学历:     (本科/专科)");
        scanf("%s",p->study);
        printf("职务:      (现处于职务)");
        scanf("%s",p->position);
        printf("工资------");
        scanf("%s",p->salary);
        printf("住址------");
        scanf("%s",p->addr);
        printf("电话号码--");
        scanf("%s",p->tel);
        printf("\n修改成功!\n");
    }
     else 
     { 
        printf("\n未找到该职工 !\n");
    }
    return head;
}

Node *save(Node *&head)
{                            //                       保存
    FILE *fp;
    Node *p;
    p=head;
    if((fp=fopen("C:\\职工信息管理系统.txt","w+"))==NULL)
     {
        printf("打开失败\n");
        exit(0);
    }
    while(p!=NULL)
     {
        fprintf(fp,"%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
                p->position,p->salary,p->addr,p->tel);
        p=p->next;
    }
    printf("保存成功\n");
    fclose(fp);
    printf("\n");
    return head;
}

Node *Du_qu(Node *&head) 
{
    FILE *fp;
//    Node *head;
    head = (Node*)malloc(N);
    Node *q=(Node*)malloc(N);
    if((fp=fopen("C:\\职工信息管理系统.txt","r+"))==NULL)
     {
        printf("没有此文件!");
    }
    q = head;

    while (!feof(fp))
     {     

        Node *p=(Node*)malloc(N);
        fscanf(fp,"%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
               p->position,p->salary,p->addr,p->tel);

        printf("%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
               p->position,p->salary,p->addr,p->tel);
        p->next = NULL;
        q->next = p;
        q= p;
    }
    fclose(fp);
return head;
}

Node *disp(Node *&head) 
{
    Node *p;
    p=head;
    printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
    while(p!=NULL) 
    {        printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->birth,p->study,
               p->position,p->salary,p->addr,p->tel);
        p=p->next;
    }
return head;
}

int main() 
{
    system("color 0B");  //输出框的颜色与#include<windows.h>相对应
    char ch;
    int k;
    while(1) {
        menu();
        scanf("%d",&k);
        switch(k) 
        {
            case 1:create(head);save(head);    break;                    
            case 2:menu1();disp(head);seek(head);break;                                                                                                        
            case 3:sort(head);disp(head);break;
            case 4:Delete(head);save(head);break;                                            
            case 5:change(head);save(head);break;                            
            case 6:save(head);break;                                
            case 7:Du_qu(head);    disp(head);break;                                        
            case 8:disp(head);break;                            
            case 0:                printf("                            谢谢对本系统的使用!\n");
                exit(0);
                break;
        }
    }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐