C语言:职工信息管理系统

一、系统功能

职工信息包括职工号、姓名、年龄、电话、家庭住址(职工号不重复)等。

详细功能如下:

(1)系统以菜单方式工作
(2)职工信息录入功能;
(3)职工信息浏览功能;
(4)职工信息查询功能; 
(5)职工信息删除、修改功能。

要求系统能正常,稳定运行,实现所有功能,并具有一定的容错能力。

二、涉及知识点

分支和循环结构、数组、函数、结构体。

三、代码实现

1.结构体定义

自定义一个结构体,用来存放单个职工信息,并定义全局变量teachers用来存放教师个数,代码如下:

int teachers = 0;//全局变量,教师数量
struct teacher//教师结构体
{
    char ID[20];//工号
    char name[7];
    int age;
    char tel[12];
    char address[30];
};

2.输出菜单

自定义menu函数,用来打印系统菜单,代码如下:

void menu()//菜单
{
	printf("=======职工信息管理系统=======\n");
	printf("===1.信息录入    2.信息浏览===\n");
	printf("===3.信息查询    4.信息删除===\n");
	printf("===5.信息修改    0.退出系统===\n");
	printf("==============================\n");
	printf("请输入要选择的数字:");
}

3.录入功能

自定义函数,实现职工信息的录入功能,并通过引入strcmp函数来进行工号对比,防止录入工号重复,代码如下:

void addinformation()//添加信息
{
	int i = teachers;
	printf("请输入职工号:");
	scanf("%s", &teach[i].ID);
	if (teachers != 0)
	{
		for (int j = 0; j < teachers; j++)
		{
			if(strcmp(teach[i].ID, teach[j].ID)==0)
			{
				system("cls");
				printf("职工工号重复!");
					Sleep(1200);
					system("cls");
					return 0;
			}
		}
	}
	printf("请输入职工姓名:");
	scanf("%s", &teach[i].name);
	printf("请输入职工年龄:");
	scanf("%d", &teach[i].age);
	printf("请输入职工电话:");
	scanf("%s", &teach[i].tel);
	printf("请输入职工家庭住址:");
	scanf("%s", &teach[i].address);
	system("cls");
	printf("教师信息录入成功!\n");
	Sleep(1200);
	system("cls");
}

4.浏览功能

调用全局变量teachers,即教师数量,作为循环次数,使用for循环遍历结构体数组并输出,便可实现浏览全部教师信息的功能,代码如下:

void browse()//浏览信息
{
	if (teachers > 0)
	{
		for (int i = 0; i < teachers; i++)
		{
			printf("职工号:%s\n",teach[i].ID);
			printf("姓名:%s\n",teach[i].name);
			printf("年龄:%d\n",teach[i].age);
			printf("电话:%s\n",teach[i].tel);
			printf("家庭住址:%s\n\n",teach[i].address);
		}
		system("pause");
		system("cls");
	}
	else
	{
		system("cls");
		printf("暂无职工信息!\n");
		Sleep(1200);
		system("cls");
	}
}

5.查询功能

使用strcmp函数将输入的职工号和已录入的职工号进行逐一对比,若系统中有对应职工号,则输出对应信息,否则输入无效,代码如下:

void searchinformation()
{
	char id[20];
	int i = 0;
	printf("请输入要查找的职工工号:");
	scanf("%s", &id);
	for (i = 0; i < teachers; i++)
	{
		if (strcmp(id,teach[i].ID)==0)
		{
			printf("职工号:%s\n", teach[i].ID);
			printf("姓名:%s\n", teach[i].name);
			printf("年龄:%d\n", teach[i].age);
			printf("电话:%s\n", teach[i].tel);
			printf("家庭住址:%s\n\n", teach[i].address);
			system("pause");
			system("cls");
			return 0;
		}
	}
	if (id != teach[i].ID)
	{
		system("cls");
		printf("查无此人!请检查输入的职工工号\n");
		Sleep(1200);
		system("cls");
	}
}

6.删除功能

仍然使用strcmp函数将输入的职工号和已录入的职工号进行对比,若有匹配项,则进行删除工作,将指定职工之后的职工信息在结构体数组中向前移一位,对指定职工信息进行覆盖,达到删除效果;若无匹配项,则输入无效,代码如下:

void deleteinformation()
{
	char idd[20];
	printf("请输入要删除的职工工号:");
	scanf("%s",&idd);
	for (int i = 0; i < teachers; i++)
	{
		if (strcmp(idd,teach[i].ID)==0)
		{
			for (int j = i;j < teachers;j++)
			{
				teach[j] = teach[j + 1];
			}
			teachers--;
			system("cls");
			printf("删除职工信息成功!\n");
			Sleep(1200);
			system("cls");
			return 0;
		}

	}
	system("cls");
	printf("职工工号不存在!\n");
	Sleep(1200);
	system("cls");
}

7.修改功能

使用strcmp函数(没错还是我)将输入的职工号进行逐一对比,若有匹配项,则进行修改工作,将新输入的信息对原信息进行覆盖,达到修改功能;若无匹配项,则输入无效,代码如下:

void changeinformation()
{
	char id[20];
	printf("请输入要修改的职工工号");
	scanf("%s", &id);
	for (int i = 0; i < teachers; i++)
	{
		if (strcmp(id, teach[i].ID) == 0)
		{
			printf("请输入职工号:");
			scanf("%s", &teach[i].ID);
			printf("请输入职工姓名:");
			scanf("%s", &teach[i].name);
			printf("请输入职工年龄:");
			scanf("%d", &teach[i].age);
			printf("请输入职工电话:");
			scanf("%s", &teach[i].tel);
			printf("请输入职工家庭住址:");
			scanf("%s", &teach[i].address);
			system("cls");
			printf("修改职工信息成功!\n");
			Sleep(1200);
			system("cls");
			return 0;
		}

	}
	system("cls");
	printf("职工工号不存在!\n");
	Sleep(1200);
	system("cls");
}

8.主函数段

对上述函数进行合理调用,并使用do while循环合理控制代码运行,再加上一点点细节,代码完成!

int main()
{
	int mode = 0;

	do
	{
		menu();
		scanf("%d", &mode);
		switch (mode)
		{
		case 1:
			printf("\n");
			addinformation();
			teachers++;
			break;
		case 2:
			printf("\n");
			browse();
			break;
		case 3:
			printf("\n");
			searchinformation();
			break;
		case 4:
			printf("\n");
			deleteinformation();
			break;
		case 5:
			changeinformation();
			break;
		case 0:
			system("cls");
			printf("系统已退出");
			break;
		default:
			system("cls");
			printf("输入错误!请重新输入");
			Sleep(1200);
			system("cls");
		}
	} while (mode);
}

9.完整代码

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
void browse();
void menu();
void addinformation();
void searchinformation();
void deleteinformation();
void changeinformation();
struct teacher//教师结构体
{
	char ID[20];//工号
	char name[7];
	int age;
	char tel[12];
	char address[30];
};

struct teacher teach[50];//教师结构体数组
int teachers = 0;//全局变量,教师数量
int main()
{
	int mode = 0;

	do
	{
		menu();
		scanf("%d", &mode);
		switch (mode)
		{
		case 1:
			printf("\n");
			addinformation();
			teachers++;
			break;
		case 2:
			printf("\n");
			browse();
			break;
		case 3:
			printf("\n");
			searchinformation();
			break;
		case 4:
			printf("\n");
			deleteinformation();
			break;
		case 5:
			changeinformation();
			break;
		case 0:
			system("cls");
			printf("系统已退出");
			break;
		default:
			system("cls");
			printf("输入错误!请重新输入");
			Sleep(1200);
			system("cls");
		}
	} while (mode);
}

void menu()//菜单
{
	printf("=======职工信息管理系统=======\n");
	printf("===1.信息录入    2.信息浏览===\n");
	printf("===3.信息查询    4.信息删除===\n");
	printf("===5.信息修改    0.退出系统===\n");
	printf("==============================\n");
	printf("请输入要选择的数字:");
}

void addinformation()//添加信息
{
	int i = teachers;
	printf("请输入职工号:");
	scanf("%s", &teach[i].ID);
	if (teachers != 0)
	{
		for (int j = 0; j < teachers; j++)
		{
			if(strcmp(teach[i].ID, teach[j].ID)==0)
			{
				system("cls");
				printf("职工工号重复!");
					Sleep(1200);
					system("cls");
					return 0;
			}
		}
	}
	printf("请输入职工姓名:");
	scanf("%s", &teach[i].name);
	printf("请输入职工年龄:");
	scanf("%d", &teach[i].age);
	printf("请输入职工电话:");
	scanf("%s", &teach[i].tel);
	printf("请输入职工家庭住址:");
	scanf("%s", &teach[i].address);
	system("cls");
	printf("教师信息录入成功!\n");
	Sleep(1200);
	system("cls");
}
void browse()//浏览信息
{
	if (teachers > 0)
	{
		for (int i = 0; i < teachers; i++)
		{
			printf("职工号:%s\n",teach[i].ID);
			printf("姓名:%s\n",teach[i].name);
			printf("年龄:%d\n",teach[i].age);
			printf("电话:%s\n",teach[i].tel);
			printf("家庭住址:%s\n\n",teach[i].address);
		}
		system("pause");
		system("cls");
	}
	else
	{
		system("cls");
		printf("暂无职工信息!\n");
		Sleep(1200);
		system("cls");
	}
}
void searchinformation()
{
	char id[20];
	int i = 0;
	printf("请输入要查找的职工工号:");
	scanf("%s", &id);
	for (i = 0; i < teachers; i++)
	{
		if (strcmp(id,teach[i].ID)==0)
		{
			printf("职工号:%s\n", teach[i].ID);
			printf("姓名:%s\n", teach[i].name);
			printf("年龄:%d\n", teach[i].age);
			printf("电话:%s\n", teach[i].tel);
			printf("家庭住址:%s\n\n", teach[i].address);
			system("pause");
			system("cls");
			return 0;
		}
	}
	if (id != teach[i].ID)
	{
		system("cls");
		printf("查无此人!请检查输入的职工工号\n");
		Sleep(1200);
		system("cls");
	}
}

void deleteinformation()
{
	char idd[20];
	printf("请输入要删除的职工工号:");
	scanf("%s",&idd);
	for (int i = 0; i < teachers; i++)
	{
		if (strcmp(idd,teach[i].ID)==0)
		{
			for (int j = i;j < teachers;j++)
			{
				teach[j] = teach[j + 1];
			}
			teachers--;
			system("cls");
			printf("删除职工信息成功!\n");
			Sleep(1200);
			system("cls");
			return 0;
		}

	}
	system("cls");
	printf("职工工号不存在!\n");
	Sleep(1200);
	system("cls");
}
void changeinformation()
{
	char id[20];
	printf("请输入要修改的职工工号");
	scanf("%s", &id);
	for (int i = 0; i < teachers; i++)
	{
		if (strcmp(id, teach[i].ID) == 0)
		{
			printf("请输入职工号:");
			scanf("%s", &teach[i].ID);
			printf("请输入职工姓名:");
			scanf("%s", &teach[i].name);
			printf("请输入职工年龄:");
			scanf("%d", &teach[i].age);
			printf("请输入职工电话:");
			scanf("%s", &teach[i].tel);
			printf("请输入职工家庭住址:");
			scanf("%s", &teach[i].address);
			system("cls");
			printf("修改职工信息成功!\n");
			Sleep(1200);
			system("cls");
			return 0;
		}

	}
	system("cls");
	printf("职工工号不存在!\n");
	Sleep(1200);
	system("cls");
}

结语

实力不精,花了一天时间才完成代码撰写和测试工作,如有错误,欢迎各位大佬指正。

至于代码运行截图,我本来是截了的,但我忘了保存。。所以没有运行截图,各位大佬如果感兴趣可以自己试一试。

  • 14
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值