C语言实习——职工工资信息管理系统
C语言职工工资管理系统设计报告
C语言职工工资管理系统设计报告设计报告:C语言职工工资管理系统1.系统介绍职工工资管理系统是一种用于管理公司或组织内部职工工资信息的软件系统。
通过该系统,可以方便地录入、修改、查询和删除职工的工资信息,实现对职工工资的统一管理和自动计算。
2.系统需求分析(1)录入职工信息:系统需要提供录入职工信息的功能,包括职工编号、姓名、性别、工作岗位等基本信息。
(2)录入职工工资:系统需要提供录入职工工资的功能,包括基本工资、绩效奖金、加班工资等,以便计算总工资。
(3)查询职工工资:系统需要提供查询职工工资的功能,可以按照职工编号、姓名、性别等关键字查询。
(4)修改职工工资:系统需要提供修改职工工资的功能,可以根据职工编号进行修改。
(5)删除职工信息:系统需要提供删除职工信息的功能,按照职工编号进行删除。
3.系统设计方案(1)数据结构的设计:-职工信息结构体:包括职工编号、姓名、性别、工作岗位等成员。
-职工工资结构体:包括基本工资、绩效奖金、加班工资等成员。
-职工结构体数组:用于存储多个职工的信息和工资数据。
(2)界面设计:-主菜单:包括录入职工信息、录入职工工资、查询职工工资、修改职工工资、删除职工信息等选项。
-子菜单:不同的功能选项对应不同的界面,可以通过输入不同的选择序号实现功能切换。
-信息显示界面:用于显示职工信息和工资信息。
(3)功能设计:-录入职工信息:通过用户输入,将职工信息存储到职工结构体数组中。
-录入职工工资:通过用户输入,将职工工资信息存储到对应的职工工资结构体中。
-查询职工工资:根据用户输入的关键字,查找并显示匹配的职工工资信息。
-修改职工工资:根据用户输入的职工编号,在职工工资结构体中找到对应职工的工资信息,并修改。
-删除职工信息:根据用户输入的职工编号,在职工结构体数组中找到对应职工的信息,并删除。
4.系统实现系统的实现使用C语言编程,使用结构体和数组进行数据的组织和存储,并利用循环和条件判断语句完成功能。
员工工资管理系统(c语言编程)6页
员工工资管理系统(c语言编程)6页一、设计目标1、完成一个员工工资管理系统,包括对员工信息的添加、删除、修改和查询、员工工资管理和统计等功能。
2、程序必须具备易用性、可靠性、安全性和稳定性等特点。
二、程序结构设计员工工资管理系统是由若干模块构成的一个整体,它们之间相互联系,共同完成对员工信息的处理和管理。
程序分为主界面模块、添加模块、删除模块、修改模块、查询模块、统计模块、退出模块。
三、模块功能设计1、主界面模块主界面包括菜单栏和功能栏,菜单栏包括添加、删除、修改、查询、统计和退出功能,功能栏是对主界面菜单的补充,包括一些快捷操作按钮。
2、添加模块添加模块是用来录入员工信息的,可以录入的信息有员工编号、员工姓名、员工部门、员工工作年限、员工基本工资、员工奖金等。
添加模块会对信息进行一系列的校验,要求信息必须完整正确才能录入。
3、删除模块删除模块是用来删除员工信息的,输入员工编号就可以删除该员工的信息。
5、查询模块查询模块提供了多种查询方式,包括按部门查询、按姓名查询、按工作年限查询、按基本工资查询、按奖金查询等。
查询结果会按照员工编号的顺序进行排序。
6、统计模块统计模块会根据查询结果进行工资统计,包括总工资、平均工资、最高工资和最低工资等。
7、退出模块退出模块是用来关闭程序的,保证程序的安全性和稳定性。
四、程序流程设计1、主界面程序启动后,会显示主界面界面,包括菜单栏和功能栏。
2、录入信息点击添加功能或者添加按钮,会进入添加模块,要求用户输入员工信息,录入完成后数据将保存到文件中。
4、修改信息点击修改功能或者修改按钮,会进入修改模块,输入员工编号,然后修改员工信息。
5、查询信息点击查询功能或者查询按钮,会进入查询模块,选择查询方式,输入查询条件,系统将显示符合条件的员工信息。
6、工资统计当查询完成后,点击统计功能或者统计按钮,会进入统计模块,系统将根据查询结果进行统计。
7、程序退出当操作完成后,点击退出功能或者退出按钮,会关闭程序。
史上最牛的c语言—职工工资系统
史上最牛的c语言—职工工资系统-CAL-FENGHAI.-(YICAI)-Company One1工资信息管理系统一.题目要求该系统能够实现工理资信息管,系统包括录入,浏览,查询,统计等功能.其中录入功能要求添加新的工资信息到文件,浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额.要求1,文件中一行数据对应一个职工工资信息.2,工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录. 3,工资单信息包括工资卡号,姓名,月份,应发工资,水费,电费.税金,实发工资等.4,实发工资=应发工资-水费-电费-税金,其中税金计算方法为(1)应发工资<800元,税金=0(2)800<应发工资<1400元,税金=(应发工资-800)*5%(3)应发工资>1400元,税金=(应发工资-1400)*10%二.需求分析根据题目要求,职工信息需要以文件方式存放到文件中,系统要求提供录入操作.并应实现浏览,查询,统计等功能;另外还应提供选择菜单实现功能选择.三.总体设计整体设计可根据题目分为添加信息模块.按姓名浏览模块.按卡号升序浏览模块.按姓名查找模块.按卡号查找模块.按工资降序输出模块.统计模块.保存模块.加载模块.工资信息管理系统[流程图]菜单四.详细设计⒈主函数主函数一般设计得比较简洁.只提供输入,功能处理和输出部分的函数调用.各功能模块用菜单方式.另外菜单部分也可以写成是函数[流程图]显示一系列功能选项判断是否输入0到9N Y根据输入值调用各功能模块函数[程序]/* 为了调用FILE等函数 */#include "stdio.h"#include "conio.h"/* 为了调用atof()等函数 */#include "stdlib.h"#define TRUE 1职工的信息存放格式为:/* 结构体声明 */struct zhigong{int month;float id;float jbgz;float yfs;float sf;float df;float grsds;float yks;float sfs;char name[10];};/* 建立50个元素的结构体数组 */struct zhigong zg[50];struct zhigong name[3];/* 建立结构体变量 */struct zhigong zgone;/* 职员列表中的数量 */int n=0;/* 获得字符串 */char numstr[50];main(){ char ch;n=0;while(TRUE){printf("\n");printf("===========================================\n"); printf(" Welcome!Please choice(0-9) : +\n");printf("0.Add one infomation +\n");/*添加信息*/printf("1.Browse by name +\n");/*按姓名浏览*/printf("2.Browse by ka hao rise +\n");/*按卡号升序浏览*/printf("3.search by name +\n");/*按姓名查找*/printf("4.seach out by number +\n");/*按卡号查找*/printf("5.Print out all by gongzi down +\n");/*按工资降序输出*/printf("6.tongji +\n");/*统计*/printf("7.Save date +\n");/*保存*/printf("8.Load date +\n");/*加载.从文件中加载数据到结构体上*/printf("9.Exit +\n");printf("===========================================\n");ch=getche();switch(ch){case '0':addone();break;case '1':browsename();break;case '2':browseid();break;case '3':byname();break;case '4':idone();break;case '5':listall();break;case '6':tongji();break;case '7':wfile();break;case '8':rfile();break;case '9':return;default:printf("Sorry,please choice again!\n");}}}2各功能模块设计(1)计算个人所得税函数[需求分析]根据输出的工资信息判断该职工的税金多少.根据数值利用以下函数算出税金多少.[流程图]提取职工应发工职信息判断应发工资符合以下那种算法根据应发工资算出税金[程序]float tgrsds(float m){float sui1;float tmp;sui1=0;if(m>=1400){sui1=(m-1400)*0.1;}else if(m>=800 && m<1400){sui1=(m-800)*0.05;}else if(m<800 ){sui1=0;}tmp=sui1;return(tmp);(2)添加信息模块[需求分析]添加信息模块的功能是用户需要增加新的职工信息,请从键盘输入并逐条写到原来的文件当中,注意采用是追加不是覆盖的方式。
c语言课程设计职工工资管理系统
一、概述随着社会的发展和进步,工资管理系统在企业管理中扮演着重要的角色。
为了提高工资管理的效率和准确性,许多企业都倾向于引入计算机系统来进行工资管理。
C语言是一种广泛应用于系统程序设计和应用程序开发的高级语言,具有跨评台性和高效性的特点。
设计一个基于C语言的职工工资管理系统将会成为一个有价值的课程设计。
二、系统功能需求1. 职工信息管理:系统需要能够记录、查看和修改职工的基本信息,包括尊称、工号、部门、入职日期等。
2. 薪资核算:系统应能根据职工的实际出勤、加班情况、请假情况等自动生成薪资,并能够灵活处理各类津贴和抠款。
3. 考勤管理:系统需要提供考勤记录的输入和查询功能,以便及时了解职工的工作情况。
4. 报表输出:系统需要能够生成各类工资报表,方便管理人员进行核对和统计。
5. 数据备份和恢复:系统应具备数据备份和恢复功能,以保证数据的安全性和完整性。
三、系统设计与技术选择在设计该系统时,应采用模块化、分层的设计思路,以便系统具有良好的可维护性和扩展性。
1. 界面设计:可以采用文本界面或图形界面进行设计,具体选择取决于系统的实际应用环境和用户需求。
2. 数据存储:可以选择采用文件系统或数据库来存储系统数据,常见的选择包括文本文件、CSV文件、SQLite数据库等。
3. 算法选择:需要根据系统的具体需求选择合适的算法来实现薪资核算和报表生成等功能。
4. 开发工具:可以选择C语言的集成开发环境(IDE)来进行开发,例如Visual Studio、Dev-C++等。
四、系统实现在进行系统开发时,需要按照设计要求逐步实现各个功能模块,同时进行严格的测试和调试工作,以确保系统的稳定性和准确性。
1. 职工信息管理模块:包括新增、修改、删除职工信息等功能。
2. 薪资核算模块:根据考勤情况自动生成薪资并进行津贴和抠款处理。
3. 考勤管理模块:提供考勤记录的输入和查询功能,确保数据的及时更新和准确性。
4. 报表输出模块:能够生成各类工资报表,包括月度工资表、年度工资统计表等。
C语言实训:职工工资管理系统(总10页)
C语言实训:职工工资管理系统(总10页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除指导老师:周杨萍时间:第13周()一、实训目的C语言程序设计实训是C语言程序设计课程教学的重要组成部分。
本课程通过提供学生一个实训练习的机会,巩固、提高学生的基本编程能力,同时通过训练编写综合程序的方式,提高学生分析问题和解决问题的能力,为后续课程的学习打下良好的基础。
二、实训题目和程序清单(包括程序运行截图界面)(一)实训题目:职工工资管理系统。
参考运行界面如下:具体要求:出现上述界面后,用户可以通过输入1-6之间的数字完成所提示的功能。
循环往复,直到输入7,退出系统。
本系统具有职工的工资基本信息(职工号、姓名、应发工资、奖金、水电费、公积金、医疗保险、扣款合计、实发工资),能够根据需要追加、查询、修改、删除、统计并浏览职工的工资信息。
具体功能如下:1.初始化信息(职工信息的输入,包括职工号、姓名、应发工资、奖金、水电费、公积金、医疗保险) ;2.追加职工信息(继续添加职工的信息,要求职工号不重复);3.根据职工号查询(完成按职工号查询指定职工的工资信息);4.根据职工号修改(完成按职工号修改指定职工的工资信息);5.根据职工号删除(完成按职工号删除指定职工的工资信息);6.统计并浏览(完成扣款合计和实发工资的统计,并显示所有职工的工资信息);7.退出(退出系统)。
(提示:在使用字符界面的菜单编程时,需要清屏,可以使用system("cls")函数将屏幕清屏。
需要退出系统时,可以使用exit(0)函数退出。
需要暂停程序的执行时,可以使用system("pause")函数暂停。
使用这些函数时应包含""系统函数头文件。
)(二)程序清单:#include<>gh=001;strcpy(work[1].xm,"aa");work[1].yfgz=1000;work[1].jj=500;work[1].sdf=200;work[1].gjj=100;work[1].ylbx=98;work[1].kkhj=work[1].sdf+work[1].gjj+work[1].ylbx;work[1].sfgz=work[1].yfgz+work[1].jj-work[1].kkhj;/****对第二位进行初始化****/work[2].zgh=002;strcpy(work[2].xm,"bb");work[2].yfgz=2000;work[2].jj=300;work[2].sdf=200;work[2].gjj=100;work[2].ylbx=90;work[2].kkhj=work[2].sdf+work[2].gjj+work[2].ylbx;work[2].sfgz=work[2].yfgz+work[2].jj-work[2].kkhj;/****对第三位进行初始化****/work[3].zgh=003;strcpy(work[3].xm,"cc");work[3].yfgz=1000;work[3].jj=500;work[3].sdf=200;work[3].gjj=100;work[3].ylbx=98;work[3].kkhj=work[3].sdf+work[3].gjj+work[3].ylbx;work[3].sfgz=work[3].yfgz+work[3].jj-work[3].kkhj;/****对第四位进行初始化****/work[4].zgh=004;strcpy(work[4].xm,"dd");work[4].yfgz=1000;work[4].jj=500;work[4].sdf=200;work[4].gjj=100;work[4].ylbx=98;work[4].kkhj=work[4].sdf+work[4].gjj+work[4].ylbx;work[4].sfgz=work[4].yfgz+work[4].jj-work[4].kkhj;count=5;printf("..................初始化成功....................\n");system("pause");}void zjxx() gh);printf("输入姓名:\n");scanf("%s",work[count].xm);printf("输入应发工资:\n");scanf("%f",&work[count].yfgz);printf("输入奖金:\n");scanf("%f",&work[count].jj);printf("输入水电费:\n");scanf("%f",&work[count].sdf);printf("输入公积金:\n");scanf("%f",&work[count].gjj);printf("输入医疗保险:\n");scanf("%f",&work[count].ylbx);work[count].kkhj=work[count].sdf+work[count].gjj+work[count].ylbx; work[count].sfgz=work[count].yfgz+work[count].jj-work[count].kkhj;count++;printf("还需要再添加吗(Y/N)\n");scanf("\n%c",&i);if(i=='y' || i=='Y')zjxx();elsereturn;system("pause");}void cx() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);}elseprintf("sorry,mei you ci ren ");system("pause");}void xg() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);}else{printf("sorry,mei you ci ren ");}printf("请重新输入姓名");scanf("%s",&work[i].xm);printf("请重新输入应发工资:\n");scanf("%f",&work[i].yfgz);printf("请重新输入奖金:\n");scanf("%f",&work[i].jj);printf("请重新输入水电费:\n");scanf("%f",&work[i].sdf);printf("请重新输入公积金:\n");scanf("%f",&work[i].gjj);printf("请重新输入医疗保险:\n");scanf("%f",&work[i].ylbx);}void sc() gh==zgh)break;}if(i<=count){printf("....................职工的所有信息...........................\n");printf("职工号:%d\n姓名:%s\n应发工资:%.2f\n奖金:%.2f\n水电费:%.2f\n 公积金:%.2f\n医疗保险:%.2f\n扣款合计:%.2f\n实发工资:%.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);printf("确定要删除吗请输入Y/N确认\n");setbuf(stdin,NULL);gh=work[i+1].zgh;strcpy( work[i].xm, work[i+1].xm);work[i].yfgz=work[i+1].yfgz;work[i].jj=work[i+1].jj;work[i].sdf=work[i+1].sdf;work[i].gjj=work[i+1].gjj;work[i].ylbx=work[i+1].ylbx;work[i].kkhj=work[i+1].kkhj;work[i].sfgz=work[i+1].sfgz;}work[i].zgh=0 ;strcpy(work[i].xm,"0");work[i].yfgz=0;work[i].jj=0;work[i].sdf=0;work[i].gjj=0;work[i].ylbx=0;work[i].kkhj=0;work[i].sfgz=0;count--;printf("所选信息已删除");}}elseprintf("sorry! mei you ci ren ");system("pause");}void tjll()f %.2f %.2f %.2f %.2f %.2f %.2f\n",work[i].zgh,work[i].xm,work[i].yfgz,work[i].jj,work[i].sdf,work[i].gjj,work[i].ylbx,work[i].kkhj,work[i].sfgz);printf("------------------------------------------------------------------\n");yfgz=yfgz+work[i].yfgz;jj=jj+work[i].jj;sdf=sdf+work[i].sdf;gjj=gjj+work[i].gjj;ylbx=ylbx+work[i].ylbx;}kkhj=sdf+gjj+ylbx;sfgz=yfgz+jj-kkhj;printf("汇总:职工人数%d\n",count-1);printf(" 应发工资%.2f\n",yfgz);printf(" 奖金%.2f\n",jj);printf(" 水电费%.2f\n",sdf);printf(" 公积金%.2f\n",gjj);printf(" 医疗保险%.2f\n",ylbx);printf("------------------------\n");printf(" 扣款合计%.2f\n",kkhj);printf(" 实发工资%.2f\n",sfgz);system("pause");}void main()//***************主函数,主界面**************{ int xz;do{ system("cls"); //清屏,清除屏幕上的所有信息printf("******** 《职工工资管理系统》制作人:********\n");printf(" 1-----初始化信息 \n");printf(" 2-----追加职工信息 \n");printf(" 3-----根据职工号查询 \n");printf(" 4-----根据职工号修改 \n");printf(" 5-----根据职工号删除 \n");printf(" 6-----统计并浏览 \n");printf(" 7-----退出 \n");printf("**********************************************\n");printf(" 输入您的选择(-7):");scanf("%d",&xz);switch(xz){ case 1:csh(); break; //执行子函数csh(完成初始化功能)case 2:zjxx(); break; //执行子函数zjxx(完成追加职工信息)case 3:cx();break; //执行子函数cx(完成根据职工号查询)case 4:xg();break; //执行子函数xg(完成根据职工号修改)case 5:sc(); break; //执行子函数sc(完成根据职工号删除)case 6:tjll(); break; //执行子函数tjll(完成统计并浏览)case 7:printf("\n-----------谢谢,欢迎下次光临!----------\n\n");default:exit(0); //退出系统,exit(0)函数功能是退出程序。
c语言_职工工资管理系统设计
c语言_职工工资管理系统设计
职工工资管理系统是一种满足组织内部行政职能要求的系统。
它主要用于负责处理职工工资和社会保险的行政处理,致力于实现工资的合理控制,提供可靠的社会保障,维护公司和职员的权益。
职工工资管理系统的总体设计涉及到多个方面,包括职工信息管理、职工入职信息处理、职工调动及离职处理、职工考核信息处理、工资用工成本分析等。
职工信息管理:
主要包括对职工个人信息(包括基本情况、职称、工资等)、职工培训考核信息、职工出勤情况等进行管理及整理。
系统利用数据库,将这些信息统一储存,实现集中管理的目的,从而帮助用人单位对职工的资源进行全面了解,并能有效地实施人力资源政策。
职工入职信息处理:
系统提供职工入职信息处理和调整模块,用于处理职工入职注册信息,装订职工入职相关证明及存档备案,以保障组织职位管理及职员资料处理工作的准确性。
职工调动及离职处理:
职工调动及离职处理模块,是处理职工调动或离职变动的必要模块。
企业可利用系统的这一模块进行职工离职报告与合同变更、职工调动安排登记等工作,以保障职工权益的有效管理。
职工考核信息处理:
职工考核信息处理主要提供职工工作评价功能,实施对职工的定期考核,以便企业对职工培训和考核要求进行动态管理,实现培训及考核结果的连续有效跟踪。
工资用工成本分析:
工资用工成本分析模块,可以帮助企业实时监测用工和工资成本,实现工资控制,提高用工管理效率,增加经济效益,减少企业成本。
总之,职工工资管理系统的设计和实现能够有效的解决企业的业务管理需求,实现职工与组织之间健康、高效的沟通,为企业组织发展提供支持。
C语言课程设计---职工工资管理系统
C语言程序设计课程设计题目:职工工资管理系统院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (2)2.2.2数据结构设计及用法说明 (3)2.2.3程序结构(流程图) (5)2.2.4各模块的功能及程序说明 (6)2.2.5程序结果 (6)2.3程序源代码及注释 (7)第3章课程设计总结 (16)参考资料 (17)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识熟悉C语言及C语言开发工具。
1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍该系统能够实现工资信息管理。
系统包括录入,浏览,查询,统计等功能。
其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
C语言课程设计报告---职工工资管理系统
C语言课程设计报告---职工工资管理系统湖南涉外经济学院C 语言课程设计(报告书)题目职工工资管理系统作者肖梦星陈名河学院信息科学与工程学院专业软件工程2012102班任课教师李桥二〇一二年十二月二十七日机房管理系统【设计目的】设计“机房管理系统”使其具有上机、下机、查询上机时间、机器使用情况显示等功能。
1、随时都可以来这里上下机,24小时为你服务。
2、上机时间还可以来查询你的上机时间。
3、还可查询本机房所有电脑的使用情况。
【设计思路】根据要求,把学生的信息输入电脑,文本文件存入。
还保存了记录做以查询,使用情况,另外还应提供键盘式选择菜单实现功能选择。
【总体设计】【详细设计】1.主函数主函数设计要求简洁,只提供部分提示语和函数的调用int main() /*主函数*/{int n=0;for(k=0;k<30;k++) /*全部机器标记为未使用*/com[k].f=0;for(;;){switch(main_menu()){case 1:printf("\t\t\t输入学生信息:\n");n=input(stu,n);break;case 2:printf("\t\t\t学生上机\n");online(stu,n);printf("\t\t");system("pause");break;case 3:printf("\t\t\t学生下机\n");offline(stu,n);printf("\t\t");system("pause");break;case 4:printf("\t\t\t上机时间查询\n"); search(stu,n);printf("\t\t");system("pause");break;case 5:printf("\t\t\t机器使用情况显示\n\n"); display();break;case 0:printf("\n\n\t\t感谢使用机房收费管理系统,欢迎下次使用,再见!\n\n");printf("\t\t");system("pause");exit(0);}}return 0;}2.流程图图 2. 主函数流程图3.程序运行截图图3. 主界面截图说明:选择数字0——5,完成相应功能。
职工工资管理系统C语言
1、设计内容设计一个工资管理程序存储的数据包括:姓名,职工号,所属部门,基本工资,奖励工资,补贴项目及金额和扣款项目及金额。
功能:1)加入一个人的记录2)删除一个人的记录3)显示所有人的记录4)查询(包括按人名查询工资和按工号查询)5)统计功能(包括统计某一工资范围的人数和统计各部门的工资总数)6)修改功能2、设计目的1.熟悉C语言程序的编辑、编译链接和运行的过程。
2.熟练运用if语句和switch语句以及嵌套应用。
3.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
5.掌握结构体类型变量、数组的定义和使用。
6. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。
3、设计思路(包括所用的函数)图1 程序功能图void show();void add();//添加职工信息void see();//查看职工信息void search();//查找职工信息void ghcz();//按工号查找void xmcz();//按姓名查找void bmcz();//按部门查找void del();//删除职工信息void xmsc();//按姓名删除void ghsc();//按工号删除void statistics();//个人工资统计void statistic();//统计职工信息void gzdtj();//按工资段统计void bmtj();//按部门统计void modify();//修改职工信息void ghxg();// 按工号修改void xmxg();//按姓名修改void reserve();//保存职工信息添加函数流程图2、查看职工信息:查看函数流程图查找函数流程图删除函数流程图5、个人工资统计个人工资统计流程图6、统计职工工资工资统计流程图7、修改职工工资修改函数流程图4、程序代码#include <stdio.h>#include <stdlib.h>#include <string.h>struct worker{char depa[30];char name[30];char ID[10];int salary1,salary2,salary3,salary4;};int dq(struct worker wo[]);void show();void bc(struct worker wo[]);void add();void see();void search();void ghcz();void xmcz();void bmcz();void del();void xmsc();void ghsc();void statistics();void statistic();void gzdtj();void bmtj();void modify();void ghxg();void xmxg();void reserve();void back();struct worker wo[100]; //保存所有的职工信息int Number=0; //记录总的职工人数void main(){int choose=0;while(1){show();printf("\t\t====>请选择:");scanf("%d",&choose);system("cls");switch(choose){case 0:exit(0);//退出break;case 1:add();back();//添加职工信息break;case 2:see();back();//查看职工信息break;case 3:search();back();//查找职工信息break;case 4:del ();back();//删除职工信息break;case 5:statistics ();back();//个人工资统计break;case 6:statistic();back();//统计职工工资break;case 7:modify();back();//修改职工信息break;case 8:reserve();back();//保存数据break;default:break;}fflush(stdin);system("cls");}}int dq(struct worker wo[]){FILE *fp=NULL;int i=0;fp=fopen("C://worker.dat","rb");while(fread(&wo[i],sizeof(struct worker),1,fp)) i++;fclose(fp);return i;void show(){printf("\n");printf("\t****************职工工资管理系统****************\n\n");printf("\t*☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*\n\n"); printf("\t^^^^^^^^^^^^^^^[1]添加职工信息^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[2]查看职工信息^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[3]查找职工信息^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[4]删除职工信息^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[5]个人工资统计^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[6]统计职工工资^^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[7]修改职工信息^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[8] 保存数据^^^^^^^^^^^^^^^^^\n"); printf("\t^^^^^^^^^^^^^^^[0] 退出系统^^^^^^^^^^^^^^^^^\n\n");printf("\t*★★★★★★★★★★★★★★★★★★★★★★★*\n"); }void bc(struct worker *wo){FILE *fp=NULL;fp=fopen("C://worker.dat","ab+");fwrite(wo,sizeof(struct worker),1,fp);fclose(fp);}//添加职工信息void add(){int numberTemp=0;int i=0;struct worker temp;printf("请输入要添加职工个数:");scanf("%d",&numberTemp);for(i=0;i<numberTemp;i++)printf("输入第%d个职工信息\n",i+1);printf("姓名:");scanf("%s",);printf("工号:");scanf("%s",temp.ID);printf("所属部门:");scanf("%s",temp.depa);printf("基本工资:");scanf("%d",&temp.salary1);printf("奖励工资:");scanf("%d",&temp.salary2);printf("补贴项目即金额:");scanf("%d",&temp.salary3);printf("扣除项目即金额:");scanf("%d", &temp.salary4);wo[Number++]=temp; //写入到数组bc(&temp); //写入到文件}printf("添加成功\n");}//查看职工信息void see(){int i=0;printf("以下是全部职工\n");printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");while(i<Number){printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);i++;}}//查找职工信息void search(){int n=0;printf("1 按姓名查找\n");printf("2 按工号查找\n");printf("3 按部门查找\n");scanf("%d",&n);switch(n){case 1: xmcz();break;case 2: ghcz();break;case 3: bmcz();break;default: printf("输入错误!\n");break;}}void xmcz()//按姓名查找{char name[30];int i=0;printf("请输入要查找职工姓名:");scanf("%s",name);system("cls");printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");for (i=0;i<Number;i++){if (strcmp(name,wo[i].name)==0){printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);}}}void ghcz()//按工号查找{char id[10];int i=0;printf("请输入要查找工号:");scanf("%s",id);system("cls");printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");for (i=0;i<Number;i++){if (strcmp(id,wo[i].ID)==0){printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);}}}void bmcz()//按部门查找{char depa[30];int i=0;printf("请输入要查询的部门名称:");scanf("%s",depa);system("cls");printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");for (i=0;i<Number;i++){if (strcmp(depa,wo[i].depa)==0){printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);}}}//删除职工信息void del(){int n=0;printf("1 按姓名删除\n");printf("2 按工号删除\n");scanf("%d",&n);switch(n){case 1: xmsc();break;case 2: ghsc();break;}}void xmsc()//按姓名删除{FILE *fp=NULL;char name[30];int i=0;int j=0;printf("请输入要删除的职工姓名:");scanf("%s",name);for(i=0;i<Number;i++){if (strcmp(name,wo[i].name)==0){for (j=i;j<Number-1;j++){wo[j]=wo[j+1];}Number--;}}//将剩余数据写入文件擦除以前的数据fp=fopen("C://worker.dat","wb");for (i=0;i<Number;i++){fwrite(&wo[i],sizeof(struct worker),1,fp); }fclose(fp);printf("删除成功;\n");}void ghsc()//按工号删除{FILE *fp=NULL;char id[60];int i=0;int j=0;printf("请输入要删除的职工工号:");scanf("%s",id);for(i=0;i<Number;i++){if (strcmp(id,wo[i].ID)==0){for (j=i;j<Number-1;j++){wo[j]=wo[j+1];}Number--;}}//将剩余数据写入文件擦除以前的数据fp=fopen("C://worker.dat","wb");for (i=0;i<Number;i++){fwrite(&wo[i],sizeof(struct worker),1,fp);}fclose(fp);printf("删除成功;\n");}//个人工资统计void statistics(){int i=0;double sum[100];for(i=0;i<Number;i++){sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4; printf("%s的总工资为:%f\n",wo[i].name,sum[i]);}}void statistic()//统计职工工资{int n=0;printf("1 按工资段统计\n");printf("2 按部门统计\n");scanf("%d",&n);switch(n){case 1: gzdtj();break;case 2: bmtj();break;default: printf("输入错误!\n");break;}}void gzdtj()//按工资段统计{int sa1,sa2;int i=0;int n,m;int sl[20]={0,0};double sum[100];printf("请输入要查询的工资段:");scanf("%d-%d",&sa1,&sa2);system("cls");for(i=0;i<Number;i++){sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;}for(i=0;i<Number;i++){n=sum[i]/1000;if (n>9) n=10;switch(n){case 0:sl[0]++;break;case 1:sl[1]++;break;case 2:sl[2]++;break;case 3:sl[3]++;break;case 4:sl[4]++;break;case 5:sl[5]++;break;case 6:sl[6]++;break;case 7:sl[7]++;break;case 8:sl[8]++;break;case 9:sl[9]++;break;case 10:sl[10]++;break;}}m=sa1/1000;switch(m){case 0:printf("工资在1000以下的人数为%d\n",sl[0]);break;case 1:printf("工资在1000到2000之间的人数为%d\n",sl[1]);break;case 2:printf("工资在2000到3000之间的人数为%d\n",sl[2]);break;case 3:printf("工资在3000到4000之间的人数为%d\n",sl[3]);break;case 4:printf("工资在4000到5000之间的人数为%d\n",sl[4]);break;case 5:printf("工资在5000到6000之间的人数为%d\n",sl[5]);break; case 6:printf("工资在6000到7000之间的人数为%d\n",sl[6]);break;case 7:printf("工资在7000到8000之间的人数为%d\n",sl[7]);break;case 8:printf("工资在8000到9000之间的人数为%d\n",sl[8]);break;case 9:printf("工资在9000到10000之间的人数为%d\n",sl[9]);break;case 10:printf("工资在10000以上的人数为%d\n",sl[10]);break;}}void bmtj()//按部门统计{char depa[30];float sum=0;int i=0;printf("请输入要查询的部门名称:");scanf("%s",depa);system("cls");printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");for (i=0;i<Number;i++){if (strcmp(depa,wo[i].depa)==0){printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);sum=sum+wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;}}printf("该部门的总工资为:%f\n",sum);}//修改职工信息void modify(){int mode=0;printf("请选择修改查找方式\n");printf("1 按姓名查找修改\n");printf("2 按工号查找修改\n");scanf("%d",&mode);switch(mode){case 1: xmxg();break;case 2: ghxg();break;default: printf("输入错误!\n");break;}}void xmxg()//按姓名修改{FILE *fp=NULL;char name[30];int i=0;printf("请输入要修改的职工姓名:");scanf("%s",name);for (i=0;i<Number;i++){if (strcmp(name,wo[i].name));elsebreak;}printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);printf("请重新输入该职工信息");printf("姓名:");scanf("%s", wo[i].name);printf("工号:");scanf("%s",wo[i].ID);printf("所属部门:");scanf("%s",wo[i].depa);printf("基本工资:");scanf("%d",wo[i].salary1);printf("奖励工资:");scanf("%d",wo[i].salary2);printf("补贴项目即金额:");scanf("%d", wo[i].salary3);printf("扣款项目及金额:");scanf("%d", wo[i].salary4);//信息修改后重新更新文件里面的数据以保持数据一致性fp=fopen("C://worker.dat","wb");for (i=0;i<Number;i++){fwrite(&wo[i],sizeof(struct worker),1,fp);}fclose(fp);}void ghxg()//按工号修改{FILE *fp=NULL;char id[30];int i=0;printf("请输入要修改的职工工号:");scanf("%s",id);for (i=0;i<Number;i++){if (strcmp(id,wo[i].ID));elsebreak;}printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].d epa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i] .salary2+wo[i].salary3-wo[i].salary4);printf("请重新输入该职工信息");printf("姓名:");scanf("%s", wo[i].name);printf("工号:");scanf("%s",wo[i].ID);printf("所属部门:");scanf("%s",wo[i].depa);printf("基本工资:");scanf("%d",wo[i].salary1);printf("奖励工资:");scanf("%d",wo[i].salary2);printf("补贴项目即金额:");scanf("%d", wo[i].salary3);printf("扣款项目及金额:");scanf("%d", wo[i].salary4);//信息修改后重新更新文件里面的数据以保持数据一致性fp=fopen("C://worker.dat","wb");for (i=0;i<Number;i++){fwrite(&wo[i],sizeof(struct worker),1,fp);}fclose(fp);printf("\t=======>修改成功\n");}//保存数据void reserve(){printf("\t=====程序在运行时已自动保存.....\n");}void back(){printf("\t===>按Enter键返回主菜单\n");}5.、运行结果****************职工工资管理系统*****************☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*^^^^^^^^^^^^^^^[1]添加职工信息^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[2]查看职工信息^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[3]查找职工信息^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[4]删除职工信息^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[5]个人工资统计^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[6]统计职工工资^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[7]修改职工信息^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[8] 保存数据^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^[0] 退出系统^^^^^^^^^^^^^^^^^*★★★★★★★★★★★★★★★★★★★★★★★* ====>请选择:输入一条记录信息:选择1,回车。
C语言课程设计职工工资信息管理系统源代码
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h>#define N 10000int choice;struct employee{int num;int position;char name[10000];char sex[2];int salary;int i,max,t;}em[N];struct empsalary{char name[10000];int salary;}emps[N];void manage();void query();void input();void display();void change();void del();void add();void paixu();int changeposition();int changesalary();void querysalary();void creat();void main(){do{printf("欢迎进入职工管理系统中文版\n"); printf("请你选择操作类型:\n");printf("1进入管理系统\n");printf("2进入查询系统\n");printf("0退出系统\n");scanf("%d",&choice);switch(choice){case 1:manage();break;case 2:query();break;case 0:{printf("谢谢使用,再见\n");exit(0);}default:{printf("输入有错误请重新输入:\n");return;}}}while(1);}void manage(){int choicemanage;char choice='y';while(choice=='y'||choice=='Y'){printf("欢迎进入管理系统\n");printf("请你选择操作类型:\n");printf("1输入职工信息\n");printf("2显示职工信息\n");printf("3修改职工信息\n");printf("4追加一个职工信息\n");printf("5删除一个职工信息\n");printf("6排序\n");printf("0返回\n");scanf("%d",&choicemanage);switch(choicemanage){case 1:input();break;case 2:display();break;case 3:change();break;case 4:add();break;case 5:del();case 6:paixu();break;case 0:printf("谢谢你的使用再见\n");return;default:printf("你的输入有错请重新输入\n"); }printf("是否继续管理?(y/n)");scanf("%s",&choice);}if(toupper(choice)=='N'||(choice)=='n'){printf("输入完毕,任意键返回\n");getch();return;}}void input(){FILE *fp;int i=0;char choiceinput='y';if((fp=fopen("employee.txt","w"))==NULL) return;while(choiceinput=='y'||choiceinput=='Y'){i++;printf("第%d个职工\n",i);printf("\n");printf("请你输入工号:\n");scanf("%d",&em[i].num);printf("\n");printf("请你输入职位:\n");printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");scanf("%d",&em[i].position);printf("\n");printf("请你输入姓名:\n");scanf("%s",em[i].name);printf("\n");printf("请你输入性别以m为男f为女:\n");scanf("%s",em[i].sex);printf("\n");printf("请你输入工资:\n");scanf("%d",&em[i].salary);printf("\n");printf("是否继续输入?(y/n)\n");scanf("%s",&choiceinput);fwrite(&em[i],sizeof(struct employee),1,fp);}if(toupper(choiceinput)=='N'){fclose(fp);printf("输入完毕,任意键返回\n");getch();return;}}void display(){FILE *fp;int i;if((fp=fopen("employee.txt","r"))==NULL)return;printf("输出结果:\n");for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {printf("工号%d\n",em[i].num);printf("职位为%d\n",em[i].position);printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name);printf("性别为%s\n",em[i].sex);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);}printf("完毕按任意键返回\n");getch();fclose(fp);return;}void change(){FILE *fp;int i;char chname[8];int choicechange;printf("请你输入要修改的人的姓名:\n");scanf("%s",&chname);if((fp=fopen("employee.txt","w+"))==NULL){printf("不能够打开这个文件\n");return;}for(i=0;i<N;i++){if(strcmp(chname,em[i].name)==0){printf("这是你要修改的人的信息\n");printf("工号为%d\n 职位为%d\n 姓名为%s\n 性别为%s\n 工资为%d\n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].salary);printf("请你输入要修改的部分:\n");printf("1修改职位\n");printf("2修改工资\n");printf("0退出系统\n");printf("请选择\n");scanf("%d",&choicechange);switch(choicechange){case 1:em[i].position=changeposition();break;case 2:em[i].salary=changesalary();break;case 0:return;default :printf("输入有错误");}fwrite(&em[i],sizeof(struct employee),1,fp); }}fclose(fp);printf("操作完成按任意键返回\n");getch();return;}int changeposition(){int newposition;printf("请你输入新职位:\n");printf("1董事长2总经理3副总经理\n"); printf("4经理5副经理6秘书\n"); printf("7技术员8领班9员工\n"); scanf("%d",&newposition);return(newposition);}int changesalary(){int newsalary;printf("请你输入新的工资:\n");scanf("%d",&newsalary);return(newsalary);}void add(){struct employee emp;FILE *fp;int i=0;if((fp=fopen("employee.txt","ab+"))==NULL){printf("不能够打开这个文件\n");getch();return;}printf("请你输入新人的内容:\n");printf("请你输入工号:\n");scanf("%d",&em[i].num);printf("请你输入职位:\n");printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");scanf("%d",&emp.position);printf("请你输入姓名:\n");scanf("%s",);printf("请你输入性别以m为男f为女:\n");scanf("%s",emp.sex);printf("请你输入工资:\n");scanf("%d",&emp.salary);fwrite(&emp,sizeof(struct employee),1,fp);rewind(fp);printf("插入完毕,按任意键返回\n");getch();fclose(fp);return;}void del(){int i=0;char delname[8];FILE *fp;if((fp=fopen("employee.txt","w"))==NULL){printf("文件为空,不能够打开\n");printf("按任意键返回\n");getch();return;}printf("请你输入要删除的人的姓名:\n");scanf("%s",delname);for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {if(strcmp(em[i].name,delname)!=0)fwrite(&em[i],sizeof(struct employee),1,fp);}fclose(fp);if((fp=fopen("employee.txt","r"))==NULL)return;printf("新的职工的信息为:\n");for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name[8]);printf("性别为%s\n",em[i].sex[2]);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);fclose(fp);}}void query(){FILE *fp;int i=0;char quename[8];if((fp=fopen("employee.txt","r"))==NULL){printf("不能够打开文件,按任意键返回\n");getch();return;}printf("请你输入要查询的人的姓名\n");scanf("%s",quename);for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {if(strcmp(em[i].name,quename)==0){printf("\t\t\n查询到的职工号或姓名为的信息如下:\n");printf("以下是你要查询的人的信息\n");printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf("\t 1董事长2总经理3副总经理\n");printf("\t 4经理5副经理6秘书\n");printf("\t 7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name);printf("性别为%s\n",em[i].sex);printf("\t其中m为男f为女\n");printf("工资为%d\n",em[i].salary);printf("\n");printf("查询完毕,按任意键返回\n");getch();fclose(fp);return;}}printf("没有这样的人,按任意键返回\n");getch();fclose(fp);return;}void querysalary(){int i;FILE *fp1,*fp2;creat();if((fp1=fopen("employee.txt","w+"))==NULL)return;for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++) {printf("输出结果为:\n");printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf(" 1董事长2总经理3副总经理\n");printf(" 4经理5副经理6秘书\n");printf(" 7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name[8]);printf("性别为%s\n",em[i].sex[2]);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);strcpy(emps[i].name,em[i].name);emps[i].salary=em[i].salary;}if((fp2=fopen("empsalary.txt","w"))==NULL)return;for(i=0;i<N;i++)fwrite(&emps[i],sizeof(struct empsalary),1,fp2);fclose(fp1);fclose(fp2);}void creat(){FILE *fp;if((fp=fopen("D:\\employee.txt","w+"))==NULL)return;input();fclose(fp);}void paixu(){int max,i,t,j;for(i=1;i<10;i++){max=em[i].salary;for(j=i;j<10;j++){if(em[j].salary>max){max=em[j].salary;t=em[j].salary;em[j].salary=t;}}}printf("姓名工资工号性别职位\n");for(i=1;i<10;i++)printf(" %s %d %d %s %d\n ",em[i].name,em[i].salary,em[i].num,em[i].sex,em[i].position);}。
职工工资管理系统c语言程序设计
职工工资管理系统 C 语言程序设计简介职工工资管理系统是一个用于帮助企业管理职工工资的程序,它可以实现对职工的基本信息、工作时长、工资等进行管理。
本文将介绍如何使用 C 语言实现一个简单的职工工资管理系统。
功能设计1. 添加职工信息系统可以添加新的职工信息,包括职工编号、姓名、性别、职位等。
2. 修改职工信息已有职工信息可以进行修改,如姓名、性别、职位等。
3. 计算工资系统可以根据职工的工作时长和基础工资计算出实际工资。
4. 查询职工信息可以通过职工编号或姓名查询职工的详细信息。
5. 显示所有职工信息将所有职工的信息显示在界面上。
开发流程1. 定义数据结构首先,我们需要定义一个数据结构Employee来保存职工的信息,包括职工编号、姓名、性别、职位、基础工资等字段。
struct Employee {int id;char name[50];char gender[10];char position[50];float baseSalary;float hoursWorked;float totalSalary;};2. 编写主要函数添加职工信息void addEmployee(struct Employee emp) {// 将 emp 添加到员工列表中}修改职工信息void updateEmployee(struct Employee emp) {// 根据职工编号修改对应的员工信息}计算工资float calculateSalary(struct Employee emp) {// 计算职工的实际工资return emp.baseSalary + emp.hoursWorked * hourlyRate;}查询职工信息void searchEmployee(int id) {// 根据职工编号查询职工信息}显示所有职工信息void displayAllEmployees() {// 显示所有职工的信息}3. 用户界面交互为了方便用户操作,可以设计一个简单的用户界面,使用控制台打印实现信息展示和输入。
C语言课设——职工工资管理系统
一引言C语言是Combined Language(组合语言)的中英混合简称。
是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数、结构体和文件等,然后确定处理过程。
本课题中主要应用了C语言中的数组、结构体、文件等关键技术。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型;结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构,在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型,结构体只能描述一个对象的状态,不能描述一个对象的行为。
文件是一种组织外部存储介质上的数据的数据类型。
它具有两个特征:一是对一个数据集合可以用一个名字命名;二是保存在外部存储介质上,可以长期保存。
通过此次课设可以锻炼学生理论联系实际能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解,并达到如下目的:1.熟悉C语言程序的编辑、编译链接和运行的过程。
2.熟练运用if语句和switch语句以及嵌套应用。
3.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
4. 掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
5.掌握结构体类型变量、数组的定义和使用。
6. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。
2程序流程图主函数源代码:void main(){int choose=0;while(true){show();printf("\t\t====>请选择:");scanf("%d",&choose);system("cls");switch(choose){case 0: exit(0);ame,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);定义i=0i<Number输出职工信息开始结束定义数据类型numberTemp,i i<numberTempi++添加成功输出职工信息开始结束}}查找职工信息函数的实现查找记录前如图11所示。
职工工资管理系统设计--C语言课程设计
《C语言程序设计》课程设计实习报告实验题目职工工资管理1.问题描述:添加模块:添加职工或工资的信息删除模块:能通过姓名或者工号删除职工信息修改模块:修改职工信息查询模块:能通过姓名或者工号查询职工信息显示模块:显示全部职工信息文件管理模块:负责源数据文件的管理,包括新建、读取和保存源数据2.概要设计职工工资管理添加模块删除模块修改模块查询模块显示模块文件管理模块按姓名按工号按姓名按工号新建记录数据文件读取记录数据文件保存记录数据文件在各模块处用指针函数来使用后面的保存记录数据文件进行保存。
3.详细设计include <stdio.h># include <stdlib.h># include <string.h>/*宏定义*/# define N 100 /*假设工人个数是100*/# define HEADER1 "----------------------------------------------------------------------\n"# define HEADER2 " | Number | Name | Psex | Age | Time | Ywage | Ykou | Pwage |\n"# define HEADER3 " |--------|--------|--------|-------|------|-------|------|-------|\n"# define FORMAT " |%-8d|%-8s|%-8s|%-7d|%-6d|%-7d|%-6d|%-7d|\n"# define DATA p->num ,p->name,p->sex,p->age,p->time,p->ywage,p->ykou,p->pwage# define END "-----------------------------------------------------------------------\n"/**/typedef struct work{int num; /**/char name[10];char sex[10];int age; /**/int time; /**/int ywage; /**/int ykou; /**/int pwage; /**/}WORK;/**/typedef struct pointer_info{WORK*pHead; /**/int count; /**/char fname[10]; /**/int saveflag; /**/}PI;/**/void Menu();void Add(PI*);void Del(PI*);void Save(PI*pi);void Modify(PI*pi);void Qur(PI*pi);void Load(PI*pi);void New(PI*pi);void Disp(PI*);void Wrong();void printheader();void main(){int sel;WORK *pwork;PI pi;pwork = (WORK*)malloc(N * sizeof(WORK));pi.pHead = pwork;pi.count = 0;pi.fname[0] = '\0';pi.saveflag = 0;/*显示主函数*/Menu();printf("Please input your choice [0~5]:");do{scanf("%d",&sel);if (sel == 0){/*if (pi.saveflag ==1){if (strlen(pi.fname)){Save(&pi);}else{New(&pi);Save(&pi);}}*/break;}switch(sel){case 1:Add(&pi);break;case 2:Del(&pi);break;case 3:Modify(&pi);break;case 4:Qur(&pi);break;case 5:Disp(&pi);break;default:Wrong();break;}}while(1);pwork = pi.pHead;free(pwork);}void printheader(){printf(HEADER1);printf(HEADER2);printf(HEADER3);}void Menu(){system("cls");printf(" The Workers' Grade Wage System \n");printf("****************Menu*************************************\n");printf(" * 1 添加*\n");printf(" * 2 删除*\n");printf(" * 3 修改*\n");printf(" * 4 查询*\n");printf(" * 5 显示*\n");printf(" * 0 退出*\n");printf ("*********************************************************\n"); }void Wrong( ){printf("\n******Error :input has wrong ! press any key to continue******\n");}void Add(PI* pi ){int num;//char sex[10];int nSex;int i,flag=0;WORK * pwork,*p;do{pwork=pi->pHead+pi->count;p=pi->pHead;printf("please input the number:(press '0'return menu)");scanf("%d",&num);for(i=1;i< pi->count; i++){if(num==p->num){printf ("the number you input has exist,please input another one!\n");flag=1;break;}p++;}if(flag){flag=0;continue;}if (num != 0){pwork->num = num;}else{Menu();printf("please input your choice[0~5]:");break;}printf("please input the name:");scanf("%s",pwork->name);printf("please input the sex(0 is woman,1 is man):");scanf( "%d", &nSex );if( nSex == 0 )strcpy( pwork->sex,"woman");elsestrcpy( pwork->sex,"man");printf("please input the time:");scanf("%d", &pwork->time);printf("please input the age:");scanf("%d", &pwork->age);printf("please input the Ywage:");scanf("%d", &pwork->ywage);printf("please input the Ykou:");scanf("%d", &pwork->ykou);pwork->pwage = pwork->ywage-pwork->ykou;pi->count++;pi->saveflag=1;}while(1);}void Qur(PI * pi){int a,i,num;WORK *p;char name[10];p=pi->pHead;Menu();printf("1------search by number\n");printf("2------search by name\n");printf("3------return\n");printf("please input your choice:[1,2]?");scanf("%d",&a);if(a==3){return;}if(a==1){printf("please input the number for search:");scanf("%d",&num);for(i=1;i<= pi->count; i++){if(num==p->num){break;}p++;}if(i>pi->count){printf("no record found\n");return;}else{printheader();printf(FORMAT,DATA);printf(END);}}else if(a==2){printf("please input name to search:");scanf("%s",name);for(i=1;i<=pi->count;i++){if(strcmp(name,p->name) !=0){break;}p++;}if(i>pi->count){printf("no record found\n");return;}else{printheader();printf(FORMAT,DATA);printf(END);}}printf("Please input your choice[0~5]:");}void Modify(PI *pi){int num,i;WORK *p,*pwork;p = pi->pHead;Menu();Disp(pi);printf("please input the number of work to modify:");scanf("%d",&num);for (i = 1;i < pi->count;i++){if (num == p->num){break;}p++;}if (i > pi->count){printf("no record found\n");return;}else{printf("please input the number:(enter '0'return menu)");scanf("%d",&num);if (num!=0){p->num =num;}else{Menu();return;}printf("please input the name:");scanf("%s",p->name);printf("please input the sex:");scanf("%s",p->sex);printf("please input the age:");scanf("%d",&p->age);printf("please input the time:");scanf("%d",&p->time);printf("please input the ywage:");scanf("%d",&p->ywage);printf("please input the ykou:");scanf("%d",&p->ykou);pwork->pwage = pwork->ywage-pwork->ykou;pi->saveflag = 1;}}/*删除职工记录*/void Del(PI * pi){int sel,i,num;char name[10];WORK *p;/*指针函数*/p=pi->pHead;Menu();printf("1------delete by number\n");/*选择工号*/printf("2------delete by name\n");/*选择姓名*/printf("any key other------return\n");/*按别的键就返回*/ printf("please input your choice:[1,2]?\n");scanf("%d",&sel);if(sel!=1&&sel!=2)/*按别的键*/{return;}if( sel == 1 )/*选择工号*/{printf("Please input the number to delete:");scanf("%d",&num);for(i=1;i<=pi->count;i++)/*按学号搜索*/{if(num==p->num){break;}p++;}if(i>pi->count){printf("no record found\n");return;}else if(i==pi->count) /*删除中间某个记录,只需要将count减1*/ {pi->count--;pi->saveflag=1;printf("record delete successfully!\n");}else /*删除某个记录,只要将其后的数据前移覆盖即可*/{memcpy(p,p+1,(pi->pHead + pi->count - p)*sizeof(WORK));pi->count--;pi->saveflag = 1;printf("record delete successfully!\n");}}else if(sel == 2)/*选择姓名*/{printf("please input name to delete:");scanf("%s",name);for(i=1;i<=pi->count;i++){if(strcmp(name,p->name) != 0){break;}p++;}if(i>pi->count){printf("no record found\n");return;}else if(i==pi->count)/*删除中间某个记录,只需要将count减1*/ {pi->count--;pi->saveflag=1;printf("record delete successfully!\n");}else{ /*删除某个记录,只要将其后的数据前移覆盖即可*/ memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(WORK) );pi->count--;pi->saveflag=1;printf("record delete successfully!\n");}}printf("please input your choice[0~5]:");}/*显示*/void Disp(PI * pi){int i;WORK *p = pi->pHead;if (pi->count==0){printf("no record found\n");printf("\nplease input your choice[0~5]:");return;}printheader();for(i=1;i<=pi->count;i++){printf(FORMAT,DATA);printf(END);p++;}}void New(PI *pi){FILE * fp;char name[10];char fname[10] =".\\";printf("please input the date file name foe create:");scanf("%s",fname);strcat(fname,name);strcat(fname,".dat");fp=fopen(fname,"wb");if(fp==NULL){printf("\n=====>open file error!\n");return;}strcpy(pi->fname,fname);fclose(fp);}void Load (PI *pi){FILE * fp;WORK * p=pi->pHead;char name [10];char fname [10]= ".\\";printf( "please input the data file name for load:");scanf( "%s",name);strcat(fname,name);fp=fopen(fname , "rb");if(fp==NULL){printf("\n====>open file error!\n");return;}pi->count = 0;pi->saveflag = 0;while(feof(fp)!=0){if(fread(p,sizeof(WORK),1,fp)){pi->count++;p++;}}strcpy(pi->fname,name);printf("load data file %s successfully!",name);fclose(fp);}void Save(PI * pi){FILE * fp;int numwriten;if (!strlen(pi->fname))New(pi);fp=fopen(pi->fname, "wb");if(fp==NULL){printf("\n====>open file error!\n");fclose(fp);return ;}if (pi->count){numwriten = fwrite(pi->pHead,1,pi->count * sizeof(WORK),fp);pi->saveflag = 0;printf("file save succesefully!");}elseprintf("no record for save !");fclose(fp);}4测试分析添加时Q1:性别通过输入0或1输出woman or man有if语句进行选择Q2:实得工资由应发工资减去应扣工资自动得到在程序中做减法添加后删除Q1:通过工号或姓名删除使用if语句进行选择,并用for语句对进行搜索Q2:删除中间摸个记录删除后修改查找Q1:要求通过工号或者姓名查找使用if语句Q2:如果找不到记录则要返回使用if –else语句找不到就输出源数据显示5.课程设计总结通过我们小组的共同努力终于完成任务,制作了职工工资管理系统。
中南大学C语言程序设计实验——职工工资管理系统(附详细操作说明及注释)
/* Note:Your choice is C IDE */#include "stdio.h"#include "string.h"#include "conio.h"#include "stdlib.h"struct Message /*此结构体用于存放职工信息以及创建链表*/{char name[30];int ID;int JBGZ;int ZWGZ;int JT;int YLBX;int GJJ;long int Total;float Sum_3;struct Message *nextPrt;} static *head,*Rec_1=NULL,*Rec_2=NULL, *Rec_3=NULL; /*此处创建一个表头,以及三个用于恢复函数的静态变量*/static float Sum_JBGZ=0,Sum_ZWGZ=0,Sum_JT=0,Sum_YLBX=0,Sum_GJJ=0; static float Average_JBGZ,Average_ZWGZ,Average_JT,Average_YLBX,Average_GJJ; void Input(); /*此处声明各一级函数*/ void Output();void Delete();void Add();void Recover();void Modify();void Search();void Statistic();struct Message *creat(struct Message *h); /*此处声明各二级函数*/ void print_Message(struct Message *h);struct Message *del_Message(struct Message *h,char *str);struct Message *add_Message(struct Message *h,struct Message *a,char *strafter); struct Message *Recover_Message(struct Message *h);struct Message *Modify_Message(struct Message *h,char *str);void Search_Message(struct Message *h);void Statistic_Message(struct Message *h);main() /*主函数为菜单页*/ {char i; /*功能:调用各一级函数一级退出程序*/clrscr();gotoxy(27,9);printf("\16[ 中南大学 ]");gotoxy(27,11);printf("\16[ 职工工资管理系统 ]");gotoxy(27,13);printf("\16[ 设计者:刘路 ]");gotoxy(27,15);printf("\16[ 输入任意键继续 ]\n");getch();for(;;){clrscr();gotoxy(25,9);printf("* * * * * * *菜单* * * * * *");gotoxy(25,10);printf("* a. 输入记录 *");gotoxy(25,11);printf("* b. 显示记录 *");gotoxy(25,12);printf("* c. 修改记录 *");gotoxy(25,13);printf("* d. 查找记录 *");gotoxy(25,14);printf("* e. 添加记录 *");gotoxy(25,15);printf("* f. 删除记录 *");gotoxy(25,16);printf("* g. 恢复记录 *");gotoxy(25,17);printf("* h. 统计数据 *");gotoxy(25,18);printf("* i. 退出程序 *");gotoxy(25,19);printf("* 请选择 a—i *");gotoxy(25,20);printf("* * * * * * * * * * * * * **");i=getch();if(i=='i')break;else switch(i){case'a':Input();break; /*调用记录输入函数*/ case'b':Output();break; /*调用记录显示函数*/ case'c':Modify();break; /*调用记录修改函数*/ case'd':Search();break; /*调用记录查找函数*/ case'e':Add();break; /*调用记录添加函数*/case'f':Delete();break; /*调用记录删除函数*/case'g':Recover();break; /*调用记录恢复函数*/case'h':Statistic();break; /*调用记录统计函数*/}}}void Input() /*定义输入函数(一级)*/{ /*主要功能:调用二级子函数创建链表*/head=NULL;head=creat(head);}void Output() /*定义显示函数(一级)*/{ /*主要功能:调用二级子函数实现按一定格式输出所有职工工资信息*/clrscr();print_Message(head);}void Delete() /*定义删除函数(一级)*/{ /*主要功能:调用二级子函数实现删除任意职工工资信息并输出删除后的工资信息*/char name[50],*del_Mes=name;clrscr();gotoxy(1,1);printf("请输入姓名:\n");scanf("%s",name);head=del_Message(head,del_Mes);clrscr();printf("删除数据后:\n");printf("----------------------------------------------------------\n");print_Message(head);}void Add() /*定义添加函数(一级)*/{ /*主要功能:调用二级函数以实现在任意位置添加一条或多条职工工资信息*/char after_name[30],i;struct Message* p;clrscr();gotoxy(1,1);printf("\n请输入需要添加的信息\n");printf("----------------------------------------------------------\n");p=(struct Message*)malloc(sizeof (struct Message));if(p!=NULL){printf("请输入姓名:\n");scanf("%s",&p->name);printf("请输入ID:\n");scanf("%d",&p->ID);printf("请输入基本工资:\n");scanf("%d",&p->JBGZ);printf("请输入职位工资:\n");scanf("%d",&p->ZWGZ);printf("请输入津贴:\n");scanf("%d",&p->JT);printf("请输入医疗保险:\n");scanf("%d",&p->YLBX);printf("请输入公积金:\n");scanf("%d",&p->GJJ);p->Total=p->JBGZ+p->ZWGZ+p->JT-p->YLBX-p->GJJ;printf("总工资为:%d\n",p->Total);}printf("\n输入在哪个职工信息下方添加新信息:\n");scanf("%s",after_name);head=add_Message(head,p,after_name);printf("\n是否继续添加?Y/N");i=getch();while (i!='N'){printf("\n请输入你想要添加的信息\n");printf("----------------------------------------------------------\n");p=(struct Message*)malloc(sizeof (struct Message));if(p!=NULL){printf("请输入姓名:\n");scanf("%s",&p->name);printf("请输入ID:\n");scanf("%d",&p->ID);printf("请输入基本工资:\n");scanf("%d",&p->JBGZ);printf("请输入职位工资:\n");scanf("%d",&p->ZWGZ);printf("请输入津贴:\n");scanf("%d",&p->JT);printf("请输入医疗保险:\n");scanf("%d",&p->YLBX);printf("请输入公积金:\n");scanf("%d",&p->GJJ);p->Total=p->JBGZ+p->ZWGZ+p->JT-p->YLBX-p->GJJ;printf("总工资为:%ld\n",p->Total);}printf("\n输入在哪个职工信息下方添加新信息:\n");scanf("%s",after_name);head=add_Message(head,p,after_name);printf("\n是否继续添加?Y/N");i=getch();}clrscr();gotoxy(1,1);printf("\n添加后的信息为:\n");printf("----------------------------------------------------------\n");print_Message(head);}void Recover() /*定义记录恢复函数(一级)*/{ /*主要功能:调用二级函数以实现恢复已删除的信息*/clrscr();head=Recover_Message(head);gotoxy(1,4);printf("恢复成功!^_^\n");printf("\n输入任意键退出...");getch();}void Modify() /*定义记录修改函数(一级)*/{ /*主要功能:调用二级函数以实现修改任意职工的任意信息*/char name[50],*Mod_Message=name;clrscr();printf("请输入需要修改信息的员工:\n");scanf("%s",name);head=Modify_Message(head,Mod_Message);clrscr();printf("修改后的信息为:\n");printf("----------------------------------------------------------\n");print_Message(head);}void Search() /*定义记录查找函数(一级)*/{ /*主要功能:调用二级函数实现按照姓名或ID通过关键字查找或精确查找的方式搜索职工信息*/ clrscr();Search_Message(head);}void Statistic() /*定义记录统计函数(一级)*/{ /*调用二级函数以实现以表格的形式输出职工工资信息并统计前三项工资总额在一定范围内的人数及比例*/clrscr();Statistic_Message(head);printf("\n输入任意键退出...");getch();}struct Message *creat(struct Message *h) /*定义创建链表函数(二级)*/{char i;struct Message *p1,*p2;clrscr();p1=p2=(struct Message*)malloc(sizeof (struct Message));if(p2!=NULL){gotoxy(1,1);printf("请输入姓名:\n");scanf("%s",&p2->name);printf("请输入ID:\n");scanf("%d",&p2->ID);printf("请输入基本工资:\n");scanf("%d",&p2->JBGZ);printf("请输入职位工资:\n");scanf("%d",&p2->ZWGZ);printf("请输入津贴:\n");scanf("%d",&p2->JT);printf("请输入医疗保险:\n");scanf("%d",&p2->YLBX);printf("请输入公积金:\n");scanf("%d",&p2->GJJ);p2->Total=p2->JBGZ+p2->ZWGZ+p2->JT-p2->YLBX-p2->GJJ;printf("总工资为:%ld\n",p2->Total);h=p2;p2->nextPrt=NULL;printf("输入s退出,输入其他键继续...\n");i=getch();}while(i!='s'){p2=(struct Message*)malloc(sizeof (struct Message));if(p2!=NULL){printf("请输入姓名:\n");scanf("%s",&p2->name);printf("请输入ID:\n");scanf("%d",&p2->ID);printf("请输入基本工资:\n");scanf("%d",&p2->JBGZ);printf("请输入职位工资:\n");scanf("%d",&p2->ZWGZ);printf("请输入津贴:\n");scanf("%d",&p2->JT);printf("请输入医疗保险:\n");scanf("%d",&p2->YLBX);printf("请输入公积金:\n");scanf("%d",&p2->GJJ);p2->Total=p2->JBGZ+p2->ZWGZ+p2->JT-p2->YLBX-p2->GJJ;printf("总工资为:%ld\n",p2->Total);p2->nextPrt=NULL;p1->nextPrt=p2;p1=p2;printf("输入s退出,输入其他键继续...\n");i=getch();}}return h;}void print_Message(struct Message *h) /*定义记录输出函数(二级)*/{struct Message *temp;int i=0;temp=h;gotoxy(1,4);printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b医疗保险\t 公积金\t\b总工资\n");if (temp==NULL) printf("没有找到信息!\n");while(temp!=NULL){i++;printf("%d\t\b\b%s\t\b\b%d\t%d\t %d\t%d\t%d\t%d\n",temp->ID,temp->name,temp->JBGZ,temp->ZWGZ,temp->JT,temp->YLBX,temp->GJJ,temp->Total);(Sum_JBGZ+=temp->JBGZ,Sum_ZWGZ+=temp->ZWGZ,Sum_JT+=temp->JT,Sum_YLBX+=temp->YLBX,Sum_GJJ+=temp->GJJ);temp=temp->nextPrt;}(Average_JBGZ=Sum_JBGZ/i,Average_ZWGZ=Sum_ZWGZ/i,Average_JT=Sum_J T/i,Average_YLBX=Sum_YLBX/i,Average_GJJ=Sum_GJJ/i);printf("各项平均工资:\t\b\b%.1f\t%.1f\t %.1f\t%.1f\t%.1f\n",Average_JBGZ,Average_ZWGZ,Average_JT ,Average_YLBX,Average_GJJ);printf("输入任意键退出...");getch();}struct Message *del_Message(struct Message *h,char *str) /*定义记录删除函数(二级)*/{struct Message *p1,*p2;p1=h;if(p1==NULL){printf("没有找到信息!\n");return h;}p2=p1->nextPrt;if(!strcmp(p1->name,str)){Rec_2=p1;Rec_3=p2;h=p2;return h;}while(p2!=NULL){if(!strcmp(p2->name,str)){Rec_1=p1;Rec_2=p2;Rec_3=p2->nextPrt;p1->nextPrt=p2->nextPrt;return h;}else{p1=p2;p2=p2->nextPrt;}}printf("删除成功!^_^");getch();return h;}struct Message *add_Message(struct Message *h,struct Message *a,char *strafter) /*定义记录添加函数(二级)*/{struct Message *p1,*p2;p1=h;while(p1!=NULL){if(!strcmp(p1->name,strafter)){a->nextPrt=p1->nextPrt;p1->nextPrt=a;return h;}elsep1=p1->nextPrt;}return h;}struct Message* Recover_Message(struct Message *h)/*定义记录恢复函数(二级)*/{if(Rec_1==NULL){h=Rec_2;Rec_2->nextPrt=Rec_3;}else{Rec_1->nextPrt=Rec_2;Rec_2->nextPrt=Rec_3;}return h;}struct Message* Modify_Message(struct Message *h,char *str)/*定义记录修改函数(二级)*/{struct Message *p1;int i;p1=h;if(p1==NULL){printf("没有找到信息!");return h;}while(strcmp(p1->name,str))p1=p1->nextPrt;printf("请输入需要修改的信息(序号):\n");printf("1.姓名 2.ID 3.基本工资 4.职务工资 5.津贴 6.医疗保险 7.公积金 8.总工资\n");scanf("%d",&i);switch(i){case 1:{printf("请输入修改后的姓名:\n");scanf("%s",&p1->name);};break;case 2:{printf("请输入修改后的ID:\n");scanf("%d",&p1->ID);};break;case 3:{printf("请输入修改后的基本工资:\n");scanf("%d",&p1->JBGZ);};break;case 4:{printf("请输入修改后的职务工资:\n");scanf("%d",&p1->ZWGZ);};break;case 5:{printf("请输入修改后的津贴:\n");scanf("%d",&p1->JT);};break;case 6:{printf("请输入修改后的医疗保险:\n");scanf("%d",&p1->YLBX);};break;case 7:{printf("请输入修改后的公积金:\n");scanf("%d",&p1->GJJ);};break;case 8:{printf("请输入总工资:\n");scanf("%d",&p1->Total);};break;}printf("\n修改成功!^_^\n输入任意键查看结果...");getch();return h;}void Search_Message(struct Message *h) /*定义记录搜索函数(二级)*/{struct Message* p1;int a,b,i,u,n=0,x1=0,x2,x3=0,x4=0,x5,x6,w1=1,w2=1,w3=0;char name[50];p1=h;if (p1==NULL) printf("没有找到信息!");printf("请选择查找方式:1.按姓名查找 2.按ID查找\n");scanf("%d",&a);printf("请选择搜索方式:1.按关键字搜索 2.精确搜索\n");scanf("%d",&b);if(a==1&&b==1){printf("请输入姓名:\n");scanf("%s",name);while(p1!=NULL){for(i=0;name[i]!='\0';i++)for(u=0;p1->name[u]!='\0';u++)if (name[i]==p1->name[u]) n++;if (2*n>=strlen(name)){printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b 医疗保险\t公积金\t\b总工资\n");printf("%d\t\b\b%s\t\b\b%d\t%d\t %d\t%d\t%d\t%d\n",p1->ID,p1->name,p1->JBGZ,p1->ZWGZ,p1->JT,p1->YLBX,p1->GJJ,p1->Total);}p1=p1->nextPrt;}p1=h;printf("\n输入任意键退出...");getch();}if(a==1&&b==2){printf("请输入姓名:\n");scanf("%s",name);while(p1!=NULL){if(!strcmp(p1->name,name)){printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b 医疗保险\t公积金\t\b总工资\n");printf("%d\t\b\b%s\t\b\b%d\t%d\t %d\t%d\t%d\t%d\n",p1->ID,p1->name,p1->JBGZ,p1->ZWGZ,p1->JT,p1->YLBX,p1->GJJ,p1->Total);}p1=p1->nextPrt;}p1=h;printf("\n输入任意键退出...");getch();}if(a==2&&b==1){printf("请输入ID:\n");scanf("%d",&x1);x2=x1;while(x2!=0){x2=x2/10;if(x2!=0)w1++; /*记录输入数据的位数w1*/}while(p1!=NULL){x6=x1; /*用x6暂时存储输入的数据*/for(i=1;i<=w1;i++) /*执行w1次循环*/{x3=x6%10; /*x3为x6的末位数*/x5=p1->ID;while(x5!=0){x5=x5/10;if(x5!=0)w2++; /*记录链表中某一节点位数*/}x5=1;x4=p1->ID; /*x4暂时存储链表中某一节点的ID*/for(u=1;u<=w2;u++) /*执行w2次循环*/{if((x4%10)==x3) /*判断x4的末位是否等于x3,若相等,则跳出循环,继续循环以判断该节点中是否还有输入数据中的其他数字*/{w3++; /*某节点的ID中,只要存在输入数据中的某一位数字,则w3增加1*/break;}x4=x4/10; /*判断x4的末位是否等于x3,若不相等,则去掉x4的末位数*/}x6=x6/10; /*去掉x6的末位数,继续循环判断该节点中是否还有输入数据中的其他数据*/w2=1; /*恢复w2的初值,否则位数将继续累加*/}if(w3==w1) /*如果w3与w1相等则表示该节点的ID中包含有输入数据中的所有数字,则输出该节点的数据*/{printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b 医疗保险\t公积金\t\b总工资\n");printf("%d\t\b\b%s\t\b\b%d\t%d\t %d\t%d\t%d\t%d\n",p1->ID,p1->name,p1->JBGZ,p1->ZWGZ,p1->JT,p1->YLBX,p1->GJJ,p1->Total);}p1=p1->nextPrt; /*节点位置向后移动一位,继续循环以判断是否符合输出要求*/};p1=h;printf("\n输入任意键退出...");getch();}if(a==2&&b==2){printf("请输入ID:\n");scanf("%d",&x1);while(p1!=NULL){if(p1->ID==x1){printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b 医疗保险\t公积金\t\b总工资\n");printf("%d\t\b\b%s\t\b\b%d\t%d\t %d\t%d\t%d\t%d\n",p1->ID,p1->name,p1->JBGZ,p1->ZWGZ,p1->JT,p1->YLBX,p1->GJJ,p1->Total);}p1=p1->nextPrt;}p1=h;printf("\n输入任意键退出...");getch();}}void Statistic_Message(struct Message *h) /*定义记录统计函数*/ {struct Message *p1;int i=0,a1=0,b1=0,c1=0;float a2,b2,c2;p1=h;printf("┏━━━┳━━━━━┳━━━━┳━━━━┳━━━┳━━━━┳━━━┳━━━┓\n");printf("┃ ID号┃姓名┃基本工资┃职务工资┃津贴┃医疗保险┃公积金┃总工资┃\n");printf("┣━━━╋━━━━━╋━━━━╋━━━━╋━━━╋━━━━╋━━━╋━━━┫\n");while(p1!=NULL){i++;printf("┃%d\t┃ %s\t \b\b\b\b\b\b\b\b┃%d\t\b\b\b\b ┃ %d\t┃%d\t┃%d\t ┃ %d\t\b\b\b\b\b\b┃%ld ┃\n",p1->ID,p1->name,p1->JBGZ,p1->ZWGZ,p1->JT,p1->YLBX,p1->GJJ,p1->Total);printf("┣━━━╋━━━━━╋━━━━╋━━━━╋━━━╋━━━━╋━━━╋━━━┫\n");(Sum_JBGZ+=p1->JBGZ,Sum_ZWGZ+=p1->ZWGZ,Sum_JT+=p1->JT,Sum_YLBX+=p1->YLBX,Sum_GJJ+=p1->GJJ);p1=p1->nextPrt;}(Average_JBGZ=Sum_JBGZ/i,Average_ZWGZ=Sum_ZWGZ/i,Average_JT=Sum_J T/i,Average_YLBX=Sum_YLBX/i,Average_GJJ=Sum_GJJ/i);printf("┃┃┃┃┃┃┃┃┃\n");printf("┣━━━┻━━━━━╋━━━━╋━━━━╋━━━╋━━━━╋━━━╋━━━┫\n");printf("┃各项平均工资┃%.1f\t\b\b\b\b ┃ %.1f\t┃%.1f\t\b ┃%.1f\t\b\b\b\b ┃%.1f\t\b\b\b\b\b\b┃\t\b\b ┃\n",Average_JBGZ,Average_ZWGZ,Average_JT,Average_YLBX,Average_GJJ);printf("\b┗━━━━━━━━━┻━━━━┻━━━━┻━━━┻━━━━┻━━━┻━━━┛");p1=h;while(p1!=NULL){p1->Sum_3=(p1->JBGZ+p1->ZWGZ+p1->JT);if(p1->Sum_3>=1000 && p1->Sum_3<1500) a1++;if(p1->Sum_3>=1500 && p1->Sum_3<=2000) b1++;if(p1->Sum_3>2000) c1++;p1=p1->nextPrt;}a2=((float)a1/i)*100;b2=((float)b1/i)*100;c2=((float)c1/i)*100;printf("\n\n前三项工资和在1000-1500元之间的职工人数为:%d,占总职工人数的百分比为:%.2f%",a1,a2);printf("\n前三项工资和在1500-2000元之间的职工人数为:%d,占总职工人数的百分比为:%.2f%",b1,b2);printf("\n前三项工资和在2000元以上的职工人数为:%d,占总职工人数的百分比为:%.2f%",c1,c2);p1=h;Sum_JBGZ=0;Sum_ZWGZ=0;Sum_JT=0;Sum_YLBX=0;Sum_GJJ=0;}【欢迎使用职工工资管理系统】本系统可实现对职工工资信息的录入,显示,修改,查找,删除,恢复,添加,统计等功能,具体操作说明如下:进入程序后输入任意键进入主菜单,依菜单所示选择功能,输入序号即可调用该功能:1.输入a:调用记录输入功能,可依照屏幕提示依次输入职工的姓名,ID号,基本工资,职务工资,津贴,医疗保险,公积金(以Enter作为输入结尾)。
c语言职工工资管理系统代码
C语言职工工资管理系统代码1. 项目简介本项目是一个用C语言编写的职工工资管理系统。
该系统旨在帮助企业或组织更好地管理职工的工资信息,包括薪资计算、数据存储和查询等功能。
通过该系统,可以提高工资管理的效率和准确性,减少人力资源部门的负担。
2. 功能需求本系统需要实现以下功能:•添加新员工:输入员工姓名、基本工资、津贴等信息,并生成唯一的员工ID。
•删除员工:根据员工ID删除指定员工信息。
•修改员工信息:根据员工ID修改指定员工的基本信息。
•计算薪资:根据员工ID计算指定员工的实际薪资,并将结果保存到数据库中。
•查询薪资:根据员工ID查询指定员工的薪资信息。
3. 数据结构设计为了存储职工的基本信息和薪资数据,我们可以使用以下数据结构:3.1 员工结构体定义struct Employee {int id; // 员工IDchar name[50]; // 员工姓名float basicSalary; // 基本工资float allowance; // 津贴float actualSalary; // 实际薪资};3.2 员工数组定义struct Employee employees[100]; // 最多存储100个员工的信息int employeeCount = 0; // 当前员工数量4. 系统实现4.1 添加新员工void addEmployee() {struct Employee employee;printf("请输入员工姓名:");scanf("%s", );printf("请输入基本工资:");scanf("%f", &employee.basicSalary);printf("请输入津贴:");scanf("%f", &employee.allowance);employee.id = employeeCount + 1;employee.actualSalary = employee.basicSalary + employee.allowance;employees[employeeCount] = employee;employeeCount++;printf("添加成功!员工ID为:%d\n", employee.id);}4.2 删除员工void deleteEmployee() {int id;printf("请输入要删除的员工ID:");scanf("%d", &id);int index = findEmployeeIndex(id);if (index == -1) {printf("未找到对应的员工信息。
c语言-员工工资管理系统
#include <stdio.h>#include <stdlib.h>#include <conio.h>int q_n=0;int Xuhao[40];struct WORKER{int id;char name[25];int age;int workday;int shouldmy;int decday;int infactmy;}workers[40];/*----主菜单----*/void fmenu(){system("cls");printf(">>> 员工工资管理系统<<<\n\n");printf("1. 录入员工基本信息\n");printf("2. 修改员工基本信息\n");printf("3. 注销员工相关信息\n");printf("4. 录入员工工资信息\n");printf("5. 修改员工工资信息\n");printf("6. 查找员工工资信息\n");printf("7. 插入员工工资信息\n");printf("8. 浏览员工工资信息\n");printf("9. 保存员工工资信息\n");printf("10. 打开员工工资信息\n");printf("11. 清除员工工资信息\n");printf("0. 退出\n");printf("请选择相应序号\n");}/*----员工基本信息的录入----*/void worker_new(){char mm;int i,fg,fg1;printf("----录入员工基本信息----\n");do{fg=0;printf("工号:");scanf("%d",&workers[q_n].id);for(i=0;i<q_n;i++){if(workers[i].id==workers[q_n].id){printf("该员工已存在");fg=1;break;}}if(fg==0){printf("姓名:");scanf("%s",&workers[q_n].name);do{fg1=0;printf("年龄:");scanf("%d",&workers[q_n].age);if(workers[q_n].age>100||workers[q_n].age<0){fg1=1;printf("输入有误,请重新输入\n");}}while(fg1==1);q_n++;}printf("是否继续录入?y/n\n");flushall();scanf("%c",&mm);}while((mm=='y')||(mm=='Y'));printf("\n按任意键返回……\n");getch();}/*----通过工号信息确定下标标号----*/int search_xiabiao(){int n,i;printf("请输入员工工号:");scanf("%d",&i);for(n=0;n<40;n++){if(workers[n].id==i){printf("工号:%d\n",workers[n].id);printf("姓名:%s\n",workers[n].name);printf("年龄:%d\n",workers[n].age);return n;}}printf("\nerror\n");return -1;}/*----注销员工信息----*/void worker_del(){int n,i;printf("----注销员工信息----\n");n=search_xiabiao();printf("出勤天数:%d\n",workers[n].workday);printf("应发工资:%d\n",workers[n].shouldmy);printf("迟到天数:%d\n",workers[n].decday);printf("实际工资:%d\n",workers[n].infactmy);if(n!=-1){for(i=n;i<(q_n-1);i++){workers[i]=workers[i+1];}q_n--;printf("\n!该员工信息已注销\n");}elseprintf("该员工不存在\n");printf("\n按任意键返回……\n");getch();}/*----修改员工基本信息----*/void worker_edit(){int n,fg_ag;printf("----重新编辑员工基本信息----\n");n=search_xiabiao();if(n!=-1){printf("\n请输入更新信息:");printf("姓名:");scanf("%s",&workers[n].name);do{fg_ag=0;printf("年龄:");scanf("%d",&workers[n].age);if(workers[q_n].age>100||workers[q_n].age<0){fg_ag=1;printf("输入有误,请重新输入\n");}}while(fg_ag==1);}printf("\n按任意键返回……\n");getch();}/*----工资相关信息的录入----*/void money_input(){int n,t,c,fg_day,fg_cd;printf("----录入工资----\n");for(n=0;n<q_n;n++){if(workers[n].id!=0&&workers[n].infactmy==0){printf("工号:%d 姓名:%s:",workers[n].id,workers[n].name);do{fg_day=0;printf(" 出勤天数:");scanf("%d",&t);if(t>30||t<0){fg_day=1;printf("输入有误,请重新输入\n");}}while(fg_day==1);workers[n].workday=t;workers[n].shouldmy=t*100;printf("应发工资:%d",workers[n].shouldmy);do{fg_cd=0;printf(" 迟到天数:");scanf("%d",&c);if(c>30||c<0){fg_cd=1;printf("输入有误,请重新输入\n");}}while(fg_cd==1);workers[n].decday=c;workers[n].infactmy=t*100-c*10-200;printf("实际工资:%d\n",workers[n].infactmy);}}printf("\n按任意键返回……\n");getch();}/*----工资信息的修改----*/void money_edit(){int n,t,c,fg_day,fg_cd;printf("----修改工资----\n");n=search_xiabiao();if(n!=-1){printf("出勤天数:%d 应发工资:%d",workers[n].workday,workers[n].shouldmy);printf(" 迟到天数:%d 实际工资:%d\n",workers[n].decday,workers[n].infactmy);do{fg_day=0;printf("重新输入出勤天数:");scanf("%d",&t);if(t>30||t<0){fg_day=1;printf("输入有误,请重新输入\n");}}while(fg_day==1);workers[n].workday=t;workers[n].shouldmy=t*100;printf("应发工资:%d",workers[n].shouldmy);do{fg_cd=0;printf(" 重新输入迟到天数:");scanf("%d",&c);if(c>30||c<0){fg_cd=1;printf("输入有误,请重新输入\n");}}while(fg_cd==1);workers[n].decday=c;workers[n].infactmy=t*100-c*10-200;printf("实际工资:%d",workers[n].infactmy);}printf("\n按任意键返回……\n");getch();}/*----按不同需要将员工信息排序----*/void sort_it(char d){int n,m,p,max,t[40];for(n=0;n<40;n++){switch(d){case '1':t[n]=workers[n].id;break;case '2':t[n]=workers[n].workday;break;case '3':t[n]=workers[n].shouldmy;break;case '4':t[n]=workers[n].decday;break;case '5':t[n]=workers[n].infactmy;break;}}for(n=0;n<q_n;n++){max=-1;for(m=0;m<q_n;m++){if(t[m]>max){max=t[m];p=m;}}t[p]=-1;Xuhao[q_n-n-1]=p;}}/*----查找员工工资信息----*/void search(){int i;i=search_xiabiao();printf("出勤天数:%d\n",workers[i].workday);printf("应发工资:%d\n",workers[i].shouldmy);printf("迟到天数:%d\n",workers[i].decday);printf("实际工资:%d\n",workers[i].infactmy);printf("\n按任意键返回……\n");getch();}/*----插入员工工资信息----*/void insert(){int i,fg=0,fg_day,fg1,fg_cd,t,c;printf("请输入工号:\n");scanf("%d",&workers[q_n].id);for(i=0;i<q_n;i++){if(workers[i].id==workers[q_n].id){printf("该员工已存在");fg=1;break;}}if(fg==0){printf("姓名:");scanf("%s",&workers[q_n].name);//printf("年龄:");//scanf("%d",&workers[q_n].age);do{fg1=0;printf("年龄:");scanf("%d",&workers[q_n].age);if(workers[q_n].age>100||workers[q_n].age<0){fg1=1;printf("输入有误,请重新输入\n");}}while(fg1==1);do{fg_day=0;printf(" 出勤天数:");scanf("%d",&t);if(t>30||t<0){fg_day=1;printf("输入有误,请重新输入\n");}}while(fg_day==1);workers[q_n].workday=t;workers[q_n].shouldmy=t*100;printf("应发工资:%d",workers[q_n].shouldmy);do{fg_cd=0;printf(" 迟到天数:");scanf("%d",&c);if(c>30||c<0){fg_cd=1;printf("输入有误,请重新输入\n");}}while(fg_cd==1);workers[q_n].decday=c;workers[q_n].infactmy=t*100-c*10-200;printf("实际工资:%d\n",workers[q_n].infactmy);q_n++;}printf("\n按任意键返回……\n");getch();}/*----浏览员工信息----*/void watch(){int n,x;char k;sort_it('1');while(1){printf("----浏览----\n");printf("按数字键选择排序方式或按0 返回\n");printf("1.工号\t姓名\t年龄\t2.出勤天数 3.应发工资 4.迟到天数 5.实际工资\n");for(n=0;n<q_n;n++){x=Xuhao[n];if(workers[x].id!=0){printf("%d\t%s\t ",workers[x].id,workers[x].name);printf("%d\t %d\t\t",workers[x].age,workers[x].workday);printf("%d\t %d\t\t",workers[x].shouldmy,workers[x].decday);printf("%d\n",workers[x].infactmy);}}k=getch();if(k<'6'&&k>'0')sort_it(k);else if(k=='0')break;elsecontinue;}}/*----保存信息到文档----*/void write_text(){FILE *fp,*nb;int i=0;fp=fopen("workers.txt","w");while(i<q_n){fwrite(&workers[i],sizeof(struct WORKER),1,fp);i++;}fclose(fp);if((nb=fopen("num.txt","wb"))!=NULL){fprintf(nb,"%d",q_n);fclose(nb);}printf("已成功存储\n");watch();}/*------打开文档信息------*/void open_text(){int i=0;FILE *fp,*nb;if((nb=fopen("num.txt","rb"))==NULL){printf("无法打开文件\n");}fscanf(nb,"%d",&q_n);fclose(nb);if((fp=fopen("workers.txt","r"))==NULL){printf("无法打开文件\n");}while(i<q_n){fread(&workers[i],sizeof(struct WORKER),1,fp);i++;}fclose(fp);printf("文件读取成功\n");watch();}/*清除工资信息,保留员工基本信息*/ void clear_gz(){char a;int i;printf("是否确定清除工资信息? y/n\n");flushall();scanf("%c",&a);if(a=='y'||a=='Y'){for(i=0;i<q_n;i++){workers[i].workday=0;workers[i].shouldmy=0;workers[i].decday=0;workers[i].infactmy=0;}printf("员工工资信息已清除n");}printf("\n按任意键返回……\n");getch();}/*----主程序----*/void main(){int x;fmenu();scanf("%d",&x);while(x!=0){if(x<12&&x>0){switch(x){case 1:worker_new();break;case 2:worker_edit();break;case 3:worker_del();break;case 4:money_input();break;case 5:money_edit();break;case 6:search();break;case 7:insert();break;case 8:watch();break;case 9:write_text();break;case 10:open_text();break;case 11:clear_gz();break;}}else{printf("输入有误,请重新输入\n");printf("\n按任意键返回……\n");getch();}fmenu();scanf("%d",&x);}}。
C语言实习——职工工资信息管理系统
中国地质大学本科生课程论文封面课程名称C语言课程设计教师姓名邵玉祥老师本科生姓名左梦璐本科生学号20091000102本科生专业地质学011092班所在院系地学院类别: C。
本科生日期: 2013年1月11日课程设计评语注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩.目录课程设计评语 (2)目录 (3)1.课程论文题目................................................................................................ 错误!未定义书签。
2.程序设计思路................................................................................................ 错误!未定义书签。
3.功能模块图 (6)4.数据结构设计 (6)5.算法设计........................................................................................................ 错误!未定义书签。
6.程序代码........................................................................................................ 错误!未定义书签。
7.程序运行结果................................................................................................ 错误!未定义书签。
8.编程中遇到的困难及解决方法.. (30)9.总结心得及良好建议 (30)10.致谢 (31)一.课程论文题目职工工资信息管理系统【要求】该系统能够实现工资信息管理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江西师范大学本科生课程论文封面课程名称C语言课程设计类别: C.本科生组长:黄金峰组员:谢熊飞吴云清王伟林梦婷日期: 2014年7月7日课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总成绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目录课程设计评语 (2)目录 (3)1.课程论文题目.............................................................................................. 错误!未定义书签。
2.程序设计思路.............................................................................................. 错误!未定义书签。
3.功能模块图 (6)4.数据结构设计 (6)5.算法设计...................................................................................................... 错误!未定义书签。
6.程序代码...................................................................................................... 错误!未定义书签。
7.程序运行结果.............................................................................................. 错误!未定义书签。
8.编程中遇到的困难及解决方法.. (30)9.总结心得及良好建议 (30)10.致谢 (31)一.课程论文题目职工工资信息管理系统【要求】该系统能够实现工资信息管理.系统包括录入,浏览,查询,统计等功能.其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
【提示】1、文件中一行数据对应一个职工工资信息。
2、工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录。
3、工资单信息包括工资卡号、姓名、月份、应发工资、税费、电费、税金、实发工资等。
4、实发工资=应发工资—税费—电费—税金,其中税金计算方法为:(1)应发工资<800元,税金=0(2)800<应发工资<1400元,税金=(应发工资—800)*5%(3)应发工资>1400元,税金=(应发工资—1400)*10%二.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
2、总体设计整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。
3、详细设计(1)工资信息采用结构体数组:struct list{int num; //工资卡号char name[20]; //姓名int month; //月份int salary1; //应发工资int water; //水费int electrisity; //电费float fax; //税金float salary2; //实发工资}list[N]; //list[N]中每个数组元素对应一个职工工资信息(2)输入模块按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。
文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资<=800)税金=0;else if (应发工资>800&&应发工资<=1400)税金=(应发工资-800)*5%;else if (应发工资>1400)税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。
(3)新增模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以“ab”方式打开文件)。
(4)浏览模块调用排序模块的排序功能,可以浏览排序后的所有职工信息。
(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。
排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。
(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。
三.功能模块图四. 数据结构设计系统用将职工各项信息以结构体类型struct list 来定义,它包括num ,name[20],month,salary1,water,electricity,fax,salaly2等不同类型的数据项,同时定义了结构体数组,包括N 个数组元素,对应N 个职工,每一个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。
以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。
五.算法设计1、主函数主函数一般设计比较简单,只提供输入、处理和输出部分的函数调用。
各功能模块用菜单方式选择。
[流程图]职工工资信息管理系统主菜单menu()输入模块enter() 新增模块add ()浏览模块browse()排序模块order()按姓名查询search_1()查询模块search()按工资卡号查询search_2() 退出exit(0)按实发工资排序order_2() 按工资卡号排序order_1()N Y#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define N 50void main() /***************主函数***************/ {void menu(); /*声明菜单函数*/ menu(); /*调用菜单函数*/ }void menu() /***************菜单函数***************/ {void enter(); void add(); void browse(); void search(); void order(); int n,w1; do {puts("\t\t*********************MENU*************************\n\n"); puts("\t\t\t 1.Enter "); puts("\t\t\t 2.Add");puts("\t\t\t 3.browse all"); puts("\t\t\t 4.Search "); puts("\t\t\t 5.Order "); puts("\t\t\t 6.Exit");puts("\n\n\t\t*************************************************\n"); printf("Choice your number(1-6):[ ]\b\b");开 始显示一系列的功能选择输入n ,判断n 是否是0到6 根据n 值调用各功能模块scanf("%d",&n);if(n<1||n>6) /*对选择数字作判断*/{w1=1;getchar();}else w1=0;}while(w1==1);switch(n) /*选择功能*/{case 1:enter();break; /*输入模块*/case 2:add();break; /*追加模块*/case 3:browse();break; /*浏览模块*/case 4:search();break; /*查找模块*/case 5:order();break; /*排序模块*/case 6:exit(0);}}2、各功能模块设计(1)输入模块[数据结构]把职工的卡号、月份应发工资、水费、电费、税金、实发工资作为结构体成员,如果存放若干个职工信息就用结构体数组。
struct list{int num;char name[20];int month;int salary1;int water;int electrisity;float fax;float salary2;}list[N]; /*list[N]中每个数组元素对应一个职工*/[流程图]1 2/***************输入模块***************/ void enter() /*输入模块*/ {void printf_back(); void save(int n); void input(int i); int i,n;printf("how many workers (0-%d)?:",N-1); scanf("%d",&n);printf("\n enter date now\n\n"); for(i=0;i<n;i++) {printf("\n input %dth worker record.\n",i+1); input(i); /*调用输入函数*/ }if(i!=0)save(n); /*调用保存函数*/printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ }⑵ 追加模块[需求分析]该模块的功能是用户需要增加新的职工记录,请从键盘输入并逐条写到原来的输入文件中是追加不是覆盖.[流程图]开 始输入职工数目 输入各项信息储存职工信息 返回? 主菜单 浏览职工信息12[程序]/***************追加模块***************/ void add() /*追加模块*/ {void printf_back(); int i,n,m,k; int load(); void save(int n); void input(int i); FILE *fp; n=load();printf("how many workers are you want to add(0-%d)?:",N-1-n); scanf("%d",&m); /*输入要追加的个数*/ k=m+n;for(i=n+1;i<=k;i++) {printf("\n input %dth workers record.\n",i-n); input(i); /*调用输入函数*/ }fp=fopen("workers.txt","ab") /*以ab 方式打开文件,追加保存*/; for(i=n+1;i<=k;i++) /*输出到文件*/ fwrite(&list[i],sizeof(struct list),1,fp);fclose(fp);printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/}开 始输入新增职工数目输入新职工信息储存输入信息返回?浏览职工信息主菜单⑶浏览模块[需求分析]该模块的功能是显示所有职工记录工资信息.[流程图]显示职工工资记录(10个一屏)按任意键显示下一屏按任意键返回主菜单[程序]/***************浏览(全部)模块***************/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();}⑷查找模块[需求分析]该模块的功能是根据输入的职工姓名和卡号查找对应的记录.[流程图]NY 121 2[程序]/***************查找函数***************/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; }开 始输入n判断n 值按姓名查询按卡号查询输出返回? 浏览职工信息主菜单}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",);printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++) /*查找所需数据*/if(strcmp(,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);}void search_2() /*按卡号查找*/{int load();void printf_face();void menu();void printf_one(int i);struct list s;int i,n,k,w1=1,w2,w3,w4;n=load();do{do{k=-1;printf("\n\nenter num that you want to search! num:");scanf("%d",&s.num);printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++) /*查找所需数据*/if(s.num==list[i].num){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("\nsuccessful");printf("\n\n what do you want to do?\n\t1).search another 2).back [ ]\b\b");scanf("%d",&w2);}while(w2==1); menu();}⑸ 排序模块[需求分析]该模块的功能是将职工记录按照一定顺序排序. [流程图]NY1212/***************排序模块***************/ void order() /*排序模块*/ {int w1,n;void order_1(); void order_2(); do {puts("\t\t\t1.order by num"); puts("\t\t\t2.order by salary"); scanf("%d",&n);if(n<1||n>2) /*对选择数字作判断*/开 始输入n判断n 是否是0到2按工资卡号排序按实发工资排序输出返回?浏览职工信息主菜单{w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:order_1();break;case 2:order_2();break;}}void order_1() /*卡号升序排*/{int load();void printf_back();void save(int i);int i,j,n,k;void browse();struct list s;n=load();for(i=0;i<n-1;i++) /*选择法排序*/{k=i;for(j=i+1;j<n;j++)if(list[j].num<list[k].num)k=j;s=list[i];list[i]=list[k];list[k]=s;}save(n);browse();puts("\n\n");printf_back();}void order_2() /*工资降序排*/{int load();void printf_back();void save(int i);int i,j,n,k;struct list s;n=load();for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++) /*选择法排序*/if(list[k].salary2<list[j].salary2)k=j;s=list[i];list[i]=list[k];list[k]=s;}save(n);browse();puts("\n\n");printf_back();}六、程序代码(每个函数都要有功能说明)#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define N 50void main(){void menu();menu();}void menu() //主菜单函数{void enter();void add();void browse();void search();void order();int n,w1;do{puts("\t\t*********************MENU*************************\n\n");puts("\t\t\t 1.Enter ");puts("\t\t\t 2.Add");puts("\t\t\t 3.browse all");puts("\t\t\t 4.Search ");puts("\t\t\t 5.Order ");puts("\t\t\t 6.Exit");puts("\n\n\t\t*************************************************\n");printf("Choice your number(1-6):[]\b\b");scanf("%d",&n);if(n<1||n>6) /*对选择的数字进行判断*/{w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:enter();break; /*输入模块*/case 2:add();break; /*新增模块*/case 3:browse();break; /*浏览模块*/case 4:search();break; /*查找模块*/case 5:order();break; /*排序模块*/case 6:exit(0); /*退出模块*/}}struct list //结构体定义工资信息{int num; //工资卡号char name[20]; //姓名int month; //月份int salary1; //应发工资int water; //水费int electrisity; //电费float fax; //税金float salary2; //实发工资}list[N]; //list[N]中每个数组元素对应一个职工工资信息void enter() //输入模块函数{void printf_back();void save(int n);void input(int i);int i,n;printf("how many workers (1-%d)?:",N-1);scanf("%d",&n); //输入职工数目printf("\n enter date now\n\n");for(i=0;i<n;i++) //输入职工各项信息{printf("\n input %dth student record.\n",i+1);input(i); //调用职工信息输入函数}if(i!=0)save(n); //储存职工信息printf_back(); //执行返回函数}void add() //新增模块函数{void printf_back();int i,n,m,k;int load();void save(int n);void input(int i);FILE *fp; //定义文件指针变量n=load(); //导出文件信息,得到返回值printf("how many workers are you want to add(0-%d)?:",N-1-n);scanf("%d",&m); //输入新增职工数目k=m+n; //总职工数= 新增职工数+已有职工数for(i=n+1;i<=k;i++) //输入新增职工信息{printf("\n input %dth workers record.\n",i-n+2);input(i); //调用职工信息输入函数}fp=fopen("workers.txt","ab"); //以追加形式打开文件for(i=n+1;i<=k;i++)fwrite(&list[i],sizeof(struct list),1,fp); //将内存中的职工信息输出到磁盘文件中save(n); //储存输入信息fclose(fp); //关闭文件printf_back(); //执行返回函数}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)) //以10个职工为一组输出{printf("\n\npass any key to continue...");getch();puts("\n\n");}printf_one(i); //输出各职工信息printf("\n");}printf("\t there are %d recode.\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",); //输入要查找的姓名printf_face(); //输出职工信息项目for(i=0;i<n;i++)if(strcmp(,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); //选择1继续循环执行查询w4=0;w3=0;if(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); //选择1循环执行查询下一个数据menu();}void search_2() //按工资卡号查询int load();void printf_face();void menu();void printf_one(int i);struct list s;int i,n,k,w1=1,w2,w3,w4;n=load();do{do{k=-1;printf("\n\nenter num that you want to search! num:");scanf("%d",&s.num); //输入要查找的工资卡号printf_face(); //输出职工信息项目for(i=0;i<n;i++)if(s.num==list[i].num) //查询出与输入工资卡号相同的职工的信息{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); //选择1继续循环执行查询w4=0;w3=0;if(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); //选择1循环执行查询下一个数据menu();void order() //排序功能模块函数{ int w1,n;void order_1();void order_2();do{puts("\t\t\t1.order by num"); //按工资卡号排序puts("\t\t\t2.order by salary 2"); //按实发工资排序scanf("%d",&n);if(n<1||n>2){w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 1:order_1();break;case 2:order_2();break;}}void order_1() //按工资卡号升序排序{int load();void printf_back();void save(int i);int i,j,n;void browse();struct list s;n=load();for(i=0;i<n-1;i++) //冒泡排序法,按职工工资卡号升序排列出职工信息{for(j=i+1;j<n-1;j++){if(list[j].num<list[i].num)s=list[j];list[j]=list[i];list[i]=s;}}save(n); //储存排序后的信息browse(); //显示排序后的信息puts("\n\n");printf_back(); //执行返回函数}void order_2() //按实发工资升序排序{int load();void printf_back();void save(int i);int i,j,n;struct list s;void browse();n=load();for(i=0;i<n-1;i++) //冒泡排序法,按实发工资升序排列出职工信息{for(j=i+1;j<n-1;j++){if(list[i].salary2<list[j].salary2)s=list[j];list[j]=list[i];list[i]=s;}}save(n); //储存排序后的信息browse(); //显示排序后的信息puts("\n\n");printf_back(); //执行返回函数}void save(int n) //储存函数{FILE *fp;int i;fp=fopen("workers.txt","wb"); //以只写方式打开文件for(i=0;i<n;i++)fwrite(&list[i],sizeof(struct list),1,fp); //将内存中的职工信息输出到磁盘文件中fclose(fp); //关闭文件}int load() //导出文件信息{int i;fp=fopen("workers.txt","rb"); //以只读方式打开文件for(i=0;!feof(fp);i++)fread(&list[i],sizeof(struct list),1,fp); //读出磁盘文件中的职工信息fclose(fp); //关闭文件return(i-1); //返回数值i-1}void input(int i) //职工信息输入函数{float salary2(int i);float fax(int i);printf("No.:");scanf("%d",&list[i].num);printf("name:");scanf("%s",list[i].name);printf("month:");scanf("%d",&list[i].month);printf("salary1:");scanf("%d",&list[i].salary1);printf("water:");scanf("%d",&list[i].water);printf("electricity:");scanf("%d",&list[i].electrisity);fax(i); //计算税金salary2(i); //计算实发工资}float fax(int i) //税金计算函数{if(list[i].salary1<800)list[i].fax=0;else if(list[i].salary1<1400)list[i].fax=(((list[i].salary1-800)*5/100));else list[i].fax=(((list[i].salary1-1400)/10));return list[i].fax;}float salary2(int i) //实发工资计算函数{list[i].salary2=(list[i].salary1-list[i].water-list[i].electrisity-list[i].fax);return list[i].salary2;}void printf_back() //返回函数{int w;void menu();void browse();printf("\n\n\tsuccessful!");printf("what do you want to do?\n\n\t1).browse all now\t2).back: []\b\b"); //菜单选择浏览职工信息或返回主菜单scanf("%d",&w);if(w==1)browse(); //输入1选择浏览职工信息else menu(); //输入2返回主菜单}void printf_one(int i) //单个职工信息输出函数{printf("%9d",list[i].num);printf("%9s",list[i].name);printf("%9d",list[i].month);printf("%9d",list[i].salary1);printf("%9d",list[i].water);printf("%9d",list[i].electrisity);printf("%9.2f",list[i].fax);printf("%9.2f",list[i].salary2);}void printf_face() //职工信息项目{printf("\n\tNo. name month salary1 water electrisity fax salary2\n");}七、程序运行结果1、主函数运行,显示主菜单函数menu()2、输入数字1,添入两组数据3、如果输入数字2,新增一组数据并浏览4、输入数字3,浏览所有职工信息5、输入4,进行查询程序,再输入1 ,按姓名查询,输入2 ,按工资卡号查询6、输入数字5,进行排序程序,输入1 ,按卡号排序,输入2按实发工资排序。