示例代码:
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[15];
char code[20];
char sex[5];
int age;
}worker;
/* 显示一个员工信息 */
void singleWork(worker *p, int id)
{
printf("-------------------------\n");
printf("| 员工%2d : |\n", id+1);
printf("-------------------------\n");
printf("| 姓名: %-15s |\n", (p+id)->name);
printf("| 工号: %-15s |\n", (p+id)->code);
printf("| 性别: %-15s |\n", (p+id)->sex);
printf("| 年龄: %-15d |\n", ((p+id)->age));
printf("-------------------------\n");
}
// 查找同工号数据
int search_code(worker *p, int amount, char des[])
{
int i;
for(i = 0; i < amount; i++)
{
if( strcmp((p + i)->code, des) == 0 )
return i;
}
return -1;
}
// 查找同姓名数据
int search_name(worker *p, int amount, char des[])
{
int i;
for(i = 0; i < amount; i++)
{
if( strcmp((p + i)->name, des) == 0 )
return i;
}
return -1;
}
// 输入数据
void readin(worker *p, int *amount)
{
worker temp;
int id,ct,flag = 1;
printf("--请输入员工信息: --\n");
printf("姓名: ");
scanf("%s", temp.name);
printf("工号: ");
scanf("%s", temp.code);
printf("性别: ");
scanf("%s", temp.sex);
printf("年龄: ");
scanf("%d", &(temp.age));
/* 处理同工号情况 */
id = search_code(p, *amount, temp.code); //查找是否有相同工号的数据
if(id==-1) // 没有找到相同工号就直接添加
{
*(p+(*amount)) = temp;
}
else // 找到相同工号就询问是否覆盖
{
printf("系统数据中已经有工号为[%s]的员工!\n", temp.code);
singleWork(p, id);
printf("请选择一个操作: 1.更新覆盖 2.放弃操作\n");
scanf("%d", &ct);
switch(ct)
{
case 1:
*(p+id) = temp;
printf("覆盖成功!\n");
return; // 一旦覆盖了后面的都不处理,避免覆盖了amount仍然 +1
default:
printf("操作已放弃\n");
}
}
/* 处理同名情况 */
id = search_name(p, *amount, temp.name); //查找是否有相同姓名的数据
if(id==-1) // 没有找到相同姓名就直接添加
{
*(p+(*amount)) = temp;
flag = 1;
printf("添加成功!");
}
else // 找到相同姓名就询问是否继续添加
{
printf("系统数据中已存在姓名为[%s]的员工!\n", temp.name);
singleWork(p, id);
printf("请选择一个操作: 1.继续添加为新员工 2.放弃操作\n");
scanf("%d", &ct);
switch(ct)
{
case 1:
*(p+(*amount)) = temp;
flag = 1;
printf("继续添加成功!\n");
break;
default:
flag = 0;
printf("操作已放弃\n");
}
}
if(flag)
{
(*amount)++;
}
}
// 显示数据
void display(worker *p, int amount)
{
int i;
if(amount==0)
printf("员工数据为空!\n");
else
for(i = 0; i < amount; i++)
{
singleWork(p, i);
}
}
// 删除数据
void deletewk(worker *p, int *amount)
{
int ct,i,j,flag,id,ct1,flag1;
char des[21];
while(1)
{
system("cls");
display(p, *amount);
printf("请问您要以何种方式检索删除员工:\n");
printf("1.姓名 ");
printf("2.工号 ");
printf("3.Id ");
printf("4.返回\n");
printf("请选择操作(Input 1-4):");
scanf("%d", &ct);
switch(ct)
{
case 1:
printf("请输入姓名: ");
scanf("%s", des);
for(i = 0,flag = 1; i < *amount; i++)
{
if(strcmp((p+i)->name, des)==0)
{
flag1 = 1;
printf("查找到员工:\n");
singleWork(p,i);
printf("确认删除 ? 1.确认 2.放弃 3.查找下一位姓名为[%s]的员工\n",des);
printf("请输入一个操作: ");
scanf("%d", &ct1);
switch(ct1)
{
case 1:
for(i;i < *amount-1; i++) // 找到就由前往后删除
{
*(p+i) = *(p+i+1);
}
(*amount)--;
printf("员工已删除!\n");
system("pause");
break;
case 3:
flag1 = 0; // 让下面终止for循环的break不执行
break;
default:
printf("操作已放弃!\n");
system("pause");
break;
}
flag = 0;
if(flag1) break;
}
}
if(flag || i==(*amount))
{
printf("没有找到姓名为[%s]的员工数据!\n", des);
system("pause");
}
break;
case 2:
printf("请输入工号: ");
scanf("%s", des);
for(i = 0,flag = 1; i < *amount; i++)
{
if(strcmp((p+i)->code, des)==0)
{
printf("查找到员工:\n");
singleWork(p,i);
printf("确认删除 ? 1.确认 2.放弃\n");
printf("请输入一个操作: ");
scanf("%d", &ct1);
if(ct1==1)
{
for(i;i < *amount-1; i++) // 找到就由前往后删除
{
*(p+i) = *(p+i+1);
}
(*amount)--;
printf("员工已删除!\n");
system("pause");
}
else
{
printf("操作已放弃!\n");
system("pause");
}
flag = 0;
break;
}
}
if(flag)
{
printf("没有找到工号为[%s]的员工数据!\n", des);
system("pause");
}
break;
case 3:
printf("请输入ID: ");
scanf("%d", &id);
for(i = 0,flag = 1; i < *amount; i++)
{
if(i==id-1)
{
printf("查找到员工:\n");
singleWork(p,i);
printf("确认删除 ? 1.确认 2.放弃\n");
printf("请输入一个操作: ");
scanf("%d", &ct1);
if(ct1==1)
{
for(i;i < *amount-1; i++) // 找到就由前往后删除
{
*(p+i) = *(p+i+1);
}
(*amount)--;
printf("员工已删除!\n");
system("pause");
}
else
{
printf("操作已放弃\n");
system("pause");
}
flag = 0; //如果没有下面就显示
break;
}
}
if(flag)
{
printf("没有找到id为[%d]的员工数据!\n", id);
system("pause");
}
break;
case 4:
return;
}
}
}
int main(int argc, char *argv[])
{
int ct;
worker workers[100];
worker *p_workers = workers;
int amount = 0;// 员工数量
while(1)
{
system("cls");
printf("-----------------\n");
printf("- 1.输入数据 -\n");
printf("- 2.显示数据 -\n");
printf("- 3.删除数据 -\n");
printf("- 4.goodbye! -\n");
printf("-----------------\n");
printf("Input 1-4:");
scanf("%d", &ct);
switch(ct)
{
case 1 :
readin(p_workers, &amount);
//system("pause");
break;
case 2:
display(p_workers, amount);
system("pause");
break;
case 3:
deletewk(p_workers, &amount);
break;
case 4:
printf("Goodbye!\n");
return 0;
break;
}
}
return 0;
}