本篇文章主要讲述的是利用 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.数据读出文件
非常感谢广大朋友们的查看,如果对本篇文章有任何问题或者有什么不足之处,还请广大朋友们的不吝赐教。如果有喜欢本篇文章的朋友们还请给博主一个一键三连吧。