基于C语言的工资系统:如何实现员工记录展示
嘿,我来帮你搞定这个展示所有员工记录的功能!看你给出的代码片段,已经有了employee结构体的定义,只差把display函数补全,再配合存储员工的数组来遍历输出就行。
首先先修正一个小拼写错误:你的display函数参数里写的struct employe少了最后一个字母e,应该是struct employee,不然编译器会报错哦。
接下来是核心实现思路:
- 我们需要一个数组来存储10名员工的信息,比如
struct employee staff[10]; display函数需要接收这个数组和员工总数(这里是10),然后通过循环遍历数组的每一个元素,把每个员工的字段逐一打印出来。
下面是完整的可运行代码,我帮你补全了录入、菜单和展示功能:
#include <stdio.h> #include <stdlib.h> #include <string.h> // 处理字符串时需要用到 struct employee { int empId, hrW, hrR; char empName[30], taxCode; }; // 展示所有员工记录的函数 void display(struct employee staff[], int count) { // 先打印表头,让输出更清晰 printf("\n=== 所有员工信息 ===\n"); printf("员工ID | 姓名 | 工作时长 | 时薪 | 税码\n"); printf("--------------------------------------------\n"); // 遍历数组,逐个打印员工信息 for (int i = 0; i < count; i++) { // 用格式化输出对齐字段,%-7d表示左对齐占7个字符宽度 printf("%-7d | %-10s | %-8d | %-4d | %c\n", staff[i].empId, staff[i].empName, staff[i].hrW, staff[i].hrR, staff[i].taxCode); } } // 录入10名员工信息的函数 void inputEmployees(struct employee staff[], int count) { for (int i = 0; i < count; i++) { printf("\n请录入第%d名员工信息:\n", i + 1); printf("员工ID:"); scanf("%d", &staff[i].empId); // 处理带空格的姓名(如果不需要可以直接用scanf("%s")) printf("员工姓名:"); getchar(); // 清除缓冲区残留的换行符 fgets(staff[i].empName, sizeof(staff[i].empName), stdin); // 去掉fgets自动读取的换行符 staff[i].empName[strcspn(staff[i].empName, "\n")] = '\0'; printf("工作时长(小时):"); scanf("%d", &staff[i].hrW); printf("时薪:"); scanf("%d", &staff[i].hrR); printf("税码(单个字符):"); scanf(" %c", &staff[i].taxCode); // 前面加空格跳过换行符 } } int main() { struct employee staff[10]; // 存储10名员工的数组 int choice; // 第一步:录入所有员工信息 inputEmployees(staff, 10); // 菜单循环,直到用户选择退出 do { printf("\n=== 工资系统菜单 ===\n"); printf("1. 展示所有员工记录\n"); printf("2. 其他操作(可后续补充,比如计算工资)\n"); printf("3. 退出系统\n"); printf("请输入你的选择:"); scanf("%d", &choice); switch(choice) { case 1: display(staff, 10); // 调用展示函数 break; case 2: printf("你可以在这里实现其他功能,比如计算每位员工的实发工资等\n"); break; case 3: printf("退出系统,再见!\n"); break; default: printf("无效的选择,请重新输入!\n"); } } while(choice != 3); return 0; }
几个关键细节说明:
display函数里用了格式化输出(%-7d这类),目的是让输出的表格更整齐,可读性更强。- 录入姓名时用了
fgets而不是单纯的scanf("%s"),这样可以支持带空格的员工姓名(比如"John Doe"),如果你的需求里姓名不需要空格,也可以换回scanf("%s")。 - 读取税码时,
scanf(" %c")前面的空格是为了跳过之前输入残留的换行符,避免读取到空字符。
你可以直接把这段代码复制到编译器里运行,测试录入和展示功能,后续还可以在菜单的选项2里补充其他需求(比如计算工资、修改员工信息等)。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

