用c语言写一个职工工资管理程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言写一个职工工资管理程序相关的知识,希望对你有一定的参考价值。
用c语言写一个职工工资管理程序将10名职工的数据(职工号、职工名、性别、年龄、工资)从键盘输入,然后送到磁
盘文件worker1.dat中保存起来。
从磁盘文件中读出这些数据,依次打印出来。
对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中。
将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中,并从这两个文件中读出职工信息在显示器上显示出来。
思路:
使用结构体保存职工信息,设计单独的函数,实现录入,按职工工资排序,分解单双数职工,读取和写入文件,显示数据等功能。
1 - 从键盘录入信息到数组结构并保存至文件,录入+写入文件。
2 - 从磁盘文件中读出这些数据,依次打印出来, 读取文件+显示数据。
3 - 对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中, 排序+写入文件。
4 - 将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中, 分解单双数职工+写入文件。
5 - 并从这两个文件中读出职工信息在显示器上显示出来, 读取文件+显示数据。
代码片段如下:
int main(int argc, char* argv[])worker arr[WORKER_NUMBER];
int cnt = WORKER_NUMBER;
worker odd[WORKER_NUMBER];
int oddnum = 0;
worker even[WORKER_NUMBER];
int evennum = 0;
clear_worker_array(arr, cnt);
clear_worker_array(odd, cnt);
clear_worker_array(even, cnt);
//1.录入并保存至worker1.dat
entering_data(arr, cnt);
if( save_file(arr, cnt, filename[0]) == 0 )
printf("原始记录已成功保存至文件 - %s\\n", filename[0]);
//2.读取worker1.dat并显示
clear_worker_array(arr, cnt);
if( load_file(arr, &cnt, filename[0]) == 0 )
printf("载入文件 - %s\\n", filename[0]);
show_data(arr, cnt);
//3.排序并保存至worker2.dat
sort_by_salary(arr, cnt);
if( save_file(arr, cnt, filename[1]) ==0 )
printf("按工资排序后的记录已成功保存至文件 - %s\\n", filename[1]);
//4.保存单数和双数职工号信息至worker3.dat和worker4.dat
filter_workers(arr, cnt, odd, &oddnum, even, &evennum);
if( save_file(odd, oddnum, filename[2]) == 0 )
printf("职工号为单数的记录已成功保存至文件 - %s\\n", filename[2]);
if( save_file(even, evennum, filename[3]) == 0 )
printf("职工号为双数的记录已成功保存至文件 - %s\\n", filename[3]);
//5.读取worker3.dat和worker4.dat并显示
clear_worker_array(odd, oddnum);
oddnum = 0;
if( load_file(odd, &oddnum, filename[2]) == 0 )
printf("载入文件 - %s\\n", filename[2]);
show_data(odd, oddnum);
clear_worker_array(even, oddnum);
evennum = 0;
if( load_file(even, &evennum, filename[3]) == 0 )
printf("载入文件 - %s\\n", filename[3]);
show_data(even, evennum);
return 0;
为了测试方便,此处的宏只指定了5个职工的信息,若要达到你要求的,直接改成10即可。运行结果如下:
完整代码请参考附件 - worker_manager.c
:by never715
结构体中存储各个职工的信息
然后对该结构体数组进行操作
保存到文件即将结构体数组保存到文件
显示时从文件读取数据到数组中
然后再遍历数组输出即可
如果代码不想自己写的话
我可以有偿代劳 参考技术B c语音。
C语言职工信息管理系统
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月30日 * 版本号:V1.0 * 问题描述:模块化设计,分别有录入信息,删除信息,浏览信息,查询信息,修改信息,采用链表存储数据,用文件保存职工信息等 * 程序输入:无 * 程序输出:见运行结果 */
在此博文中的程序可能会有一些BUG,如想获取此程序的工程压缩包,请关注微信公众号:Worldhello,在后台回复:职工信息管理系统,即可获得压缩包与完整的程序设计报告。另外回复:银行储蓄,可获得通过使用XML文件存取用户信息的C++程序。后台获得的程序BUG相对来说会比较少,因为一直在优化。
#include "stdio.h" #include "stdlib.h" #include "string.h" #include "malloc.h" struct WORK{ int Number; //工号 char Name[32]; //姓名 char Sex[2]; //性别 int Old; //年龄 char Edu[20]; //学历 float Salary; //工资 char Address[64]; //住址 long Tel; //电话 struct WORK *next; }; WORK* worker=NULL; void Help(); //帮助 void saveWorToFile(); //保存职工信息到文件 void addworker(WORK *wor); //添加职工信息(链表操作) void delWork(char* name); //删除职工信息(链表操作) void delworker(); //删除职工信息 void add(); //录入职工信息 void lookthrough(); //浏览职工信息 void query(); //查询职工信息 void Reviseworker(); //修改职工信息 int menu_select(); //菜单界面 void readWorkerput (); //从文件中读取职工信息 int main() { readWorkerput (); char choose; for(;;) { choose=menu_select(); if(choose==1) add(); else if(choose==2) lookthrough(); else if(choose==3) query(); else if(choose==4) delworker(); else if(choose==5) Reviseworker() ; else if(choose==6) Help(); else break; } return 0; } int menu_select() //菜单函数定义 { char c; printf("===============================================================\n"); printf("|----------------------职工信息管理系统 v1.0------------------|\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("***************************************************************\n"); printf(" 请输入(1-7)进行操作:\n"); do{ scanf("%c",&c); }while(c<'1'||c>'7'); return c-48; } /****************************************************************************************************************************/ void add() //1、录入职工信息函数定义 { WORK *p; p=worker; int tmp=1; int number; char name[32]; char sex[2]; int old; char edu[20]; float salary; char address[64]; long tel; printf("输入工号:"); scanf("%d",&number); while(p!=NULL) { if(p->Number ==number) { printf("该工号已存在!\n"); tmp =2; } p=p->next; } if(tmp==2) return ; printf("输入姓名:"); //姓名 scanf("%s",name); printf("输入性别:"); //性别 scanf("%s",sex); printf("输入年龄:"); //年龄 scanf("%d",&old); printf("输入学历:"); //学历 scanf("%s",edu); printf("输入工资:"); //工资 scanf("%f",&salary); printf("输入地址:"); //地址 scanf("%s",address); printf("输入电话:"); //电话 scanf("%ld",&tel); WORK *n=(WORK *)malloc(sizeof(WORK)); n->Number=number; strcpy(n->Name,name); strcpy(n->Sex,sex); n->Old=old; strcpy(n->Edu,edu); n->Salary=salary; strcpy(n->Address,address); n->Tel=tel; addworker(n); saveWorToFile(); printf("录入成功!\n"); } void addworker(WORK *wor) { WORK *p; if(worker==NULL) { worker =wor; wor->next=NULL; } else { p = worker; while(p) { if(p->next==NULL) { p->next =wor; wor->next =NULL; } p= p->next; } } } /***************************************************************************************************************************/ void lookthrough() //2、浏览信息 { WORK * p; p=worker; if(p!=NULL) { printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n"); while(p!=NULL) { printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); p=p->next; } } else printf("暂无职工信息!\n"); } /***************************************************************************************************************************/ void query() //3、查询职工信息 { int num; int tmp=1; WORK * p; p=worker; int ju; int nianling; char xueli[20]; int judge; printf(" 精确查找请按--1\n 批量查找请按--2\n"); scanf("%d",&judge); switch(judge) { case 1: printf("请输入您要查询的工号:\n"); scanf("%d",&num); while(p!=NULL) { if(p->Number==num) { tmp =3; break; } p=p->next; } if(tmp==3) { printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n"); printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); } else printf("工号不存在!\n"); break; case 2: printf(" 查询同一年龄职工信息请按------1\n 查询同一学历职工信息请按------2\n"); scanf("%d",&ju); if(ju==1) { printf("请输入年龄:\n"); scanf("%d",&nianling); if(p!=NULL) { printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n"); while(p!=NULL) { if(p->Old==nianling) { printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); } p=p->next; } } else printf("暂无职工信息!"); } else if(ju==2) { printf("请输入学历:"); scanf("%s",xueli); if(p!=NULL) { while(p!=NULL) { if(!strcmp(p->Edu,xueli)) { printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); } p=p->next; } } else printf("暂无职工信息!"); } } } /***************************************************************************************************************************/ void delworker() //4、删除职工信息 { WORK * p; p=worker; int n; int tem=1; char panduan[4]; printf("请输入要删除的工号:\n"); scanf("%d",&n); printf("确定删除%d?(yes/no)\n",n); scanf("%s",panduan); if(strcmp("no",panduan)==0) return; else { while(p!=NULL) { if(p->Number==n) { tem =2; break; } p=p->next; } } if(tem==2) delWork(p->Name); saveWorToFile(); } void delWork(char *name) { WORK *p,*pre; if (worker==NULL) { return; } p =pre=worker; while(p) { if (!strcmp(p->Name,name)) { if(p==worker) { worker = worker->next; free(p); printf("删除成功!\n"); p=NULL; } else { pre->next =p->next; free(p); printf("删除成功!\n"); p=NULL; } } else { pre =p; p= p->next; } } } /***************************************************************************************************************************/ void Reviseworker() //修改职工信息 { char name[32]; char sex[2]; int old; char edu[20]; float salary; char address[64]; long tel; WORK * p; p=worker; int num; int a=1; char xueli[20]; float money; int judge; printf("选择精确修改请按1\n选择批量修改请按2\n"); scanf("%d",&judge); switch(judge) { case 1: printf("请输入被修改职工工号:\n"); scanf("%d",&num); if(p==NULL) { printf("暂无职工信息录入!\n"); return ; } while(p) { if(p->Number==num) { printf("此职工原来信息如下:\n"); printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n"); printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); printf("输入姓名:"); //姓名 scanf("%s",name); printf("输入性别:"); //性别 scanf("%s",sex); printf("输入年龄:"); //年龄 scanf("%d",&old); printf("输入学历:"); //学历 scanf("%s",edu); printf("输入工资:"); //工资 scanf("%f",&salary); printf("输入地址:"); //地址 scanf("%s",address); printf("输入电话:"); //电话 scanf("%ld",&tel); strcpy(p->Name,name); strcpy(p->Sex,sex); p->Old=old; strcpy(p->Edu,edu); p->Salary=salary; strcpy(p->Address,address); p->Tel=tel; saveWorToFile(); //保存修改后信息 printf("修改成功!\n"); a=0; break; } p=p->next; } if(a==1) printf("没有此职工信息!\n"); break; case 2: printf("根据学历批量修改职工工资\n"); printf("请输入所要批量修改的职工学历和所加工资:\n"); printf("学历:"); scanf("%s",xueli); printf("所加工资:"); scanf("%f",&money); if(p==NULL) { printf("暂无职工信息录入!\n"); return ; } while(p) { if(!strcmp(p->Edu,xueli)) { p->Salary=p->Salary+money; } p=p->next; } printf(" 修改成功!"); saveWorToFile(); break; } } /**************************************************************************************************************************/ void Help() //使用帮助 { system("cls"); printf("该系统用来存储职工成员信息!\n\n"); printf("使用说明:\n查询信息有两种方式,分为精确查找(凭借学号),批量查找(凭借年龄和学历)\n"); printf("修改信息有两种方式,分为精确修改(个人信息的修改)和批量修改(同一学历的工资修改)\n"); printf("学历格式:小学、初中、高中、中专、大专、大学\n\n\n\n"); printf("项目开发:常轩 技术支持:Worldhello 微信公众号:Worldhello\n\n\n\n "); char a[10]; printf("按任意键,回车后继续........\n"); scanf("%s",a); system("cls"); } /***************************************************************************************************************************/ void saveWorToFile() //保存职工信息到文件 { FILE *fp; WORK*p; p = worker; if((fp=fopen("worker.txt","w"))==NULL) { printf("Can not open the file,press any key exit!"); exit(1); } // fprintf(fp,"工号 姓名 性别 年龄 学历 工资 地址 电话\n"); while(p) { fprintf(fp,"%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel); p=p->next; } fclose(fp); } /***************************************************************************************************************************/ void readWorkerput () //运行前把文件内容读取到电脑内存 { FILE *fp; fp=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt if(fp==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int i=0; while(!feof(fp)) { WORK *p=(WORK *)malloc(sizeof(WORK)); fscanf(fp,"%d %s %s %d %s %f %s %ld",&p->Number,p->Name,&p->Sex,&p->Old,p->Edu,&p->Salary,p->Address,&p->Tel); i++; } fclose(fp); FILE *FP; FP=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt if(FP==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int b=i-1; int j=1; if(i==1) { fclose(FP); } else { while(!feof(FP)) { WORK *n=(WORK *)malloc(sizeof(WORK)); fscanf(FP,"%d %s %s %d %s %f %s %ld",&n->Number,n->Name,&n->Sex,&n->Old,n->Edu,&n->Salary,n->Address,&n->Tel); //printf("%d %s %s %d %s %f %s %ld\n",n->Number,n->Name,n->Sex,n->Old,n->Edu,n->Salary,n->Address,n->Tel); addworker(n); n=n->next; if(j==b) break; j++; } fclose(FP); //----关闭文件----- } }
以上是关于用c语言写一个职工工资管理程序的主要内容,如果未能解决你的问题,请参考以下文章