功能实现:

(1)系统以菜单方式工作

(2)职工信息录入功能(职工信息用文件保存)--输入

(3)职工信息浏览功能--输出

(4)职工信息查询功能--算法

查询方式:按姓名查询/按职工号查询

(5)职工信息删除、修改功能

代码:

#include

#include

#include

struct workers

{

char jobNo[15]; //职工号

char name[15]; //姓名

char sex[15]; //性别

char birthday[15]; //出生年月

char degree[15]; //学历

char position[15]; //职务

char salary[15]; //工资

char addr[15]; //住址

char tel[15]; //电话

};

//类型定义语句

typedef struct node

{

struct workers data;

struct node *next;

}Node;

//添加信息函数 "尾插法建表"

void Add(Node *worker)

{

Node *p, *q;

char n[10];

q = worker;

while (q->next != NULL)

{

q = q->next;

}

while (1)

{

printf("提示:输入0返回主菜单!\n");

printf("请输入职工号:");

scanf("%s", n);

if (strcmp(n, "0") == 0)

{

break;

}

p = (Node *)malloc(sizeof(Node));

strcpy(p->data.jobNo, n);

printf("请输入姓名:");

scanf("%s", p->data.name);

printf("请输入性别:");

scanf("%s", p->data.sex);

printf("请输入出生年月:");

scanf("%s", p->data.birthday);

printf("请输入学历:");

scanf("%s", p->data.degree);

printf("请输入职务:");

scanf("%s", p->data.position);

printf("请输入工资:");

scanf("%s", p->data.salary);

printf("请输入住址:");

scanf("%s", p->data.addr);

printf("请输入电话:");

scanf("%s", p->data.tel);

printf("提示:已经完成一条记录的添加!");

p->next = NULL;

q->next = p;

q = p;

}

}

//修改职工信息函数

int change(Node *worker)

{

Node *p;

char find[20];

p = worker->next;

if (p == NULL)

{

printf("\n提示:没有资料可以修改!\n");

return 0;

}

printf("请输入要修改的职工号");

scanf("%s", find);

while (p != NULL)

{

if (strcmp(p->data.jobNo, find) == 0)

{

break;

}

p = p->next;

}

if (p!=NULL)

{

int x;

while (1)

{

printf("完成修改请输入0,否则输入非0数字进行修改!");

scanf("%d", &x);

if (x == 0)

{

break;

}

printf(" 请输入新职工号: ");

scanf("%s", p->data.jobNo);

printf(" 请输入新职工姓名: ");

scanf("%s", p->data.name);

printf(" 请输入新职工性别: ");

scanf("%s", p->data.sex);

printf(" 请输入新职工出生年月: ");

scanf("%s", p->data.birthday);

printf(" 请输入新职工学历: ");

scanf("%s", p->data.degree);

printf(" 请输入新职工职务: ");

scanf("%s", p->data.position);

printf(" 请输入新职工工资: ");

scanf("%s", p->data.salary);

printf(" 请输入新职工住址: ");

scanf("%s", p->data.addr);

printf(" 请输入新职工电话: ");

scanf("%s", p->data.tel);

printf(" \n提示:该职工资料已经修改!\n ");

}

}

else

printf("\n提示:没有你要修改的资料!\n ");

}

//输出职工信息函数

int Disp(Node *worker)

{

Node *p;

p = worker->next;

if (p == NULL)

{

printf(" \n提示:没有信息可以显示!\n ");

return 0;

}

printf("\t\t\t\t显示结果\n");

printf(" \n职工号 姓名性别出生年月 学历职务工资住址电话\n ");

while (p!=NULL)

{

printf("\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

p = p->next;

}

}

//查询职工信息函数: 按职工号查询按职工姓名查询

int Cha_xun(Node *worker)

{

Node *p;

int sel;

char find[20];

p = worker->next;

if (p==NULL)

{

printf(" \n提示:没有资料可以查询!\n ");

return 0;

}

printf("\n提示:\n 输入 0---- 退出\t 输入 1----按职工号查询\t 输入 2-----按职工姓名查询\n");

printf("请选择:");

scanf("%d", &sel);

if (sel == 1)

{

printf("\n请输入你要查询分类的职工号:");

scanf("%s", find);

while (p!=NULL)

{

if (strcmp(p->data.jobNo, find) == 0)

{

printf(" 职工号 姓名 性别出生年月学历职务工资住址电话 \n ");

printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

}

p = p->next;

}

}

else if (sel == 2)

{

printf(" \n输入你要查询分类的职工姓名:");

scanf("%s", find);

while (p!=NULL)

{

if (strcmp(p->data.name, find) == 0)

{

printf(" 职工号姓名性别出生年月学历职务工资住址电话 \n ");

printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

}

p = p->next;

}

}

else if (sel == 0)

return 0;

}

//删除职工信息函数

int Delete(Node *worker)

{

Node *p, *r;

char find[10];

p = worker->next;

if (p == NULL)

{

printf("提示:没有职工信息可以删除!\n ");

return 0;

}

printf(" \n提示:请输入你要删除的职工号!\n ");

scanf("%s", find);

while (p != NULL)

{

if (strcmp(p->data.jobNo, find) == 0)

{

break;

}

p = p->next;

}

if (p!=NULL)

{

r = worker;

while (r->next != p)

{

r = r->next;

}

r->next = r->next->next;

}

}

//将职工信息保存到文件中

void save(Node *worker)

{

int n;

Node *p = NULL;

FILE *fp;

printf("是否保存到文件?( 1-----保存!,0-----不保存! )");

scanf("%d", &n);

if (n == 1)

{

if (worker->next == NULL)

{

printf(" 没有记录!");

}

else

{

p = worker->next;

}

if ((fp = fopen(" 职工信息管理系统.txt ", " wb ")) == NULL)

{

printf(" 文件不能打开!\n");

}

while (p != NULL)

{

fprintf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,

p->data.birthday, p->data.degree, p->data.position, p->data.salary,

p->data.addr, p->data.tel);

p = p->next;

}

fclose(fp);

}

}

//读取职工信息

void Du_qu(Node *worker)

{

Node *p;

FILE *fp;

if ((fp = fopen("职工信息管理系统.txt", "rb")) == NULL)

{

printf("文件不能打开!\n ");

}

p = worker->next;

while (p!=NULL)

{

fscanf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,

p->data.birthday, p->data.degree, p->data.position, p->data.salary,

p->data.addr, p->data.tel);

p=p->next;

}

fclose(fp);

}

//主函数实现

int main()

{

Node *worker;

int flag;

worker = (Node*)malloc(sizeof(Node));

worker->next = NULL;

while(1)

{

printf("\t职 工 信 息 管 理 系 统\n");

printf("==================菜 单==================\n ");

printf("1.输入职工信息\n ");

printf("2.修改职工信息\n ");

printf("3.浏览职工信息\n ");

printf("4.查询职工信息\n ");

printf("5.删除职工信息\n ");

printf("6.读取职工信息\n ");

printf("0.退出\n ");

printf("输入你选择的序号:");

scanf("%d", &flag);

switch (flag)

{

case 0: printf(" \n提示:退出系统!\n "); break;

case 1: Add(worker); save(worker); break; //添加职工信息,保存到文件中

case 2: change(worker); break; //修改职工信息

case 3: Disp(worker); break; //显示职工信息

case 4: Cha_xun(worker); break; //查询职工信息

case 5: Delete(worker); break; //删除职工信息

case 6: Du_qu(worker); break; //读取职工信息

default: printf("提示:输入错误!\n ");

}

}

}

代码模块解释:

添加信息模块: void Add( Node *worker )

采用尾插法,先建立链表和头结点,新增加一个节点,输入职工的所有信息,将新增的节点连接在链表的尾端。

修改信息模块:void change( Node *worker )

找到要修改的职工信息,删除这一个节点,然后新建一个节点,输入要修改的信息,并储存到新的节点中,将新增的节点放在原来删除节点的位置。

显示输出模块:void Disp( Node *worker )

先新建一个指针指向头结点,判断指针域是否为空,若为空,输出“没有信息可以显示”;若不为空,则输出他的指针域所指向的节点储存的信息,并将指针向后移一个节点,直到P指向空,这样就输出了所有的职工信息。

查找信息模块:void Cha_xun( Node *worker )

分为两种查找方法,按职工号查找和按姓名查找。

按职工号查找: 输入职工号,先新建一个指针指向头结点,判断指针域是否为空,若为空,输出“没有资料可以查询”;若不为空,则判断他的指针域所指向的节点储存的职工号是否与输入的职工号相同,若相同,则输出该职工所有的信息,并将指针向后移一个节点,再次进行判断,直到P指向空,这样就查找输出了所有匹配的职工信息。

按姓名查找:输入姓名,先新建一个指针指向头结点,判断指针域是否为空,若为空,输出“没有资料可以查询”;若不为空,则判断他的指针域所指向的节点储存的职工姓名是否与输入的职工姓名相同,若相同,则输出该职工所有的信息,并将指针向后移一个节点,再次进行判断,直到P指向空,这样就查找输出了所有匹配的职工信息。

删除信息模块:void Delete( Node *worker )

查找到要删除的职工信息节点,删除这一个节点,并将它的前驱节点的指针域指向后继节点。

保存职工信息模块: void save(Node *worker)

新建一个指针指向头结点,判断指针域是否为空,若为空,输出“没有记录!”,若不为空, fprintf()格式写函数 ,将职工信息以%s的格式写入指针指向的文件中。

读取信息模块:void Du_qu( Node *worker )

打开文件,fscanf()格式读函数,以%s 的格式从文件中读取数据存入节点中。

职工信息管理系统c语言报告,职工信息管理系统(c语言实现)相关推荐

  1. 班费管理系统c语言报告,班费管理系统课程设计报告.doc

    计算机科学与技术系 课程设计报告 20 -20 学年第 学期 课程 C语言课程设计 课程设计名称 班级班费管理系统 学生姓名 学号 专业班级 指导教师 20 年 月 班级班费管理系统 目录 班级班费管 ...

  2. python超市管理系统实训报告_超市管理系统实验报告范文

    超市管理系统实验报告 一.背景 现在, 我们身边到处都是超市, 而这些超市很多都是小型超市, 在这些超市 里,实行的还是人工管理,管理方式混乱,工作效率低下,管理成本也比较高, 还不能及时的得到货物信 ...

  3. 天津理工上机c语言报告5,天津理工大学C语言上机报告题目加答案.doc

    天津理工大学C语言上机报告题目加答案.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印 ...

  4. 天津理工上机c语言报告5,天津理工大学c语言上机报告7.doc

    天津理工大学c语言上机报告7 天津理工大学 计算机与通信工程学院 实验试做报告 2009 至 2010 学年 第 一 学期 课程名称高级语言程序设计I学生专业信息安全实验(7)实验名称指针实验课时4课 ...

  5. 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc

    中南民族大学信C语言实验报告 中南民族大学管理学院 学生实验报告 课程名称: C语言程序设计 姓 名:微博@song-style是坏学长 学 号: 年 级: 2011 专 业:信息管理与信息系统 指导 ...

  6. 中南民族大学c语言报告,中南民族大学计算机C语言试题10套.doc

    中南民族大学计算机C语言试题10套.doc 1一.判断 共10题 (共计10分)第1题 ( 1.0分) 题号1488函数即可以嵌套定义,又可以嵌套调用.答案N第2题 ( 1.0分) 题号1256uns ...

  7. 装箱问题C语言报告,装包装箱问题 (C语言代码)

    解题思路:贪心算法. (1) 6*6的产品每个会占用一个完整的箱子,并且没有剩余空间 (2) 5*5的产品每个占用一个新的箱子,并且留下 11 个可以盛放 1*1 的产品的剩余空间 (3) 4*4的产 ...

  8. 用栈实现计算器c语言报告,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define UINT unsigned int struct LOGIC { UINT logic,site; } ...

  9. 万年历单片机C语言报告,51单片机万年历C语言

    #include #include #define uchar unsigned char #define uint  unsigned int uchar buf1; uchar buf2; uch ...

最新文章

  1. C++知识点杂记3——局部类、位域、volatile、链接指示、枚举、定位new
  2. 九度OJ 1089:数字反转 (数字反转)
  3. mysql编码无效_mysql的严格模式与无效字符编码问题
  4. 逐渐增高_钩机加长臂的销量持续增高成为热点话题!
  5. 【机器学习基础】范数与正则化
  6. 带有输出参数的存储过程
  7. 汽车理论课后习题matlab程序,汽车理论课后题matlab程序
  8. EGO Planner代码解析bspline_optimizer部分(3)
  9. mysql建库图解_MySQL数据库安装图解
  10. 语言在工作中扮演的角色
  11. mysql卸载不掉? 帮你清理注册表,重新安装数据库mysql
  12. 服装电商APP软件开发平台作用
  13. 判断用户是否登录成功
  14. 集合语音识别、音频蓝牙、对话控制多功能一体的WTK6900H-32N眼部按摩器应用设计方案
  15. 4种FPGA时钟分频 【附源码】:1.偶数分频;2.奇数分频(占空比50%);3.奇数分频(任意无占空比);4.小数分频;
  16. 远程桌面连接遇到的问题及解决方法
  17. 2021年危险化学品经营单位主要负责人免费试题及危险化学品经营单位主要负责人模拟考试
  18. System.Drawing.Color的颜色对照表
  19. TextCNN文本分类(keras实现)
  20. ovs learn action

热门文章

  1. LightOJ 1140 - How Many Zeroes? 数位DP
  2. 从“住”到“行” 恒大投资NEVS的背后逻辑 | 一点财经
  3. Econometrics Homework (Lab Course: Chapters 2, 3, 4)
  4. android前端开发工具,分享七个非常有用的Android开发工具和工具包
  5. GoWeb - GORM
  6. Vue+element 实现表格的动态增加行
  7. 当今情势下,如何通过自媒体平台轻松赚钱
  8. 一零二九、scalac: Token not found: C:\Users\Tuomasi\AppData\Local\JetBrains\IdeaIC2021
  9. 大写金额用计算机简单些,Excel如何将较小的金额转换为大写金额?
  10. Qt QRegExp 正则表达式