热门标签 | 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.


推荐阅读
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
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社区 版权所有