主要功能:存储职工的职工号、姓名、部门号、工资,实现职工号、部门号、工资的排序,删除单个职工的记录、删除全部职工的记录。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct Worker
//建立包含职工号、姓名、部门、工资的结构体
{ int no; /*职工号*/ char name[10]; /*姓名*/ int depno;    /*部门*/int salary; /*工资*/ };
//typedef struct Worker *pworker; struct LINK
///此为定义链表的结构体,结构名为LINK,结构成员为Worker和LINK
{ Worker w; LINK *next;
};
typedef struct LINK *PLINK; /*程序结束时释放内存*/
void release(PLINK p)
{ PLINK q; while(NULL!=p->next) { q=p; p=p->next; free(q); } free(p);
} /*创建职工信息链表*/
PLINK create()
{ PLINK p=(PLINK)malloc(sizeof(struct LINK)); if(NULL!=p) { p->next=NULL; return p; } printf("内存不足!\n"); return NULL;
}/*显示程序界面文字*/
void message()
{ system("cls");//清屏 system("color 00a");//字的颜色 printf("                         --请输入:【1】  录入职工信息\n"); printf("                         --请输入:【2】  浏览职工信息\n"); printf("                         --请输入:【3】  按职工号排序\n"); printf("                         --请输入:【4】  按部门号排序\n");printf("                         --请输入:【5】  按工资数排序\n"); printf("                         --请输入:【6】  删除指定职工号信息\n"); printf("                         --请输入:【7】  删除职工文件中的全部记录 \n"); printf("                --请输入:【8】  清屏\n"); printf("                         --请输入:【-1】 退出\n");
} void SaveFile(PLINK p)    //将职工单链表数据存入数据文件
{PLINK q=p->next;int n=0;FILE *fp;if ((fp=fopen("work.txt","wb"))==NULL)   //以只写(‘wb’)的方式打开名为‘emp.dat’的文件{    printf("  提示:不能创建文件work.txt\n");return;}while (q!=NULL){fwrite(&q->w,sizeof(Worker),1,fp);         //文件写接口q=q->next;n++;}fclose(fp);                               //关闭文件release(p);                //释放职工单链表Lif (n>0)printf("  提示:%d个职工记录写入work.txt文件\n",n);elseprintf("  提示:没有任何职工记录写入work.txt文件\n");
}/*录入职工信息*/
int add(PLINK p) //采用头插法
{ PLINK q=(PLINK)malloc(sizeof(struct LINK)); if(NULL==q) { printf("录入失败提示:内存不足!\n"); return -1; } printf("请输入职工号(数字):"); scanf("%d",&q->w.no); PLINK h=p->next; while(h) { if(h->w.no==q->w.no) { free(q); printf("录入失败提示:此职工号已经存在!\n"); return -1; } h=h->next; } printf("请输入职工姓名(文字):"); scanf("%s",&q->w.name); printf("请输入职工部门号(数字):"); scanf("%d",&q->w.depno); printf("请输入职工工资数(数字):"); scanf("%d",&q->w.salary); q->next=p->next;                        //头插法p->next=q; printf("录入成功!\n"); return -1;
}
void nopai(PLINK p){                //职工号排序PLINK o,pre,q;o=p->next->next;p->next->next=NULL;while(o!=NULL){q=o->next;pre=p;while(pre->next!=NULL&&pre->next->w.no<o->w.no)pre=pre->next;o->next=pre->next;pre->next=o;o=q;}
}void depnopai(PLINK p){                //部门号排序PLINK o,pre,q;o=p->next->next;p->next->next=NULL;while(o!=NULL){q=o->next;pre=p;while(pre->next!=NULL&&pre->next->w.depno<o->w.depno)pre=pre->next;o->next=pre->next;pre->next=o;o=q;}
}void salarypai(PLINK p)
//冒泡排序
{               //工资排序PLINK o,pre,q;o=p->next->next;p->next->next=NULL;while(o!=NULL){q=o->next;pre=p;while(pre->next!=NULL&&pre->next->w.salary<o->w.salary)pre=pre->next;o->next=pre->next;pre->next=o;o=q;}
}
/*浏览职工信息*/
void show(PLINK p)
{ message(); printf("浏览职工信息\n"); printf("职工号\t姓名\t部门号\t工资\t\n"); while(NULL!=p->next) { printf("%d\t%s\t%d\t%d\t\n", p->next->w.no,p->next->w.name,p->next->w.depno,p->next->w.salary);p=p->next; } printf("显示完毕!\n");
}
/*按职工号删除职工信息*/
int del(PLINK p,int no)
{ message(); printf("按职工号删除职工信息\n"); while(NULL!=p->next) { if(p->next->w.no==no) { PLINK q=p->next; p->next=p->next->next; free(q);                    //释放结点printf("删除成功!\n"); return 1; } p=p->next; } printf("没有你输入的职工号!\n"); return -1;
}
void dell(PLINK p){         //删除全部员工记录while(NULL!=p->next)   { PLINK q=p->next; p->next=p->next->next; free(q);                    //释放结点} p=p->next;
}int main()
{ int cmd=0;/*命令号*/ int no; char name[4]; PLINK pworker; if(!(pworker=create())) { exit(0);/*如果创建职工信息链表表头失败则结束程序*/ } while(cmd!=-1) { switch(cmd) { case 0: message(); break; case 1: add(pworker); break; case 2: show(pworker); break; case 3: nopai(pworker);show(pworker);printf("按职工号排列成功!\n");break; case 4: depnopai(pworker);show(pworker);printf("按部门号排列成功!\n"); break;case 5: salarypai(pworker);show(pworker);printf("按工资排列成功!\n"); break; case 6: printf("请输入要删除的职工号:"); scanf("%d",&no); del(pworker,no); show(pworker);printf("删除成功!\n"); break; case 7: dell(pworker);show(pworker);printf("已经删除全部记录!"); break; case 8: default: message(); } printf("请输入操作命令数字:\n"); scanf("%d",&cmd);/*接收命令*/ } release(pworker);return 0;
}

数据结构《职工管理系统》相关推荐

  1. 数据结构--员工管理系统--链表实现

    数据结构课程设计 题目要求: 利用单链表实现职工管理系统,设有职工文件emp.dat,建立单链表,数据包括职工编号(no), 姓名(name),部门(depno),工资(salary).且具有排序,文 ...

  2. 简单的职工管理系统(java开发)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.需要的环境和包 二.编写步骤 1.excle文件操作类 2.排序算法 3.主函数 三.执行结果 1.原始文件与初始 ...

  3. C语言完整课程设计代码(简单职工管理系统)

    C语言完整课程设计代码(简单职工管理系统) 采用的是双向链表,排序自己写的,因为是链表排序,学校几乎没交 排序在增加员工处采用的是一次一插入,在插入的时候遍历整个链表,找到适当位置进行插入: 在排序员 ...

  4. C++链表实现职工管理系统

    C++实现职工管理系统 简述 对了,代码中有大量的注释,非常适合初次制作的兄弟姐妹门理解,互相学习互相借鉴啦,哈哈哈.而且功能模块封装合理,我就直接上全部代码啦,您慢用! 简述 这个学期的<数据 ...

  5. C/C++课程设计 之职工管理系统

    文章目录 (一) 题目内容及简介 (二) 概要设计 (三) 详细设计 (四) 实现代码 (五) 相关案例 案例一 案例二 案例三 案例四 案例五 案例六 案例七 案例八 案例九 案例十 案例十一 (一 ...

  6. c/c++入门教程 - 3 职工管理系统 完整代码

    目录 3 职工管理系统 3.1 管理系统需求 3.2 代码 勘误 3 职工管理系统 编写示例:基于多态的企业职工系统. 3.1 管理系统需求 职工管理系统可以用来管理公司内所有员工的信息. 本教程主要 ...

  7. C++结课大作业——职工管理系统

    这个项目分为头文件和CPP文件和一个.txt文件 实现功能如图所示 我一一列出来(头文件,cpp文件,txt文件) 按着这三个复制粘贴就可以用 boss.h #pragma once //普通员工头文 ...

  8. 职工管理系统--基于C++多态

    目录 1.管理系统需求 2.创建项目 2.1 创建项目 2.2 添加文件 3.创建管理类 3.1创建文件 3.2 头文件实现 3.3 源文件实现 4.菜单功能 4.1 添加成员函数 4.2 菜单功能实 ...

  9. 真不戳,基于C++泛型编程的职工管理系统

    文章目录 前言 一.泛型编程思想 二.单链表是什么? 1.图示 2.链表的节点结构[节点类] ①常规链表节点 ②泛型链表节点 3.链表类 三.泛型编程核心 1.实现数据类 2.实现链表类 四.运行截图 ...

  10. 黑马程序员C++职工管理系统

    基础知识(面向对象编程) C++程序在执行时,将内存大方向划分为**4个区域** - 代码区:存放函数体的二进制代码,由操作系统进行管理的 - 全局区:存放全局变量和静态变量以及常量 - 栈区:由编译 ...

最新文章

  1. Linux:检查当前运行级别的五种方法
  2. java stringbuilder 替换字符串_java中的经典问题StringBuilder替换String
  3. fastjson 不转某些字段_fastjson 过滤不需要的字段或者只要某些字段
  4. Sentinel-Go 集成 Nacos 实现外部动态数据源
  5. 0点mysql_【转载】MySQL查询当天0点,昨天时间
  6. shiro session 设置取不到_SpringCloud+shiro+前后端分离
  7. r语言将百分数化为小数_C语言入门学习(一)
  8. 使用nginx搭建流媒体直播平台(该方式不适用与多人聊天)
  9. 浅谈面粉厂防爆的重要性及措施(转)
  10. 调色盘——将真彩色图像降级为低分辨率图像的八叉树算法
  11. jQuery侧边导航栏模块交互效果,导航栏点击事件、卷动事件、节流阀
  12. linux优化deepin启动速度,如何优化 Deepin 引导开机速度?
  13. 首批 | 易知微加入“新华网元宇宙及 AIGC 创新联盟”,探索AIGC数字人深度应用
  14. win8.1怎样打开计算机名,Win8怎么打开cmd命令窗口_Win8.1打开命令提示符的方法-192路由网...
  15. 导出数据库表信息生成Word文档
  16. 中国移动光猫H2-3拨号模式和bridge(桥)模式
  17. SAP PP物料清单BOM主数据概念
  18. 半钧先生:分享一波超赞的冬至文案,句句暖到心!
  19. 正式声明:转载本Blog文章请注明原始出处和作者
  20. PageRank 算法初步了解

热门文章

  1. 判断点是否在圆上(java)
  2. 【使用MATLAB 5点确定出一个椭圆并画图确定中心点坐标】
  3. 关于计算机这个行业,中级技工证书有什么意义吗?
  4. pandas的read_csv方法之sep参数(多个列之间没有分开,连在一起解决方法)
  5. 由认识到应用——物联网LoRa技术性能分析
  6. [CDH]企业数据仓库数据管理平台CDH6.2.1离线安装记录
  7. word手敲公式 快速入门Unicode
  8. 4.6 51单片机-EEPROM存储芯片(AT24C02)
  9. UE5 Meerkat狐獴演示Demo分析
  10. WLAN室内、室外无线信号覆盖解决方案