程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)
C语言课设职工工资管理系统
![C语言课设职工工资管理系统](https://img.taocdn.com/s3/m/865aaaba25c52cc58bd6beff.png)
山西大学软件学院程序设计基础课程设计报告书题目: 职工工资管理系统指导教师:亢临生班级:软件工程1611姓名:李国栋学号:2016028*****课设时间:2017.6.20成绩二○一七年六月课程设计任务书目录第1章课程设计的目的与要求.................... 错误!未定义书签。
1.1 课程设计目的ﻩ31.2课程设计的实验环境ﻩ31.3 课程设计的预备知识 (3)1。
4 课程设计要求ﻩ3第2章课程设计内容ﻩ42.1程序功能介绍 (4)2。
2程序整体设计说明ﻩ42.2.1设计思路 (4)2.2.2数据结构设计及用法说明ﻩ52.2.3各模块的功能及程序说明............................. 62。
2.4程序结果ﻩ72。
3程序源代码及注释ﻩ9第3章课程设计总结............................. 错误!未定义书签。
第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程序功能介绍每一个职工的工资信息包含姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。
C语言职工工资管理系统设计报告
![C语言职工工资管理系统设计报告](https://img.taocdn.com/s3/m/d7a4f8e5f424ccbff121dd36a32d7375a517c651.png)
C语言职工工资管理系统设计报告设计报告:C语言职工工资管理系统1.系统介绍职工工资管理系统是一种用于管理公司或组织内部职工工资信息的软件系统。
通过该系统,可以方便地录入、修改、查询和删除职工的工资信息,实现对职工工资的统一管理和自动计算。
2.系统需求分析(1)录入职工信息:系统需要提供录入职工信息的功能,包括职工编号、姓名、性别、工作岗位等基本信息。
(2)录入职工工资:系统需要提供录入职工工资的功能,包括基本工资、绩效奖金、加班工资等,以便计算总工资。
(3)查询职工工资:系统需要提供查询职工工资的功能,可以按照职工编号、姓名、性别等关键字查询。
(4)修改职工工资:系统需要提供修改职工工资的功能,可以根据职工编号进行修改。
(5)删除职工信息:系统需要提供删除职工信息的功能,按照职工编号进行删除。
3.系统设计方案(1)数据结构的设计:-职工信息结构体:包括职工编号、姓名、性别、工作岗位等成员。
-职工工资结构体:包括基本工资、绩效奖金、加班工资等成员。
-职工结构体数组:用于存储多个职工的信息和工资数据。
(2)界面设计:-主菜单:包括录入职工信息、录入职工工资、查询职工工资、修改职工工资、删除职工信息等选项。
-子菜单:不同的功能选项对应不同的界面,可以通过输入不同的选择序号实现功能切换。
-信息显示界面:用于显示职工信息和工资信息。
(3)功能设计:-录入职工信息:通过用户输入,将职工信息存储到职工结构体数组中。
-录入职工工资:通过用户输入,将职工工资信息存储到对应的职工工资结构体中。
-查询职工工资:根据用户输入的关键字,查找并显示匹配的职工工资信息。
-修改职工工资:根据用户输入的职工编号,在职工工资结构体中找到对应职工的工资信息,并修改。
-删除职工信息:根据用户输入的职工编号,在职工结构体数组中找到对应职工的信息,并删除。
4.系统实现系统的实现使用C语言编程,使用结构体和数组进行数据的组织和存储,并利用循环和条件判断语句完成功能。
员工工资管理系统(c语言编程)6页
![员工工资管理系统(c语言编程)6页](https://img.taocdn.com/s3/m/62bed33b773231126edb6f1aff00bed5b9f373f2.png)
员工工资管理系统(c语言编程)6页一、设计目标1、完成一个员工工资管理系统,包括对员工信息的添加、删除、修改和查询、员工工资管理和统计等功能。
2、程序必须具备易用性、可靠性、安全性和稳定性等特点。
二、程序结构设计员工工资管理系统是由若干模块构成的一个整体,它们之间相互联系,共同完成对员工信息的处理和管理。
程序分为主界面模块、添加模块、删除模块、修改模块、查询模块、统计模块、退出模块。
三、模块功能设计1、主界面模块主界面包括菜单栏和功能栏,菜单栏包括添加、删除、修改、查询、统计和退出功能,功能栏是对主界面菜单的补充,包括一些快捷操作按钮。
2、添加模块添加模块是用来录入员工信息的,可以录入的信息有员工编号、员工姓名、员工部门、员工工作年限、员工基本工资、员工奖金等。
添加模块会对信息进行一系列的校验,要求信息必须完整正确才能录入。
3、删除模块删除模块是用来删除员工信息的,输入员工编号就可以删除该员工的信息。
5、查询模块查询模块提供了多种查询方式,包括按部门查询、按姓名查询、按工作年限查询、按基本工资查询、按奖金查询等。
查询结果会按照员工编号的顺序进行排序。
6、统计模块统计模块会根据查询结果进行工资统计,包括总工资、平均工资、最高工资和最低工资等。
7、退出模块退出模块是用来关闭程序的,保证程序的安全性和稳定性。
四、程序流程设计1、主界面程序启动后,会显示主界面界面,包括菜单栏和功能栏。
2、录入信息点击添加功能或者添加按钮,会进入添加模块,要求用户输入员工信息,录入完成后数据将保存到文件中。
4、修改信息点击修改功能或者修改按钮,会进入修改模块,输入员工编号,然后修改员工信息。
5、查询信息点击查询功能或者查询按钮,会进入查询模块,选择查询方式,输入查询条件,系统将显示符合条件的员工信息。
6、工资统计当查询完成后,点击统计功能或者统计按钮,会进入统计模块,系统将根据查询结果进行统计。
7、程序退出当操作完成后,点击退出功能或者退出按钮,会关闭程序。
工资管理系统课程设计C语言
![工资管理系统课程设计C语言](https://img.taocdn.com/s3/m/67672a12e55c3b3567ec102de2bd960590c6d930.png)
工资管理系统 课程设计 C语言一、课程目标知识目标:1. 理解工资管理系统的基本概念和功能需求;2. 掌握C语言中的基本数据类型、运算符、控制结构等编程知识点;3. 学会使用C语言设计并实现一个简单的工资管理系统。
技能目标:1. 能够运用C语言编写出结构清晰、逻辑合理的程序代码;2. 能够运用数组、结构体等数据结构存储和管理工资数据;3. 能够运用文件操作实现工资数据的持久化存储。
情感态度价值观目标:1. 培养学生解决问题的能力和团队协作精神,激发学生对编程的兴趣;2. 增强学生对信息技术的认识,使其意识到信息技术在现实生活中的应用价值;3. 培养学生严谨、认真的学习态度,提高学生的编程素养。
课程性质:本课程为C语言编程实践课,旨在让学生通过动手实践,掌握C语言编程的基本技能,并能够运用所学知识解决实际问题。
学生特点:学生为高年级学生,已具备一定的C语言基础,有较强的逻辑思维能力,但对实际应用场景的编程经验不足。
教学要求:结合学生特点,注重实践操作,引导学生从实际问题出发,逐步培养编程思维,提高编程能力。
课程目标分解为具体学习成果,便于教学设计和评估。
二、教学内容1. 工资管理系统概述- 系统需求分析- 功能模块划分2. C语言基础知识回顾- 数据类型- 运算符与表达式- 控制结构(顺序、分支、循环)3. 数据结构设计- 数组- 结构体4. 函数与模块化编程- 函数定义与调用- 模块化设计5. 文件操作- 文件打开与关闭- 文件读写操作6. 工资管理系统功能实现- 员工信息管理- 工资计算- 工资查询- 数据存储与读取7. 测试与调试- 功能测试- 性能测试- 代码调试教学内容安排与进度:第1周:工资管理系统概述及需求分析第2周:C语言基础知识回顾第3周:数据结构设计第4周:函数与模块化编程第5周:文件操作第6周:工资管理系统功能实现(1)第7周:工资管理系统功能实现(2)第8周:测试与调试教材章节及内容:《C语言程序设计》第3章:数据类型、运算符与表达式第4章:控制结构第6章:函数与模块化编程第7章:数组和字符串第8章:结构体与共同体第9章:文件操作教学内容紧密结合课程目标,注重科学性和系统性,通过以上教学内容,使学生能够掌握C语言编程的核心知识,并能够将其应用于工资管理系统的设计与实现。
c语言课程设计职工工资管理系统
![c语言课程设计职工工资管理系统](https://img.taocdn.com/s3/m/951ec1795627a5e9856a561252d380eb629423c8.png)
一、概述随着社会的发展和进步,工资管理系统在企业管理中扮演着重要的角色。
为了提高工资管理的效率和准确性,许多企业都倾向于引入计算机系统来进行工资管理。
C语言是一种广泛应用于系统程序设计和应用程序开发的高级语言,具有跨评台性和高效性的特点。
设计一个基于C语言的职工工资管理系统将会成为一个有价值的课程设计。
二、系统功能需求1. 职工信息管理:系统需要能够记录、查看和修改职工的基本信息,包括尊称、工号、部门、入职日期等。
2. 薪资核算:系统应能根据职工的实际出勤、加班情况、请假情况等自动生成薪资,并能够灵活处理各类津贴和抠款。
3. 考勤管理:系统需要提供考勤记录的输入和查询功能,以便及时了解职工的工作情况。
4. 报表输出:系统需要能够生成各类工资报表,方便管理人员进行核对和统计。
5. 数据备份和恢复:系统应具备数据备份和恢复功能,以保证数据的安全性和完整性。
三、系统设计与技术选择在设计该系统时,应采用模块化、分层的设计思路,以便系统具有良好的可维护性和扩展性。
1. 界面设计:可以采用文本界面或图形界面进行设计,具体选择取决于系统的实际应用环境和用户需求。
2. 数据存储:可以选择采用文件系统或数据库来存储系统数据,常见的选择包括文本文件、CSV文件、SQLite数据库等。
3. 算法选择:需要根据系统的具体需求选择合适的算法来实现薪资核算和报表生成等功能。
4. 开发工具:可以选择C语言的集成开发环境(IDE)来进行开发,例如Visual Studio、Dev-C++等。
四、系统实现在进行系统开发时,需要按照设计要求逐步实现各个功能模块,同时进行严格的测试和调试工作,以确保系统的稳定性和准确性。
1. 职工信息管理模块:包括新增、修改、删除职工信息等功能。
2. 薪资核算模块:根据考勤情况自动生成薪资并进行津贴和抠款处理。
3. 考勤管理模块:提供考勤记录的输入和查询功能,确保数据的及时更新和准确性。
4. 报表输出模块:能够生成各类工资报表,包括月度工资表、年度工资统计表等。
C语言程序设计报告职工工资管理系统
![C语言程序设计报告职工工资管理系统](https://img.taocdn.com/s3/m/820a9a4384254b35eefd3492.png)
C语言程序设计报告目录1、设计题目--------------------------------------------------------------------------22、设计要求(包括设计内容描述)--------------------------------------------23456789职工工资管理系统的设计与实现1.设计题目2.1234567、计算职工的工资(输入基本工资、扣款、奖金后,马上算出应发工资、税金、实发工资、总工资)。
8、查询、排序功能——算法。
1)按编号查询、排序。
2)按姓名查询。
3)按工资排序。
4)基本信息的删除与修改(可选项)。
3.设计作用与目的1、通过这次专题实习,巩固和加深对所学相关知识点的理解。
2、进一步熟悉基本流程控制结构——实现分支的if…else语句、switch语句和实现循环的for、while…、do…while语句、break、continue等。
3、基本数据类型、数组、结构体、自定义类、函数的应用。
4、加强对模块化程序设计和面向对象程序设计的理解。
56789、4.Windows XP;Visual C++ 6.0(完整绿色版);5.系统设计5.1 程序逻辑图6.源程序代码#include <stdio.h> //标准输入输出#include <stdlib.h> //处理杂乱#include <windows.h> //Sleep()#include <string.h> //字符串操作#include <conio.h> //系统输入输出#include <time.h> //时间相关/**********************下面是对用到的全局常量声明*************************/ #define NAME 10 //职工职工姓名长度#define PASSWORD "123" //系统登陆密码int shuru=0; //全局变量标记当前录入职工个数FILE *fp; //声明一个文件指针/**************************结构体定义************************************/ struct person{ //职工工资的结构体char name[NAME]; //职工职工姓名int num; //职工编号float paid; //职工基本工资{system("color 027"); //设置当前窗口的背景色和前景色Password(); //调用密码验函数Help(); //调用系统信息函数Menu(); //调用菜单函数}void Inputper(struct person per[]) //录入职工工资函数原形{pp=per; //指针指向结构system("cls"); //清屏int i;printf("请问你要输入几个职工的信息:");scanf("%d",&shuru);if((fp=fopen("inputdata","wb+"))==NULL) //当前目录下是否存在INPUTDA TA文件{ //"wb+":读写打开或建立一个二进制文件,允许读和写printf("Cannot open file strike any key exit!");getch();exit(1);}fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工作总工资\n");for(i=0;i<shuru;i++){fprintf(fp," %6d %8s %5.1f\t %5.1f\t %3.1f\t %5.1f\t %4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount, per[i].extra,per[i].realpaid,per[i].sum);}}void Modifyper(struct person per[]){pp=per;int id,i=0; //id为接收用户输入的职工编号if((fp=fopen("modifydata.sys","wb+"))==NULL){printf("Cannot open file strike any key exit!");getch();exit(1);}fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");printf("\n请输入你要修改的职工的编号:");scanf("%d",&id);Sleep(500);printf("\n\t查找相关数据.");for(i=0;i<=15;i++){}{{printf("------------------------------\n");per[i].sum=per[i].paid-per[i].discount+per[i].extra;per[i].realpaid=per[i].paid-per[i].discount;fprintf(fp," %6d %8s %5.1f\t %5.1f\t %3.1f\t %5.1f\t %4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount, per[i].extra,per[i].realpaid,per[i].sum);}}}void Findper(struct person per[]) //查询职工工资信息{int i=0,j=0,id; //循环变量和用于接收职工编号printf("请输入你要查询的职工编号:");scanf("%d",&id);for(i=0;i<shuru;i++){if (per[i].num==id) //如果找到你查询的数据就执行下面语句{ //如果找不到。
职工工资管理系统c语言程序设计报告
![职工工资管理系统c语言程序设计报告](https://img.taocdn.com/s3/m/e78aaa76e55c3b3567ec102de2bd960591c6d970.png)
职工工资管理系统1. 背景职工工资管理是企业管理中一个重要且复杂的环节。
合理进行工资管理可以激励员工的工作积极性,提高生产效率和企业的竞争力。
然而,在人工操作的情况下,计算工资涉及到复杂的计算过程和大量的数据处理,容易出现错误和繁琐。
因此,开发一个自动化的职工工资管理系统对于企业的工资管理具有重要意义。
2. 分析职工工资管理系统的核心目标是计算职工的工资,并提供工资查询和报表生成的功能。
为了实现此目标,我们需要设计一个合理的系统架构,并根据需求提供相应的功能模块。
2.1 系统架构职工工资管理系统的基本架构包括以下几个模块:•职工信息管理模块:用于管理职工的基本信息,包括姓名、职位、级别等。
•薪资标准管理模块:用于管理不同职位和级别的薪资标准,包括基本工资、绩效奖金等。
•工资计算模块:根据职工的基本信息和薪资标准,计算实际工资。
•工资查询模块:用于查询职工的工资信息。
•报表生成模块:用于生成各种工资相关的报表,如工资总额、平均工资等。
2.2 功能模块职工工资管理系统应当具备以下功能模块:1.职工信息管理:–添加职工信息–修改职工信息–删除职工信息–查询职工信息2.薪资标准管理:–添加薪资标准–修改薪资标准–删除薪资标准–查询薪资标准3.工资计算:–根据职工信息和薪资标准计算工资4.工资查询:–查询指定职工的工资信息5.报表生成:–生成工资总额报表–生成平均工资报表–生成各部门工资报表2.3 数据结构与算法为了实现上述功能,我们需要选择合适的数据结构和算法来支持系统的运行。
1.数据结构:对于职工信息的管理,我们可以使用链表或数组来存储职工的基本信息。
对于薪资标准的管理,可以使用哈希表或平衡二叉树来存储标准信息。
2.算法:在工资计算模块中,需要根据薪资标准和职工信息计算出实际工资。
可以使用算法来进行工资计算,如基本工资加上绩效奖金等。
3. 结果根据上述分析,我们可以设计并实现一个简单的职工工资管理系统。
C语言课程设计报告-工资管理系统
![C语言课程设计报告-工资管理系统](https://img.taocdn.com/s3/m/04ecc8024b35eefdc8d33361.png)
C语言课程设计报告-工资管理系统一.系统功能设计一个职工工资管理系统,其功能包括:(1)职工基本工资信息录入包括工号,姓名,应发工资,奖金,扣款,应发工资,扣税,实发工资。
(2)职工基本工资信息保存(3)职工基本工资信息查询按照工号查询按照姓名查询(4)职工基本工资信息显示在屏幕上显示所有的职工基本工资信息。
(5)职工基本工资信息更新能够实现修改,删除,插入,排序功能。
(6)职工基本工资信息统计统计公司员工工资在各等级的人数主界面系统主界面应有如下功能选项录入职工基本工资信息查询职工基本工资信息保存职工基本工资信息删除职工基本工资信息插入职工基本工资信息修改职工基本工资信息统计职工基本工资信息排序职工基本工资信息显示职工基本工资信息退出代码如下:#incl ude <stdio.h>typed ef st ructemplo yee{ char num[10]; //保存职工编号 char name[15]; //保存职工姓名 floa t jbg z; //保存职工基本工资f loatjj; //保存职工奖金f loatkk; //保存职工扣款float yfgz; //保存职工应发工资 fl oat s k; //保存职工税款f loatsfgz; //保存职工实发工资}ZG GZ;voidmenu(){ pr intf(" Empoy ee Sy stem\n"); pr intf("--<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@--<-<-<@\n"); pr intf(" *1 i nputr ecord *2 dele te recor d\n");print f(" *3 sear ch reco rd *4 mo dify rec ord\n"); pri ntf("*5 in sert re cord *6countr ecord\n");p rintf(" *7sortrecor d *8 sav e reco rd\n"); prin tf("*9 dis play rec ord *0 q uit re cord\n"); pr intf("--<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@ --<-<-<@--<-<-<@\n"); pr intf("Plea se en ter y ou ch oice(0-9)\n");}i nt in put(Z GGZ a[],in t k){ intj,x; ch ar st r[10];j=x=0;while(1) {p rintf("----------------------------\n"); prin tf("请输入职工的编号:(按0返回主菜单)"); sc anf("%s",s tr); str cpy(a[k].n um,st r);f or(j=0;j<k;j++) {if(st rcmp(a[j].num,s tr)==0){ prin tf("已经有工号为%s的员工信息!请重新输入员工号。
c语言课程设计报告 职工工资管理系统
![c语言课程设计报告 职工工资管理系统](https://img.taocdn.com/s3/m/aa20f6044a73f242336c1eb91a37f111f1850ddb.png)
一.设计需求说明一、职工工资管理系统功能设计要求1. 输入记录:将每一个职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。
•该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
5. 删除记录:可删除数据文件中的任一记录。
6.恢复记录:能恢复被删除的任一记录。
7. 统计: (A) 计算各项工资平均工资及总工资, (B)•统计符合指定条件(如职工工资前三项之和在2000 元以上、2000~1500 元、1500~1000 元) 以内的工资职工人数及占总职工人数的百分比。
(C)按字符表格形式打印全部职工工资信息表及平均工资(•包括各项总的平均工资)。
8.保存数据文件功能。
9.打开数据文件功能。
经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。
程序运行结果如下表所示(记录个数至少8 个)。
二.模块设计分析系统功能模块图:工作程序分析①输入:输入职工工资资料通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部员工的资料输入,退出循环。
同时将数据储存在ckerk_list文件中并自动保存至磁盘。
注:如首次使用,尚未输入数据,请先输入数据。
输入的数据将自动保存。
再次选择输入功能时原数据将被覆盖。
②保存:将输入的资料存入磁盘读取文件clerk_list,若文件不存在,打印“打开失败并退出。
若存在,则通过循环语句将输入到结构体数组的数据逐个输入磁盘。
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)
![程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统)](https://img.taocdn.com/s3/m/f067b9718762caaedc33d4e2.png)
《程序设计基础》课程设计报告题目: 员工工资管理系统院(系): 信息科学与工程学院专业班级:学生姓名:学号:指导教师:20 16 年 12 月 12 日至20 16 年 12 月 23 日武昌首义学院制程序设计基础课程设计任务书目录1需求与总体设计 (1)2详细设计 (1)3编码实现 (4)4运行结果 (21)总结 (24)1需求与总体设计1.1需求描述设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。
1。
2总体设计先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的.1。
3数据结构struct user //登陆者信息{char un[10];char up[10];}us[3] = { "aaa","111",”bbb”,”222",”ccc",”333" };struct yg //员工结构体{short zt; //数据状态long bh; //编号char name[20]; //名字char time[11]; //时间long money; //基本工资long jj; //奖金long kk; //扣款long sf; //实发工资};整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。
2详细设计2.1 系统功能设计主函数和子函数:系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。
C语言课程设计职工工资信息管理系统源代码
![C语言课程设计职工工资信息管理系统源代码](https://img.taocdn.com/s3/m/69bb0e28ccbff121dd36832f.png)
#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语言程序设计](https://img.taocdn.com/s3/m/5e0bd533178884868762caaedd3383c4bb4cb40c.png)
职工工资管理系统 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语言程序设计基础课程设计工资系统报告](https://img.taocdn.com/s3/m/7fafb3a1e43a580216fc700abb68a98271feac82.png)
C语言程序设计基础课程设计工资系统报告目录一、需求分析-------------------------------------2二、概要设计-------------------------------------2三、详细设计-------------------------------------4四、调试分析-------------------------------------4五、用户手册-------------------------------------5六、测试数据-------------------------------------6七、程序代码------------------------------------14第1页一、需求分析1.第一步,依据身份进行登录,管理员和职工所能进行的操作不同,具备较高安全性,同时用户可根据需要修改自己的密码,管理员还可添加和删除用户,首次使用时不存在用户,管理员可进行注册,注册成功后再进入使用。
2. 多职工信息进行操作时,建立动态链表,每个节点包含一个职员的工号、姓名、工资等全部信息,通过链表构建一个完整的职工信息库,链表具备录入、删除、修改、查询及统计功能,各功能显示在菜单中,由主函数分别调用。
3. 为了避免一个函数体过长,进行细化子函数,小型子函数在各个主调函数里多次调用,便于使用。
4. 以可读可写可追加方式新建一个文本文件,用于存储链表里所有节点上包含的信息,将节点信息导入文件时,从头指针开始,依次写入。
5. 查询、修改、删除、职工信息时,调用子函数以只读方式打开系统库文件,并将文件从头至尾读取一遍,每次读取一个节点的长度,将每次读取到的信息依次导入到链表的节点中去,再对链表进行所需功能的操作。
修改和删除完成后,将整个链表包含的信息重新写入文件,写入之前打开系统库文件同时进行格式化。
6. 统计职工最高、最低工资及工资均方差时,以同时方式将职工工资等信息导入到链表中,然后以子菜单的形式输出统计的项目,包括各部门和全公司以及最高、最低工资和工资均方差。
c语言课程设计职工工资管理系统源代码word文档
![c语言课程设计职工工资管理系统源代码word文档](https://img.taocdn.com/s3/m/b07fa86484254b35effd3422.png)
绝对可以完美运行,下面有运行图片#include<stdio.h> //调用库函数#include<string.h> //字符串处理#include<conio.h> //控制台输入输出#include<stdlib.h> //定义杂项函数及内存分配函数#define N 2 //宏定义以3代替N/******************************************************************************函数声明*******************************************************************************/ void enter();int menu();void input();void output();void search();void search_employeeid();void search_name();void edit();void array();void array_basesalary();void array_postwage();void array_totalwage();void statistics();void save();void load();/******************************************************************************职工类型定义*******************************************************************************/ struct employee{char employeeid[10];char name[10];char sex[10];int age;float basesalary;float postwage;float totalwage;};/******************************************************************************职工变量定义******************************************************************************/ struct employee emp[N];struct employee replace;struct employee *p=emp;/*****************************************************************************系统主函数******************************************************************************/ void main(){int c;while(1){printf(" \n\n\n\n"); printf(" 欢迎进入职工工资管理系统 \n\n\n");printf(" 1 进入管理系统 \n\n");printf(" 0 退出 \n\n");printf(" \n\n\n\n");printf(" 请输入你选择: \n");scanf("%d",&c);switch(c){case 1:enter();break;case 0:printf(" 谢谢使用!\n");exit(0);}}}/*****************************************************************************功能:登陆函数,进行密码验证*****************************************************************************/ void enter(){char q;char key[10],password[10]="china";int k=1,i;printf(" 请输入密码: \n");for(i=0;i<5;i++){q=getch();key[i]=q;printf("*");}while(k<=3){if(strncmp(key,password,5)==0){while(1){int a;//system("cls");a=menu();switch(a){case 1:input();break;case 2:output();break;case 3:search();break;case 4:edit();break;case 5:array();break;case 6:load();statistics();break;case 0:printf("\n\n 谢谢使用!\n\n\n\n");save();exit(0);}}}else{k++;printf(" 输入密码错误!请再次输入:");for(i=0;i<5;i++){q=getch();key[i]=q;printf("*");}if(k>2){if(strncmp(password,key,5)==0)continue;else{printf(" 输入密码错误三次,系统将自动退出!\n");exit(0);}}}}}/************************************************************************功能: 主菜单函数参数:a类型:int说明: 变量返回值: a************************************************************************/int menu(){int a ;printf("\n\n");printf("|*****************欢迎进入职工工资管理系统************************|\n");printf("| |\n");printf("| |\n");printf("| 1 职工信息输入|\n");printf("| |\n");printf("| 2 职工信息输出|\n");printf("| |\n");printf("| 3 职工信息查询|\n");printf("| |\n");printf("| 4 职工信息修改|\n");printf("||\n");printf("| 5 工资排序|\n");printf("||\n");printf("| 6 工资统计|\n");printf("||\n");printf("| 0 退出|\n");printf("||\n");printf("||\n");printf("|*****************************************************************|\n");printf("\n\n");printf(" 请输入你所选择的选项:");scanf("%d",&a);while(a>6||a<0){printf(" error!\n");printf(" 请重新输入你所选择的选项:");scanf("%d",&a);}return a;}/********************************************************************************* ***功能:职工信息输入********************************************************************************** ***/void input(){int c;p=emp;printf(" 进入职工信息输入模块 \n\n\n");for(c=0;c<N;c++,p++){p[c].totalwage=p[c].basesalary+p[c].postwage;printf(" 请输入第%d个职工信息:\n\n",c+1);printf(" 请输入职工号:\n");scanf("%s",p->employeeid);if(strcmp(p->employeeid,"0")!=0){printf(" 请输入职工姓名:\n");scanf("%s",p->name);printf(" 请输入职工性别: \n");scanf("%s",&p->sex);printf(" 请输入职工年龄: \n");scanf("%d",&p->age);printf(" 请输入职工基本工资:\n");scanf("%f",&p->basesalary);printf(" 请输入职工岗位工资:\n");scanf("%f",&p->postwage);printf(" 职工信息输入完成! \n\n");}elsereturn;}save();}/*******************************************************************************功能:职工信息输出********************************************************************************/ void output(){int j;load();p=emp;printf(" 进入职工信息输出模块 \n\n\n");printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资|总工资 |\n");printf("-------------------------------------------------------------------------------\n");for(j=0;j<N;j++){p[j].totalwage=p[j].postwage+p[j].basesalary;printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);printf("-------------------------------------------------------------------------------\n");}printf("\n\n 职工信息输出完成! \n\n");getchar();}/******************************************************************************功能:职工信息查询******************************************************************************/ void search(){int j;while(1){printf("*********************职工信息查询*********************\n\n\n");printf(" 1 按职工号查询 \n");printf(" 2 按职工姓名查询 \n");printf(" 0 退出该项操作 \n");printf("\n\n");while(1){printf(" 请输入你的选择 \n");scanf("%d",&j);if(j>=0&&j<=2){switch(j){case 1:search_employeeid();break;case 2:search_name();break;case 0:return;}}else{printf(" 输入错误! \n\n");printf(" 请再次输入你的选择:\n\n");}}}}/*******************************************************************************功能:按职工号查询函数*******************************************************************************/ void search_employeeid(){char employeeid[10];int k,j;p=emp;printf("*********************按职工号查询职工信息*****************************\n\n\n\n");printf(" 请输入要查询职工的职工号:\n\n");scanf("%s",employeeid);for(k=0;k<N;k++){if(strcmp(employeeid,p->employeeid)==0){j=k;p[j].totalwage=p[j].postwage+p[j].basesalary;printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资|总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);printf("-------------------------------------------------------------------------------\n");break;}else{printf(" not found\n");return;}}}/*****************************************************************************功能:按职工姓名查询函数*****************************************************************************/ void search_name(){char name[10];int flog=0;int f,j;p=emp;printf("******************************按职工姓名查询职工信息***********************\n\n\n");printf(" 请输入要查询职工的姓名:\n\n");scanf("%s",name);for(f=0;f<N;f++,p++){if(strcmp(name,p->name)==0){j=f;p[j].totalwage=p[j].postwage+p[j].basesalary;printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资|总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);printf("-------------------------------------------------------------------------------\n");break;}else{printf(" not found \n\n");return;}}getchar();}/*******************************************************************************功能:职工信息修改函数*******************************************************************************/ void edit(){char e[10];int g=0,j;char flog;p=emp;printf(" 请输入你要修改职工的职工号: \n");scanf("%s",e);for(g=0;g<N;g++){// if(*e==p[g].employeeid)if(strcmp(e,p->employeeid)==0){j=g;p[j].totalwage=p[j].postwage+p[j].basesalary;printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid,p[j]. name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);printf("-------------------------------------------------------------------------------\n");printf(" 是否要修改该职工信息?y(是)or n(否)?\n\n");getchar();scanf("%c",&flog);if(flog == 'y'){printf(" 请输入新姓名:\n");scanf("%s",p->name);printf(" 请输入性别: \n");scanf("%s",&p->sex);printf(" 请输入年龄: \n");scanf("%d",&p->age);printf(" 请输入基本工资:\n");scanf("%f",&p->basesalary);printf(" 请输入岗位工资:\n");scanf("%f",&p->postwage);printf(" 修改职工信息成功! \n\n");}if(flog == 'n'){printf(" 退出该项操作! \n\n");return;}save();}if(g==N){printf(" not found \n\n\n");return;}}}/************************************************************************功能:职工工资排列函数************************************************************************/void array(){int j;while(1){printf("*************************工资排序*********************\n\n"); printf(" 1 按基本工资排序 \n\n");printf(" 2 按岗位工资排序 \n\n");printf(" 3 按总工资排列 \n\n");printf(" 0 退出 \n\n");printf("\n\n\n");while(1){printf(" 请输入你的选择: \n\n");scanf("%d",&j);if(j>=0&&j<=3){switch(j){case 1:array_basesalary();break;case 2:array_postwage();break;case 3:array_totalwage();break;case 0:return;}}else{printf(" 输入错误!\n\n\n");printf(" 请再次输入你的选择:\n\n");}}}}/**************************************************************************功能:按基本工资排列(选择法)***************************************************************************/ void array_basesalary(){int i,j,k;p=emp;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++){if(p[k].basesalary<p[j].basesalary)k=j;}if(k!=i){replace=emp[k];emp[k]=emp[i];emp[i]=replace;}}for(j=0;j<N;j++){p[j].totalwage=p[j].postwage+p[j].basesalary;printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资|总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);}printf("-------------------------------------------------------------------------------\n");}/************************************************************************功能:按岗位工资排列(冒泡法)*************************************************************************/void array_postwage(){int i,j;p=emp;for(i=0;i<N;i++){for(j=0;j<N-i;j++){if(p[j].postwage<p[j+1].postwage){replace=emp[j];emp[j]=emp[j+1];emp[j+1]=replace;}}}for(j=0;j<N;j++){p[j].totalwage=p[j].postwage+p[j].basesalary;printf("------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资|总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);}printf("-------------------------------------------------------------------------------\n");}/************************************************************************功能:按总工资排列(插入法)************************************************************************/void array_totalwage(){int i,j;p=emp;for(i=1;i<N;i++){replace=emp[i];for(j=i-1;j>=0&&p[i].totalwage>p[i].totalwage;j--){emp[j+1]=emp[j];emp[j+1]=replace;}}for(j=N-1;j>=0;j--){p[j].totalwage=p[j].postwage+p[j].basesalary;printf("-------------------------------------------------------------------------------\n");printf("| 职工号 |姓名 |性别 | 年龄 |基本工资 |岗位工资|总工资 |\n");printf("|%10s|%9s|%7s| %5d| %10.2f| %10.2f| %10.2f|\n",p[j].employeeid, p[j].name,p[j].sex,p[j].age,p[j].basesalary,p[j].postwage,p[j].totalwage);}printf("-------------------------------------------------------------------------------\n");}/*************************************************************************功能:工资统计函数**************************************************************************/void statistics(){int z,a=0,b=0,c=0;p=emp;for(z=0;z<N;z++){if(p[z].totalwage>3000){a++;continue;}if(p[z].totalwage>=2000&&p[z].totalwage<=3000){b++;continue;}if(p[z].totalwage<=2000&&p[z].totalwage>0){c++;continue;}}printf(" 总工资在3000元以上的职工人数有: %d\n\n",a);printf(" 总工资在2000元至3000元的职工人数有:%d\n\n",b);printf(" 总工资在2000元以下的职工人数有: %d\n\n",c);getchar();}/***************************************************************************功能:导出函数***************************************************************************/ void save(){int k;FILE *fp;p=emp;if((fp=fopen("emp_list","wb"))==NULL){printf(" Create file error!\n");return;}for(k=0;k<N;k++,p++){if(fwrite(p,sizeof(struct employee),1,fp)!=1){printf(" file save error!\n\n");break;}elsecontinue;}getchar();fclose(fp);}/***********************************************************************功能:导入函数***********************************************************************/ void load(){int l;FILE *fp;p=emp;if((fp=fopen("emp_list","rb"))==NULL){printf(" Create file error!\n");exit(0);}for(l=0;l<N;l++,p++){if(fread(p,sizeof(struct employee),1,fp)!=1){printf(" file read error!\n\n");break;}elsecontinue;}getchar();fclose(fp);}下面是实验结果(注:素材和资料部分来自网络,供参考。
职工工资管理系统设计--C语言课程设计
![职工工资管理系统设计--C语言课程设计](https://img.taocdn.com/s3/m/147e33502b160b4e767fcf3a.png)
《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语言职工工资管理系统代码
![c语言职工工资管理系统代码](https://img.taocdn.com/s3/m/7e54a525fd4ffe4733687e21af45b307e871f928.png)
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("未找到对应的员工信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计基础》课程设计报告题目:员工工资管理系统院(系):信息科学与工程学院专业班级:学生姓名:学号:指导教师:20 16 年 12 月 12 日至20 16 年 12 月 23 日武昌首义学院制程序设计基础课程设计任务书目录1需求与总体设计 (1)2详细设计 (1)3编码实现 (4)4运行结果 (21)总结 (24)1需求与总体设计1.1需求描述设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。
1.2总体设计先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的。
1.3数据结构struct user //登陆者信息{char un[10];char up[10];}us[3] = { "aaa","111","bbb","222","ccc","333" };struct yg //员工结构体{short zt; //数据状态long bh; //编号char name[20]; //名字char time[11]; //时间long money; //基本工资long jj; //奖金long kk; //扣款long sf; //实发工资};整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。
2详细设计2.1 系统功能设计主函数和子函数:系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。
各个函数的功能:主函数是一个入口程序从这里进入,再进入登陆函数,实现登陆操作。
登陆函数,只有拥有正确账号密码,正确的操作才可以进入菜单界面进行下一步的操作,并且输入错误三次后将会提示并强制退出。
菜单界面利用switch()函数将各个函数联系起来实现真正的菜单,输入正确的序号可以进行后续的各个操作。
读取函数,将特定文件中的信息,以特定的方式读取到正在运行的程序中,实现读写操作。
写入函数,在添加、更新、删除、重组操作过后进行写入操作,将变换后的数据重新写入文件中。
注:每次写入都是将程序中的所有数据重新写入文件。
增加函数,可以新添员工,并将员工的数据输入,并利用写入函数,写入文件中。
在增加后会提示是否继续增加,提供了方便。
并且如果原数据中有相同编号的员工,会在输入编号后提示有相同的编号的员工,并重新输入编号。
增加了程序的健全性。
更新数据函数,以编号来确定更新的员工,更新将重新输入该编号员工的信息,并在更新后执行写入。
删除函数,执行该函数后,将有两种选择,按编号删除,或按名字删除,正确输入后将会将该编号或姓名的数据中的一项zt的值更改为1,使其在其他操作时不被识别,以达到不删除数据,但达到相同的效果的逻辑删除。
显示函数,有两种显示方式,按学号显示或按名字显示,学号显示为从小到大显示。
重组函数,将文件中逻辑删除的数据物理删除,用来节省储存空间,并可以加快运算速度。
统计数据,将文件中的数据统计、计算,并输出,给人以直观的方式显示数据。
排序函数,将数据以实发工资从大到小排序。
2.2 系统流程设计3编码实现#define MAX 100#include<stdio.h>#include<string.h>#include<stdlib.h>struct user //登陆者信息{char un[10];char up[10];}us[3] = { "aaa","111","bbb","222","ccc","333" };struct yg //员工结构体{short zt; //数据状态long bh; //编号char name[20]; //名字char time[11]; //时间long money; //基本工资long jj; //奖金long kk; //扣款long sf; //实发工资};yg y[MAX]; //定义数据体数组int r = 0; //全局变量,人数,包括逻辑删除人数int p = 0; //登陆的次数,用全局变量能在登陆三次失败时退出程序void read() //读取文件函数{FILE *fp;char b;int i;b = '0';printf("即将读取文件员工信息.dat\n");if ((fp = fopen("员工信息.dat", "rb")) == NULL) //读取文件{printf("员工信息.dat 文件不存在\n");printf("是否重新创建该文件?\n");printf("创建(y) 员工信息.dat 或退出(n)\n");getchar();b = getchar();while (getchar() != '\n')if (b == 'Y' || b == 'N')b += 32;while (b != 'y'&&b != 'n'){printf("输入错误!请重新输入!\n");b = getchar();while (getchar() != '\n')if (b == 'Y' || b == 'N')b += 32;}if (b == 'y')if ((fp = fopen("员工信息.dat", "wb")) == NULL) //文件不存在则创建文件{printf("创建文件失败!\n");printf("按下任意键以退出程序!\n");getchar();exit(1);}}if (b == '0'){fread(&r, 4, 1, fp);printf("读取成功!\n");}elseprintf("创建文件成功!\n");if (r != 0)for (i = 0; i < r; i++)fread(&y[i], sizeof(yg), 1, fp);fclose(fp);}void save() //保存文件函数{FILE *fp;int i;if ((fp = fopen("员工信息.dat", "wb")) == NULL){printf("保存文件失败!\n");printf("按下任意键以退出程序!\n");getchar();exit(1);}else{fwrite(&r, 4, 1, fp);if (r != 0)for (i = 0; i < r; i++)fwrite(&y[i], sizeof(yg), 1, fp);}fclose(fp);}void zj_data() //增加数据函数{yg yuangong;char b;int i;int k = 0;yuangong.zt = 0; //新建员工信息时,状态为0 do //用循环来寻找、避免相同编号的员工{printf("编号:(例如:123456)\n");scanf("%d", &yuangong.bh);for (i = 0; i < r; i++)if (y[i].bh == yuangong.bh&&y[i].zt==0){printf("已有同编号员工无法添加!\n");printf("请重新输入!\n");k = 1;break;}else if (i == r - 1)k = 0;} while (k == 1);printf("姓名:(例如:张三(or tom))\n");scanf("%s", );printf("年月:(例如:2015.11.11)\n");scanf("%s", yuangong.time);printf("岗位工资:(例如:50000)\n");scanf("%d", &yuangong.money);printf("奖金:(例如:2000)\n");scanf("%d", &yuangong.jj);printf("扣款:(例如:100)\n");scanf("%d", &yuangong.kk);printf("实发工资为:(岗位工资+奖金-扣款)\n");yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk;printf("%d\n", yuangong.sf);y[r] = yuangong;r++; //新建员工信息时人数r++ save();printf("添加成功!\n");getchar(); //防止下面一个%c读取到上一个的回车printf("是否继续添加员工?(y/n)\n");b = getchar();while (getchar() != '\n');if (b == 'Y' || b == 'N')b += 32;while (b != 'y'&&b != 'n'){printf("输入错误!请重新输入!\n");b = getchar();while (getchar() != '\n')if (b == 'Y' || b == 'N')b += 32;}if (b == 'y')zj_data();}void gx_data() //更新数据{yg yuangong;long num;int i;printf("\n请输入要更新的员工的编号!\n");scanf("%d", &num);for (i = 0; i < r; i++)if (y[i].bh == num&&y[i].zt == 0){yuangong = y[i];printf("当前该员工信息为:\n");printf("编号:%d\n", yuangong.bh);printf("姓名:%s\n", );printf("年月:%s\n", yuangong.time);printf("岗位工资:%d\n", yuangong.money);printf("奖金:%d\n", yuangong.jj);printf("扣款:%d\n", yuangong.kk);printf("实发工资:%d\n", yuangong.sf);printf("按下任意键输入更新后的信息!\n");getchar();getchar();printf("编号:(例如:123456)\n");scanf("%d", &yuangong.bh);printf("姓名:(例如:张三(or tom))\n");scanf("%s", );printf("年月:(例如:2015.11.11)\n");scanf("%s", yuangong.time);printf("岗位工资:(例如:50000)\n");scanf("%d", &yuangong.money);printf("奖金:(例如:2000)\n");scanf("%d", &yuangong.jj);printf("扣款:(例如:100)\n");scanf("%d", &yuangong.kk);printf("实发工资为:(岗位工资+奖金-扣款)\n");yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk;printf("%d\n", yuangong.sf);y[i] = yuangong;save();printf("更新成功!\n");break;}else if (i == r - 1)printf("查无此人!\n");}void cz_data() //查询数据{yg yuangong;int a, i;long num;char na[10];printf("\n请选择查询方式!\n"); //分为按编号查询和姓名查询printf(" *******************\n");printf(" * 1、编号查询 *\n");printf(" * 2、姓名查询 *\n");printf(" * 3、返回菜单 *\n");printf(" *******************\n");scanf("%d", &a);if (a == 1){printf("请输入查询员工的编号:");scanf("%d", &num);for (i = 0; i < r; i++) //编号查询则循环r次,查找状态为0且编号与所输入的数字相同的数据if (y[i].zt == 0 && y[i].bh == num){yuangong = y[i];printf("当前该员工信息为:\n");printf("编号:%d\n", yuangong.bh);printf("姓名:%s\n", );printf("年月:%s\n", yuangong.time);printf("岗位工资:%d\n", yuangong.money);printf("奖金:%d\n", yuangong.jj);printf("扣款:%d\n", yuangong.kk);printf("实发工资:%d\n", yuangong.sf);break;}else if (i == r - 1)printf("查无此人!\n");}else if (a == 2){printf("请输入查询员工的姓名:");scanf("%s", na);for (i = 0; i < r; i++) //姓名查询则循环r次,查找状态为0且编号与所输入的字符串相同的数据if ((strcmp(y[i].name, na) == 0) && y[i].zt == 0){yuangong = y[i];printf("当前该员工信息为:\n");printf("编号:%d\n", yuangong.bh);printf("姓名:%s\n", );printf("年月:%s\n", yuangong.time);printf("岗位工资:%d\n", yuangong.money);printf("奖金:%d\n", yuangong.jj);printf("扣款:%d\n", yuangong.kk);printf("实发工资:%d\n", yuangong.sf);break;}else if (i == r - 1)printf("查无此人!\n");}else if (a == 3){}else{printf("输入错误!\n");cz_data();}}void sc_data() //删除数据{yg yuangong;long num;int a, i, b;char na[10];printf("\n请选择!\n"); //删除也按编号删除和姓名删除printf(" *********************\n");printf(" * 1、按编号删除 *\n");printf(" * 2、按姓名删除 *\n");printf(" * 3、返回主菜单 *\n");printf(" *********************\n");scanf("%d", &a);if (a == 1){printf("请输入要删除员工的编号:");scanf("%d", &num);for (i = 0; i < r; i++)if (y[i].zt == 0 && y[i].bh == num){yuangong = y[i];printf("当前该员工信息为:\n");printf("编号:%d\n", yuangong.bh);printf("姓名:%s\n", );printf("年月:%s\n", yuangong.time);printf("岗位工资:%d\n", yuangong.money);printf("奖金:%d\n", yuangong.jj);printf("扣款:%d\n", yuangong.kk);printf("实发工资:%d\n", yuangong.sf);y[i].zt = 1;save();printf("删除成功!\n");getchar(); //防止下面一个%c 读取到上一个的回车printf("是否继续删除员工?(y/n)\n");b = getchar();while (getchar() != '\n');if (b == 'Y' || b == 'N')b += 32;while (b != 'y'&&b != 'n'){printf("输入错误!请重新输入!\n");b = getchar();while (getchar() != '\n')if (b == 'Y' || b == 'N')b += 32;}if (b == 'y')sc_data();break;}else if (i == r - 1)printf("查无此人,无法删除!\n");}else if (a == 2){printf("请输入删除员工的姓名:");scanf("%s", na);for (i = 0; i < r; i++)if ((strcmp(y[i].name, na) == 0) && y[i].zt == 0){yuangong = y[i];printf("当前该员工信息为:\n");printf("编号:%d\n", yuangong.bh);printf("姓名:%s\n", );printf("年月:%s\n", yuangong.time);printf("岗位工资:%d\n", yuangong.money);printf("奖金:%d\n", yuangong.jj);printf("扣款:%d\n", yuangong.kk);printf("实发工资:%d\n", yuangong.sf);y[i].zt = 1;save();printf("删除成功!\n");getchar(); //防止下面一个%c 读取到上一个的回车printf("是否继续删除员工?(y/n)\n");b = getchar();while (getchar() != '\n');if (b == 'Y' || b == 'N')b += 32;while (b != 'y'&&b != 'n'){printf("输入错误!请重新输入!\n");b = getchar();while (getchar() != '\n')if (b == 'Y' || b == 'N')b += 32;}if (b == 'y')sc_data();break;}else if (i == r - 1)printf("查无此人,无法删除!\n");}else if (a == 3) //输入为3时不执行操作返回主菜单{}else{printf("输入错误!\n");sc_data();}}void xs_data() //显示数据{yg yuangong[MAX], t;int a;int i, j;int k = 0;printf("\n请选择显示方式!\n");printf(" *********************\n");printf(" * 1、按编号显示 *\n");printf(" * 2、按姓名显示 *\n");printf(" * 3、返回主菜单 *\n");printf(" *********************\n");scanf("%d", &a);for (i = 0; i < r; i++){yuangong[i] = y[i];if (y[i].zt == 1)k++;}if (k == r){printf("无员工信息!\n");a = 3;}if (a == 1) //按编号显示时用冒泡排序从大到小排序{for (i = 1; i <= r; i++)for (j = 0; j<r - i; j++)if (yuangong[j].bh > yuangong[j + 1].bh){t = yuangong[j];yuangong[j] = yuangong[j + 1];yuangong[j + 1] = t;}printf("按编号排列如下:\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "编号", "姓名", "年月", "岗位工资", "奖金", "扣款", "实发工资");for (i = 0; i<r; i++)if (yuangong[i].zt == 0)printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n",yuangong[i].bh, yuangong[i].name, yuangong[i].time, yuangong[i].money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf);printf("显示完毕!\n");}else if (a == 2) //按名字显示时用冒泡排序从大到小排序,用strcmp来比较字符串的大小{for (i = 1; i <= r; i++)for (j = 0; j<r - i; j++)if (strcmp(yuangong[j].name, yuangong[j + 1].name) > 0){t = yuangong[j];yuangong[j] = yuangong[j + 1];yuangong[j + 1] = t;}printf("按姓名排列如下:\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "编号", "姓名", "年月", "岗位工资", "奖金", "扣款", "实发工资");for (i = 0; i<r; i++)if (yuangong[i].zt == 0)printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n",yuangong[i].bh, yuangong[i].name, yuangong[i].time, yuangong[i].money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf);printf("显示完毕!\n");}else if (a == 3){}else{printf("输入错误!\n");cz_data();}}void chongz_data() //重组文件{int i, j;int k = 0;for (i = 0; i < r; i++) //循环r次,将状态为1的数据剔除,并将剔除数据的个数记录if (y[i].zt == 1){for (j = i; j < r; j++)y[j] = y[j + 1];k++;}r -= k; //将人数r重新计算save();printf("重组成功!\n");}void tj_data() //统计数据{yg yuangong[MAX];int max, m, k = 0;double ave = 0;int n = 0;int i;for (i = 0; i < r; i++) //计算文件中逻辑删除的数据个数k{yuangong[i] = y[i];if (yuangong[i].zt == 1)k++;}for (i = 0; i < r; i++) //将数组中第一个状态为0的数据的实发工资赋给max,并记录是第几位,跳出循环if (yuangong[i].zt == 0){max = yuangong[i].sf;m = i;break;}if (yuangong[0].zt == 0) //第一个数据是否逻辑删除?否,将实发工资赋给ave未计算的平均值ave = yuangong[0].sf;for (i = 1; i < r; i++) //循环找出最大值,并将所有正常数据加入未计算的ave中{if ((max < yuangong[i].sf) && (yuangong[i].zt == 0))m = i;if (yuangong[i].zt == 0)ave += yuangong[i].sf;}ave = ave / (r - k); //计算avefor (i = 0; i < r; i++) //将数据中所有大于ave的数据,统计if ((yuangong[i].sf > ave) && (yuangong[i].zt == 0))n++;printf("\n最高实发工资员工信息为:\n"); //输出结果printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "编号", "姓名", "年月", "岗位工资", "奖金", "扣款", "实发工资");printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n", yuangong[m].bh, yuangong[m].name, yuangong[m].time, yuangong[m].money, yuangong[m].jj, yuangong[m].kk, yuangong[m].sf);printf("平均工资为:%.2f\n", ave);printf("超过平均工资人数为:%d\n\n", n);}void px_data() //排序数据{yg yuangong[MAX], t;int num = 0;int i, j;for (i = 0; i < r; i++)yuangong[i] = y[i];for (i = 1; i <= r; i++) //冒泡排序排序所有数据for (j = 0; j < r - i; j++)if (yuangong[j].sf<yuangong[j + 1].sf){t = yuangong[j];yuangong[j] = yuangong[j + 1];yuangong[j + 1] = t;}printf("\n所有员工信息为:\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "编号", "姓名", "年月", "岗位工资", "奖金", "扣款", "实发工资");for (i = 0; i<r; i++)if (yuangong[i].zt == 0)printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n", yuangong[i].bh, yuangong[i].name, yuangong[i].time, yuangong[i].money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf);}void cd() //菜单函数{int l;do{printf("欢迎进入员工工资管理系统菜单!\n");printf(" ________________\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(" *|[其它输入为退出]|*\n");printf(" *|________________|*\n\n");printf("请输入你的选择:\n");scanf("%d", &l);switch (l){case 1:zj_data(); printf("即将返回主菜单\n"); system("PAUSE"); break; //system用于返回主菜单时等待一下case 2:gx_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 3:cz_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 4:sc_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 5:xs_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 6:chongz_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 7:tj_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 8:px_data(); printf("即将返回主菜单\n"); system("PAUSE");break;case 9:break;}} while (l != 9 && (l == 1 || l == 2 || l == 3 || l == 4 || l == 5 || l== 6 || l == 7 || l == 8));}void dl() //登陆函数{int i;char a[10], b[10];printf("请输入用户名:\n");scanf("%s", a);printf("请输入密码:\n");scanf("%s", b);for (i = 0; i<3; i++)if (strcmp(us[i].un, a) == 0 && strcmp(us[i].up, b) == 0){printf("登录成功!\n");read();cd();break;}if (i == 3){printf("登录失败!\n");p++;if (p >= 3){printf("登录失败超过3次,系统将强制退出!\n");printf("按下任意键以退出程序!\n");getchar();getchar();exit(1);}elsedl();}}int main() //主函数{dl();return 0;}4运行结果输入三次登陆失败输出:登陆成功读取文件,无文件时:创建文件成功后进入菜单界面:增加数据输入界面:当输入数据中原本就有的员工编号时:所有数据输入完成后,显示所有数据:有两种显示方式将其中一人的数据执行更新操作:编号错误时:正确时:查询:两种方式删除数据:两种方式重组完成:数据处理完成后,显示所有数据:统计数据:以实发工资高到低排序数据:总结拿到课设题目时,以为很简单,只是将一些函数堆叠在一起就行了,写的时候也没觉得很难,但在调试程序时,各种各样的bug眼花缭乱,如何找出、修改bug占了大部分时间。