要求使用c语言和链表。1、问题描述 将企业员工按工种的不同分为经理、销售人员、技术人员、销售经理和技术总监五类人员。该案例具备五类人员信息的添加、删除、修改、查询、浏览、保存和计算工资等功能,很好的达到了对企业员工信息和工资管理的目的。 2、功能要求 管理员用户名:admin 管理员密码:123456(输入时以密文形式,如:******) 管理员: (1)添加普通用户用户名和密码信息。 (2)重置普通用户初始密码。(如:1) (3)工资录入。可将所有工人工资信息录入 (4)添加。可将新工人的工资添加 (5)查询功能。可以按员工的姓名、工号进行查询;查看所有员工信息。 (6)删除功能。可以删除已有的工资信息 (7)修改功能。可以修改指定工号的工资。 (8)统计。可以按照部门或年份统计工资。 普通用户: (1)修改个人账户密码。 (2)查询个人工资信息。
时间: 2023-11-22 14:54:54 浏览: 70
基于c语言链表的员工管理系统案例(包含对员工数据的,插入、删除、查询、修改 )的实训报告
很好,这是一个相对复杂的项目,需要使用C语言和链表来实现。我可以给你提供一些思路和代码示例,但是具体实现需要你自己完成。首先,你需要设计和定义员工信息的结构体,包括以下字段:
- 工号
- 姓名
- 工种(经理、销售人员、技术人员、销售经理、技术总监)
- 工资
然后,你需要定义一个链表结构体,用于存储所有员工信息。链表结构体应该包含以下字段:
- 头节点指针
- 尾节点指针
- 链表长度
接下来,你需要实现各种功能函数,包括:
- 添加普通用户用户名和密码信息:该函数需要将新用户的用户名和密码添加到一个单独的文件中,以备后续登录时验证使用。
- 重置普通用户初始密码:该函数需要将指定用户的密码重置为初始密码,初始密码可以在程序中定义。
- 工资录入:该函数需要将所有工人的工资信息录入到链表中。
- 添加:该函数需要将新工人的工资信息添加到链表中。
- 查询功能:该函数需要实现按员工的姓名、工号进行查询,以及查看所有员工信息。
- 删除功能:该函数需要实现删除已有的工资信息。
- 修改功能:该函数需要实现修改指定工号的工资。
- 统计:该函数需要实现按照部门或年份统计工资。
最后,你需要实现一个用户界面,用于与用户进行交互。用户界面应该包含登录界面和主界面。登录界面需要验证用户的用户名和密码,并根据用户角色(管理员或普通用户)显示不同的功能选项。主界面应该提供所有功能选项,并提示用户输入相应的选项号码。
这是一个大体的思路,具体实现涉及到很多细节,需要你认真思考和实践。以下是一些代码示例,供你参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 20
#define MAX_WORKERS 100
// 定义员工信息的结构体
typedef struct worker {
int id;
char name[MAX_NAME_LENGTH];
char job[20];
double salary;
struct worker *next;
} Worker;
// 定义链表结构体
typedef struct linked_list {
Worker *head;
Worker *tail;
int length;
} LinkedList;
// 初始化链表
void init_linked_list(LinkedList *list) {
list->head = NULL;
list->tail = NULL;
list->length = 0;
}
// 添加新员工到链表中
void add_worker_to_list(LinkedList *list, Worker *worker) {
if (list->head == NULL) {
list->head = worker;
list->tail = worker;
} else {
list->tail->next = worker;
list->tail = worker;
}
list->length++;
}
// 从链表中删除指定员工
void remove_worker_from_list(LinkedList *list, int id) {
Worker *prev = NULL;
Worker *curr = list->head;
while (curr != NULL) {
if (curr->id == id) {
if (prev == NULL) { // 删除头节点
list->head = curr->next;
} else {
prev->next = curr->next;
}
if (list->tail == curr) { // 删除尾节点
list->tail = prev;
}
free(curr);
list->length--;
break;
}
prev = curr;
curr = curr->next;
}
}
// 修改指定员工的工资
void update_worker_salary(LinkedList *list, int id, double salary) {
Worker *curr = list->head;
while (curr != NULL) {
if (curr->id == id) {
curr->salary = salary;
break;
}
curr = curr->next;
}
}
// 按工号查询员工信息
Worker *get_worker_by_id(LinkedList *list, int id) {
Worker *curr = list->head;
while (curr != NULL) {
if (curr->id == id) {
return curr;
}
curr = curr->next;
}
return NULL;
}
// 按姓名查询员工信息
Worker *get_worker_by_name(LinkedList *list, char *name) {
Worker *curr = list->head;
while (curr != NULL) {
if (strcmp(curr->name, name) == 0) {
return curr;
}
curr = curr->next;
}
return NULL;
}
// 计算某一种工种的总工资
double get_total_salary_by_job(LinkedList *list, char *job) {
double total = 0;
Worker *curr = list->head;
while (curr != NULL) {
if (strcmp(curr->job, job) == 0) {
total += curr->salary;
}
curr = curr->next;
}
return total;
}
// 计算某一年的总工资
double get_total_salary_by_year(LinkedList *list, int year) {
double total = 0;
Worker *curr = list->head;
while (curr != NULL) {
// 假设工资是按月计算的,且已经录入到系统中
// 这里简单地将月份作为年份来处理
int month = curr->id % 12 + 1;
if (month / 12 + 2000 == year) {
total += curr->salary;
}
curr = curr->next;
}
return total;
}
// 保存员工信息到文件中
void save_workers_to_file(LinkedList *list, char *filename) {
FILE *fp = fopen(filename, "w");
Worker *curr = list->head;
while (curr != NULL) {
fprintf(fp, "%d,%s,%s,%.2f\n", curr->id, curr->name, curr->job, curr->salary);
curr = curr->next;
}
fclose(fp);
}
// 从文件中加载员工信息
void load_workers_from_file(LinkedList *list, char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
return;
}
char line[100];
while (fgets(line, sizeof(line), fp) != NULL) {
Worker *worker = (Worker *) malloc(sizeof(Worker));
sscanf(line, "%d,%[^,],%[^,],%lf", &worker->id, worker->name, worker->job, &worker->salary);
worker->next = NULL;
add_worker_to_list(list, worker);
}
fclose(fp);
}
int main() {
LinkedList list;
init_linked_list(&list);
load_workers_from_file(&list, "workers.txt");
// TODO: 实现其他功能函数和用户界面
save_workers_to_file(&list, "workers.txt");
return 0;
}
```
阅读全文