数据结构实训——员工管理系统

本文介绍了员工管理系统的设计,包括逻辑设计、数据结构选择和主要功能模块。系统支持员工信息的查询、更新、插入、删除、排序,采用结构体数组实现,并通过快速排序对员工编号进行排序。在实际应用中,系统存在按职务和学历排序的局限性,以及删除操作的时间效率问题。
摘要由CSDN通过智能技术生成

1 课题描述

每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。

2 问题分析和任务定义

要求:

每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。

1) 排序:按不同关键字,对所有员工的信息进行排序。这里仅按照工号排序

2) 查询:按特定条件工号、姓名查找员工。

3) 更新:按编号对某个员工的某项信息进行修改。

4) 插入:加入新员工的信息。

5) 删除:按编号删除已离职的员工的信息。

3 逻辑设计

 

1)数据类型:

对员工的信息进行分析,因为要可以根据工号进行排序,因而将工号设置为整数型,而姓名、性别、出生年月、学历、职务、电话、住址这些内容设置为字符串类型。并且还要设置一个整数型遍历num来存储此时含有的记录数。

struct staff

{

    int id;///编号

    char name[20];///姓名

    char sex[20];///性别

    char age[20];///出生年月

    char clas[20];///学历

    char duty[20];///职务

    char tel[20];///电话

    char addr[20];///住址

} s[1000];

int num;

 

 2)抽象数据类型:

ADT Staff {

数据对象DD是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。

数据关系R:数据元素同属一个集合。

staffinput()

操作结果:输入员工信息

staffdisplay()

操作结果:浏览员工记录

staffsearch()

操作结果:查找员工记录

 staffdel()

操作结果:删除员工记录函数

staffadd()

操作结果:添加员工记录

staffchange()

操作结果:修改员工记录

staffsort()

操作结果:对员工排序

}ADT Staff

3)模块功能:

功能上主要有录入记录,查找记录,增加记录,删除记录,更改记录,对记录排序,显示所有记录这七大模块。其中查找记录和删除记录这一模块既可以根据工号查找,也可以根据姓名查找,灵活方便。而更改记录这一模块则能够修改该员工记录的所有信息。同时对记录排序这一模块需要使用排序算法来实现。

 

 

4 详细设计

 

员工信息结构体:

struct staff

{

    int id;///编号

    char name[20];///姓名

    char sex[20];///性别

    char age[20];///出生年月

    char clas[20];///学历

    char duty[20];///职务

    char tel[20];///电话

    char addr[20];///住址

} s[1000];

int num;

 

<1>输入员工信息函数:void staffinput()

输入多组员工记录,包括工号、姓名、性别、出生年月、学历、职务、电话、住址。

<2>浏览员工记录函数:void staffdisplay()

打印所有员工的记录,工号、姓名、性别、出生年月、学历、职务、电话、住址

<3>查找员工函数:void staffsearch()

既可以按照员工的工号也可以按照员工的姓名来查找,然后打印该员工信息。

<4>删除员工记录函数:void staffdel()

既可以按照员工的工号也可以按照员工的姓名来删除该员工记录。删除该条记录后num-1,同时要将该记录后面的记录向前挪一位。

<5>添加员工记录函数:void staffadd()

插入一条新员工的记录,这条记录会添加在顺序表的表尾,同时num+1

<6>修改员工记录函数:void staffchange()

先按照员工的姓名或者工号查找到该员工的记录,然后可以对该员工的所有信息都能够修改。

<7>对员工排序函数:void staffsort()

使用快速排序,对员工的编号进行排序。

 

5 程序编码

 

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct staff
{
    int id;///编号
    char name[20];///姓名
    char sex[20];///性别
    char age[20];///出生年月
    char clas[20];///学历
    char duty[20];///职务
    char tel[20];///电话
    char addr[20];///住址
} s[1000];
int num;
void staffinput()///输入员工信息
{
    int i,n;
    printf("请输入需要创建信息的职工人数n:\n");
    scanf("%d",&n);
    num=n;
    for(i=0; i<n; i++)
    {
        printf("请输入员工编号: ");
        scanf("%d",&s[i].id);
        printf("请输入姓名:  ");
        scanf(" %s",s[i].name);
        printf("请输入性别:  ");
        scanf(" %s",&s[i].sex);
        printf("请输入出生年月:  ");
        scanf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值