热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言职工管理系统设计

代码如下:#include<stdio.h>#include<stdlib.h>#include<string.h>structWorker

代码如下:

#include
#include
#include 
struct Worker
{
    int id;//工号
    char name[16];//姓名
    char sex[8];//性别
    int age;//年龄
    char edu_exp[32];//学历
    int wage;//工资
    char adress[32];//地址
    char phong[16];//电话
    Worker* next;
};
//创建表头
Worker m_head = { 0 };
//用户输入信息
int user_input(Worker* w)
{
    printf("ID:");
    scanf("%d", &w->id);
    getchar();//吸收回车字符
    printf("name:");
    gets_s(w->name);
    printf("sex:");
    gets_s(w->sex);
    printf("age:");
    scanf("%d", &w->age);
    getchar();//吸收回车字符
    printf("edu_exp:");
    gets_s(w->edu_exp);
    printf("wage:");
    scanf("%d", &w->wage);
    getchar();//吸收回车字符
    printf("adress:");
    gets_s(w->adress);
    printf("phone:");
    gets_s(w->phong);

    return 0;
}
//添加对象
void add(Worker* w)
{
    w->next = m_head.next;
    m_head.next = w;

}
//按插入对象
int insert(Worker* w)
{
    Worker* cur = m_head.next; // 当前节点current
    Worker* pre = &m_head;  // 上一个节点previous
    while (cur)
    {
        if (w->id id) // 找到这个位置
            break;

        pre = cur;
        cur = cur->next;  // 找到最后一个对象
    }

    // 插入到pre节点的后面
    w->next = pre->next;
    pre->next = w;
    return 0;
}
//删除对象
int remove(int id)
{
    Worker* cur = m_head.next;//当前节点为第一个对象
    Worker* pre = &m_head;//当前节点的前一个节点,为头节点,指向第一个对象
    while (cur)
    {
        if (id == cur->id)//找到要删除的节点
        {
            pre->next = cur->next;
            free(cur);//删除该节点
            return 1;//成功删除返回1
        }
        pre = cur;
        cur = cur->next;

    }
    return 0;
}
//查找对象
int find(int id)
{
    Worker* p = m_head.next;
    while (p)
    {
        if (id == p->id)
        {
            printf("ID:%d\nName:%s\nSex:%s\nAge:%d\nEdu-exp:%s\nWage:%d\nAdress:%s\nPhone:%s\n",
                p->id, p->name, p->sex, p->age, p->edu_exp, p->wage, p->adress, p->phong);
            return 1;//找到目标返回1
        }
        p = p->next;
    }
    return 0;
}

//遍历
void show_all()
{
    Worker* p = m_head.next;
    if (!p)
    {
        printf("暂无员工信息!\n");
        return;
    }
    printf("工 号 姓 名 性 别 年 龄 学 历 工 资 住 址 电 话\n");
    printf("----------------------------------------------------------------\n");
    while (p)
    {

        printf("%d %s %s %d %s %d %s %s\n", p->id, p->name, p->sex, p->age, p->edu_exp,
            p->wage, p->adress, p->phong);
        p = p->next;
    }
}
//向文件存入数据
int save()
{
    const char* filename = "F:\\data.txt";
    FILE* fp = fopen(filename, "a");
    if (fp == NULL)
    {
        printf("can not open the file....");
        exit(0);
    }
    Worker* p = m_head.next;
    while (p)
    {
        fprintf(fp, "\r");
        fprintf(fp, "%d ", p->id);
        fprintf(fp, "%s ", p->name);
        fprintf(fp, "%s ", p->sex);
        fprintf(fp, "%d ", p->age);
        fprintf(fp, "%s ", p->edu_exp);
        fprintf(fp, "%d ", p->wage);
        fprintf(fp, "%s ", p->adress);
        fprintf(fp, "%s ", p->phong);
        fprintf(fp, "\t\r\n");
        p = p->next;

    }


    fclose(fp);
    return 0;

}

//修改对象
void rewrite(int id)
{
    Worker* p = m_head.next;
    while (p)
    {
        if (id == p->id)
        {
            user_input(p);
        }
        p = p->next;
    }

}
//主菜单
void List()
{
    Worker* w = NULL;
    char key;
    while (1)
    {

        do
        {
            system("cls");
            printf("*******************************************************\n");
            printf("* 主菜单操作界面 *\n");
            printf("* *\n");
            printf("* 1.录入职工信息 *\n");
            printf("* 2.浏览职工信息 *\n");
            printf("* 3.查询职工信息 *\n");
            printf("* 4.删除职工信息 *\n");
            printf("* 5.修改职工信息 *\n");
            printf("* 6.使用说明 *\n");
            printf("* 7.退出 *\n");
            printf("* *\n");
            printf("*******************************************************\n");

            key = getchar();

        } while (key != '1'&&key != '2'&&key != '3'&&key != '4'
            &&key != '5'&&key != '6'&&key != '7');

        switch (key)
        {
        case '1':system("cls");
            while (1)
            {
                Worker* w = (Worker*)malloc(sizeof(Worker));
                user_input(w);
                insert(w);
                if (getchar() == 'N')
                {
                    break;
                }
            }
            save();
            free(w);
            break;
        case '2':system("cls");
            show_all();
            system("pause");
            break;
        case '3':system("cls");
            if (!m_head.next)
            {
                printf("暂无员工信息!\n");
                system("pause");
                break;
            }
            while (1)
            {
                int n;
                printf("---------------------------------\n");
                printf("请输入要查找的ID号:");
                scanf("%d", &n);
                if (!find(n))
                {
                    printf("找不到ID号为%d 的职工信息...\n", n);
                }
                char ch = getchar();
                if (ch == 'N')
                {
                    break;
                }

            }
            break;

        case '4':system("cls");
            if (!m_head.next)
            {
                printf("暂无员工信息!\n");
                system("pause");
                break;
            }
            while (1)
            {
                int n;
                printf("---------------------------------\n");
                printf("请输入要删除的ID号:");
                scanf("%d", &n);
                if (remove(n))
                {
                    printf("成功删除ID号为%d的职工信息.\n", n);
                }
                else
                    printf("无法删除ID号为%d的职工信息.\n", n);
                char ch = getchar();
                if (ch == 'N')//摁N退出
                {
                    break;
                }
            }
            break;
        case '5':system("cls");//
            if (!m_head.next)
            {
                printf("暂无员工信息!\n");
                system("pause");
                break;
            }
            while (1)
            {
                int n;
                printf("请输入要修改的ID号:\n");
                scanf("%d", &n);
                printf("请修改:\n");
                rewrite(n);
                if (getchar() == 'N')
                {
                    break;
                }
            }
            break;
        case '6':system("cls");
            printf("职工系统使用说明:摁相应数字进入相应的子菜单,若想退出则摁N\n开始无数据,需要先进行录入.\n");
            system("pause");
            break;
        case '7':system("cls");//
            return;
            break;

        }
    }
}
int main()
{

    List();
    return 0;
}

这是一个简单的小例子,主要是给大家一些思路,我这里只是简单的写了保存输入的数据到文件中,你也可用写一个从文件中读取数据到控制台,并且可以通过链表进行修改.这就麻烦一点,但是思路很简单.有兴趣的同学可以do better.


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
author-avatar
溪流-ju_506
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有