#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> //控制台
//创建结构体存储数据
struct Employee {
int num; // 编号
char name[50]; // 姓名
char gender[10]; // 性别
char birthdate[20]; // 出生日期
char startdate[20]; // 工作时间
char education[50]; // 学历
char position[50]; // 职务
char address[100]; // 住址
char phone[20]; // 电话
};
// 函数原型
void readOrCreateCSV(struct Employee* newEmp, int* len);//读取文件
void save(struct Employee* newEmp, int len);//保存数据
void addEmployee(struct Employee* newEmp, int* len);//添加
void deleteEmployee(struct Employee* newEmp, int* len);//删除
void searchEmployee(struct Employee* newEmp, int* len);//查询
void modifyEmployee(struct Employee* newEmp, int* len);//修改
void sortEmployee(struct Employee* newEmp, int* len);//排序
void showEmployee(struct Employee* newEmp, int* len);//打印
static void display_menu() {
system("cls");
// 打印菜单
printf("======================\n");
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("| 0. 退出系统 |\n");
printf("| |\n");
printf("======================\n");
};
int main() {
//生成结构体数组用于存储数据
struct Employee newEmp[20];
int len = 0;//存储数组长度
int choice;
readOrCreateCSV(newEmp, &len);
do {
display_menu();
// 获取用户选择
printf("请输入功能选项: ");
scanf_s("%d", &choice);
system("cls");//清屏
// 根据用户选择执行相应功能
switch (choice) {
case 1:addEmployee(newEmp, &len);break;
case 2:
showEmployee(newEmp, &len);
deleteEmployee(newEmp, &len);
break;
case 3:searchEmployee(newEmp, &len);break;
case 4:
showEmployee(newEmp, &len);
modifyEmployee(newEmp, &len);
break;
case 5:sortEmployee(newEmp, &len);break;
case 6:showEmployee(newEmp, &len); break;
case 0:
printf("感谢使用职工管理系统,再见!\n");
break;
default:
printf("无效的选项,请重新输入。\n");
}
system("pause");
} while (choice != 0);
return 0;
}
// 读取wokers.csv文件,没有则创建
void readOrCreateCSV(struct Employee* newEmp, int* len) {
FILE* file;
// 使用 fopen_s 打开文件
if (fopen_s(&file, "workers.csv", "r") == 0) {
char line[330]; // 假设每行最多320个字符
*len = 0; // 初始化数组长度
// 逐行读取文件内容
while (fgets(line, sizeof(line), file) != NULL) {
// 使用逗号分隔符解析每一行的数据
sscanf_s(line, "%d,%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s",
&newEmp[*len].num,
newEmp[*len].name, 50,
newEmp[*len].gender, 10,
newEmp[*len].birthdate, 20,
newEmp[*len].startdate, 20,
newEmp[*len].education, 50,
newEmp[*len].position, 50,
newEmp[*len].address, 100,
newEmp[*len].phone, 20);
(*len)++; // 增加数组长度
}
fclose(file);
printf("已从文件中读取 %d 条记录。\n", *len);
}
}
//保存数据
void save(struct Employee * newEmp, int len)
{
FILE* file;
// 使用 fopen_s 打开文件
if (fopen_s(&file, "workers.csv", "w") == 0) {
// 逐行保存数据到文件
for (int i = 0; i < len; ++i) {
fprintf(file, "%d,%s,%s,%s,%s,%s,%s,%s,%s\n",
newEmp[i].num,
newEmp[i].name,
newEmp[i].gender,
newEmp[i].birthdate,
newEmp[i].startdate,
newEmp[i].education,
newEmp[i].position,
newEmp[i].address,
newEmp[i].phone);
}
fclose(file);
}
else {
printf("无法打开文件。\n");
}
}
//添加职工
void addEmployee(struct Employee* newEmp, int* len)
{
if (*len < 20) { // 假设数组长度最大为100
printf("请输入新职工信息:\n");
printf("编号: ");
scanf_s("%d", &newEmp[*len].num);
for (int i = 0; i < *len; ++i) {
if (newEmp[i].num == newEmp[*len].num) {
printf("错误,该编号已存在!\n");
return;
}
}
printf("姓名: ");
scanf_s("%s", newEmp[*len].name, 50);
printf("性别: ");
scanf_s("%s", &newEmp[*len].gender, 10);
printf("出生日期:");
scanf_s("%s", newEmp[*len].birthdate, 20);
printf("工作时间:");
scanf_s("%s", newEmp[*len].startdate, 20);
printf("学历: ");
scanf_s("%s", newEmp[*len].education, 50);
printf("职务: ");
scanf_s("%s", newEmp[*len].position, 50);
printf("住址: ");
scanf_s("%s", newEmp[*len].address, 100);
printf("电话: ");
scanf_s("%s", newEmp[*len].phone, 20);
(*len)++; // 增加数组长度
printf("新职工信息添加成功。\n");
// 添加成功后调用保存函数
save(newEmp, *len);
}
else {
printf("数组已满,无法添加新职工信息。\n");
}
}
//删除职工
void deleteEmployee(struct Employee* newEmp, int* len)
{
int num;
printf("请输入要删除的职工编号:");
scanf_s("%d", &num);
int index = -1; // 初始化索引为-1,表示未找到对应编号的数据
// 查找输入编号对应的数据索引
for (int i = 0; i < *len; ++i) {
if (newEmp[i].num == num) {
index = i;
break;
}
}
if (index != -1) {
// 将后面的数据向前移动,实现删除
for (int i = index; i < *len - 1; ++i) {
newEmp[i] = newEmp[i + 1];
}
// 减少数组长度
(*len)--;
printf("职工编号 %d 的数据已删除。\n", num);
// 删除成功后调用保存函数
save(newEmp, *len);
}
else {
printf("未找到职工编号 %d 的数据。\n", num);
}
}
//打印职工
static void printEmployee(struct Employee emp, int* p) {
if (*p == 0) {
// 打印表头
printf("%-5s %-10s %-5s %-15s %-15s %-10s %-10s %-15s %s\n",
"编号", "姓名", "性别", "出生日期", "工作时间", "学历", "职务", "电话", "住址");
// 打印分割线
for (int i = 0; i < 100; ++i) {
printf("-");
}
printf("\n");
};
++*p;
printf("%-5d %-10s %-5s %-15s %-15s %-10s %-10s %-15s %s\n",
emp.num,
emp.name,
emp.gender,
emp.birthdate,
emp.startdate,
emp.education,
emp.position,
emp.phone,
emp.address
);
}
//查询职工
void searchEmployee(struct Employee* newEmp, int* len)
{
int choice,flag=0;
printf("请选择查询方式:\n");
printf("1. 查询职工编号\n");
printf("2. 查询姓名\n");
printf("3. 查询性别\n");
printf("4. 查询学历\n");
printf("5. 查询职务\n");
printf("请选择:");
scanf_s("%d", &choice);
switch (choice) {
case 1: {//编号
int targetNum;
printf("请输入要查询的职工编号:");
scanf_s("%d", &targetNum);
// 遍历数组,查找职工编号匹配的数据并打印
for (int i = 0; i < *len; ++i) {
if (newEmp[i].num == targetNum) {
printEmployee(newEmp[i],&flag);
}
}
break;
}
case 2: {//姓名
char targetName[50]="";
printf("�
没有合适的资源?快使用搜索试试~ 我知道了~
C语言期末/课程设计:职工管理系统(vs2022)
共29个文件
tlog:7个
pdb:2个
db:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 63 浏览量
2024-05-17
19:09:00
上传
评论
收藏 6.61MB RAR 举报
温馨提示
文章介绍:https://blog.csdn.net/weixin_47040861/article/details/136007440 职工管理系统 问题描述:对单位的职工进行管理,包括插入、删除、查找、排序等功能。 要求:职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。 (1) 新增一名职工:将新增职工对象存入职工数据文件中。 (2) 删除一名职工:从职工数据文件中删除一名职工对象。 (3) 查询:从职工数据文件中查询符合某些条件的职工。 (4) 修改:检索某个职工对象,对其某些属性进行修改。 (5) 排序:按某种需要对职工对象文件进行排序(冒泡、选择、插入排序等任选两种方法实现)。 实现提示:职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。 (1)由键盘输入职工对象,以文件方式保存,程序执行时先将文件读入内存。 (2) 对职工对象中的“姓名"按字典顺序进行排序。 (3)对排序后的职工对象进行增、删、查询、修改、排序等操作。 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
资源推荐
资源详情
资源评论
收起资源包目录
职工管理系统.rar (29个子文件)
职工管理系统
.vs
职工管理系统
v17
Browse.VC.db 31.71MB
Solution.VC.db 428KB
.suo 31KB
ipch
AutoPCH
fffd42c14676e755
MAIN.ipch 3.38MB
FileContentIndex
11286df7-190d-4686-9a41-eb1860a4a11a.vsidx 8KB
fe1de641-914a-4269-b3b4-75b80c2a08fa.vsidx 7KB
x64
Debug
workers.csv 0B
职工管理系统.pdb 1.46MB
职工管理系统.exe 77KB
职工管理系统
职工管理系统.vcxproj.filters 964B
职工管理系统.vcxproj.user 168B
职工管理系统.vcxproj 6KB
workers.csv 171B
x64
Debug
vc143.pdb 100KB
职工管理系统.log 104B
职工管理系统.ilk 882KB
职工管理系统.tlog
CL.write.1.tlog 320B
Cl.items.tlog 135B
CL.command.1.tlog 638B
职工管理系统.lastbuildstate 164B
link.command.1.tlog 1KB
link.read.1.tlog 2KB
link.write.1.tlog 324B
CL.read.1.tlog 19KB
职工管理系统.exe.recipe 310B
vc143.idb 235KB
main.obj 105KB
main.c 14KB
职工管理系统.sln 1KB
共 29 条
- 1
资源评论
- m0_719270302024-06-28实在是宝藏资源、宝藏分享者!感谢大佬~
- 2401_851600522024-05-27非常有用的资源,可以直接使用,对我很有用,果断支持!
小辰代写
- 粉丝: 3861
- 资源: 84
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 微信支付账单(20240501-20240801).zip
- 通过Qlik sense 商业智能产品实现数据分析,亮化分析应用
- 管家婆辉煌普普版15.0
- 基于Delphi的CryScript脚本语言设计源码,融合Lua语言特性
- 基于Vue框架的邻家小铺全平台uniapp版本设计源码
- 基于Java核心语言的深圳市国益国际物流对外接口文档及多语言对接Demo设计源码
- 基于Vue和TypeScript的软件平台架构实验二前端设计源码
- 暴风电视 50X3 50AI4A 屏V500HJ1-PE8(C7) 机编60000AM9702 60000AM9703 本地升级
- 基于Vue的超市管理电商平台前端设计源码
- 基于Vue框架的hmtt项目源码,探讨尤玉溪对Vue的不懂之处
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功