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


推荐阅读
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
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社区 版权所有