#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h>

struct employee{ char number[10]; //编号 char name[10]; //姓名 char sex[10]; //性别 char birthday[10]; //出生年月 char date[10]; //入职年月 char degree[10]; //学历 char position[10]; //职位 char add[10]; //地址 char tel[20]; //电话 struct employee *next; }em[100], *head;

int n; //全局变量

void read() { FILE *fp; int i; if ((fp = fopen('职工信息.txt', 'r')) == NULL) { printf('打开文件失败!请创建一个文本文件,文件名叫职工信息\n\n\n'); system('pause'); // 冻结屏幕 system('cls'); // 清屏 exit(0); } fscanf(fp, '%d\n', &n); for (i = 0; i < n; i++) { fscanf(fp, '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n', em[i].number, em[i].name, em[i].sex, em[i].birthday, em[i].date, em[i].degree, em[i].position, em[i].add, em[i].tel); } head = &em[0]; fclose(fp); }

void write() { FILE *fp; int i = 0; if ((fp = fopen('职工信息录入.txt', 'w+')) == NULL) { printf('!!!打开文件失败!!!\n'); return; } fprintf(fp,'%d\n',n); while(i < n) { fprintf(fp,'%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n',em[i].number, em[i].name, em[i].sex, em[i].birthday, em[i].date, em[i].degree, em[i].position, em[i].add, em[i].tel); i++; } fclose(fp); }

// 增加

void add() { int i, flag; char c; read(); do { flag = 0; printf('\n\n'); printf('请输入职工的编号:'); scanf('%s', &em[n].number); for (i = 0; i < n; i++) { if(strcmp(em[i].number, em[n].number) == 0) { flag = 1; break; } } if(flag) { printf('!!!该职工已存在!!!\n\n'); printf('\t\t是否继续输入?(Y/N): '); scanf('%c', &c); if(c == 'N' || c == 'n') break; continue; } printf('请输入职工姓名:'); scanf('%s', &em[n].name); printf('请输入职工性别:'); scanf('%s', &em[n].sex); printf('请输入职工出生年月:'); scanf('%s', &em[n].birthday); printf('请输入职工入职年月:'); scanf('%s', &em[n].date); printf('请输入职工学历:'); scanf('%s', &em[n].degree); printf('请输入职工职务:'); scanf('%s', &em[n].position); printf('请输入职工住址:'); scanf('%s', &em[n].add); printf('请输入职工电话:'); scanf('%s', &em[n].tel); printf('是否继续输入?(Y/N): '); scanf('%*c%c', &c); n++; }while (c != 'N' && c != 'n'); write(); printf('\n\n数据已保存!\n\n'); }

//输出函数

void output(int t) { printf('+--------+----+----+--------+--------+----+--------+----+------------+\n'); printf('|职工编号|姓名|性别|出生年月|入职年月|学历| 职务 |地址| 电话 | '); printf('+--------+----+----+--------+--------+----+--------+----+------------+\n'); { printf('|%4s |%3s|%3s |%7s |%7s |%4s|%6s |%4s|%11s | ', em[t].number, em[t].name, em[t].sex, em[t].birthday, em[t].date, em[t].degree, em[t].position, em[t].add, em[t].tel); } }

//显示

void show() { int i; read(); if (n == 0) printf('无记录!\n\n'); else for (i = 0; i < n; i++) { output(i); } }

// 查询

void search() { int num, flag, i; char a[10], name[10], degree[10], position[10], sex[10], birthday[10], date[10], add[10], tel[20];
char c; read(); while (1) { printf('\n'); printf('+---------------------------------+\n'); printf('| 职 工 信 息 查 询 系 统 | '); printf('| 1.按编号查询 | ');
printf('| 2.按姓名查询 | '); printf('| 3.按学历查询 | '); printf('| 4.按职务查询 | '); printf('| 5.按性别查询 | '); printf('| 6.按出生年月查询 | '); printf('| 7.按入职年月查询 | '); printf('| 8.按地址查询 | '); printf('| 9.按电话查询 | '); printf('| 输入其他任意键退出本模块 | '); printf('+---------------------------------+\n'); printf('请选择操作:'); scanf('%d', &num); if (num < 1 || num > 9) { printf('!!!输入错误!!!\n\n'); system('cls'); // 清屏 }
if (num == 1) { printf('\n请输入您要查询的职工的编号:'); scanf('%s', &a); for (i = 0; i < n; i++) { if (strcmp(em[i].number, a) == 0) { output(i); flag = 1; } } } else if (num == 2)
{ printf('\n请输入您要查询的职工的姓名:'); scanf('%s', &name); for (i = 0; i < n; i++) { if (strcmp(em[i].name, name) == 0) { output(i); flag = 1;
} } } else if (num == 3)
{ printf('\n请输入您要查询的职工的学历:'); scanf('%s', &degree); for (i = 0; i < n; i++) { if (strcmp(em[i].degree, degree) == 0) { output(i); flag = 1; } } } else if (num == 4) { printf('\n请输入您要查询的职工的职务:'); scanf('%s', &position); for (i = 0; i < n; i++) { if (strcmp(em[i].position, position) == 0) { output(i); flag = 1;
} } } else if (num == 5)
{ printf('\n请输入您要查询的职工的性别:'); scanf('%s', &sex); for (i = 0; i < n; i++) { if (strcmp(em[i].sex, sex) == 0) { output(i); flag = 1;
} } } else if (num == 6) { printf('\n请输入您要查询的职工的出生年月:'); scanf('%s', &birthday); for (i = 0; i < n; i++) { if (strcmp(em[i].birthday, birthday) == 0) { output(i); flag = 1; } } } else if (num == 7)
{ printf('\n请输入您要查询的职工的入职年月:'); scanf('%s', &date); for (i = 0; i < n; i++) { if (strcmp(em[i].date, date) == 0) { output(i); flag = 1;
} } } else if (num == 8)
{ printf('\n请输入您要查询的职工的地址:'); scanf('%s', &add); for (i = 0; i < n; i++) { if (strcmp(em[i].add, add) == 0) { output(i); flag = 1;
} } } else if (num == 9) { printf('\n请输入您要查询的职工的电话:'); scanf('%s', &tel); for (i = 0; i < n; i++) { if (strcmp(em[i].tel, tel) == 0) { output(i); flag = 1;
} } } if(!flag)
{ printf('\n\n!!!无该职工信息!!!\n\n'); }

    printf('\n\n是否继续查询?(Y/N):');
    scanf('%*c%c', &c);
    if(c == 'N' || c == 'n')
		break;
}

}

// 修改

void modify()
{ int num, flag, i, j; char a[10];
char change[20];
char c; read(); while (1) { flag = 0; printf('\n请输入需要修改的职工编号:'); scanf('%s', &a); for (i = 0; i < n; i++) { if (strcmp(em[i].number, a) == 0 ) { j = i; flag = 1; } } if (!flag) { printf('\n\n!!!无此员工的信息!!!\n\n'); printf('\n\n是否继续修改(Y/N):'); scanf('%c', &c); if(c == 'N' || c == 'n') break; } printf('\n'); printf('+-------------------------------+\n'); printf('| 职 工 信 息 修 改 系 统 | '); printf('| 1.修改姓名 | '); printf('| 2.修改学历 | '); printf('| 3.修改职务 | '); printf('| 4.修改地址 | '); printf('| 5.修改出生年月 | '); printf('| 6.修改入职年月 | '); printf('| 7.修改电话 | '); printf('| 8.修改职工编号 | '); printf('| 输入其他任意键退出本模块 | '); printf('+-------------------------------+\n'); printf('请选择操作:'); scanf('%d', &num); if (num < 1 || num > 8) { printf('!!!操作错误!!!\n\n'); continue; } system('cls'); // 清屏 printf('\n请输入修改后的信息:'); scanf('%s', &change); switch (num) { case 1 : strcpy(em[j].name, change); break; case 2 : strcpy(em[j].degree, change); break; case 3 : strcpy(em[j].position, change); break; case 4 : strcpy(em[j].add, change); break; case 5 : strcpy(em[j].birthday, change); break; case 6 : strcpy(em[j].date, change); break; case 7 : strcpy(em[j].tel, change); break; case 8 : strcpy(em[j].number, change); break; } printf('\n\n是否继续修改?(Y/N):'); scanf('%*c%c', &c); if (c == 'N' || c == 'n') break; continue; } write(); }

// 删除函数

void Delete()
{ char a[10];
int i, j, flag;
char c; read(); while (1) { system('cls'); // 清屏 flag = 0; printf('\n请输入需要删除的职工编号:'); scanf('%s', &a); for (i = 0; i < n; i++) { if (strcmp(em[i].number, a) == 0) { n--; flag = 1; for (j = i; j < n; j++) { em[j] = em[j + 1]; } break; } } if (!flag) printf('\n\n!!!无此员工信息!!!\n\n'); else printf('\n\n!!!删除成功!!!\n'); printf('\n\n是否继续删除?(Y/N):'); scanf('%c', &c); if (c == 'N' || c == 'n') break; continue; } write(); }

//输出函数

void show(employee *head) { employee *p = head; int j = 1; int i; char c; while (p != NULL) { for (i = 1; i < n; i++) { printf('%d. %s %s %s %s %s %s %s %s %s\n',j++,p->number,p->name ,p->sex ,p->birthday, p->date, p->degree, p->position, p->add, p->tel); p = p->next; } } }

//交换

void exchange(char *p,char *q) { read(); char c[20]; strcpy(c, p); strcpy(p, q); strcpy(q, c); }

//排序

void sort() { char ch; char c; employee *p, *q, *r; read() ; while (1) { printf('按职工编号从小到大的排序信息如下:\n'); p = head; while (p->next != NULL) //选择排序 { q = p->next; r = p; if (r != p) //交换信息 { exchange(r->number, p->number); exchange(r->name, p->name); exchange(r->sex, p->sex); exchange(r->birthday, p->birthday); exchange(r->date, p->date); exchange(r->degree, p->degree); exchange(r->position, p->position);
exchange(r->add, p->add); exchange(r->tel, p->tel); } } show(); system('pause'); } }

//菜单

void menu() { printf('\n'); printf(' ○主菜单 ○ \n'); printf(' 0.退 出 菜 单 \n'); printf(' 1.录入职工信息 \n'); printf(' 2.显示职工信息 \n'); printf(' 3.查询职工信息 \n'); printf(' 4.修改职工信息 \n'); printf(' 5.删除职工信息 \n'); printf(' 6.职工信息排序 \n'); printf('\n'); printf('请输入操作: '); }

int main() { int num; n = 0; system('color 0B'); printf('\n'); printf(' 欢 迎 使 用 职 工 管 理 系 统 \n'); printf('\n'); while (1) { menu(); scanf('%d',&num); system('cls'); // 清屏 switch (num) { case 1: add(); break; case 2: show(); break; case 3: search(); break; case 4: modify(); break; case 5: Delete(); break; case 6: sort(); break; case 0: printf('\t\t\n\n☆☆☆☆欢迎下次使用☆☆☆☆\n\n'); return 0; default:printf('\n无效指令!\n\n\n');
} system('pause'); system('cls'); } } 完成了几个自定义功能函数 内容:目前已完成的自定义

C语言职工管理系统:添加、显示、查询、修改、删除、排序功能

原文地址: https://www.cveoy.top/t/topic/fwVC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录