c语言人事工资管理系统源程序
- 格式:pdf
- 大小:91.08 KB
- 文档页数:9
基于C的企业员工管理系统一、引言企业员工管理系统是指集成了管理员、员工和积极性评分三个角色的信息系统。
管理员可以使用该系统进行员工信息管理、新增员工、离职员工管理、调薪管理、考勤管理等操作,员工则可以查看个人信息、调整照片、查询工资条等操作,积极性评分用来评估员工的绩效和动力水平。
本文将介绍一款基于C语言的企业员工管理系统的设计与实现。
二、需求分析1.管理员模块管理员可以通过该系统管理员工信息,包括但不限于员工基本信息、入职记录、离职记录、考勤记录、薪酬记录等。
管理员可以通过该系统对员工的信息进行查询、修改、添加和删除等操作。
2.员工模块员工模块主要用于展示员工个人信息,包括但不限于员工编号、姓名、性别、所属部门、职位等。
员工可以查看个人信息、调整照片、查询工资条等操作。
3.积极性评分模块积极性评分模块主要用于评估员工的职业动力水平和工作绩效,管理员可以通过该系统对员工的绩效和动力水平进行评估,从而能够制定相应的奖励措施。
三、系统设计1.数据库设计(1)员工表员工表主要包括员工编号、姓名、性别、入职时间、所属部门、职位等信息。
(2)离职表离职表主要包括员工编号、离职时间等信息。
(3)考勤表考勤表主要包括员工编号、考勤时间等信息。
(4)薪酬表薪酬表主要包括员工编号、基本工资、奖励等信息。
(5)管理员表管理员表主要包括管理员编号、管理员用户名、管理员密码等信息。
2.系统架构(1)客户端客户端主要包括数据库连接、查询、添加、修改、删除、打印等功能。
(2)数据库数据库主要存储员工信息、部门信息、薪酬信息、管理员信息等。
(3)服务器服务器主要用于数据传输和处理,实现一定程度上的数据中心化,方便管理员和员工查看自己的信息。
四、系统实现1.客户端实现客户端主要包括用户登录、数据查询、员工添加、修改、删除等功能。
用户登录:管理员登录后进入主界面,可以选择员工信息管理、考勤管理、薪酬管理等功能。
数据查询:管理员可以通过系统查询员工信息、部门信息、考勤记录、薪酬记录等。
1.课程论文题目职工信息管理系统程序设计一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
2.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
3.功能模块图5.算法设计1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
2浏览模块【分析】该模块的功能是浏览职工的全部信息3排序模块4查询模块【分析】该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。
流程图如下:5修改模块【分析】该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。
显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。
流程图如下:6.程序代码#include<stdio.h>#define N 50struct worker{char id[50];char name[20];char sex[10];char age[10];char edu[20];char salary[10];char address[20];char tel[20];}worker[N];void save(int n) //保存函数,保存n个记录{ FILE *fp;int i;if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件{ printf("\nCannot open file\n");}for(i=0;i<n;i++)if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() //加载函数{ FILE *fp;int i;if((fp=fopen("worker.txt","rb"))==NULL){printf("\nCannot open file\n");return NULL;}for(i=0;!feof(fp);i++)fread(&worker[i],sizeof(struct worker),1,fp);fclose(fp);return(i-1);}void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n 表示比较到第n个职工{ int j,k,w1;do{w1=0;printf("工号:");scanf("%s",worker[i].id);for(j=0;worker[i].id[j]!='\0';j++)if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字{puts("请重新输入!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) //比较到第N个职工if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同{puts("请重新输入!\n");w1=1;break;}}while(w1==1);}void input(int i) //输入一个记录的函数{ no_input(i,i);printf("姓名:");scanf("%s",worker[i].name);printf("性别:");scanf(" %s",&worker[i].sex);printf("年龄:");scanf("%s",&worker[i].age);printf("工资:");scanf("%s",worker[i].salary);printf("学历:");scanf("%s",&worker[i].edu);printf("住址:");scanf("%s",worker[i].address);printf("电话:");scanf("%s",worker[i].tel);}void printf_one(int i) //显示一个记录的函数{printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",worker[i].id,worker[i].name,worker[i].sex,worker[i].age,worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel); }void printf_back() //一个任务结束后选择是好似浏览还是返回{ int k,w;printf("\n\n\tSuccessful^-^.\n\n");printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1)browse();else menu();}modify_data(int i,int n) //修改函数{ int c,w1;do{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资6).学历 7).地址 8).电话 9).取消");printf("请选择?:[ ]\b\b");scanf("%d",&c);if(c>9||c<1){puts("\nChoice error!please again!");getchar();}}while(c>9||c<1);do{switch(c){case 1:no_input(i,n);break;case 2:printf("name:");scanf("%s",worker[i].name);break;case 3:printf("sex:");scanf("%s",worker[i].sex);break;case 4:printf("age:");scanf("%s",worker[i].age);break;case 5:printf("salary:");scanf("%s",worker[i].salary);break;case 6:printf("edu:");scanf("%s",worker[i].edu);break;case 7:printf("address:");scanf("%s",worker[i].address);break;case 8:printf("tel:");scanf("%s",worker[i].tel);break;case 9:menu();break;}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).否,重新修改3).不保存退出[ ]\b\b");scanf("%d",&w1);if(w1==1)save(n);}while(w1==2);return(w1);}printf_face() //显示数据结构项目{ printf("\n\t工号姓名性别年龄工资学历地址电话号码\n"); }void enter() //输入模块{ int i,n;printf("输入多少个职工信息(0-%d):",N-1);scanf("%d",&n);printf("\n 请输入职工信息\n\n");for(i=0;i<n;i++)input(i);if(i!=0)save(n);printf_back();}browse() //浏览模块{ int i,j,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\n按任意键显示下一页...");getch();puts("\n\n");}printf_one(i);}printf("\t这里有 %d 条记录.\n",n);printf("\n按任意键返回...");getch();menu();}modify() //修改模块{struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //目的是分屏显示{printf("\n\n记住要修改的工号.按任意键显示下一页");getch();puts("\n\n");}printf_one(i); //调用显示一个记录的函数}do{printf("\n\n输入要修改的职工工号! 工号:");scanf("%s",s.id); //输入要修改的IDfor(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.id,worker[i].id)==0){k=i; //找到要修改的记录s=worker[i]; //把worker[i]备份,以便恢复}if(k==-1)printf("\n\n未找到请重输");}while(k==-1); //当k=-1表示没有找到printf_face(); //调用显示数据结构项目的函数printf_one(k); //调用显示一个记录的函数w1=modify_data(k,n); //修改记录并返回保存控制值w1,w1=1表示用户已确认修改if(w1==1){printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");scanf("%d",&w0);w2=1; //用来控制保存,使w2=1是标记已有过修改}else{w0=0;if(w2==1)worker[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}search() //查询模块{ int c,w1;do{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回"); printf("Which you needed?:[ ]\b\b");scanf("%d",&c);if(c>3||c<1){ puts("\nchoice error!please again!");getchar();}}while(c>3||c<1);{switch(c){case 1:search1();break;case 2:search2();break;case 3:menu();break;}}}search1() //按工号查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n输入要查询的工号! id:");scanf("%s",s.id);printf_face();for(i=0;i<n;i++)if(strcmp(s.id,worker[i].id)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search1();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}search2() //按学历查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n请输入你要查询的学历:\n");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,worker[i].edu)==0){k=i;printf_one(k);}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search2();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}menu(){int n,w1;do{puts("\t\t*******************菜单*******************\n\n");puts("\t\t\t\t1.录入职工信息");puts("\t\t\t\t2.浏览职工信息");puts("\t\t\t\t3.查询职工信息");puts("\t\t\t\t4.修改职工信息");puts("\t\t\t\t5.退出");puts("\t\t****************************************\n\n");printf("请选择(1~5): [ ]\b\b");scanf("%d",&n);if(n<1||n>5) //对选择的数字作判断{w1=1;getchar();}else w1=0;} while(w1==1);switch(n){case 1:enter();break; //录入 case 2:browse();break; //浏览 case 3:search();break; //查询 case 4:modify();break; //修改 case 5:exit(0); //退出}}main(){menu();}7.程序运行结果下面是各个模块的的界面截图(1)、主菜单(2)、输入模块(3)、浏览模块(3)、查找模块(4)、修改模块8.编程中遇到的困难及解决方法温故而知新,可以为师矣。
工资管理系统 课程设计 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语言编程的核心知识,并能够将其应用于工资管理系统的设计与实现。
郵電大学编译原理程序设计报告题目:词法分析器院系名称:计算机学院专业名称:计算机科学与技术班级: 1006学生: *****学号(8位): ************一. 设计目的1.强化上机动手能力,在理论和实践的基础上进一步巩固课程学习的容,掌握工程化软件2.3.二.1.2.3. 512.各个模块详细的功能描述。
int zimu(char in); //字母为1int shuzi(char in); //数字为2int fengefu(char in); //分隔符为3int yunsuanfu(char in); //运算符为4int guanjianzi(char in[]); // 关键字为5void show(char a[],int i); //显示void panduan(char a[]); //判断属于哪类void output(); //为了显示好看四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1.2.3.4.5.6.{int choice,t;t=read_file();if(t==0){printf("无教师信息,请按任意键返回主菜单输入:\n");getch();}do{system("cls");printf("\n\n\n ********教师工资信息管理系统********\n\n");printf(" 1.输入教师工资信息\n\n");printf(" 2.输出教师工资信息\n\n");printf(" 3.查询教师工资信息\n\n");printf(" 4.排序教师工资信息\n\n");printf(" 5.删除教师工资信息\n\n");printf(" 6.修改教师工资信息\n\n");printf(" 7.添加教师工资信息\n\n");printf(" 0.退出系统\n\n");printf(" 请选择(0-7)_\n\n");scanf("%d",&choice); //*选择代码可执行相应的程序,否则退出*//if(choice==1){t=input(t);}switch(choice){case 2: output(t); break;case 3: search(t); break;case 4: sort(t); break;case 5: t=del(t); break;case 6: modify(t); break;case 7: t=append(t ); break;case 0: break;}}while(choice!=0);save_file (t);printf("\n以上教师工资信息已保存!-(文件名:school.txt)\n");getch();}}五.测试数据及运行结果1.正常测试数据和运行结果2.异常测试数据及运行结果六.调试情况,设计技巧及体会1.改进方案本程序基本符合本次实验的基本要求,实现了数据的录入、存储、读写、修改、删除、查询、添加、排序及输出等功能。
课程设计报告学院:天津理工大学华信软件学院专业名称:软件工程课程设计科目C语言课程设计所在班级:学生学号:学生姓名:指导教师:完成时间:课程设计成绩评定表目录设计任务与目标 (4)方案设计与论证 (6)程序框图或流程图,程序清单与调用关系 (9)全部源程序清单 (11)程序运行结果测试与分析28结论与心得参考资料311教师工资管理系统一、设计任务与目标任务:教师工资管理系统每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。
注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资-合计扣款。
A、教师信息处理(1)输入教师信息(2) 插入(修改)教师信息:(3) 删除教师信息:(4) 浏览教师信息:提示:具体功能及操作参考题1。
B、教师数据处理:(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2) 教师实发工资、应发工资、合计扣款计算。
提示:计算规则如题目。
(3) 教师数据管理提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件(4) 教师数据查询:提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
1(5) 教师综合信息输出提示:输出教师信息到屏幕。
案例论证:1.完成此设计的目的意义此题目能让我综合的考虑设计一个信息处理系统,要求设计出主函数,确定调用函数,成员的函数设计。
2.目标教师数据处理:(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2) 教师实发工资、应发工资、合计扣款计算。
计算规则如题目。
(3) 教师数据管理输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件(4) 教师数据查询:输入教师号或其他信息,即读出所有数据信息,并显示出来。
课程设计报告公司人员管理系统课程:面向对象课程设计班级:11511姓名:吴小蛟指导老师:清华教授2012年 6月12日一、设计题目(问题)描述和要求1.题目:公司人员管理系统2.问题描述:某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
要求:(1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
(2)程序对所有人员有提升级别的功能(3)月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取销售提成。
(4)能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息二、系统分析与模块设计根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。
确定程序至少应该具备如下功能:“查询人员”、“增加人员”、“删除人员”、“数据存盘”基本模块。
系统既然具有“数据存盘”功能-人员数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用、避免数据重复录入。
考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名:。
做为一个完整系统,除了具有增加人员,删除人员信息模块,还应该具有修改人员相关信息的功能,所以本系统设计时考虑增加“修改人员”模块。
考虑到根据编号查找人员信息功能在“删除人员”、“修改人员”等模块都使用,所以可以考虑设置为一个模块。
考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
这样就要求人员编号在增加人员时自动生成(增加1)且不重复。
根据这个要求,可以考虑设置一个全局量:“当前最大编号”,每增加一个人员,当前最大编号自动增1,然后新增加人员使用这个编号。
为了保证系统能记忆这个编号,可以使用一个数据文件保存当前这个编号。
C++_工资管理系统_源代码(总11页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除#include <>#include <>#include <>#include <>#define TITLE "\n 月份工号姓名应发工资各种折扣实发工资\n" #define DATA " %2d %4ld %-10s % % %\n",p1->month,p1->num,p1->name,p1->should_pay,p1->rebate,p1->actual_paytypedef struct pay{long num;short month;char name[20];float gw,jn,zw,zl,jt,yj;float should_pay;float fz,gj,sd,others;float rebate;float actual_pay;struct pay *next;}PAY;FILE *fp;PAY *p1=NULL,*p2=NULL,*head=NULL;void menu();PAY *input();void output();void save(PAY *head);PAY *open();PAY *insert();void search();PAY *del();PAY *revise();/*主程序模块*/void main(void){short sel;do{menu();scanf("%d",&sel);switch(sel){case 1:head=input(); 建工资档案\n");printf("\t\t\t\t2.新增工资信息\n");printf("\t\t\t\t3.修改工资信息\n");printf("\t\t\t\t4.删除工资信息\n");printf("\t\t\t\t5.查找工资信息\n");printf("\t\t\t\t6.分类信息列表\n");printf("\t\t\t\t7.保存信息\n");printf("\t\t\t\t0.退出\n");printf("\n\n\n\n\n\n\n\n");}/*输入模块*/PAY *input(){short n=1;p1=(PAY*)malloc(sizeof(PAY));if(p1==NULL){printf("内存不足,无法创建链表!");getch();}printf("\n请输入第%d位职工的信息(以工号为0结束):\n",n);printf(" 工号:");scanf("%d",&p1->num);if(p1->num==0){printf("按任意键返回!");getch();free(p1);return 0;}getchar();printf(" 姓名:");gets(p1->name);printf(" 工资月份:");scanf("%d",&p1->month);printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj); printf(" 房租扣款,公积金,水电费,其它扣款:\n");scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;p1->actual_pay=p1->should_pay-p1->rebate;while(p1!=NULL){if(n==1)head=p1;elsep2->next=p1;n++;p2=p1;p1=(PAY*)malloc(sizeof(PAY));if(p1==NULL){printf("内存不足,无法创建链表!");getch();}printf("请输入第%d位职工的信息(以工号为0结束):\n",n);printf(" 工号:");scanf("%d",&p1->num);getchar();if(p1->num==0){p1=NULL;break;}printf(" 姓名:");gets(p1->name);printf(" 工资月份:");scanf("%d",&p1->month);printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj); printf(" 房租扣款,公积金,水电费,其它扣款:\n");scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;p1->actual_pay=p1->should_pay-p1->rebate;}p2->next=NULL;部清单\n");printf("\t\t2.按月输出\n");printf("\t\t3.按工资段输出\n");printf("\t\t0.返回\n");scanf("%d",&sel);}while(sel!=1&&sel!=2&&sel!=3&&sel!=0);head=open();if(head==NULL)return;elseswitch(sel){case 1:printf("\n\t\t\t ******全部清单******\n");printf(TITLE);p1=head;do{printf(DATA);p1=p1->next;}while(p1!=NULL);break;case 2:flag=0;printf("输入要查的月份:");scanf("%d",&month);printf("\n\t\t\t******第%d月工资清单******\n",month); printf(TITLE);p1=head;do{if(p1->month==month){printf(DATA);p1=p1->next;flag=1;}elsep1=p1->next;}while(p1!=NULL);if(flag==0)printf("没有该月清单\n");break;case 3:flag=0;printf("输入最低工资:");scanf("%f",&min);printf("输入最高工资:");scanf("%f",&max);printf("\n\t\t ******%到%工资的名单******\n",min,max); printf(TITLE);p1=head;do{if(p1->actual_pay>min&&p1->actual_pay<max){printf(DATA);p1=p1->next;flag=1;}elsep1=p1->next;}while(p1!=NULL);if(flag==0)printf("没有该工资段的职工\n");break;case 0:break;}}while(sel!=0);}/*保存文件*/void save(PAY *head){short write;fp=fopen("","w");if(fp==NULL){printf("创建文件失败!");getch();return;}p1=p2=head;while(p1!=NULL){write=fwrite(p1,sizeof(PAY),1,fp);if(!write){printf("无法写入文件!");getch();return;}p1=p1->next;}fclose(fp);printf("成功存盘!");getch();}/*打开文件*/PAY *open(){short n=1,read;fp=fopen("","r");if(fp==NULL){printf("无法打开档案文件!");getch();return NULL;}if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL) {printf("内存不足!");getch();return NULL;}read=fread(p1,sizeof(PAY),1,fp);if(!read){printf("文件读取出错!1");getch();return NULL;}if(p1->next==NULL)head=p1;else{do{if(n==1)head=p1;elsep2->next=p1;n++;p2=p1;if((p1=(PAY*)malloc(sizeof(PAY)))==NULL){printf("内存不足!");getch();return NULL;}read=fread(p1,sizeof(PAY),1,fp);if(!read){printf("文件读取出错!2");getch();return NULL;}}while(p1->next!=NULL);p2->next=p1;}return head;fclose(fp);}/*插入模块*/PAY *insert(){PAY *p3=NULL;char sel;head=open();if(head==NULL)return NULL;elsedo{printf("请输入要插入的职工信息:\n"); p3=(PAY*)malloc(sizeof(PAY));if(p3==NULL){printf("内存不足,无法创建链表!"); getch();}printf(" 工号:");scanf("%d",&p3->num);getchar();printf(" 姓名:");gets(p3->name);printf(" 工资月份:");scanf("%d",&p3->month);printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");scanf("%f,%f,%f,%f,%f,%f",&p3->gw,&p3->jn,&p3->zw,&p3->zl,&p3->jt,&p3->yj); printf(" 房租扣款,公积金,水电费,其它扣款:\n");scanf("%f,%f,%f,%f",&p3->fz,&p3->gj,&p3->sd,&p3->others);p3->should_pay=p3->gw+p3->jn+p3->zw+p3->zl+p3->jt+p3->yj;p3->rebate=p3->fz+p3->gj+p3->sd+p3->others;p3->actual_pay=p3->should_pay-p3->rebate;p1=head;while(p1!=NULL){p2=p1;p1=p1->next;}p2->next=p3;p3->next=NULL;printf("成功插入,是否继续?是(Y)否(N)\n");sel=getch();}while(sel=='Y'||sel=='y');printf("\n任意键返回,并存盘……\n");getch();return head;}/*查找模块*/void search(){short sel;long num;char name[20],choose;head=open();if(head==NULL)return;elsedo{do{printf("\n选择查找方式:\n");printf("\t\t1.按工号查找\n");printf("\t\t2.按姓名查找\n");scanf("%d",&sel);getchar();}while(sel!=1&&sel!=2);switch(sel){case 1:printf("输入要查的工号:");scanf("%ld",&num);break;case 2:printf("输入要查的姓名:");gets(name);break;}p1=head;while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) 工号删除\n");printf("\t\t2.按姓名删除\n");scanf("%d",&sel);getchar();}while(sel!=1&&sel!=2);switch(sel){case 1:printf("输入要删除的工号:");scanf("%ld",&num);break;case 2:printf("输入要删除的姓名:");gets(name);break;}p1=head;if((p1->num==num)||strcmp(p1->name,name)==0){head=p1->next;printf("删除信息成功!");}else{while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) {p2=p1;p1=p1->next;}if((p1->num==num)||strcmp(p1->name,name)==0){p2->next=p1->next;free(p1);printf("\n删除信息成功!\n");}elseprintf("\n没有该信息!\n");}printf("是否继续?是(Y)否(N)\n"); choose=getch();}while(choose=='Y'||choose=='y');printf("任意键返回,并存盘……");getch();return head;}/*修改模块*/PAY *revise(){short sel;long num;char name[20],choose;head=open();if(head==NULL)return NULL;elsedo{do{printf("\n查找要修改的对象:\n");printf("\t\t1.按工号查找\n");printf("\t\t2.按姓名查找\n");scanf("%d",&sel);getchar();}while(sel!=1&&sel!=2);switch(sel){case 1:printf("输入要查的工号:");scanf("%ld",&num);break;case 2:printf("输入要查的姓名:");gets(name);break;}p1=head;while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) //用成p1!=NULL有问题?p1=p1->next;if((p1->num==num)||strcmp(p1->name,name)==0){printf("您要修改的原始信息如下:\n");printf(TITLE);printf(DATA);printf("\n将上述信息改为如下信息:\n");printf(" 工号:");scanf("%d",&p1->num);getchar();printf(" 姓名:");gets(p1->name);printf(" 工资月份:");scanf("%d",&p1->month);printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj); printf(" 房租扣款,公积金,水电费,其它扣款:\n");scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;p1->actual_pay=p1->should_pay-p1->rebate;}elseprintf("你要修改的信息不存在!\n");printf("是否继续?是(Y)否(N)\n");choose=getch();}while(choose=='Y'||choose=='y');printf("任意键返回,并存盘……");getch();return head;}。
一.设计需求说明一、职工工资管理系统功能设计要求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,若文件不存在,打印“打开失败并退出。
若存在,则通过循环语句将输入到结构体数组的数据逐个输入磁盘。
《程序设计基础》课程设计报告题目: 员工工资管理系统院(系): 信息科学与工程学院专业班级:学生姓名:学号:指导教师: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 系统功能设计主函数和子函数:系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。
#include<stdio.h>#include<string.h>#define N 100typedef struct worker{char name[20];long number;int y,m,d;char zhicheng[20];char bumen[20];float salary;}Worker;void Display(){printf("\n\n\n\t\t***************职工管理系统*************\n\n");printf("\t\t\t0.退\t\t 出\n");printf("\t\t\t1.新\t\t 建\n");printf("\t\t\t2.显\t\t 示\n");printf("\t\t\t3.查\t\t 询\n");printf("\t\t\t4.删\t\t 除\n\n");}/*******1.新建**********/void Add( Worker w[],int n){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d: ",i+1);scanf("%s %ld %d %d %d %s %s %f",w[i].name,&w[i].number, &w[i].y,&w[i].m,&w[i].d,w[i].zhicheng,w[i].bumen,&w[i].salary);}}/*******2.显示**********/void Browse( Worker w[],int n ){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d:",i+1);printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);}}/*******3.1查询姓名**********/void SearchName( Worker w[],int n ){char name[20];int i;printf("\t\t\t输入要查询的名字:");scanf("%s",name);for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\t\t\t查无此人!");}/*******3.2查询工号**********/void SearchNumber( Worker w[],int n ){long number;int i,k=0;printf("\t\t\t输入要查询的工号:");scanf("%ld",&number);for( i = 0; i < n; i ++ ){if( w[i].number == number ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\n\t\t\t查无此人!");}/*******3.查询**********/void Search( Worker w[],int n ){int x;printf("\t\t\t选择查询方式(1.姓名/2.工号):");scanf("%d",&x);printf("\n");switch(x){case 1:SearchName(w,n);break;case 2:SearchNumber(w,n);break;}}/*******4.删除**********/void Delete( Worker w[],int n ){char name[20];int i,j;printf("\t\t\t输入要删除的名字:");scanf("%s",name);printf("\n");for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\t\t\t将删除以下信息:\n\n");printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("\t%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i]. m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);for( j = i;j<n-1;j++ ){w[j] = w[j+1];}printf("\t\t\t成功删除!\n\n");return;}}printf("\t\t\t查无此人!");}void Run( Worker w[],int n ){int choice;do{Display();printf("\t\t\t输入你的选择:");scanf("%d",&choice);printf("\n");switch( choice ){case 0:break;case 1:Add(w,n);break;case 2:Browse(w,n);break;case 3:Search(w,n);break;case 4:Delete(w,n);n--;break;}}while(choice);}void main(){int n;Worker w[N];printf("\t输入职员个数:");scanf("%d",&n);Run(w,n);}友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。
员工工资管理系统———C语言程序设计课程设计说明书指导教师:***专业班级:应化082设计者:李响周金娟解敏李伟生] 设计时间: 2 0 0 9年 9月员工工资管理系统一、需求分析随着计算机的飞速发展,它的应用已经十分广泛,它在人们的生产、生活、工作和学习中发挥着重要的作用。
例如一个现代化的公司,拥有数千名的员工,那么如何管理这么庞大的职工信息档案呢?这时,开发一个功能完善的职工信息管理系统就必不可少了。
从员工的信息的查询到管理实现了自动化的模式,从而提高了工作效率和减少工作中的出错率,对公司内部的员工管理更加方便。
系统是为公司财会部门设计的。
主要管理的数据包括:员工姓名、年龄、性别、员工号、实发。
该系统具有的功能是:根据职工号对职工的信息进行录入、查询、删除、修改、追加、统计、等。
对各功能模块的界面采用菜单显示方式。
本系统具有通用性,即可广泛适用于多单位,多人数,多功能的使用,并且系统采用模块化设计,主体为一个主函数,分别可以调用其他模块,利用不同子模块具有的不同功能,综合完成系统功能,不但主体与子模块间有相互联系,各个子模块间也有相互作用,从而实现了预期的功能。
二、系统的软硬件环境1、硬件环境:一般来说586电脑就可以提供并支持系统的使用及运行,此外,若想打印或成稿还需要使用打印机; U盘、软盘也是程序的必要载体。
2、软件环境:MS-DOS或Windows环境下安装Turbo C语言系统,安装完毕后即可使用,而且要用到UCDOS。
三、系统功能1、系统总体框图四、模块设计分析:此程序中输入模块:该模块是实现对员工姓名、年龄、性别、员工号、工资的录入并保存到文件“yuangong”中。
查询模块:实现按员工号查询每个员工的姓名、年龄、性别、实发,姓名、员工号、性别、年龄、实发;输入错误员工号,显示查无此人;输入错误字符显示“WRONG”首先定义一个变量X;进入循环体While;当X=1时,执行函数dele_num();否则,输出”Wrong!”;如果X=0,则跳出While循环。
西安郵電學院高级语言课程设计报告题目:工厂员工管理系统系部名称:电信系专业名称:科技班级:0701班内序号:19学生姓名:潘鸯鸯指导教师:黄茹时间:2008年6月10日至2008年6月20日实验题目:工厂员工管理系统一、实验目的1.熟悉c语言的编译连接和运行过程。
2.掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。
3.掌握if语句及switch语句的运用方法及嵌套应用方法。
4.掌握实现循环结构的三种语句while、do-while.、for 的使用。
5.掌握函数的定义方法和调用方法。
6.能够采用模块化思想调试程序。
二.实验内容1.编写程序并进行调试运行。
2.输入员工信息,并保存于文件。
每个员工包含信息如:工作证号、姓名、性别、工作车间、家庭住址,出生日期,进厂日期,工资信息等。
3.对已存入的员工信息进行更新操作,包括添加一个员工信息、删除某个员工信息和修改某个员工信息。
4.通过输入姓名、工作证号、家庭住址的方式查询员工信息。
5.可通过输入工作证号统计出某个员工的工资情况,也可输入工厂的原料费用、其他费用和工厂的毛收入统计出工厂的赢利情况。
6.对已存入的员工工资信息进行排序操作,可通过选择基本工资排序或其他工资排序来查看员工工资的排序情况。
7.最后输出员工信息,供需要时打印。
二、需求分析1.该程序可用于对员工的基本信息的存储、更新、查询、统计、排序、输出操作,以实现对工厂员工的管理。
2.其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个员工信息,也可对个别员工信息进行适当的删除或修改。
以便随时更新员工信息。
3.程序中设计的查询功能可根据需要从若干数据中查询某个员工信息,并且可根据三种不同的方法查询:按工作证号查询、按姓名查询和按家庭住址查询。
以满足不同的需要。
4.程序中的统计功能包括:基本工资统计,其他工资统计,工厂赢利情况统计,可根据需要查看某个员工的工资信息或工厂的赢利信息。
基于C职工信息管理系统设计与实现毕业论文1. 内容描述 1本毕业论文以C职工信息管理系统的设计与实现为主题,旨在解决企事业单位在人力资源管理过程中所面临的信息管理难题。
通过对现有职工信息管理系统的研究与分析,本系统采用了先进的计算机技术、数据库技术和面向对象的程序设计方法,实现了对职工信息的全面、高效和安全的管理。
职工信息录入模块主要用于对新入职职工的信息进行录入,包括姓名、性别、年龄、学历、工作经历等基本信息。
还可以录入职工的联系方式、家庭住址等其他相关信息。
职工信息查询模块提供了丰富的查询功能,可以根据职工的姓名、工号、部门等条件进行精确查询,方便用户快速找到所需信息。
还可以通过设置查询条件,实现多条件组合查询,进一步提高查询效率。
职工信息修改模块用于对已有职工信息进行修改,包括姓名、性别、年龄、学历等基本信息以及联系方式、家庭住址等其他相关信息。
用户可以根据需要对职工信息进行增删改查操作。
职工信息删除模块用于对不再需要的职工信息进行删除,避免了因数据冗余导致的系统运行缓慢等问题。
职工信息统计模块通过对系统中存储的职工信息进行统计分析,为企事业单位提供了有关人力资源状况的数据支持,有助于企业制定合理的人力资源规划和决策。
系统管理模块主要用于对整个系统的运行状态进行监控和管理,包括用户管理、权限管理等功能。
通过对系统的维护和管理,可以确保系统的稳定运行和数据的安全性。
1.1 研究背景与意义随着信息化时代的到来,企业的运营管理逐渐趋于信息化、系统化。
在企业的人力资源管理中,职工信息管理是极为重要的一环。
传统的职工信息管理主要依赖于纸质文档或简单的电子表格,这种方式在处理大量数据时效率低下,不能满足现代企业高效、准确的管理需求。
设计并实现一个基于C语言的职工信息管理系统显得尤为重要。
在当前的研究背景下,基于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("未找到对应的员工信息。
1.设计目的训练读者的基本编程能力,了解管理系统的开发流程及熟悉c语言的文件和各种结构组的基本操作。
2.功能描述3.流程图4.数据结构设计结构体employee,用于存放职工的基本信息和工资信息。
typedef struct employee{char num[10];thar name[15];float jj;float kk;float yfgz;float sk;float sfgz;}ZGGZ;#include "stdio.h" /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#include "string.h" /*字符串函数库*/#include "conio.h" /*屏幕操作函数库*/#define HEADER1 " -------------------------------ZGGZ---------------------------------------- \n"#define HEADER2 "| number| name | jbgz | jj | kk | yfgz | sk | sfgz | \n"#define HEADER3 "|--------|-----------|--------|--------|--------|--------|--------|--------| \n"#define FORMAT "|%-8s|%-10s |%8.2f|%8.2f|%8.2f|%8.2f|%8.2f|%8.2f| \n"#define DATA p->num,p->name,p->jbgz,p->jj,p->kk,p->yfgz,p->sk,p->sfgz#define END "---------------------------------------------------------------------------- \n"#define N 60int saveflag=0; /*是否需要存盘的标志变量*//*定义与职工有关的数据结构*/typedef struct employee /*标记为employee*/{char num[10]; /*职工编号*/char name[15]; /*职工姓名*/float jbgz; /*基本工资*/float jj; /*奖金*/float kk; /*扣款*/float yfgz; /*应发工资*/float sk; /*税款*/float sfgz; /*实发工资*/}ZGGZ;void menu() /*主菜单*/{system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ textcolor(10); /*在文本模式中选择新的字符颜色*/gotoxy(10,5); /*在文本窗口中设置光标*/cprintf(" The Employee' Salary Management System \n");gotoxy(10,8);cprintf("*************************Menu***************************** ***\n");gotoxy(10,9);cprintf(" * 1 input record 2 delete record*\n");gotoxy(10,10);cprintf(" * 3 search record 4 modify record *\n");gotoxy(10,11);cprintf(" * 5 insert record 6 count record *\n");gotoxy(10,12);cprintf(" * 7 sort reord 8 save record *\n");gotoxy(10,13);cprintf(" * 9 display record 0 quit system *\n");gotoxy(10,14);cprintf("*********************************************************** **\n");/*cprintf()送格式化输出至文本窗口屏幕中*/}void printheader() /*格式化输出表头*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}void printdata(ZGGZ pp) /*格式化输出表中数据*/{ZGGZ* p;p=&pp;printf(FORMAT,DATA);}void Disp(ZGGZ tp[],int n) /*显示数组tp[]中存储的记录,内容为employee结构中定义的内容*/{int i;if(n==0) /*表示没有职工工资记录*/{printf("\n=====>Not employee record!\n");getchar();return;}printf("\n\n");printheader(); /*输出表格头部*/i=0;while(i<n) /*逐条输出数组中存储的职工信息*/{printdata(tp[i]);i++;printf(HEADER3);}getchar();}void Wrong() /*输出按键错误信息*/{printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");getchar();}void Nofind() /*输出未查找此职工的信息*/{printf("\n=====>Not find this employee record!\n");/********************************************************** ***作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么在数组中查找;*********************************************************** ***/int Locate(ZGGZ tp[],int n,char findmess[],char nameornum[]){int i=0;if(strcmp(nameornum,"num")==0) /*按职工编号查询*/{while(i<n){if(strcmp(tp[i].num,findmess)==0) /*若找到findmess值的职工编号*/return i;i++;}else if(strcmp(nameornum,"name")==0) /*按职工姓名查询*/{while(i<n){if(strcmp(tp[i].name,findmess)==0) /*若找到findmess值的姓名*/ return i;i++;}}return -1; /*若未找到,返回一个整数-1*/}/*输入字符串,并进行长度验证(长度<lens)*/void stringinput(char *t,int lens,char *notice){char n[255];do{printf(notice); /*显示提示信息*/scanf("%s",n); /*输入字符串*/if(strlen(n)>lens) printf("\n exceed the required length! \n"); /*进行长度校验,超过lens值重新输入*/}while(strlen(n)>lens);strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/}/*输入数值,0<=数值)*/float numberinput(char *notice){float t=0.00;do{printf(notice); /*显示提示信息*/scanf("%f",&t); /*输入如工资等数值型的值*/if(t<0) printf("\n score must >=0! \n"); /*进行数值校验*/ }while(t<0);return t;}/*增加职工工资记录*/int Add(ZGGZ tp[],int n){char ch,num[10];int i,flag=0;system("cls");Disp(tp,n); /*先打印出已有的职工工资信息*/while(1) /*一次可输入多条记录,直至输入职工编号为0的记录才结束添加操作*/{while(1) /*输入职工编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/{stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入编号并检验*/flag=0;if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/{return n;}i=0;while(i<n) /*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/{if(strcmp(tp[i].num,num)==0){flag=1;break;}i++;}if(flag==1) /*提示用户是否重新输入*/{ getchar();printf("==>The number %s is existing,try again?(y/n):",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn n;}else{break;}}strcpy(tp[n].num,num); /*将字符串num拷贝到tp[n].num中*/ stringinput(tp[n].name,15,"Name:");tp[n].jbgz=numberinput("jbgz:"); /*输入并检验基本工资*/tp[n].jj=numberinput("jiangjin:"); /*输入并检验奖金*/tp[n].kk=numberinput("koukuan:"); /*输入并检验扣款*/tp[n].yfgz=tp[n].jbgz+tp[n].jj-tp[n].kk; /*计算应发工资*/tp[n].sk=tp[n].yfgz*0.12; /*计算税金,这里取应发工资的百分之一十二*/tp[n].sfgz=tp[n].yfgz-tp[n].sk; /*计算实发工资*/saveflag=1;n++;}return n;}/*按职工编号或姓名,查询记录*/void Qur(ZGGZ tp[],int n){int select; /*1:按编号查,2:按姓名查,其他:返回主界面(菜单)*/ char searchinput[20]; /*保存用户输入的查询内容*/int p=0;if(n<=0) /*若数组为空*/{system("cls");printf("\n=====>No employee record!\n");getchar();return;}system("cls");printf("\n =====>1 Search by number =====>2 Search by name\n");printf(" please choice[1,2]:");scanf("%d",&select);if(select==1) /*按编号查询*/{stringinput(searchinput,10,"input the existing employee number:");p=Locate(tp,n,searchinput,"num");/*在数组tp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/if(p!=-1) /*若找到该记录*/{printheader();printdata(tp[p]);printf(END);printf("press any key to return");getchar();}elseNofind();getchar();}else if(select==2) /*按姓名查询*/{stringinput(searchinput,15,"input the existing employee name:"); p=Locate(tp,n,searchinput,"name");if(p!=-1){printheader();printdata(tp[p]);printf(END);printf("press any key to return");getchar();}elseNofind();getchar();}elseWrong();getchar();}/*删除记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/int Del(ZGGZ tp[],int n){int sel;char findmess[20];int p=0,i=0;if(n<=0){ system("cls");printf("\n=====>No employee record!\n");getchar();return n;}system("cls");Disp(tp,n);printf("\n =====>1 Delete by number =====>2 Delete by name\n");printf(" please choice[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"input the existing employee number:"); p=Locate(tp,n,findmess,"num");getchar();if(p!=-1){for(i=p+1;i<n;i++) /*删除此记录,后面记录向前移*/{strcpy(tp[i-1].num,tp[i].num);strcpy(tp[i-1].name,tp[i].name);tp[i-1].jbgz=tp[i].jbgz;tp[i-1].jj=tp[i].jj;tp[i-1].kk=tp[i].kk;tp[i-1].yfgz=tp[i].yfgz;tp[i-1].jbgz=tp[i].sk;tp[i-1].sfgz=tp[i].sfgz;}printf("\n==>delete success!\n");n--;getchar();saveflag=1;}elseNofind();getchar();}else if(sel==2) /*先按姓名查询到该记录所在的数组元素的下标值*/ {stringinput(findmess,15,"input the existing employee name:");p=Locate(tp,n,findmess,"name");getchar();if(p!=-1){for(i=p+1;i<n;i++) /*删除此记录,后面记录向前移*/{strcpy(tp[i-1].num,tp[i].num);strcpy(tp[i-1].name,tp[i].name);tp[i-1].jbgz=tp[i].jbgz;tp[i-1].jj=tp[i].jj;tp[i-1].kk=tp[i].kk;tp[i-1].yfgz=tp[i].yfgz;tp[i-1].jbgz=tp[i].sk;tp[i-1].sfgz=tp[i].sfgz;}printf("\n=====>delete success!\n");n--;getchar();saveflag=1;}elseNofind();getchar();}return n;}/*修改记录。