You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

627 lines
16 KiB

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<conio.h>
#include<windows.h>
int sum=0;//总职工
struct Data{
char name[20];//姓名
int number;//编号
int baseWage;//基本工资
int dutyWage;//职务工资
int allowance;//岗位津贴
int insurance;//医疗保险
int fund;//公积金
};
void Menu(){//主菜单
system("cls");
printf("***********************************\n");
printf("*-------职工工资信息管理系统------*\n");
printf("*---------------------------------*\n");
printf("* 1 ——输入 (Insert) —— *\n");
printf("*---------------------------------*\n");
printf("* 2 ——显示 ( Show ) —— *\n");
printf("*---------------------------------*\n");
printf("* 3 ——修改 (Updata) —— *\n");
printf("*---------------------------------*\n");
printf("* 4 ——查找 (Search) —— *\n");
printf("*---------------------------------*\n");
printf("* 5 ——删除 (Delete) —— *\n");
printf("*---------------------------------*\n");
printf("* 6 ——统计 (Acount) —— *\n");
printf("*---------------------------------*\n");
printf("* 7 ——退出 (Exit) —— *\n");
printf("*---------------------------------*\n");
printf("***********************************\n");
printf("*请输入您的选项:\n");
}
void Insert(){//添加功能
int i,j;
int swi=0;
Data dt,tt;
Data *p=&dt;//指针操作
char tp[30];
char buff[20];
FILE *fp = NULL,*ff = NULL;
while(1){
system("cls");
printf("请输入职工的姓名: ");
scanf("%s",p->name);
while(1){
system("cls");
printf("请输入职工ID编号(不可重复):");
scanf("%d",&p->number);
if(p->number>0){
if(ff=fopen("data.txt", "r")){
swi=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(p->number==atoi(buff))swi=1;
break;
}
buff[j++]=tp[i];
}
if(swi==1)break;
}
fclose(ff);
}
if(swi==1){
printf("编号重复,请重新输入!\n");
system("pause");
continue;
}
}
else{
printf("编号格式为纯数字,请重新输入!\n");
system("pause");
continue;
}
printf("(以下格式:按要求输入类型为数字)\n");
printf("\n请输入职工的基本工资:");
scanf("%d",&p->baseWage);
printf("请输入职工的职务工资岗位津贴:");
scanf("%d",&p->dutyWage);
printf("请输入职工的岗位津贴:");
scanf("%d",&p->allowance);
printf("请输入职工的医疗保险:");
scanf("%d",&p->insurance);
printf("请输入职工的公积金:");
scanf("%d",&p->fund);
if(p->baseWage>=0&&p->dutyWage>=0&&p->insurance>=0&&p->fund>=0)break;
else{
printf("抱歉!您输入的格式有问题,请重新输入!\n");
system("pause");
continue;
}
}
break;
}
if(fp=fopen("data.txt","a")){
fprintf(fp, "%d,%s,%d,%d,%d,%d,%d,\n",p->number,p->name,p->baseWage,p->dutyWage,p->allowance,p->insurance,p->fund);
}
fclose(fp);
printf("\n该订单信息存储成功\n");
system("pause");
}
void Show(){//显示功能
int i,j,z,k;
int cnt;
int allSum=0;
double x1,x2,x3,x4,x5;
Data temp;
Data dt[100];
char tp[30];
char buff[20];
FILE *ff = NULL;
if(ff=fopen("data.txt", "r")){
sum=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
cnt=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(cnt==0)dt[sum].number=atoi(buff);
else if(cnt==1)strcpy(dt[sum].name,buff);
else if(cnt==2)dt[sum].baseWage=atoi(buff);
else if(cnt==3)dt[sum].dutyWage=atoi(buff);
else if(cnt==4)dt[sum].allowance=atoi(buff);
else if(cnt==5)dt[sum].insurance=atoi(buff);
else if(cnt==6){
dt[sum].fund=atoi(buff);
break;
}
cnt++;
j=0;
memset(buff,0,sizeof(buff));
continue;
}
buff[j++]=tp[i];
}
sum++;
}
fclose(ff);
}
system("cls");
printf("***************************************职工工资显示***************************************\n");
for(i=0;i<sum;i++){
x1+=dt[i].baseWage;
x2+=dt[i].dutyWage;
x3+=dt[i].allowance;
x4+=dt[i].insurance;
x5+=dt[i].fund;
allSum=dt[i].baseWage+dt[i].dutyWage+dt[i].allowance+dt[i].insurance+dt[i].fund;
printf("\n 编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d 总工资: %d\n",dt[i].number,dt[i].name,dt[i].baseWage,dt[i].dutyWage,dt[i].allowance,dt[i].insurance,dt[i].fund,allSum);
}
printf("\n 各项平均工资-----基本: %.2lf 职务: %.2lf 岗位津贴: %.2lf 医疗保险: %.2lf 公积金: %.2lf\n",x1/sum,x2/sum,x3/sum,x4/sum,x5/sum);
printf("******************************************************************************************\n");
system("pause");
}
void Updata(){//修改功能
int i,j,z,q,w;
int cnt;
int swi=0,swis=0;
int num[100];
char newName[20];
char ch,delNum;
char finds[20];
char tp[30];
char buff[20];
Data dt[100];
FILE *fp = NULL,*ff = NULL;
if(ff=fopen("data.txt", "r")){
sum=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
cnt=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(cnt==0)dt[sum].number=atoi(buff);
else if(cnt==1)strcpy(dt[sum].name,buff);
else if(cnt==2)dt[sum].baseWage=atoi(buff);
else if(cnt==3)dt[sum].dutyWage=atoi(buff);
else if(cnt==4)dt[sum].allowance=atoi(buff);
else if(cnt==5)dt[sum].insurance=atoi(buff);
else if(cnt==6){
dt[sum].fund=atoi(buff);
break;
}
cnt++;
j=0;
memset(buff,0,sizeof(buff));
continue;
}
buff[j++]=tp[i];
}
sum++;
}
fclose(ff);
}
system("cls");
printf("请输入想要修改的职工姓名或编号(模糊查找):");
scanf("%s",finds);
q=0;
for(i=0;i<sum;i++){
if(strcmp(dt[i].name,finds)==0||dt[i].number==atoi(finds)){
swi=1;
num[q]=i;
q++;
}
}
if(swi==1){
while(1){
swis=0;
system("cls");
printf("***************************************模糊查找显示***************************************\n");
for(i=0;i<q;i++){
printf("\n 选择序号: %d 编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d\n",i+1,dt[num[i]].number,dt[num[i]].name,dt[num[i]].baseWage,dt[num[i]].dutyWage,dt[num[i]].allowance,dt[num[i]].insurance,dt[num[i]].fund);
}
printf("******************************************************************************************\n");
if(q==1){
printf("\n是否修改该职工信息\n");
printf("Y-确认 N-取消: ");
}
else{
printf("\n模糊查找到多条职工信息\n");
printf("\n是否修改该职工信息\n");
printf("\n输入想要修改职工序号修改 或者 N-取消: ");
}
ch=getch();
if(ch>='0'&&ch<='9'){
delNum=ch;
swis=1;
break;
}
else if(ch=='y'||ch=='Y'){
delNum='1';
swis=1;
break;
}
else if(ch=='n'||ch=='N'){
printf("\n取消操作,返回功能页面\n");
system("pause");
break;
}
else{
printf("\n输入有误,请按要求重新确认\n");
system("pause");
}
}
if(swis==1){
while(1){
system("cls");
printf("***************************************选中修改信息***************************************\n");
printf("\n 职工信息《编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d》\n",dt[num[delNum-'0'-1]].number,dt[num[delNum-'0'-1]].name,dt[num[delNum-'0'-1]].baseWage,dt[num[delNum-'0'-1]].dutyWage,dt[num[delNum-'0'-1]].allowance,dt[num[delNum-'0'-1]].insurance,dt[num[delNum-'0'-1]].fund);
printf("******************************************************************************************\n");
printf(" 按选项选择需要修改的信息\n");
printf(" 0-保存 1-编号 2-姓名 3-基本工资 4-职务工资 5-岗位津贴 6-医疗保险 7-公积金\n");
ch=getch();
system("cls");
if(ch=='1'){
printf("请输入新的编号(不可和其他编号重复):");
scanf("%d",&dt[num[delNum-'0'-1]].number);
}
else if(ch=='2'){
printf("请输入新的姓名:");
scanf("%s",dt[num[delNum-'0'-1]].name);
}
else if(ch=='3'){
printf("请输入新的基本工资:");
scanf("%d",&dt[num[delNum-'0'-1]].baseWage);
}
else if(ch=='4'){
printf("请输入新的职务工资:");
scanf("%d",&dt[num[delNum-'0'-1]].dutyWage);
}
else if(ch=='5'){
printf("请输入新的岗位津贴:");
scanf("%d",&dt[num[delNum-'0'-1]].allowance);
}
else if(ch=='6'){
printf("请输入新的医疗保险:");
scanf("%d",&dt[num[delNum-'0'-1]].insurance);
}
else if(ch=='7'){
printf("请输入新的公积金:");
scanf("%d",&dt[num[delNum-'0'-1]].fund);
}
else if(ch=='0'){
break;
}
else{
printf("抱歉!请输入选项(0-7)\n");
system("pause");
continue;
}
printf("刚刚修改的信息-修改完成!\n");
printf("是否继续修改该职工信息\n");
printf("Y-继续(修改) N-退出(保存)");
ch=getch();
if(ch=='N'||ch=='n')break;
else if(ch='y'||ch=='Y')continue;
else{
printf("抱歉!请输入 Y or N\n");
system("pause");
continue;
}
}
if(fp=fopen("data.txt","w")){
for(i=0;i<sum;i++){
fprintf(fp, "%d,%s,%d,%d,%d,%d,%d,\n",dt[i].number,dt[i].name,dt[i].baseWage,dt[i].dutyWage,dt[i].allowance,dt[i].insurance,dt[i].fund);
}
}
fclose(fp);
printf("\n该职工信息已修改,可在查询功能确认\n");
system("pause");
}
}
else{
printf("\n抱歉!没找到任何符合信息\n");
system("pause");
}
}
void Search(){//查询功能
int i,j,z,q,w;
int cnt;
int swi=0;
int num[100];
char finds[20];
char tp[30];
char buff[20];
Data dt[100];
FILE *fp = NULL,*ff = NULL;
if(ff=fopen("data.txt", "r")){
sum=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
cnt=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(cnt==0)dt[sum].number=atoi(buff);
else if(cnt==1)strcpy(dt[sum].name,buff);
else if(cnt==2)dt[sum].baseWage=atoi(buff);
else if(cnt==3)dt[sum].dutyWage=atoi(buff);
else if(cnt==4)dt[sum].allowance=atoi(buff);
else if(cnt==5)dt[sum].insurance=atoi(buff);
else if(cnt==6){
dt[sum].fund=atoi(buff);
break;
}
cnt++;
j=0;
memset(buff,0,sizeof(buff));
continue;
}
buff[j++]=tp[i];
}
sum++;
}
fclose(ff);
}
system("cls");
printf("请输入想要查找的职工姓名或编号查询:");
scanf("%s",finds);
q=0;
for(i=0;i<sum;i++){
if(strcmp(dt[i].name,finds)==0||dt[i].number==atoi(finds)){
swi=1;
num[q]=i;
q++;
}
}
if(swi==1){
system("cls");
printf("***************************************职工查找显示***************************************\n");
for(i=0;i<q;i++){
printf("\n 选择序号: %d 编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d\n",i+1,dt[num[i]].number,dt[num[i]].name,dt[num[i]].baseWage,dt[num[i]].dutyWage,dt[num[i]].allowance,dt[num[i]].insurance,dt[num[i]].fund);
}
printf("******************************************************************************************\n");
system("pause");
}
else{
printf("\n抱歉!没找到任何符合信息\n");
system("pause");
}
}
void Delete(){//删除功能
int i,j,z,q,w;
int cnt;
int swi=0,swis=0;
int num[100];
char newName[20];
char ch,delNum;
char finds[20];
char tp[30];
char buff[20];
Data dt[100];
FILE *fp = NULL,*ff = NULL;
if(ff=fopen("data.txt", "r")){
sum=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
cnt=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(cnt==0)dt[sum].number=atoi(buff);
else if(cnt==1)strcpy(dt[sum].name,buff);
else if(cnt==2)dt[sum].baseWage=atoi(buff);
else if(cnt==3)dt[sum].dutyWage=atoi(buff);
else if(cnt==4)dt[sum].allowance=atoi(buff);
else if(cnt==5)dt[sum].insurance=atoi(buff);
else if(cnt==6){
dt[sum].fund=atoi(buff);
break;
}
cnt++;
j=0;
memset(buff,0,sizeof(buff));
continue;
}
buff[j++]=tp[i];
}
sum++;
}
fclose(ff);
}
system("cls");
printf("请输入想要删除的职工姓名或编号(模糊查找):");
scanf("%s",finds);
q=0;
for(i=0;i<sum;i++){
if(strcmp(dt[i].name,finds)==0||dt[i].number==atoi(finds)){
swi=1;
num[q]=i;
q++;
}
}
if(swi==1){
while(1){
swis=0;
system("cls");
printf("***************************************模糊查找显示***************************************\n");
for(i=0;i<q;i++){
printf("\n 选择序号: %d 编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d\n",i+1,dt[num[i]].number,dt[num[i]].name,dt[num[i]].baseWage,dt[num[i]].dutyWage,dt[num[i]].allowance,dt[num[i]].insurance,dt[num[i]].fund);
}
printf("******************************************************************************************\n");
if(q==1){
printf("\n是否删除该订单信息\n");
printf("Y-确认 N-取消: ");
}
else{
printf("\n模糊查找到多条订单信息\n");
printf("\n是否删除该订单信息\n");
printf("\n输入想要删除订单序号删除 或者 N-取消: ");
}
ch=getch();
if(ch>='0'&&ch<='9'){
delNum=ch;
swis=1;
break;
}
else if(ch=='y'||ch=='Y'){
delNum='1';
swis=1;
break;
}
else if(ch=='n'||ch=='N'){
printf("\n取消操作,返回功能页面\n");
system("pause");
break;
}
else{
printf("\n输入有误,请按要求重新确认\n");
system("pause");
}
}
if(swis==1){
if(fp=fopen("data.txt","w")){
for(i=0;i<sum;i++){
if(i!=num[delNum-'0'-1]){
fprintf(fp, "%d,%s,%d,%d,%d,%d,%d,\n",dt[i].number,dt[i].name,dt[i].baseWage,dt[i].dutyWage,dt[i].allowance,dt[i].insurance,dt[i].fund);
}
}
}
fclose(fp);
printf("\n该订单信息已删除,可在查询功能确认\n");
system("pause");
}
}
else{
printf("\n抱歉!没找到任何符合信息\n");
system("pause");
}
}
void Acount(){//统计功能
int findStart,findEnd;
int i,j,z,q,w;
int sums=0;
int cnt;
int swi=0;
int num[100];
char finds[20];
char tp[30];
char buff[20];
Data dt[100];
FILE *fp = NULL,*ff = NULL;
if(ff=fopen("data.txt", "r")){
sum=0;
while(fgets(tp, 512, ff) != NULL){
memset(buff,0,sizeof(buff));
j=0;
cnt=0;
for(i=0;i<strlen(tp);i++){
if(tp[i]==','){
if(cnt==0)dt[sum].number=atoi(buff);
else if(cnt==1)strcpy(dt[sum].name,buff);
else if(cnt==2)dt[sum].baseWage=atoi(buff);
else if(cnt==3)dt[sum].dutyWage=atoi(buff);
else if(cnt==4)dt[sum].allowance=atoi(buff);
else if(cnt==5)dt[sum].insurance=atoi(buff);
else if(cnt==6){
dt[sum].fund=atoi(buff);
break;
}
cnt++;
j=0;
memset(buff,0,sizeof(buff));
continue;
}
buff[j++]=tp[i];
}
sum++;
}
fclose(ff);
}
while(1){
system("cls");
printf("(A)与(C)的功能都在显示功能里面实现了,这里只实现(B)的统计功能\n");
printf("(B)统计符合指定条件的(如职工工资前三项之和在3000元以上或其他数值)以内的工资人数及占总职工人数百分百\n\n");
printf("请输入您想统计的职工工资前三项和值的数值范围\n");
printf("起始范围: ");
scanf("%d",&findStart);
printf("结束范围: ");
scanf("%d",&findEnd);
if(findEnd>=findStart&&findEnd>=0&&findStart>=0)break;
else{
printf("抱歉!起始范围要小于结束范围,且都为整数,需要满足格式要求,请重新输入!\n");
system("pause");
continue;
}
}
q=0;
for(i=0;i<sum;i++){
sums=dt[i].baseWage+dt[i].dutyWage+dt[i].allowance;
if(sums>=findStart&&sums<=findEnd){
swi=1;
num[q]=i;
q++;
}
}
if(swi==1){
system("cls");
printf("***************************************职工查找显示***************************************\n");
for(i=0;i<q;i++){
printf("\n 选择序号: %d 编号: %d 姓名: %s 基本工资: %d 职务工资: %d 岗位津贴: %d 医疗保险: %d 公积金: %d\n",i+1,dt[num[i]].number,dt[num[i]].name,dt[num[i]].baseWage,dt[num[i]].dutyWage,dt[num[i]].allowance,dt[num[i]].insurance,dt[num[i]].fund);
}
printf("******************************************************************************************\n");
system("pause");
}
else{
printf("\n抱歉!没找到任何符合信息\n");
system("pause");
}
}
int main(){
char x;
while(1){
Menu();
x=getch();
if(x=='7'){
printf("请按任意键退出\n");
system("pause");
break;
}
else if(x=='1'){
Insert();
}
else if(x=='2'){
Show();
}
else if(x=='3'){
Updata();
}
else if(x=='4'){
Search();
}
else if(x=='5'){
Delete();
}
else if(x=='6'){
Acount();
}
else {
printf("输入错误!请输入选项范围(1-7),请重新输入\n");
system("pause");
}
}
return 0;
}