【项目开发 | C语言项目 | C语言薪资管理系统】

news2024/11/18 9:32:59

本项目是一个简单的薪资管理系统,旨在为用户提供方便的员工薪资管理功能,如添加、查询、修改、删除员工薪资信息等。系统通过命令行交互界面与用户进行交互,并使用 txt 文件存储员工数据。


一,开发环境需求

  • 操作系统:windows, linux

  • 开发环境工具:qt, vscode, visual studio

  • 技术要求

    • C 语言编程
    • 数据结构(如:数组)
    • 文件 I/O 操作
    • 命令行交互界面设计

二,功能说明

  • 添加员工信息:允许用户添加新的员工及其薪资信息。

  • 查询员工薪资:根据员工 ID 查询其薪资信息。

  • 修改员工薪资:根据员工 ID 修改其薪资信息。

  • 删除员工信息:根据员工 ID 删除其薪资信息。

  • 显示所有员工信息:显示当前所有员工的薪资信息。


三,功能实现

  • 添加员工信息
void addemployee() {
    if (current_employee_count >= MAX_EMPLOYEES) {
        printf("员工数量已达上限!\n");
        return;
    }
    Employee new_employee;
    printf("请输入员工工号:");
    scanf("%d", &new_employee.id);
    printf("请输入员工姓名:");
    scanf("%s", new_employee.name);
    printf("请输入员工基本工资:");
    scanf("%f", &new_employee.base_salary);
    printf("请输入员工奖金:");
    scanf("%f", &new_employee.bonus);
    new_employee.total_salary = new_employee.base_salary + new_employee.bonus;

    employees[current_employee_count] = new_employee;
    current_employee_count++;

    printf("员工信息已成功录入!\n");
    savetofile();  // 保存数据到文件
}
  • 查询员工薪资
void searchsalary() {
    int search_id;
    char search_name[50];
    int search_option;
    printf("1. 通过工号查询\n2. 通过姓名查询\n请选择查询方式:");
    scanf("%d", &search_option);

    int found = 0;
    if (search_option == 1) {
        printf("请输入员工工号:");
        scanf("%d", &search_id);
        for (int i = 0; i < current_employee_count; i++) {
            if (employees[i].id == search_id) {
                printf("姓名:%s, 基本工资:%f, 奖金:%f, 总薪资:%f\n",
                    employees[i].name, employees[i].base_salary, employees[i].bonus, employees[i].total_salary);
                found = 1;
                break;
            }
        }
    } else if (search_option == 2) {
        printf("请输入员工姓名:");
        scanf("%s", search_name);
        for (int i = 0; i < current_employee_count; i++) {
            if (strcmp(employees[i].name, search_name) == 0) {
                printf("工号:%d, 基本工资:%f, 奖金:%f, 总薪资:%f\n",
                    employees[i].id, employees[i].base_salary, employees[i].bonus, employees[i].total_salary);
                found = 1;
                break;
            }
        }
    }

    if (!found) {
        printf("未找到相关员工信息。\n");
    }
}
  • 修改员工薪资
void modifysalary() {
    int modify_id;
    printf("请输入需要修改的员工工号:");
    scanf("%d", &modify_id);
    int found = 0;
    for (int i = 0; i < current_employee_count; i++) {
        if (employees[i].id == modify_id) {
            printf("当前工资:%f, 当前奖金:%f\n", employees[i].base_salary, employees[i].bonus);
            printf("请输入新的基本工资:");
            scanf("%f", &employees[i].base_salary);
            printf("请输入新的奖金:");
            scanf("%f", &employees[i].bonus);
            employees[i].total_salary = employees[i].base_salary + employees[i].bonus;
            printf("修改成功!\n");
            savetofile();  // 保存数据到文件
            found = 1;
            break;
        }
    }
    if (!found) {
        printf("未找到该工号的员工。\n");
    }
}
  • 删除员工信息
void deleteemployee() {
    int delete_id;
    printf("请输入需要删除的员工工号:");
    scanf("%d", &delete_id);
    int found = 0;
    for (int i = 0; i < current_employee_count; i++) {
        if (employees[i].id == delete_id) {
            for (int j = i; j < current_employee_count - 1; j++) {
                employees[j] = employees[j+1];
            }
            current_employee_count--;
            printf("删除成功!\n");
            savetofile();  // 保存数据到文件
            found = 1;
            break;
        }
    }
    if (!found) {
        printf("未找到该工号的员工。\n");
    }
}

  • 显示所有员工信息
void displayall() {
    printf("工号\t姓名\t基本工资\t奖金\t总薪资\n");
    printf("---------------------------------------------------\n");
    for (int i = 0; i < current_employee_count; i++) {
        printf("%d\t%s\t%f\t%f\t%f\n",
            employees[i].id, employees[i].name, employees[i].base_salary, employees[i].bonus, employees[i].total_salary);
    }
}

四,效果图

后续截图添加。


五,源码

代码已开源,可访问gitee下载。


六,总结

本项目为初学者提供了一个实际的 C 语言编程实践,涉及文件操作、数据结构设计和命令行交互界面的基本应用。希望此项目能对学习者有所帮助,并鼓励在此基础上进行更多的拓展和改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网站安全防护措施

网络安全的重要性在网站和app的发展下已经被带到了全新的高度&#xff0c;已然成为各大运维人员工作里不可或缺的环节&#xff0c;重视网络安全能给我们的网站带来更好的口碑&#xff0c;也能为企业生产创造更稳定的环境。下面我们一起来看看有哪些是我们运维人员能够做的。 1、…

图片批量处理:轻松实现图片批量处理:按需缩放图片像素

在日常生活和工作中&#xff0c;我们经常需要处理大量的图片。有时候&#xff0c;我们需要对图片进行一些调整&#xff0c;以满足特定的需求。其中&#xff0c;缩放图片像素是一项非常常见的操作。但是&#xff0c;一张一张地处理图片不仅费时&#xff0c;还容易出错。幸运的是…

前端笔试题总结,带答案和解析(二)

前端笔试题总结&#xff0c;带答案和解析&#xff08;二&#xff09; 上一期&#xff1a; 前端笔试题总结&#xff0c;带答案和解析&#xff08;1&#xff09; 11.以下代码的执行后&#xff0c;str 的值是&#xff1a; var str "Hellllo world"; str str.replac…

vertx学习总结5

这章我们讲回调&#xff0c;英文名&#xff1a;Beyond callbacks 一、章节覆盖&#xff1a; 回调函数及其限制&#xff0c;如网关/边缘服务示例所示 未来和承诺——链接异步操作的简单模型 响应式扩展——一个更强大的模型&#xff0c;特别适合组合异步事件流 Kotlin协程——…

408-2013

一、单项选择题&#xff08;2分/题&#xff09; 1.已知两个长度分别为 m 和 n 的升序链表&#xff0c;若将他们合并为一个长度为 mn 的降序链表&#xff0c;则最坏情况下的时间复杂度为______。 A.O(n) B.O(mn) C.O(min(m,n)) D.O(max(m,n)) 解答&#xf…

【算法|动态规划No.10】leetcode LCR 089. 打家劫舍 LCR 090. 打家劫舍 II

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Android---GC回收机制与分代回收策略

目录 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾回收算法 JVM 分代回收策略 1. 新生代 2. 老年代 GC Log 分析 引用 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾就是内存中已经没有用的对象&#xff0c;JVM 中的垃圾回收器(Garbage Collector)会自…

【Unity】两种方式实现弹跳平台/反弹玩家(玩家触发与物体自身触发事件实现蹦床的物理效果)

一、声明 只实现物理反弹的效果&#xff0c;不实现蹦床会有的视觉拉伸效果&#xff0c;请自行找相关代码 二、实现 经过我的实践&#xff0c;我发现要想实现一个平台反弹的效果&#xff0c;要么就选择给player添加一个物理材质&#xff08;平台加了没用&#xff09;&#xff0…

【网络】网络扫盲篇 ——用简单语言和图解带你入门网络

网络的一些名词和基础知识讲解 前言正式开始一些基础知识发展背景运营商和生产商 协议协议的分层TCP/IP五层(或四层)模型&#xff08;可以不看&#xff0c;对新手来说太痛苦了&#xff0c;我这里只是为了让屏幕前的你过一遍就好&#xff0c;里面很多概念新手是不太懂的&#xf…

【多线程】进程与线程 并发编程 面试题总结

进程和线程 进程是程序执行时的一个实例&#xff0c;即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看&#xff0c;进程的目的就是担当分配系统资源&#xff08;CPU时间、内存等&#xff09;的基本单位。线程是进程的一个执行流&#xff0c;是CPU调度和分派的基…

postgresql16-新特性

postgresql16-新特性 any_value数组抽样数组排序 any_value any_value 返回任意一个值 select e.department_id ,count(*), any_value(e.last_name) from cps.public.employees e group by e.department_id ;数组抽样 -- 从数组中随机抽取一个元素 array_sample(数组&#…

java的内存模型(概念)

在java中&#xff0c;设计之初就有了&#xff1a;主内存、线程工作内存&#xff0c;所以其实每一个线程执行时&#xff0c;都是将主线程copy一份到工作线程&#xff0c;执行修改后&#xff0c;再同步回去。 所以&#xff0c;就有四组内存操作方式&#xff1a; 1、读主内存&…

【python】数据加载与存储

文章目录 读取文本格式的数据逐块读取文本文件将数据写出到文本格式 读取文本格式的数据 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数&#xff1a; 【read_csv和read_table最为重要】 这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍。

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

Vue中如何进行分布式路由配置与管理

Vue中的分布式路由配置与管理 随着现代Web应用程序的复杂性不断增加&#xff0c;分布式路由配置和管理成为了一个重要的主题。Vue.js作为一种流行的前端框架&#xff0c;提供了多种方法来管理Vue应用程序的路由。本文将深入探讨在Vue中如何进行分布式路由配置与管理&#xff0…

【kubernetes】kubernetes中的Controller

1 什么是Controller&#xff1f; kubernetes采用了声明式API&#xff0c;与声明式API相对应的是命令式API&#xff1a; 声明式API&#xff1a;用户只需要告诉期望达到的结果&#xff0c;系统自动去完成用户的期望命令式API&#xff1a;用户需要关注过程&#xff0c;通过命令一…

EdgeView 4 for Mac:重新定义您的图像查看体验

您是否厌倦了那些功能繁杂、操作复杂的图像查看器&#xff1f;您是否渴望一款简单、快速且高效的工具&#xff0c;以便更轻松地浏览和管理您的图像库&#xff1f;如果答案是肯定的&#xff0c;那么EdgeView 4 for Mac将是您的理想之选&#xff01; EdgeView 4是一款专为Mac用户…

【C语言】结构体内存对齐

结构体内存对齐是很重要的一个考点&#xff0c;但不难掌握&#xff0c;接下来就来了解一下结构体内存对齐 目录 对齐规则&#xff1a;偏移量&#xff1a;例题&#xff1a;为什么存在内存对齐? 对齐规则&#xff1a; 首先来看一下对齐规则 第一个成员在与结构体变量偏移量为0…

交叉编译和GCC编译器

目录 交叉编译 hello.c文件 提问 GCC编译器 GCC编译过程 GCC常用选项 编译多个文件 预处理 编译 汇编 链接 交叉编译 hello.c文件 #include <stdio.h>int main(int argc, char argv) {if(argc > 2)printf("Hello, %s!\n", argv[1]);elseprintf…

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…