C语言职工管理系统:添加、显示、查询、修改、删除、排序功能
#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', °ree);
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');
}
}
完成了几个自定义功能函数
内容:目前已完成的自定义
原文地址: https://www.cveoy.top/t/topic/fwVC 著作权归作者所有。请勿转载和采集!