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


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
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社区 版权所有