1.问题描述
对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2.要求
职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
3.实现提示
职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
4.选做内容
将职工对象按散列法存储,并设计解决冲突的方法。在此基础上实现增、删、查询、修改、排序等操作。
1.开头采用cout在终端输出“HELLO”的图像,以及三个“灯塔”,利用getchar()和system(“cls”)来实现“按任意键进入”的效果。
2.系统主体采用switch … case,来实现输入不同数字进入不同子系统的效果。子系统共五块。
3.职工信息采用静态顺序表存储,运用了冒泡排序,顺序查找等算法。
4.各部分功能的实现基本上由各函数来实现,使main()函数看上去较为简洁。
5.主要函数有:
void print_person(int); //输出员工信息
void add_person(); //添加员工
void del_person(int); //删除员工
Void sort_person(); //排序
void copy_person(int, int); //转移员工信息
void query_name(char*); //以名字查询
void query_address(char*); //以住址查询
void query_tle(char*); //以电话查询
void query_qua(char*); //以学历查询
void query_duty(char*); //以职务查询
void change_person_info(char*); //改变职工信息
void screen(); //输出系统界面
void hello_screen(); //输出等待界面
#include
#include
#include
#include
using namespace std;
const int inf = 0x3f3f3f3f;
const int MAXN = 1000 + 1;
int n = 0;//当前职工总数
int m = inf; //你想进行的操作
void print_person(int); //输出员工信息
void add_person(); //添加员工
void del_person(int); //删除员工
void sort_person(); //排序
void copy_person(int, int); //转移员工信息
void query_name(char*); //以名字查询
void query_address(char*); //以住址查询
void query_tle(char*); //以电话查询
void query_qua(char*); //以学历查询
void query_duty(char*); //以职务查询
void change_person_info(char*); //改变职工信息
void screen(); //输出系统界面
void hello_screen(); //输出等待界面
typedef struct node {
char name[10]; //xx
char sex[6]; //M, F;
char bir[16]; //xxxx/xx/xx
char wk_date[16]; //xxxx/xx/xx
char qua[10]; //xxxxxx
char duty[10]; //xxxxx
char add[50]; //xxxxxx
char tle[20]; //xxxxxxxxxxx
}info_for_person;
info_for_person person[MAXN];
void print_person(int k) {
cout << "---------------------------------------------------------" << endl;
cout << "姓名: " << person[k].name << endl;
cout << "性别: " << person[k].sex << endl;
cout << "出生年月:" << person[k].bir << endl;
cout << "工作年月:" << person[k].wk_date << endl;
cout << "学历: " << person[k].qua << endl;
cout << "职务: " << person[k].duty << endl;
cout << "住址: " << person[k].add << endl;
cout << "电话: " << person[k].tle << endl;
cout << "---------------------------------------------------------" << endl;
}
void copy_person(int a, int b) {//前者存储
strcpy_s(person[a].name, person[b].name);
strcpy_s(person[a].sex , person[b].sex);
strcpy_s(person[a].bir, person[b].bir);
strcpy_s(person[a].wk_date, person[b].wk_date);
strcpy_s(person[a].qua, person[b].qua);
strcpy_s(person[a].duty, person[b].duty);
strcpy_s(person[a].add, person[b].add);
strcpy_s(person[a].tle, person[b].tle);
}
void add_person() {
cout << "---------------------------------------------------------" << endl;
cout << "请输入你想加入的人数:";
int num;
cin >> num;
cout << "请按照:姓名、性别、出生年月、工作年月、学历、职务、住址、电话的顺序输入信息:" << endl;
while (num--) {
cin >> person[n].name; fflush(stdin);
cin >> person[n].sex; fflush(stdin);
cin >> person[n].bir; fflush(stdin);
cin >> person[n].wk_date; fflush(stdin);
cin >> person[n].qua; fflush(stdin);
cin >> person[n].duty; fflush(stdin);
cin >> person[n].add; fflush(stdin);
cin >> person[n].tle; fflush(stdin);
n++;
}
cout << "添加成功!" << endl;
cout << "---------------------------------------------------------" << endl;
}
void del_person(char NAME[]) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].name, NAME) == 0) {//找到了就做标记k
k = i;
break;
}
}//k = inf意味着没找到这个名字
if (k != inf) {
for (int i = k; i < n - 1; i++)
copy_person(i, i + 1);//前移
cout << "删除成功!" << endl;
n--;
}
else cout << "no such person!" << endl;
cout << "---------------------------------------------------------" << endl;
}
void query_name(char* NAME){
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].name, NAME) == 0) {//找到了就做标记k
k = i;
print_person(i);
}
}//k = inf意味着没找到这个名字
if (k == inf) cout << "no such person!" << endl;
getchar();
cout << "---------------------------------------------------------" << endl;
}
void query_address(char* ADDRESS) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].add, ADDRESS) == 0) {//找到了就做标记k
k = i;
print_person(i);
}
}//k = inf意味着没找到这个名字
if (k == inf) cout << "no such person!" << endl;
getchar();
cout << "---------------------------------------------------------" << endl;
}
void query_tle(char* TLE) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].tle, TLE) == 0) {//找到了就做标记k
k = i;
print_person(i);
}
}//k = inf意味着没找到这个名字
if (k == inf) cout << "no such person!" << endl;
getchar();
cout << "---------------------------------------------------------" << endl;
}
void query_qua(char* QUA) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].qua, QUA) == 0) {//找到了就做标记k
k = i;
print_person(i);
}
}//k = inf意味着没找到这个名字
if (k == inf) cout << "no such person!" << endl;
getchar();
cout << "---------------------------------------------------------" << endl;
}
void query_duty(char* DUTY) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].duty, DUTY) == 0) {//找到了就做标记k
k = i;
print_person(i);
}
}//k = inf意味着没找到这个名字
if (k == inf) cout << "no such person!" << endl;
getchar();
cout << "---------------------------------------------------------" << endl;
}
void change_person_info(char NAME[]) {
cout << "---------------------------------------------------------" << endl;
int k = inf;
for (int i = 0; i < n; i++) {
if (strcmp(person[i].name, NAME) == 0) {//找到了就做标记k
k = i;
break;
}
}//k = inf意味着没找到这个名字
if (k != inf) {
cout << "请按照:姓名、性别、出生年月、工作年月、学历、职务、住址、电话的顺序输入此人修改后的信息:" << endl;
cin >> person[k].name;
cin >> person[k].sex;
cin >> person[k].bir;
cin >> person[k].wk_date;
cin >> person[k].qua;
cin >> person[k].duty;
cin >> person[k].add;
cin >> person[k].tle;
cout << "信息修改成功!" << endl;
}
else cout << "no such person!" << endl;
cout << "---------------------------------------------------------" << endl;
}
void sort_person() {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (strcmp(person[i].name, person[j].name) > 0) {
copy_person(MAXN, i);
copy_person(i, j);
copy_person(j, MAXN);
}
}
}
cout << "重新排序成功!" << endl;
}
void screen() {
cout << "---------------------------------------------------------" << endl;
cout << "1.查询职工 |" << endl;
cout << "2.增加职工 |" << endl;
cout << "3.删除职工 |" << endl;
cout << "4.修改职工信息 |" << endl;
cout << "5.排序 |" << endl;
cout << "0.退出程序 |" << endl;
cout << "---------------------------------------------------------" << endl;
cout << "请选择你需要的操作:";
cin >> m;
cout << "---------------------------------------------------------" << endl;
}
void hello_screen() {
cout << " ****************************************************************** " << endl;
cout << " _________________________________________________________________ " << endl;
cout << " | _______ _______ | " << endl;
cout << " | || || || || || || || | " << endl;
cout << " | || || || || || || || | " << endl;
cout << " | || || || || || || || | " << endl;
cout << " | ||--------|| ||_______ || || || || | " << endl;
cout << " | || || || || || || || | " << endl;
cout << " | || || || || || || || | " << endl;
cout << " | || || ||_______ ||_______ ||_______ ||_______|| | " << endl;
cout << " | | " << endl;
cout << " | ----------------------------------------------------------------- | " << endl;
cout << " | * ___ * ___ * ___ * | " << endl;
cout << " | |_*_| * |_*_| * |_*_| * | " << endl;
cout << " | _{_____}_ _{_____}_ _{_____}_ | " << endl;
cout << " | ||||||||| * ||||||||| * ||||||||| * | " << endl;
cout << " | * ----------- ----------- ----------- | " << endl;
cout << " | ||||| * ||||| * ||||| | " << endl;
cout << " | * |___| * |___| |___| | " << endl;
cout << " ------------------------------------------------------------------- " << endl;
cout << " | | " << endl;
cout << " | ------------------ 按任意键进入职工管理系统~ ------------------ | " << endl;
cout << " | | " << endl;
cout << " **************************************************************** " << endl;
getchar();
system("cls");
}
int main() {
char NAME[50];
hello_screen();
do {
screen();
switch (m) {
case 1:{
int mm;
char tmp[50];
cout << "1.通过名字查询" << endl;
cout << "2.通过电话查询" << endl;
cout << "3.通过地址查询" << endl;
cout << "4.通过职务查询" << endl;
cout << "5.通过学历查询" << endl;
cout << "请输入你希望的查询方式的序号:";
cin >> mm;
switch (mm) {
case 1: {
cout << "---------------------------------------------------------" << endl;
cin >> tmp;
query_name(tmp);
break;
}
case 2: {
cout << "---------------------------------------------------------" << endl;
cin >> tmp;
query_tle(tmp);
break;
}
case 3: {
cout << "---------------------------------------------------------" << endl;
cin >> tmp;
query_address(tmp);
break;
}
case 4: {
cout << "---------------------------------------------------------" << endl;
cin >> tmp;
query_duty(tmp);
break;
}
case 5: {
cout << "---------------------------------------------------------" << endl;
cin >> tmp;
query_qua(tmp);
break;
}
default:break;
}
// cout << "---------------------------------------------------------" << endl;
cout << "敲击回车回到主界面" << endl;
cout << "---------------------------------------------------------" << endl;
getchar();
getchar();
break;
}
case 2:{
add_person();
cout << "---------------------------------------------------------" << endl;
cout << "敲击回车回到主界面" << endl;
cout << "---------------------------------------------------------" << endl;
getchar();
getchar();
break;
}
case 3:{
cout << "请输入你想删除的人名:";
cin >> NAME; fflush(stdin);
del_person(NAME);
cout << "---------------------------------------------------------" << endl;
cout << "敲击回车回到主界面" << endl;
cout << "---------------------------------------------------------" << endl;
getchar();
getchar();
break;
}
case 4:{
cout << "请输入你想修改的人的名字:";
cin >> NAME; fflush(stdin);
change_person_info(NAME);
cout << "---------------------------------------------------------" << endl;
cout << "敲击回车回到主界面" << endl;
cout << "---------------------------------------------------------" << endl;
getchar();
getchar();
break;
}
case 5:{
sort_person();
for (int i = 0; i < n; i++) {
print_person(i);
}
cout << "---------------------------------------------------------" << endl;
cout << "敲击回车回到主界面" << endl;
cout << "---------------------------------------------------------" << endl;
getchar();
getchar();
break;
}
default:m = 0; break;
}
system("cls");
} while (m != 0);
return 0;
}
所用函数均是最基本的。
添加员工:
张i 男 2000/01/01 2020/02/02 本科 经理 浙江杭州 13333324333
张b 男 2000/11/05 2005/01/02 高中 经理 浙江杭州 13316933333
张e 男 2000/06/01 2007/02/02 高中 经理 浙江台州 13333134823
张j 男 2000/09/10 2009/09/09 高中 经理 陕西西安 133307331393
张a 男 2000/03/04 2002/06/18 初中 经理 上海 13512375643
张c 男 2000/02/11 2012/03/15 小学 经理 浙江温州 13397648352
添加员工:
张h 男 2000/02/01 2014/05/02 研究生 经理 浙江温州 139310531208
张d 男 2000/08/03 2013/01/16 本科 经理 浙江杭州 15330182053
张g 男 2000/10/01 2001/08/03 博士 经理 浙江杭州 13330149723
张f 男 2000/01/01 2005/02/02 本科 经理 浙江杭州 13033164373
供修改信息:
张g 男 2000/10/10 2001/08/03 博士 经理 浙江杭州 13330149723
张h 女 2000/01/10 2005/02/02 本科 经理 浙江杭州 13033164373