C语言职工信息管理系统:实现增删改查排序功能
C语言职工信息管理系统
这篇文章提供了一个用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('|职工编号|姓名|性别|出生年月|入职年月|学历| 职务 |地址| 电话 |\n');
printf('+--------+----+----+--------+--------+----+--------+----+------------+\n');
{
printf('|%4s |%3s|%3s |%7s |%7s |%4s|%6s |%4s|%11s |\n', 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('| 职 工 信 息 查 询 系 统 |\n');
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('| 9.按电话查询 |\n');
printf('| 输入其他任意键退出本模块 |\n');
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;
}
}
}
// ... (其他查询条件)
if(!flag)
{
printf('\n\n!!!无该职工信息!!!\n\n');
}
printf('\n\n是否继续查询?(Y/N):');
scanf('%*c%c', &c);
if(c == 'N' || c == 'n')
break;
}
}
// 修改
void modify()
{
// ... (修改逻辑)
write();
}
// 删除函数
void Delete()
{
// ... (删除逻辑)
write();
}
//输出函数
void show(employee *head)
{
// ... (输出逻辑)
}
//交换
void exchange(char *p,char *q)
{
// ... (交换逻辑)
}
//排序
void sort()
{
// ... (排序逻辑)
}
//菜单
void menu()
{
// ... (菜单逻辑)
}
int main()
{
// ... (主函数逻辑)
}
最难处理的问题
最难处理的问题可能是字符串的输入输出和比较,需要特别注意数组越界和字符串结束符的问题。
改进方向
- 可以使用链表来存储职工信息,方便数据的插入和删除。
- 可以使用图形界面来提高用户体验。
- 可以添加更多的功能,例如数据统计、报表生成等。
希望这篇文章能帮助你理解如何用C语言实现一个职工信息管理系统。
注意
以上代码仅供参考,实际应用中需要根据具体需求进行修改。
原文地址: https://www.cveoy.top/t/topic/fwVT 著作权归作者所有。请勿转载和采集!