【课程设计】企业职工工资管理系统 C语言版

本文档详细介绍了使用C语言在VC6.0环境下开发的企业职工工资管理系统,系统具备录入、修改、查询、删除、排序及文件读写等功能。通过结构体数组存储职工信息,实现了增删改查的函数化操作,以及文件操作接口,为用户提供友好界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章主要讲述的是利用 C 语言在 VC6.0编译器下开发的企业职工工资管理系统,在所开发的管理系统中,可以实现录入、修改、查询、删除、排序和将信息保存到文件,以及从文件中读出信息的功能。具体的内容可查看本文章,欢迎广大朋友们前来学习和指教。如果有需要源代码的朋友们可点击博主的主页资源页面进行下载。

一、设计思路

(1)采用 C 语言来进行企业职工工资管理系统的开发设计;
(2)利用结构体数组实现企业职工工资管理系统的数据结构设计;
(3)系统具有输入、修改、查询、删除、排序和将信息保存到文件,以及从文件中读出信息的功能;
(4)系统在实现增、删、改、查、读入文件和读出文件的各个功能用函数的形式来实现;
(5)利用 do…while 循环语句来建立各个功能模块之间的连接,并且有简单的功能选择操作界面,用户可以通过数字选择功能;

二、模块设计

1.数据宏定义

宏定义则是设置了结构体数组中数组的下标,表示可以输入的数组数据的最大范围。

#define MAX 1000//企业职工最大人数
#define NUM 30//结构体数组的下标
#define ADD 20//地址的长度
#define NUM1 10//学历,职位,姓名的长度
#define SEX 5//性别的长度
2.数据库设计

采用结构体数组来实现职工信息数据的存储,同时在结构体数组中存放了职工对象的属性信息。

//*****声明结构体*******//
struct person
{
	int num;//职工号
	char name[NUM1];//姓名
	char position[NUM1];//职位
	char gread[NUM1];//学历
	char sex[SEX];//性别
	char birth[NUM];//出生
	char add[ADD];//住址
	double paid;//基本工资
	double extra;//奖金
	double discount;//扣款
	double pay;//实发工资
};
struct person per[MAX];
int now_per=0;
3.函数模块声明

(1)声明主体函数

void star(int n);//输出*函数
void begin();//登陆界面函数
void display();//主界面函数
void input();//输入信息函数
void find();//查询信息函数
void modify();//修改信息函数
void glance();//浏览信息函数
void sort();//排序信息函数
void insert();//插入信息函数
void dele();//删除信息函数

(2)声明局部函数

void find_name();//按姓名查找
void find_num();//按编号查找
void find_paid();//按工资查找
void modify_num();//按编号修改
void modify_name();//按姓名修改
void sortnum();//按编号排序
void sortpaid();//按工资排序
void dele_num();//按编号删除
void dele_name();//按姓名删除
void dele_paid();//按工资删除
void read();//读入信息文件函数
void save();//保存信息到文件函数
4.系统流程图

本系统流程图介绍了企业职工工资管理系统能完成的基本功能,以及基本功能下所具备的子功能模块。系统各个功能之间的操作流畅,根据所选择的数字信息便可以实现其对应的操作。
在这里插入图片描述

三、函数功能模块

1.主菜单函数

企业职工工资管理系统的主菜单页面,通过这个页面可以查看系统所具备的所有基本功能。

void display()//主菜单函数
{
   int choose; 
   char ch;
   system("cls");
   do
   {
    printf("\n\n\t");
	star(60);
	printf("\n\n\t\t\t"); 
	printf("欢迎登陆企业工资管理系统");
    printf("\n\n\t");
	star(60);
	printf("\n\n\n");
	printf("\t\t\t1   录入职工信息        \n");
	printf("\t\t\t2   查询职工信息        \n");
	printf("\t\t\t3   修改职工信息        \n");
	printf("\t\t\t4   浏览职工信息        \n");
	printf("\t\t\t5   排序职工信息        \n");
	printf("\t\t\t6   插入职工信息        \n");
	printf("\t\t\t7   删除职工信息        \n");
	printf("\t\t\t8   文件读入信息        \n");
	printf("\t\t\t9   安全退出系统        \n");
	printf("\n\t");
	star(60);
	printf("\n\n\t");
    printf("你选择的是(1-9):");
	fflush(stdin);
	scanf("%d",&choose);
	ch=getchar();
	switch(choose)
	{
	case 1:
		input();
		break;
	case 2:
		find();
		break;
	case 3:
		modify();
		break;
	case 4:
		glance();
		break;
	case 5:
		sort();
		break;
	case 6:
		insert();
		break;
	case 7:
		dele();
		break;
	case 8:
		read();
		break;
	case 9:
		system("cls");
        printf("\n\n\t\t你已经安全退出!\n\n\t\t");
		exit(0);
		break;
	default:
		printf("请正确输入!");
		break;
	}
   }
   while(1);
}
2.录入职工信息

根据页面提示信息,可以录入职工的基本数据信息。

void input()//输入信息函数
{
	int i=0;
	char ch;
	system("cls");
	do
	{
		printf("\n\n\t");
		star(60);
		printf("\n\n\t\t\t\t");
		printf("录入职工信息");
		printf("\n\n\t");
		star(60);
		printf("\n\n\n\t输入第%d个职工的信息:\n",i+1);
	    printf("\n\t输入职工编号:\t");
		fflush(stdin);
		scanf("%d",&per[i].num);
		printf("\n\t输入职工姓名:\t");
		fflush(stdin);
		gets(per[i].name);
	    printf("\n\t输入职工性别:\t");
		fflush(stdin);
	    gets(per[i].sex);
        printf("\n\t输入职工出生:\t");
		fflush(stdin);
		gets(per[i].birth);
        printf("\n\t输入职工住址:\t");
		fflush(stdin);
		gets(per[i].add);
		printf("\n\t输入职工学历:\t");
		fflush(stdin);
		gets(per[i].gread);
		printf("\n\t输入职工职位:\t");
		fflush(stdin);
		gets(per[i].position);
		printf("\n\t输入职工基本工资:\t");
		fflush(stdin);
		scanf("%lf",&per[i].paid);
        printf("\n\t输入职工奖金:\t");
		fflush(stdin);
		scanf("%lf",&per[i].extra);
        printf("\n\t输入职工扣款:\t");
		fflush(stdin);
		scanf("%lf",&per[i].discount);
		printf("\n\n");
		i++;
		now_per=i;
		save();
		printf("\n\n\t是否继续输入?(Y/N):");
		fflush(stdin);
		ch=getchar();
		system("cls");
	}
	while(ch!='n'&&ch!='N');
	system("cls");
}

3.查找职工信息

主要是显示查找职工信息主功能模块下所具备的子功能模块信息。

void find()//查找信息函数
{
	int i=0;
	int choose;
	char ch;
	system("cls");
    do
	{
    printf("\n\t");
	star(60);
	printf("\n\n\t\t\t查询职工信息");
	printf("\n\n\t");
	star(60);
	printf("\n");
	printf("\n\t1  按编号查找");
	printf("\n\t2  按姓名查找");
	printf("\n\t3  按基本工资查找");
	printf("\n\t4  返回上一层");
	printf("\n\n\n\t");
	star(60);
	printf("\n\n\t你选择的是(1-4):\t");
	fflush(stdin);
	scanf("%d",&choose);
	ch=getchar();
	switch(choose)
	{
	case 1:
       	find_num();
        break;
	case 2:
	    find_name();
		break;
	case 3:
		find_paid();
		break;
	case 4:
		display();
		break;
	default:
		printf("请正确输入!");
		break;
	}
	}
	while(1);
}
4.修改职工信息

主要是显示修改职工信息主功能模块下所具备的子功能模块信息。

void modify()//修改信息函数
{
	int choose;
	char ch;
    system("cls");
	do
	{ 
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t\t\t排序职工信息");
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t");
	  printf("1  按编号修改\n\t");
	  printf("2  按姓名排序\n\t");
	  printf("3  返回上一层");
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t\t你的选择是(1-3):\t");
	  fflush(stdin);
	  scanf("%d",&choose);
	  ch=getchar();
	  switch(choose)
	  {
	  case 1:
		  modify_num();
		  break;
	  case 2:
		  modify_name();
		  break;
	  case 3:
		  display();
		  break;
	  default:
		  printf("请正确选择!");
		  break;
	  }
	}
	while(1);
}

5.浏览职工信息

主要是统计所有职工的工资信息,并且显示在页面上。

void glance()//浏览信息函数
{
	int i;
	char ch;
	system("cls");
	do
	{
      printf("\n\t");
	  star(95);
	  printf("\n\n\t\t\t\t\t浏览全部职工信息");
	  printf("\n\n\t");
	  star(95);
	  printf("\n\n\t");
      printf("编号\t姓名\t性别\t出生\t住址\t学历\t职位\t基本工资\t奖金\t扣款\t实发工资\n\n");
	  for(i=0;i<now_per;i++)
	  {
		 per[i].pay=per[i].paid+per[i].extra-per[i].discount;
         printf("\t%-d\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-.2lf\t\t%-.2lf\t%-.2lf\t%-.2lf\n\n",per[i].num,per[i].name,per[i].sex,per[i].birth,per[i].add,per[i].gread,per[i].position,per[i].paid,per[i].extra,per[i].discount,per[i].pay);
	  }
	  printf("\n\t");
	  star(95);
	  printf("\n\n\t按任意键继续...\n");
	  ch=getchar();
	}
	while(!ch);
	system("cls");
}
6.职工信息排序

主要是显示职工信息排序主功能模块下所具备的子功能模块信息。

void sort()//排序信息函数
{
	int choose;
	char ch;
    system("cls");
	do
	{ 
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t\t\t排序职工信息");
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t");
	  printf("1  按编号排序\n\t");
	  printf("2  按基本工资排序\n\t");
	  printf("3  返回上一层");
	  printf("\n\n\t");
	  star(60);
	  printf("\n\n\t\t你的选择是(1-3):\t");
	  fflush(stdin);
	  scanf("%d",&choose);
	  ch=getchar();
	  switch(choose)
	  {
	  case 1:
		  sortnum();
		  break;
	  case 2:
		  sortpaid();
		  break;
	  case 3:
		  display();
		  break;
	  default:
		  printf("请正确选择!");
		  break;
	  }
	}
	while(1);
}
7.插入职工信息

主要是显示插入职工信息主功能模块下所具备的子功能模块信息。

void insert()//插入信息函数
{
	char ch;
	system("cls");
	do
	{
    printf("\n\t");
	star(60);
	printf("\n\n\t\t\t插入职工信息");
	printf("\n\n\t");
	star(60);
	printf("\n\n\t");
	printf("输入插入的职工信息:\n");
    printf("\n\t输入职工编号:\t");
	fflush(stdin);
	scanf("%d",&per[now_per].num);
	printf("\n\t输入职工姓名:\t");
	fflush(stdin);
	gets(per[now_per].name);
    printf("\n\t输入职工性别:\t");
	fflush(stdin);
	gets(per[now_per].sex);
    printf("\n\t输入职工出生:\t");
    fflush(stdin);
    gets(per[now_per].birth);
    printf("\n\t输入职工住址:\t");
    fflush(stdin);
	gets(per[now_per].add);
	printf("\n\t输入职工学历:\t");
	fflush(stdin);
	gets(per[now_per].gread);
	printf("\n\t输入职工职位:\t");
	fflush(stdin);
	gets(per[now_per].position);
	printf("\n\t输入职工基本工资:\t");
	fflush(stdin);
	scanf("%lf",&per[now_per].paid);
    printf("\n\t输入职工奖金:\t");
	fflush(stdin);
	scanf("%lf",&per[now_per].extra);
    printf("\n\t输入职工扣款:\t");
	fflush(stdin);
	scanf("%lf",&per[now_per].discount);
	now_per+=1;
	save();
	printf("\n\n\t是否需要继续输入?(Y/N):");
	fflush(stdin);
	ch=getchar();
	system("cls");
	}
	while(ch!='n'&&ch!='N');
} 
8.删除职工信息

主要是显示删除职工信息主功能模块下所具备的子功能模块信息。

void dele()//删除信息函数
{ 
    int choose;
	char ch;
    system("cls");
	do
	{ 
	  printf("\n\n\t\t");
	  star(60);
	  printf("\n\n\t\t\t\t删除职工信息");
	  printf("\n\n\t\t");
	  star(60);
	  printf("\n\n\t\t");
	  printf("1  按编号删除\n\t\t");
	  printf("2  按姓名删除\n\t\t");
	  printf("3  按基本工资删除\n\t\t");
	  printf("4  返回上一层\n\t\t");
	  printf("\n\n\t\t");
	  star(60);
	  printf("\n\n\t\t你的选择是(1-4):\t");
	  fflush(stdin);
	  scanf("%d",&choose);
	  ch=getchar();
	  switch(choose)
	  {
	  case 1:
		  dele_num();
		  break;
	  case 2:
		  dele_name();
		  break;
	  case 3:
		  dele_paid();
		  break;
	  case 4:
		  display();
		  break;
	  default:
		  printf("请正确选择!");
		  break;
	  }
	}
	while(1);
}
9.数据读入文件

该功能主要是将所输入的所有职工数据全部存入文件,可以根据自己的需要指定需要存储的文件路径。

void save()//保存信息到文件函数
{
	int i;
	char ch;
	char file[10];
	FILE *fp;
	system("cls");
	printf("\n\n\t请输入要保存的文件路径:\t");
	fflush(stdin);
	gets(file);
	if((fp=fopen(file,"w"))==NULL)
	{
		printf("\n\n\t保存失败!");
		ch=getchar();
		exit(0);
	}
	for(i=0;i<now_per;i++)
       fprintf(fp,"%-d\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-.2lf\t\t%-.2lf\t%-.2lf\n\n",per[i].num,per[i].name,per[i].sex,per[i].birth,per[i].add,per[i].gread,per[i].position,per[i].paid,per[i].extra,per[i].discount);
	fclose(fp);
	printf("\n\n\t正在保存,请稍后");
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	system("cls");
	printf("\n\n\t职工信息已成功保存在 %s !\n\n",file);
	Sleep(500);
	system("cls");
}

10.数据读出文件

该功能主要实现的是从文件中读出所有职工数据信息,系统关闭之后,下一次打开该系统后,点击该功能后,输入需要读取的数据文件,点击确定即可成功将数据信息读入本职工工资管理系统。

void read()//从文件读取信息函数
{
	int i;
	char ch;
	char file[10];
	FILE *fp;
	system("cls");
	printf("\n\n\t请输入要读入职工信息的文件路径:\t");
	fflush(stdin);
	gets(file);
    if((fp=fopen(file,"r"))==NULL)
	{
		printf("文件读入失败!");
		ch=getchar();
        display();
	}
	now_per=0;
	for(i=0;i<MAX&&!feof(fp);i++) 
	{
	    fscanf(fp,"%d%s%s%s%s%s%s%lf%lf%lf\n\n",&per[i].num,per[i].name,per[i].sex,per[i].birth,per[i].add,per[i].gread,per[i].position,&per[i].paid,&per[i].extra,&per[i].discount);
	    now_per++;
	} 	
	fclose(fp);
    printf("\n\n\t正在文件中读取职工信息,请稍后");
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	system("cls");
	Sleep(500);
	system("cls");
	printf("\n\n\n\n\t%s 文件中职工信息读取成功!",file);
	Sleep(600);
	printf("\n\n\t请按任意键继续....");
	ch=getchar();
	system("cls");
}

四、功能模块展示

1.功能页面展示

在这里插入图片描述

2.录入职工信息

在这里插入图片描述在这里插入图片描述

3.查询职工信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.修改职工信息

在这里插入图片描述
在这里插入图片描述

5.浏览职工信息

在这里插入图片描述

6. 职工信息排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.插入职工信息

在这里插入图片描述
在这里插入图片描述

8.删除职工信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.数据读入文件

在这里插入图片描述
在这里插入图片描述

10.数据读出文件

在这里插入图片描述
在这里插入图片描述

非常感谢广大朋友们的查看,如果对本篇文章有任何问题或者有什么不足之处,还请广大朋友们的不吝赐教。如果有喜欢本篇文章的朋友们还请给博主一个一键三连吧。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白_xm

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值