工资管理系统课程设计报告

时间:2024.3.31

工资管理系统

课程设计报告

                         编写人:            

                        同组成员、0922305026          (课程设计负责人)

   0922305023         

0922305022         

                         完成日期:  20##623           
                         辅导教师:            

                         批阅日期:             

                         分数:                  

     

本程序主要的数据结构是单链表,它由四大模块组成(如下图所示):

工资管理系统功能模块图

(1) 输入记录模块:输入记录模块主要完成数据存入单链表的工作。在此工资管理系统中提供了从键盘读入。即从键盘一一输入员工的信息(包括编号,姓名,性别,年龄,工资等)并且读入过程会显示在屏幕上。

(2) 查询记录模块:查询也提供了两种关键字方式,按编号和按姓名查询。该模块的主要工作是在单链表中查找满足关键字的员工信息,用户可以选择以中方式进行查询,如果找到返回该员工节点并且打印该员工的工资信息,否则返回空指针NULL,并打印没有找到的提示。

(3) 更新记录模块:更新数据包括对员工工资信息的删除、插入、和排序(排序是对链表节点的修改而不修改员工信息)。删除功能是彻底删除掉某员工的工资信息,也就是单链表的删除操作,在删除某员工的同时也要修改他所在的部门的信息;插入功能是增添以员工的工资信息,采用的是链表的插入操作,在插入的同时也修改他所在部门的工资信息;排序功能用到的是冒泡排序,可以按照工资的实发和应发升序排序。

 (4) 输出记录模块:输出功能是将所有员工的工资信息输出到屏幕中,输出在屏幕上的为表格形式,以便读取方便。

     

2.1 功能模块设计

   1. 主函数main()执行流程

本系统提供了5个选项供用户选择,先显示目录菜单,提示用户输入选择。有效值为0到4,输入1则进入键盘输入员工信息功能模块,系统将会循环调用ADD()函数键盘添加员工信息。输入2进入查询记录模块,主要工作是在单链表中查找满足关键字的员工信息。输入3进入更新记录模块:更新数据包括对员工工资信息的删除、插入、和排序(排序是对链表节点的修改而不修改员工信息)。输入4进入输出记录模块:输出功能是将所有员工的工资信息输出到屏幕中,输出在屏幕上的为表格形式,以便读取方便。输入0退出本系统,操作结束。

main()会循环显示主界面直到输入0。(如下图所示)

 

主控函数流程图

2.输入记录模块

输入记录模块主要实现将数据存入单链表中,这部分的操作较为简单。从键盘输入,键盘输入则是循环调用Add()函数一一提示用户输入员工各项信息包括(姓名,编号,性别,年龄,工资等),也同时修改部门信息。这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据进行条件判断,直到满足条件判断为止,这样减少了代码的重复和冗余,符合模块化程序设计的特点。

3.查询记录模块

查询记录模块主要实现了在单链表中按员工姓名和编号查找满足相关条件的员工记录。在查询函数Sq()中,调用了Query()函数,根据*name查询信息,结果保存于link指针数组中,避免找到的姓名相同的员工被覆盖。

4.更新数据模块

更新数据包括插入、删除、排序,前二项用ADU()函数控制,删除调用Del()函数删除满足要求的员工信息,该操作需要遍历单链表,时间复杂度为O(n);插入是调用Add()函数 从键盘一一输入员工节点信息,然后插入到链表中时间复杂度为O(1);排序调用Sort()函数采用冒泡排序的算法对链表排序,时间复杂度为O(n*n)。

5. 输出信息模块

输出模块屏幕输出,屏幕输出为Display()函数按照TFORM2的格式按表格输出所有链表中的员工信息。文件输出是Save()函数将信息以TFORM3的格式写入C盘的data.txt中,以方便下次读取。

3 数据结构体设计

1、工资信息结构体

typedef struct            //--------------员工工资信息结构体;

{

 char gonghao[100];       //------------工人工号;

 char name[100];          //------------工人姓名;

 char bumen[1000];        //------------工人部门;

 int  phone[100];         //------------工人基本工资;

 char addr[100];          //------------工人特殊津贴;

}datatype;

2、单链表node结构体

typedef struct node{

 datatype data;

 struct node * next;

}listnode;

4 程 序 实 现

1、              源代码分析

 ⑴程序预处理

#include<stdio.h>     //---------------标准输入输出头文件 ;      

#include <stdlib.h>   //---------------开辟空间头文件;

#include <string.h>   //---------------字符串处理函数头文件;

typedef struct         //--------------员工工资信息结构体;

{

 char gonghao[100];       //------------工人工号;

 char name[100];          //------------工人姓名;

 char bumen[1000];        //------------工人部门;

 int  phone[100];         //------------工人基本工资;

 char addr[100];          //------------工人特殊津贴;

}datatype;

typedef struct node{

 datatype data;

 struct node * next;

}listnode;

typedef listnode * linklist;

linklist head;        //----------定义一全局变量 head 计链表头指针;

listnode *p;       //----------定义一全局变量 p ;

int count=0;     //----------定义一全局变量 count 统计工人的总数;

⑵主函数main()

void main()  //主函数

{

int hh,uu;

 while(1)

 { system(" color D");   //--------颜色调用;

   menu();

   printf( "         :请输入你的选择:\n                               ");

   scanf("%d",&hh)

  switch(hh)

  {

  case 1:

            system(" color F"); //--------颜色调用;

           

            head=createlist();

            system("pause");//--------系统暂停调用;

            system("cls");

            break;

  case 2:   system(" color 2"); //--------颜色调用;

          

            printf("               ******************** 信息添加 *******************\n");

           

            printf("               ** 工号   姓名   部门   基本工资    特殊津贴   **\n");

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

            p=(listnode *)malloc(sizeof(listnode));

            scanf("%s%s%s%d%s",p->data.gonghao,p->data.name,p->data.bumen,p->data.phone,p->data.addr);

            insertnode(head,p);

            count+=1;

            printf("    工人总数为  %d \n",count);

            system("pause");  //--------系统暂停调用;

            system("cls");

            break;

  case 3:

                system(" color 3"); //--------颜色调用;      

                       printf("                     ************** 信息查询 ***********\n");

          

            p=listfind(head);

            if(p!=NULL){

            printf("工号  姓名 部门   基本工资  特殊津贴\n");

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

          printf(" %s %s %s %d          %s\n",p->data.gonghao,p->data.name,p->data.bumen,*(p->data.phone),p->data.addr);

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

                            }

           else

                       printf("   没有找到  ! \n");

           system("pause");   //--------系统暂停调用;

           system("cls");

            break;

   case 4:

             system(" color 6"); //--------颜色调用;

             delnode(head);

            system("pause");   //--------系统暂停调用;

             system("cls");

             break;

 case 5:

             system(" color 8"); //--------颜色调用;

             sort_worker( head);

             printf("      排序完成  !\n");

             system("pause");  //--------系统暂停调用;

             system("cls");

             break;

  case 6:

             system(" color A"); //--------颜色调用;

             printlist(head);

             system("pause");  //--------系统暂停调用;

             system("cls");

             break;

  default:

             system(" color B"); //--------颜色调用;

             printf("\t 对不起,请输入指定的功能,谢谢!\n");

            system("pause");  //--------系统暂停调用;

            system("cls");

             break;

  }

 printf("\n  是否退出,是->1,否->0  \n");//--------是否退出程序,进行判断;

 scanf("%d",&uu);

 system("pause");  //--------系统暂停调用;

 system("cls");

 if(uu==1)

 {xx();

  system(" color C"); //--------颜色调用;

  system("pause"); //--------系统暂停调用;

  system("cls");

 break;

 }

 else ;

 }

}

⑶主菜单界面

void menu()         //------------------菜单函数;

{

 printf("   \n");

 printf("   \n");

 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("      ========================\n");

}

5 运 行 结 果

1、主界面

2、      工资管理系统建立

  

3、              新 员 工 插 入

      

4、              员工  信息  查询

      

5、员工  信息  删除

6、员工  工资  排序

        

7、          员工  信息  输出

      

      

6设 计 小 结

  1、人员分工

     马晓红:输入函数、插入函数。

     王  秀:排序函数、查找函数。

     胡燕秀:删除函数、输出函数。

 主函数、菜单函数、结束函数:马晓红、王  秀、胡燕秀。

2、小结

优点:(1)该程序没有错误、没有警告,结构严谨。

     (2)该程序设计内容较全面,操作方便。

不足:(1)输入太多个信息时,屏幕不能一页一页显示。

     (2)没有设计修改类函数,因此若想修改某员工的信息只能先进行删除然后再重新插入,比较繁琐。


第二篇:C语言课程设计报告-工资管理系统


C语言课程设计报告-工资管理系统一. 系统功能设计一个职工工资管理系统,其功能包括:(1) 职工基本工资信息录入包括工号,姓名,应发工资,奖金,扣款,应发工资,扣税,实发工资。(2) 职工基本工资信息保存(3) 职工基本工资信息查询按照工号查询按照姓名查询(4) 职工基本工资信息显示在屏幕上显示所有的职工基本工资信息。(5) 职工基本工资信息更新能够实现修改,删除,插入,排序功能。(6) 职工基本工资信息统计统计公司员工工资在各等级的人数主界面系统主界面应有如下功能选项录入职工基本工资信息查询职工基本工资信息保存职工基本工资信息删除职工基本工资信息插入职工基本工资信息修改职工基本工资信息统计职工基本工资信息排序职工基本工资信息显示职工基本工资信息退出代码如下:#include <stdio.h>typedef struct employee{char num[10]; //保存职工编号char name[15]; //保存职工姓名float jbgz; //保存职工基本工资float jj; //保存职工奖金float kk; //保存职工扣款float yfgz; //保存职工应发工资float sk; //保存职工税款float sfgz; //保存职工实发工资}ZGGZ;void menu(){printf(" Empoyee System\n");printf("--<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@\n");printf(" *1 input record *2 delete record\n");printf(" *3 search record *4 modify record\n");printf(" *5 insert record *6 count record\n");printf(" *7 sort record *8 save record\n");printf(" *9 display record *0 quit record\n");printf("--<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@\n");printf("Please enter you choice(0-9)\n");}int input(ZGGZ a[],int k){int j,x;char str[10];j=x=0;while(1){printf("----------------------------\n");printf("请输入职工的编号:(按0返回主菜单)");scanf("%s",str);strcpy(a[k].num,str);for(j=0;j<k;j++) {if(strcmp(a[j].num,str)==0){printf("已经有工号为%s的员工信息!请重新输入员工号。\n",str);printf("请输入职工的编号:");

scanf("%s",str);strcpy(a[k].num,str);}}if(strcmp(a[k].num,"0")==0)break;printf("请输入职工的姓名:");scanf("%s",a[k].name);printf("请输入职工的基本工资:");scanf("%f",&a[k].jbgz);printf("请输入职工的奖金:");scanf("%f",&a[k].jj);printf("请输入职工的扣款:");scanf("%f",&a[k].kk);a[k].yfgz=a[k].jbgz+a[k].jj-a[k].kk;a[k].sk=a[k].yfgz*(0.05);a[k].sfgz=a[k].yfgz*(0.95);k++;}return k;}int del(ZGGZ a[],int y){int i=0;int x=0;char str[15];printf("请输入你要删除的编号或姓名:");scanf("%s",str);printf("--------删除成功--------\n");for(i=0;i<y;i++)if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name)){while(i<y){strcpy(a[i].num,a[i+1].num);strcpy(a[i].name,a[i+1].name);a[i].jbgz=a[i+1].jbgz;a[i].jj=a[i+1].jj;a[i].kk=a[i+1].kk;a[i].sfgz=a[i+1].sfgz;a[i].sk=a[i+1].sk;a[i].yfgz=a[i+1].yfgz;i++;}x++;}if(x==0){printf("输入的编号或姓名不存在,请重新输入:\n");}return y-x;}int sear(ZGGZ a[],int y){int i;int x=0;char str[15];printf("请输入你要查找的编号或姓名:");scanf("%s",str);for(i=0;i<y;i++)if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name)){printf("员工编号为%s\n",a[i].num);printf("员工姓名为%s\n",a[i].name);printf("基本工资:%f\n",a[i].jbgz);printf("奖金:%f\n",a[i].jj);printf("扣款:%f\n",a[i].kk);printf("应发工资:%f\n",a[i].yfgz);printf("税款:%f\n",a[i].sk);printf("实发工资:%f\n",a[i].sfgz);x++;}if(x==0){printf("未找到该记录\n");return -1;}}void mod(ZGGZ a[],int y){int i;int x=0;char str[15];printf("请输入你要修改的编号:");scanf("%s",str);for(i=0;i<y;i++)if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name)){

printf("请输入修改后职工的姓名:");scanf("%s",a[i].name);printf("请输入修改后职工的基本工资:");scanf("%f",&a[i].jbgz);printf("请输入修改后职工的奖金:");scanf("%f",&a[i].jj);printf("请输入修改后职工的扣款:");scanf("%f",&a[i].kk);printf("-------------修改成功------------\n");a[i].yfgz=a[i].jbgz+a[i].jj-a[i].kk;a[i].sk=a[i].yfgz*(0.05);a[i].sfgz=a[i].yfgz*(0.95);x++;}if(x==0){printf("未找到要修改的编号\n");}}int insert(ZGGZ a[],int y){int i;int x=0;char str[15];printf("请输入你要插入的编号:");scanf("%s",str);printf("请输入一条新的记录信息:\n");for(i=0;i<y;i++)if(strcmp(str,a[i].num)==0){x=i;for(i=y;i>x+1;i--){a[i].jbgz=a[i-1].jbgz;a[i].jj=a[i-1].jj;a[i].kk=a[i-1].kk;a[i].sfgz=a[i-1].sfgz;a[i].sk=a[i-1].sk;a[i].yfgz=a[i-1].yfgz;strcpy(a[i].name,a[i-1].name);strcpy(a[i].num,a[i-1].num);}}x++;printf("请输入职工的编号:");scanf("%s",a[x].num);printf("请输入职工的姓名:");scanf("%s",a[x].name);printf("请输入职工的基本工资:");scanf("%f",&a[x].jbgz);printf("请输入职工的奖金:");scanf("%f",&a[x].jj);printf("请输入职工的扣款:");scanf("%f",&a[x].kk);a[x].yfgz=a[x].jbgz+a[x].jj-a[x].kk;a[x].sk=a[x].yfgz*(0.05);a[x].sfgz=a[x].yfgz*(0.95);return y+1;}void count(ZGGZ a[],int y){int q[11]={0,0,0,0,0,0,0,0,0,0,0};int i;int x;for(i=0;i<y;i++){x=(int)a[i].yfgz/1000;switch(x){case 9:q[1]++;break;case 8:q[2]++;break;case 7:q[3]++;break;case 6:q[4]++;break;case 5:q[5]++;break;case 4:q[6]++;break;case 3:q[7]++;break;cas

e 2:q[8]++;break;case 1:q[9]++;break;case 0:q[10]++;break;default:q[0]++;break;}}printf("应发工资在 10000以上 的人数为%d\n",q[0]);printf("应发工资在 9000到10000 的人数为%d\n",q[1]);printf("应发工资在 8000到9000 的人数为%d\n",q[2]);printf("应发工资在 7000到8000 的人数为%d\n",q[3]); printf("应发工资在 6000到7000 的人数为%d\n",q[4]);printf("应发工资在 5000到6000 的人数为%d\n",q[5]);printf("应发工资在 4000到5000 的人数为%d\n",q[6]);printf("应发工资在 3000到4000 的人数为%d\n",q[7]);printf("应发工资在 2000到3000 的人数为%d\n",q[8]);printf("应发工资在 1000到2000 的人数为%d\n",q[9]);printf("应发工资在 1000以上 的人数为%d\n",q[10]);}void sort(ZGGZ a[],int y){int i,j;float t;char str[15];for(j=0;j<y-1;j++)for(i=0;i<y-1-j;i++)if(a[i].sfgz>a[i+1].sfgz){t=a[i].sfgz;a[i].sfgz=a[i+1].sfgz;a[i+1].sfgz=t;t=a[i].jbgz;a[i].jbgz=a[i+1].jbgz;a[i+1].jbgz=t;t=a[i].jj;a[i].jj=a[i+1].jj;a[i+1].jj=t;t=a[i].kk;a[i].kk=a[i+1].kk;a[i+1].kk=t;t=a[i].yfgz;a[i].yfgz=a[i+1].yfgz;a[i+1].yfgz=t;t=a[i].sk;a[i].sk=a[i+1].sk;a[i+1].sk=t;strcpy(str,a[i].num);strcpy(a[i].num,a[i+1].num);strcpy(a[i+1].num,str);strcpy(str,a[i].name);strcpy(a[i].name,a[i+1].name);strcpy(a[i+1].name,str);}}void save(ZGGZ a[],int n){FILE *fp;int i;if((fp=fopen("sj.txt","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<n;i++)if(fwrite(&a[i],sizeof(struct employee),1,fp)!=1)printf("file write error\n");fclose(fp);}void display(ZGGZ a[],int n){int i=0;if(n==0){printf("Files are empty\n");return;}do{

printf("----------------------------\n");printf("员工编号为%s\n",a[i].num);printf("员工姓名为%s\n",a[i].name);printf("基本工资:%f\n",a[i].jbgz);printf("奖金:%f\n",a[i].jj);printf("扣款:%f\n",a[i].kk);printf("应发工资:%f\n",a[i].yfgz);printf("税款:%f\n",a[i].sk);printf("实发工资:%f\n",a[i].sfgz);i++;}while(i<n);}void main(){int selete,c=0;int i=0;int z=0;char q,p,x,s;ZGGZ b[100];FILE *fp;if((fp=fopen("sj.txt","rb"))==NULL)printf("Not Found!\n");else{do{fread(&b[i],sizeof(struct employee),1,fp);i++;}while(!feof(fp));fclose(fp);c=i-1;}while(1){menu();scanf("%d",&selete);if(selete==0){printf("Thank you for your use ( ^_^ ) Bye\n");break;}switch(selete){case 1:c=input(b,c);break;case 2:{display(b,c);do{c=del(b,c);printf("是否继续删除,是按y,否则请按任意值\n");getchar();scanf("%c",&p);}while(p=='Y'||p=='y');break;}case 3:{do{sear(b,c);printf("是否继续查找,是按y,否则请按任意值\n");getchar();scanf("%c",&x);}while(x=='Y'||x=='y');break;}case 4:{display(b,c);do{mod(b,c);printf("是否继续修改,是按y,否则请按任意值\n");getchar();scanf("%c",&q);}while(q=='Y'||q=='y');break;}case 5:{do{c=insert(b,c);printf("是否继续插入,是

按y,否则请按任意值\n");getchar();scanf("%c",&s);}while(s=='Y'||s=='y');break;}case 6:count(b,c);break;case 7:display(b,c);sort(b,c);break;case 8:save(b,c);break;case 9:display(b,c);break;default:printf("Please try again\n");}}}

更多相关推荐:
工资管理系统课程设计报告

目录摘要错误未定义书签绪论错误未定义书签第一章需求分析211系统功能需求简介212功能需求描述213目标系统要求214系统平台选择215数据流图3第二章概念模型设计421概念模型设计4第三章逻辑模型设计531数...

工资管理系统 数据库课程设计报告

目录一开发背景1二功能描述2三数据流分析331数据流图332数据字典4四概念模型设计6五逻辑结构设计和优化9六应用程序设计10七心得体会12参考文献13附录13一开发背景随着经济的发展企业正向着大型化规模化发展...

SQL工资管理系统课程设计报告

设计报告课题名称学院专业班级学号学生指导教师青岛理工大学琴岛学院教务处20xx年7月3日工资管理系统

c语言课程设计报告 职工工资管理系统

课程设计报告课程设计报告题目职工工资管理系统设计者专业班级学号指导教师所属院系20xx年6月29日一设计需求说明一职工工资管理系统功能设计要求1输入记录将每一个职工的姓名ID号以及基本工资职务工资岗位津贴医疗保...

高校工资管理系统C++课程设计报告

课程设计报告课程名称课题名称专业班级1001班学号20xx03040114姓名彭琼林指导教师20xx年12月26日湖南工程学院课程设计任务书课程名称面向对象程序设计课题高校工资管理系统专业班级通信工程1001班...

SQL工资管理系统课程设计报告

设计报告课题名称工资管理系统学院专业班级学号学生指导教师

职工工资管理系统课程设计报告

目录一需求分析2二概要设计2三详细设计5四调试分析18五用户手册19六测试数据19七附录231一需求分析职工工资管理系统功能设计要求1输入记录将每一个职工的姓名ID号以及基本工资职务工资岗位津贴医疗保险公积金的...

公司工资管理系统程序设计报告

综合实验报告面向对象程序设计面向对象程序设计综合实验报告目录一课程设计题目2二主要功能分析3三设计思路3四编码实现3五程序使用注意事项25六运行结果25七心得及体会281面向对象程序设计综合实验报告一课程设计题...

c语言程序设计教师工资管理系统_具体的设计报告

课程设计报告学院专业名称课程设计科目所在班级学生学号学生姓名指导教师完成时间理学与信息科学学院计算机科学与技术C语言课程设计一c班20xx8233吴健史蒂夫20xx年1月6月教师工资管理系统每个教师的信息为教师...

计算机毕业论文——人事工资管理系统设计与实现

长春工业大学自学考试毕业论文人事工资管理系统设计与实现报考专业准考证号姓名指导教师20xx年5月15日人事工资管理系统摘要由于计算机技术的飞速发展数据库技术作为数据管理的一个有效的手段在各行各业中得到越来越广泛...

c语言课程设计报告_职工工资管理系统

课程设计报告课程设计报告题目职工工资管理系统设计者专业班级学号指导教师所属院系20xx年6月29日一设计需求说明一职工工资管理系统功能设计要求1输入记录将每一个职工的姓名ID号以及基本工资职务工资岗位津贴医疗保...

企业工资管理系统毕业设计论文

企业工资管理系统设计摘要对企业而言人力资源是企业最宝贵的资源也是企业的生命线而工资管理又是人力资源管理的重中之重实行电子化的工资管理可以让人力资源管理人员从繁重琐碎的案头工作解脱出来去完成更重要的工作本文介绍毕...

工资管理系统课程设计报告(25篇)