C语言链表实现工资管理系统的完整攻略如下:
系统功能介绍
该系统主要实现以下功能:
-
添加员工信息
-
删除员工信息
-
修改员工信息
-
查询员工信息
-
显示所有员工信息
-
退出系统
系统设计
员工信息结构体
首先我们需要定义一个员工信息结构体,其中包括员工的姓名、工号、部门、职位和工资等信息。代码如下:
struct Employee {
char name[20]; //员工姓名
int number; //员工工号
char department[20]; //员工部门
char position[10]; //员工职位
float salary; //员工工资
struct Employee *next; //指向下一位员工的指针
};
添加员工信息
添加员工信息是一个比较简单的过程,具体实现如下:
void addEmployee(struct Employee **head) {
struct Employee *new_employee = (struct Employee*)malloc(sizeof(struct Employee)); //创建新员工结点
printf("请输入员工姓名:");
scanf("%s", new_employee->name);
printf("请输入员工工号:");
scanf("%d", &new_employee->number);
printf("请输入员工部门:");
scanf("%s", new_employee->department);
printf("请输入员工职位:");
scanf("%s", new_employee->position);
printf("请输入员工工资:");
scanf("%f", &new_employee->salary);
new_employee->next = NULL; //新员工结点指针指向空
if (*head == NULL) {
*head = new_employee; //链表为空时,将头结点指针指向新员工结点
} else { //链表不为空时,遍历到尾部,将新员工结点添加到链表中
struct Employee *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_employee;
}
printf("员工添加成功!\n");
}
删除员工信息
删除员工信息分为两种情况,一种是删除头结点,一种是删除非头结点。这里以删除非头结点为例,具体实现如下:
void deleteEmployee(struct Employee **head, int number) {
if (*head == NULL) {
printf("员工链表为空!\n");
return;
}
struct Employee *p = *head;
//要删除结点为头结点时,直接将头结点指针指向第二个结点即可
if (p->number == number) {
*head = p->next;
free(p);
printf("员工删除成功!\n");
return;
}
//遍历链表,找到要删除的结点
while (p->next != NULL && p->next->number != number) {
p = p->next;
}
if (p->next == NULL) {
printf("未找到要删除的员工!\n");
return;
}
//将要删除结点的前一个结点的指针指向要删除结点的后一个结点
struct Employee *temp = p->next;
p->next = temp->next;
free(temp);
printf("员工删除成功!\n");
}
修改员工信息
修改员工信息实现起来比较简单,和添加员工信息类似,只需要遍历链表找到要修改的员工结点,然后进行修改即可。具体实现如下:
void modifyEmployee(struct Employee *head, int number) {
if (head == NULL) {
printf("员工链表为空!\n");
return;
}
struct Employee *p = head;
while (p != NULL && p->number != number) {
p = p->next;
}
if (p == NULL) {
printf("未找到要修改的员工!\n");
return;
}
printf("请输入员工姓名:");
scanf("%s", p->name);
printf("请输入员工工号:");
scanf("%d", &p->number);
printf("请输入员工部门:");
scanf("%s", p->department);
printf("请输入员工职位:");
scanf("%s", p->position);
printf("请输入员工工资:");
scanf("%f", &p->salary);
printf("员工信息修改成功!\n");
}
查询员工信息
查询员工信息也很简单,遍历链表找到要查询的员工结点即可。具体实现如下:
void queryEmployee(struct Employee *head, int number) {
if (head == NULL) {
printf("员工链表为空!\n");
return;
}
struct Employee *p = head;
while (p != NULL && p->number != number) {
p = p->next;
}
if (p == NULL) {
printf("未找到要查询的员工!\n");
return;
}
printf("员工姓名:%s\n", p->name);
printf("员工工号:%d\n", p->number);
printf("员工部门:%s\n", p->department);
printf("员工职位:%s\n", p->position);
printf("员工工资:%f\n", p->salary);
}
显示所有员工信息
此功能是将链表中所有员工信息遍历输出,具体实现如下:
void showAllEmployee(struct Employee *head) {
if (head == NULL) {
printf("员工链表为空!\n");
return;
}
struct Employee *p = head;
while (p != NULL) {
printf("员工姓名:%s\n", p->name);
printf("员工工号:%d\n", p->number);
printf("员工部门:%s\n", p->department);
printf("员工职位:%s\n", p->position);
printf("员工工资:%f\n", p->salary);
printf("=======================\n");
p = p->next;
}
}
示例说明
示例1:添加操作
一般情况下执行完添加操作,会输出"员工添加成功!",以下为一条添加操作的输出示例:
请输入员工姓名:张三
请输入员工工号:1001
请输入员工部门:开发部
请输入员工职位:程序员
请输入员工工资:6000
员工添加成功!
示例2:删除操作
删除操作会输出一条"员工删除成功!"或"未找到要删除的员工!"的语句,以下为一条删除操作的输出示例:
请输入要删除的员工工号:1001
员工删除成功!
至此,C语言链表实现工资管理系统的完整攻略介绍完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言链表实现工资管理系统 - Python技术站