标题:建立一个worker的职工数据结构,结构含有姓名、序号、性别和年龄信息。
只看楼主
古博文
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2009-9-30
结帖率:0
 问题点数:0 回复次数:3 
建立一个worker的职工数据结构,结构含有姓名、序号、性别和年龄信息。
题目要求:(在程序设计中请尽量使用结构体和结构体指针)

1建立一个worker的职工数据结构,结构含有姓名、序号、性别和年龄信息。
2建立一个结构数组,用于存放10个职工的信息。
3创建一个函数readin,可以采用问答方式输入10个职工的信息(姓名、序号、性别和年龄)。
4创建一个函数display,采用结构指针作为参数,用于输出结构数组的内容。
5创建一个函数deletewk,可以删除结构数组中指定的职工的数据。如果数组中没有这个职工的姓名,则提示没有该职工的信息。
6上述的操作使用一个简单的菜单实现,菜单如下。


1输入数据              //使用readin函数实现,依次输入“ 姓名、序号、性别和年龄”信息
2显示全部数据         //使用display函数实现,显示全部职工的信息。要求使用结构指针的方式输出。
3删除数据记录         //使用deletewk函数实现,对输入的职工姓名检索,如果相同,则删除该职工信息,如果没有,  则提示无该职工信息。
4GoodBye!         //退出
Input 1-4:
 

搜索更多相关主题的帖子: 职工 性别 序号 数据结构 worker 
2009-10-14 09:31
古博文
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2009-9-30
得分:0 
示例代码:
#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;
}
2009-10-14 09:32
古博文
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2009-9-30
得分:0 
#include<stdio.h>
#include<string.h>
 
 
typedef struct
{
    char name[15];
    char code[20];
    chae sex[5];
    int age;
}worker;
 
/*定义一个结构体*/
 
 
/*显示一个员工的信息*/
void singleWork(worker *p,int id)
{
    printf("---------------\n");
    printf("| 员工%2d : |\n",id+1);
    printf("| 姓名:  %-15s |\n ",(p+id)->name);
    printf("| 工号:  %-15s |\n ",(p+id)->code);
    printf("| 性别:  %-15s |\n ",(p+id)->sex);
    printf("| 年龄:  %-15s |\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;
}
2009-10-14 09:32
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
得分:0 
what do you want to say?

我可好玩啦...不信你玩玩^_^
2009-10-14 12:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-288456-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.188635 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved