基于c语言链表的员工管理系统案例(包含对员工数据的,插入、删除、查询、修改。)

以下为完整代码

插入与添加合并到了一起。

还有很多可以优化的地方。

#pragma warning(disable : 4996)
#include<stdio.h>
#include <iostream>
typedef  struct employee {
	long int identity;
	char name[45];
	char sex[45];
	char dateOfBirth[45];
	char degree[45];
	char office[45];
	char telephoneNumber[12];
	char address[45];
	struct employee* nextNumber;
}employee;
void inquire(employee*temp);
employee* initemployee();
employee* addTo(employee*employee);
employee*Delete(employee* number);
employee* xiugai(employee* number, long int bianHao);
void CaXun(employee* number);
int caXun(employee* number,long int bianHao);
int initinterface();
int panDuan(employee* number,long int bianHao);
int main()
{
	char huiCheJian = ' ';
	employee* number = (employee*)malloc(sizeof(employee));
	number =initemployee();
 	while (true) {
		int digit = initinterface();
		if (digit == '5') {
			break;
		}
		switch (digit)
		{
		case '1': {
			printf("进行查询操作");
		    CaXun(number);
			break;
		}
		case '2': {
			number = addTo(number);
			printf("插入成功\n");
			inquire(number);
			break;
		}
		case '3': {
			printf("将进行删除操作");
			number = Delete(number);
			inquire(number);
			break;
			  }
		case'4': {
			printf("请输入要修改员工编号");
			long int xiuGaiBianHao;
			scanf("%d", &xiuGaiBianHao);
			huiCheJian = getchar();
			number = xiugai(number, xiuGaiBianHao);
			inquire(number);
			break;
		}
		default: {
			printf("输入错误,请重新输入\n");
		}
		}
	}
}
employee* initemployee() {
	employee* number = (employee*)malloc(sizeof(employee));
	employee* head = number;
	if (number == NULL) {
		printf("内存分配失败!");
		//		exit(0);
	}
	number->identity = 0;
	number->name[0] = ' ';
	number->sex[0] = ' ';
	number->dateOfBirth[0] = ' ';
	number->degree[0] = ' ';
	number->office[0] = ' ';
	number->telephoneNumber[0] = ' ';
	number->address[0] = ' ';
	number->nextNumber = NULL;
	return number;
}
int initinterface() {
	printf("请输入将要执行的操作编号\n");
	printf("1.查询\t2.插入\t3.删除\t4.修改\t5.退出\n");
	char digit = ' ';
	scanf_s("%c", &digit);
	char a = getchar();
	return digit;
}
employee*addTo(employee*temp) {
	employee* top = temp;
	while (temp->nextNumber != NULL) {
		temp = temp->nextNumber;
	}
	employee* end=temp;
	printf("正在进行添加操作\n");
	printf("请输入要输入员工数量\n");
	int a;
	int b;
	scanf("%d",&a);
	char c = getchar();
	for (int i = 0; i < a; i++) {
		employee* newNumber = (employee*)malloc(sizeof(employee));
		printf("这是第%d个员工\n", i+1);
		printf("请输入员工编号\n");
		scanf("%d",&b);
		c = getchar();
		newNumber->identity = b;
		printf("请输入员工姓名\n");
		scanf_s("%s", newNumber->name, 45);
		char o = getchar();
		printf("请输入员工性别\n");
		scanf_s("%s", &newNumber->sex,3);
		c = getchar();
		printf("请输入员工出生年月\n");
		scanf_s("%s", &newNumber->dateOfBirth, 45);
		 c = getchar();
		printf("请输入员工学历\n");
		scanf_s("%s", &newNumber->degree, 45);
		char d = getchar();
		printf("请输入员工职位\n");
		scanf_s("%s", &newNumber->office, 45);
		char e = getchar();
		printf("请输入员工电话号码\n");
		scanf_s("%s", &newNumber->telephoneNumber, 12);
		char f = getchar();
		printf("请输入员工家庭地址\n");
		scanf_s("%s", &newNumber->address, 45);
		char g = getchar();
		newNumber->nextNumber = NULL;
		employee* PD = end;
		end->nextNumber = newNumber;
		end = newNumber;
		int panduan = panDuan(top, newNumber->identity);
		if (panduan == -1) {
			printf("编号有重复,请从新输入\n");
			end = PD;
			i--;
			free(newNumber);
		}
	}
	return top;
}
//遍历查询
void inquire(employee* temp) {
	int count = 0;
	if (temp->nextNumber == NULL) {
		printf("暂无可查询,请添加后在输入\n");
		return;
	}
	employee* bianli = temp->nextNumber;
	while (bianli!=NULL) {
		count++;
		printf("编号:%d\t名字:%s\t性别:%s\t生日:%s\t学历:%s\t职务:%s\t电话号码:%s\t家庭住址:%s\n", bianli->identity, bianli->name, bianli->sex, bianli->dateOfBirth, bianli->degree, bianli->office, bianli->telephoneNumber, bianli->address);
		bianli = bianli->nextNumber;
	}
	printf("%d\n", count);
}
//删除
employee* Delete(employee* number) {
	printf("请输入要删除员工编号\n");
    long int bianHao = 0;
	scanf("%d", &bianHao);
	char a = getchar();
	int jieGuo = caXun(number, bianHao);
	if (jieGuo == -1) {
		return number;
	}
	employee* muBiao = number;
	for (int i = 1; i < jieGuo; i++) {
		muBiao = muBiao->nextNumber;
	}
	employee* xiaYiGe = muBiao->nextNumber;
	muBiao->nextNumber = xiaYiGe->nextNumber;
	free(xiaYiGe);
	printf("删除成功\n");
	return number;
}
int caXun(employee*number, long int bianHao) {
	int count = 0;
	number = number->nextNumber;
	while (number!= NULL) {
		count++;
		if (number->identity == bianHao) {
			printf("%d\n", count);
			return count;
		}
		number = number->nextNumber;
	}
	printf("没有该编号\n");
	return -1;
}
//修改
employee* xiugai(employee* number, long int bianHao) {
	int jieGuo = caXun(number, bianHao);
	if (jieGuo == -1) {
		return number;
	}
	employee* muBiao = number;
	for (int i = 0; i < jieGuo; i++) {
		muBiao = muBiao->nextNumber;
	}
	printf("请输入将改变员工姓名\n");
	scanf_s("%s", muBiao->name, 45);
	char a = getchar();
	printf("请输入将改变员工性别\n");
	scanf_s("%s", &muBiao->sex,3);
	char o = getchar();
	printf("请输入将改变员工出生年月\n");
	scanf_s("%s", &muBiao->dateOfBirth, 45);
	char c = getchar();
	printf("请输入将改变员工学历\n");
	scanf_s("%s", &muBiao->degree, 45);
	char d = getchar();
	printf("请输入将改变员工职位\n");
	scanf_s("%s", &muBiao->office, 45);
	char e = getchar();
	printf("请输入将改变员工电话号码\n");
	scanf_s("%s", &muBiao->telephoneNumber, 12);
	char f = getchar();
	printf("请输入将改变员工家庭地址\n");
	scanf_s("%s", &muBiao->address, 45);
	char g = getchar();
	return number;
}
//查询
void saiXuan(employee* number, long int bianHao) {
	int jieGuo=caXun(number, bianHao);
	if (jieGuo == -1) {
		return;
	}
	employee* muBiao = number;
	for (int i = 0; i < jieGuo; i++) {
		muBiao = muBiao->nextNumber;
	}
	printf("编号:%d\t名字:%s\t性别:%s\t生日:%s\t学历:%s\t职务:%s\t电话号码:%s\t家庭住址:%s\n", muBiao->identity, muBiao->name, muBiao->sex, muBiao->dateOfBirth, muBiao->degree, muBiao->office, muBiao->telephoneNumber, muBiao->address);
}
//查询
void CaXun(employee*number) {
	printf("请输入查询员工编号\n");
	long int bianHao = 0;
	scanf("%d", &bianHao);
	char huiCheJian = getchar();
	int jieGuo=caXun(number, bianHao);
	if (jieGuo == -1) {
		printf("没有此员工\n");
		return;
	}
	employee* muBiao = number;
	for (int i = 0; i < jieGuo; i++) {
		muBiao = muBiao->nextNumber;
	}
	printf("员工信息\n");
	printf("编号:%d\t名字:%s\t性别:%s\t生日:%s\t学历:%s\t职务:%s\t电话号码:%s\t家庭住址:%s\n", muBiao->identity, muBiao->name, muBiao->sex, muBiao->dateOfBirth, muBiao->degree, muBiao->office, muBiao->telephoneNumber, muBiao->address);
	return;
}
int panDuan(employee* number, long int bianHao) {
	number = number->nextNumber;
	while (number->nextNumber != NULL) {
		if (number->identity == bianHao) {
			return -1;
		}
		number = number->nextNumber;
	}
	return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值