第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 职工信息管理系统(c语言实现)

职工信息管理系统(c语言实现)

时间:2023-10-16 22:24:40

相关推荐

职工信息管理系统(c语言实现)

功能实现:

(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存)--输入(3)职工信息浏览功能--输出 (4)职工信息查询功能--算法 查询方式:按姓名查询/按职工号查询 (5)职工信息删除、修改功能

代码:

#include<stdio.h> #include<stdlib.h> #include<string.h>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 的格式从文件中读取数据存入节点中。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。