C语言程序设计--职工工资管理系统

题    目: 职工工资管理

一.程序设计思路

1、设计思路

(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;

(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;

(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。

2、总体设计

整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。

3、部分程序设计

1)信息输入

printf("请您输入姓名:"); 

scanf("%s",p->data.name); 

getchar(); 

printf("请您输入性别(m/f):"); 

scanf("%s",p->data.sex); 

getchar(); 

printf("请您输入上旬完成(百分比):"); 

scanf("%f",&p->data.spercent); 

getchar(); 

printf("请您输入中旬完成(百分比):"); 

scanf("%f",&p->data.zpercent); 

getchar(); 

printf("请您输入下旬完成(百分比):"); 

scanf("%f",&p->data.xpercent); 

getchar(); 

p->data.totle=p->data.spercent+p->data.zpercent+p->data.xpercent; 

p->data.ave=p->data.totle / 3; 

if(p->data.totle<100)

{p->data.jiangjin=(p->data.totle-100)*10;}

else p->data.jiangjin=(p->data.totle-100)*10;

//信息输入已经完成 

2)浏览模块

调用排序模块的排序功能,可以浏览排序后的所有职工信息。

3)排序模块

排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。

4)查询模块

实现按照编号和姓名的查询,采用基本的查找方法即可。

二.功能模块图

.数据结构设计

系统用将职工各项信息以结构体类型char dir来定义,它包括num,name[15]等不同类型的数据项,同时定义了结构体数组,包括N个数组元素,对应N个职工,每一个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。

四.算法设计

1、主函数

主函数一般设计比较简单,只提供输入、处理和输出部分的函数调用。各功能模块用菜单方式选择。

[流程图]

"

#include "stdlib.h" 

#include "string.h"

int shoudsave=0; 

char dir[15];

struct member 

char num[5];//编号

char name[15]; 

char sex[1]; 

float spercent; 

float zpercent; 

float xpercent; 

float jiangjin;

float totle; 

float ave; 

}; //一个结构体

typedef struct node 

struct member data;//指向结构体的结构体 

struct node *next; 

}Node,*Link; 

void explain()

{printf("=============================关于此程序的操作说明==============================\n");

printf("===1>:员工每旬应该完成量为33.3个百分点,输入只输数字部分。\n");

printf("===2>:员工每月应该完成量完成量为100个百分点。\n");

printf("===3>:员工奖金按其超额总应该完成量(即百分之百)的多少计算。\n");

printf("===4>:奖金=(总完成比-1)*1000。\n");

printf("===5>:员工底金为1000元。\n"); 

printf("===6>:逻辑删除资料必须在已经保存了先前记录的基础上方可进行。\n"); 

printf("===7>:进行逻辑删除资料后如果保存即变为物理删除。\n"); 

printf("===8>:本程序在c++环境中完成,程序文件扩展名为.c。\n"); 

}

void menu() //菜单 

printf("********************************************************************************"); 

printf("\t1获取说明信息\t\t\t\t\t 2输入员工资料\n"); 

printf("\t3删除员工资料\t\t\t\t\t 4查询员工资料\n"); 

printf("\t5修改员工资料\t\t\t\t\t 6显示员工资料\n"); 

printf("\t7统计员工业绩\t\t\t\t\t 8排序员工实发工资\n"); 

printf("\t9保存员工资料\t\t\t\t\t10逻辑删除员工资料\n");

printf("\t0退出系统\n");

printf("********************************************************************************\n"); 

2各功能模块设计

1 输入模块

struct member 

char num[5];//编号

char name[15]; 

char sex[1]; 

float spercent; 

float zpercent; 

float xpercent; 

float jiangjin;

float totle; 

float ave; 

}; //一个结构体 [流程图]

}2 浏览模块

[需求分析]

该模块的功能是显示所有职工记录工资信息.

  /***************浏览(全部)模块***************/

   void browse()   /*浏览模块*/

    {

        void printf_one(int i);

        void printf_face();

        int load();

        void menu();

        int i,n;

        n=load();   /*加载记录*/

        printf_face();      /*调用显示数据结构项目函数*/

        for(i=0;i<n;i++)

        {

            if((i!=0)&&(i%10==0))   /*目的是分屏显示*/

            {printf("\n\npress any key to contiune...");

             getch();

             puts("\n\n");}

             printf_one(i);    /*调用显示一个记录的函数*/

              printf("\n");

        }

        printf("\t there are %d record.\n",n);

        printf("\n pass any key to back...");

        getch();   /*按任意键*/

        menu();

}

⑷ 查找模块

该模块的功能是根据输入的职工姓名和卡号查找对应的记录.

       

[程序]

     /***************查找函数***************/

    void search()    /*查找模块*/

    {  

       int n,w1;

       do

        {

         puts("\t\t\t1.search by name");

         puts("\t\t\t2.search by num");

         scanf("%d",&n);

        if(n<1||n>2)    /*对选择数字作判断*/

        {

            w1=1;

            getchar();

        }

        else w1=0;

    }

    while(w1==1);

    switch(n)

    {

        void search_1();

        void search_2();

        case 1:search_1();break;

        case 2:search_2();break;

    }

}

      

   void  search_1()   /*按姓名查找*/

    {

       int load();

       void printf_face();

       void menu();

       void printf_one(int i);

       int i,n,k,w1=1,w2,w3,w4;

       struct list s;

       n=load();

        do

        {

            do

            {

                k=-1;

                printf("\n\nenter name that you want to search!    name:");

                scanf("%s",s.name);

                printf_face();    /*调用显示数据结构项目函数*/

                for(i=0;i<n;i++)     /*查找所需数据*/

                if(strcmp(s.name,list[i].name)==0)

                {

                    k=i;      /*找到数据*/

                    printf_one(k);break;    /*调用显示一个记录的函数*/

                }

                if(k==-1)

                {

                    printf("\n\n NO.exit!please");

                    printf("\n\nare you again?\n\t1).again   2).NO and back  [ ]\b\b");

                    scanf("%d",&w1);  

                    if(w1==2)break;

                }

            }

            while(k==-1&&w1==1);     /*如果w1不等于1这直接返回*/

            w4=0;w3=0;

            if(k!=-1)    /*k不等于-1表示已找到,如果找到则选择操作*/

            {             

                 printf("successful");

                 printf("\n\n what do you want to do?\n\t1).search another  2).back  [ ]\b\b");

                 scanf("%d",&w2);

            }

    }

        while(w2==1);

        menu();

    }

   

五、部分程序代码

每个函数都要有功能说明)

#include "stdio.h"

#include "stdlib.h" 

#include "string.h"

int shoudsave=0; 

char dir[15];

struct member 

char num[5];//编号

char name[15]; 

char sex[1]; 

float spercent; 

float zpercent; 

float xpercent; 

float jiangjin;

float totle; 

float ave; 

}; //一个结构体

typedef struct node 

struct member data;//指向结构体的结构体 

struct node *next; 

}Node,*Link; 

void explain()

{printf("=============================关于此程序的操作说明==============================\n");

printf("===1>:员工每旬应该完成量为33.3个百分点,输入只输数字部分。\n");

printf("===2>:员工每月应该完成量完成量为100个百分点。\n");

printf("===3>:员工奖金按其超额总应该完成量(即百分之百)的多少计算。\n");

printf("===4>:奖金=(总完成比-1)*1000。\n");

printf("===5>:员工底金为1000元。\n"); 

printf("===6>:逻辑删除资料必须在已经保存了先前记录的基础上方可进行。\n"); 

printf("===7>:进行逻辑删除资料后如果保存即变为物理删除。\n"); 

printf("===8>:本程序在c++环境中完成,程序文件扩展名为.c。\n"); 

}

void menu() //菜单 

printf("********************************************************************************"); 

printf("\t1获取说明信息\t\t\t\t\t 2输入员工资料\n"); 

printf("\t3删除员工资料\t\t\t\t\t 4查询员工资料\n"); 

printf("\t5修改员工资料\t\t\t\t\t 6显示员工资料\n"); 

printf("\t7统计员工业绩\t\t\t\t\t 8排序员工实发工资\n"); 

printf("\t9保存员工资料\t\t\t\t\t10逻辑删除员工资料\n");

printf("\t0退出系统\n");

printf("********************************************************************************\n"); 

void printc() // 本函数用于输出中文 

printf("编号 姓名    性别 总完成比 旬平均 基本工资 奖金 工资总额 \n");

void printe(Node *p)//本函数用于输出英文 

printf("%-5s%-10s%-4s%6.1f %6.1f  %6.1f %6.1f %6.1f\n",p->data.num,p->data.name,p->data.sex,p->data.totle,p->data.ave,1000.0,p->data.jiangjin,1000+p->data.jiangjin); 

void printstart() 

printf("-----------------------------------------------------------------------\n"); 

void Wrong() //如果错误

printf("\n=====>提示:输入错误!\n"); 

void Nofind() //如果没找到

printf("\n=====>提示:没有找到该员工!\n"); 

Node* Locate(Link l,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针 

    Node *r; 

    if(strcmp(nameornum,"num")==0) //按编号查询 

 { 

        r=l->next; 

        while(r!=NULL) 

  { 

            if(strcmp(r->data.num,findmess)==0) 

            return r; 

            r=r->next; 

  } 

 } 

    else if(strcmp(nameornum,"name")==0) //按姓名查询 

 { 

        r=l->next; 

        while(r!=NULL) 

  { 

            if(strcmp(r->data.name,findmess)==0) 

            return r; 

            r=r->next; 

  } 

 } 

    return 0; 

.程序运行结果

1、主函数运行,显示主菜单函数menu()

2、输入数字2,添入两组数据

3、如果再输入数字2,新增一组数据并浏览

4、输入数字6,浏览所有职工信息

5、输入4,进行查询程序,再输入2 ,按姓名查询,输入1 ,按编号查询

6、输入数字5,按实发工资排序。

  • 10
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
工资管理系统是一个用于管理公司员工工资信息的系统,它可以对员工工资进行计算、记录、查询和调整。下面是一个简单的用C语言设计的工资管理系统代码设计。 ```c #include <stdio.h> typedef struct { char name[20]; int id; float salary; } Employee; float calculateSalary(float basicSalary, float overtime) { // 根据基本工资和加班时间计算工资 return basicSalary + 100 * overtime; } void displayEmployee(Employee employee) { // 显示员工信息 printf("员工名称:%s\n", employee.name); printf("员工编号:%d\n", employee.id); printf("员工工资:%.2f\n", employee.salary); printf("\n"); } int main() { int choice; Employee employees[100]; int employeeCount = 0; while (1) { printf("欢迎使用工资管理系统\n"); printf("1. 添加员工\n"); printf("2. 计算工资\n"); printf("3. 查询工资\n"); printf("4. 退出\n"); printf("请选择操作:"); scanf("%d", &choice); if (choice == 1) { // 添加员工 printf("请输入员工名称:"); scanf("%s", employees[employeeCount].name); printf("请输入员工编号:"); scanf("%d", &employees[employeeCount].id); employeeCount++; } else if (choice == 2) { // 计算工资 int id; float basicSalary, overtime; printf("请输入员工编号:"); scanf("%d", &id); printf("请输入基本工资:"); scanf("%f", &basicSalary); printf("请输入加班时间:"); scanf("%f", &overtime); // 查找员工 int i; for (i = 0; i < employeeCount; i++) { if (employees[i].id == id) { employees[i].salary = calculateSalary(basicSalary, overtime); break; } } if (i == employeeCount) { printf("没有找到该员工\n"); } } else if (choice == 3) { // 查询工资 int id; printf("请输入员工编号:"); scanf("%d", &id); // 查找员工 int i; for (i = 0; i < employeeCount; i++) { if (employees[i].id == id) { displayEmployee(employees[i]); break; } } if (i == employeeCount) { printf("没有找到该员工\n"); } } else if (choice == 4) { // 退出程序 break; } else { printf("无效选择,请重新选择\n"); } } return 0; } ``` 上述代码实现了一个简单的工资管理系统,可以添加员工、计算工资、查询工资等功能。以菜单形式展示给用户,根据用户的选择来执行相应的操作。输入员工的信息后,可以根据基本工资和加班时间计算员工的工资,也可以根据员工编号查询员工的信息。如有其他需求,可以根据具体情况进行扩展和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白茶丫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值