以下为完整代码
插入与添加合并到了一起。
还有很多可以优化的地方。
#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;
}