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 {
数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。
数据关系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(