精华内容
下载资源
问答
  • 功能i齐全,可运行,能实现基本工资查询,员工离职等信息登记
  • 如查询、修改、添加、删除以及存储等,迅速准确地完成各种工资信息的统计计算和汇总工作,针对系统服务对象的具体要求,设计了企业工资管理系统
  • 重庆科技学院 面向对象程序设计 课程设计报告 学 院_ 电气与信息工程学院 _ 专业班级 : 学生姓名 : 学 号 : 设计地点单位 _ _ 计算机基础自主学习中心 _ _ _ 设计题目 _ _ 公司员工信息管理系统设计 完成日期 2013 ...
  • C语言课程设计员工工资管理系统

    千次阅读 多人点赞 2019-03-06 21:51:38
    printf("\n -------------------| 员工工资管理系统 |-------------------\n\n"); printf("\n ---------------------| %s |---------------------\n", head); } void menu_workpost()//岗位选择菜单 { printf("\...
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef enum workpost WOP;
    typedef struct empolyee EMP;
    enum workpost { manager = 1, technician, salesperson, salesmanager };
    struct empolyee
    {
    	int num;       //工号
    	char name[20];//姓名
    	char sex[3];//性别
    	char department[20];//部门
    	int age;//年龄
    	float salary;//当月工资
    	WOP wop;//  职位             
    	union
    	{
    		int worktime;//技术员需要工作时间
    		int amount;//销售员需要销售额
    	}work;
    	struct empolyee *next;//指向下一个链表
    };
    void menu_head(char *head)//打印菜单首部
    {
    	system("cls");
    	printf("\n  -------------------| 员工工资管理系统 |-------------------\n\n");
    	printf("\n  ---------------------| %s |---------------------\n", head);
    }
    void menu_workpost()//岗位选择菜单
    {
    	 printf("\n  ---------------------| 请选择岗位 |-----------------------\n");
    	 printf("  ==========================================================\n");
    	 printf("  ||                                                      ||\n");
    	 printf("  ||         - 1 - 经理             - 2 - 技术员          ||\n");
    	 printf("  ||                                                      ||\n");
    	 printf("  ||         - 3 - 销售员           - 4 - 销售经理        ||\n");
    	 printf("  ||                                                      ||\n");
    	 printf("  ||         - 0 - 退出                                   ||\n");
    	 printf("  ||                                                      ||\n");
    	 printf("  ==========================================================\n\n");
    	 printf("  --请输入您的选择:");
    }
    void menu_condition()//选择条件菜单
    {
    	printf("\n  --请选择条件\n\n");
    	printf("  ==========================================================\n");
    	printf("  ||                                                      ||\n");
    	printf("  ||     - 1 - 职工号     - 2 - 姓名     - 0 - 退出       ||\n");
    	printf("  ||                                                      ||\n");
    	printf("  ==========================================================\n");
    	printf("\n  --请输入您的选择:");
    }
    void pause()//停止功能
    {
    	printf("\n  所有数据显示完毕!按任意键返回...");
    	getchar();
    	getchar();
    }
    void print_emp_h()//打印员工信息首部
    {
    	printf("\n  =======================| 员工信息 |=======================\n\n");
    	printf("  ==========================================================\n\n");
    	printf("  ||职工号|姓名|性别|部门|年龄|当月工资|岗位|工作时间/销售额||\n");
    }
    void print_emp(EMP *p)//打印员工信息
    {
    	if (p == NULL) printf("  无数据!");
    	printf("  || %-5d%-7s%-3s%-7s%-4d%-9.2f", p->num, p->name, p->sex, p->department, p->age, p->salary);
    	switch (p->wop)//workpost
    	{
    	case manager:printf("%-6s              ||\n", "经理"); break;
    	case technician:printf("%-12s", "技术员"); printf("%-8d||\n", p->work.worktime); break;
    	case salesperson:printf("%-12s", "销售员"); printf("%-8d||\n", p->work.amount); break;
    	case salesmanager:printf("%-8s            ||\n", "销售经理");
    	}
    }
    void sex_choice(EMP *p)//添加或修改员工性别
    {
    	int sel;
    	while (1)
    	{
    		printf("  --请选择性别(1 - 男性    2 - 女性):");
    		scanf("%d", &sel);
    		if (sel == 1)
    		{
    			strcpy(p->sex, "男"); break;
    		}
    		else if (sel == 2)
    		{
    			strcpy(p->sex, "女"); break;
    		}
    		else printf("  输入有误!请重新输入!\n");
    	}
    }
    int clean_inf()//恢复出厂设置
    {
    	FILE *fp = NULL;
    	int sel1;
    	system("cls");
    	printf("  -------------------| 员工工资管理系统 |-------------------\n");
    	printf("  ---------------------| 恢复出厂设置 |---------------------\n");
    	printf("\n  --恢复出厂设置会清除员工数据信息,是否继续?\n");
    	printf("  ==========================================================\n");
    	printf("  ||                                                      ||\n");
    	printf("  ||          - 1 - 是                 - 2 - 否           ||\n");
    	printf("  ||                                                      ||\n");
    	printf("  ==========================================================\n");
    	printf("\n  --请输入您的选择:");
    	scanf("%d", &sel1);
    	if (sel1 == 1)
    	{
    		printf("\n  --正在清除员工信息,请稍后...\n");
    		if ((fp = fopen("employee.txt", "wb")) == NULL)//以“可写”的方式打开文件,清空当前文件夹下的employee.txt文件
    		{
    			printf("\n  --错误:无法读取员工数据文件\n");
    			exit(0);
    		}
    		printf("\n  --清除员工信息成功!\n");
    		fclose(fp);
    	}
    	return sel1;
    }
    void count_smsalary(EMP *head, EMP *p) //计算该员工的部门经理的工资;
    {
    	EMP *p1 = NULL, *p2 = NULL;
    	int tamount = 0;
    	p2 = head;
    	while (!((strcmp(p2->department, p->department) == 0) && (p2->wop == salesmanager)) && (p2->next != NULL)) p2 = p2->next;//直到(同部门、是经理)&&(不为空)
    	if ((p2->wop == salesmanager) && (strcmp(p2->department, p->department) == 0)) //(同部门、是经理)&&(不为空)
    	{
    		p1 = p2;//p1指向该部门的经理
    		p2 = head;//p2重新找该部门的销售员
    		while (p2 != NULL)
    		{
    			if ((p2->wop == salesperson) && (strcmp(p->department, p2->department) == 0))
    				tamount += p2->work.amount;
    			p2 = p2->next; //计算该部门所有销售员销售总额
    		}
    		if(p1->wop==salesmanager)
    		p1->salary = (float)(5000 + tamount / 200);//0.5%->5/1000->1/200;计算该部门销售经理的工资
    	}
    }
    void count_emp(EMP *head, int sel)//统计计算所有员工按部门,全部的工资max,min,ave
    {
    	EMP *p = NULL;
    	char department[20];
    	float max=0, min=0, ave=0;
    	int count=0;
    	switch (sel)
    	{
    	case 1://计算部门平均、最低台、最高工资信息
    	{
    		printf("\n  --请输入部门:");
    		scanf("%s", department);
    		p = head;
    		while (p != NULL)
    		{
    			if (strcmp(p->department, department)==0)
    			{
    				max = min = p->salary;//初始化
    				break;//找出其部门第一个
    			}
    			p = p->next;
    		 
    		}
    		p = head;//重新开始,计算max,min,ave
    		while (p != NULL)
    		{
    			if (strcmp(p->department, department) == 0)
    			{
    				if (p->salary > max) max = p->salary;
    				if (p->salary < min) min = p->salary;
    				ave += p->salary;
    				count++;
    			}
    			p = p->next;
    		}
    		ave /= count;//ave = ave / count;
    		printf("\n  --%s部门平均、最低台、最高工资信息如下:\n\n", department);
    		printf("  ==========================================================\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||           平均工资:%-8.2f                           ||\n",ave);
    		printf("  ||           最高工资:%-8.2f                           ||\n", max);
    		printf("  ||           最低工资:%-8.2f                           ||\n",min);
    		printf("  ||                                                      ||\n");
    		printf("  ==========================================================\n");
    		pause();
    	}break;//break出case1
    	case 2://计算部门超过平均工资员工信息如下
    	{
    		printf("\n  --请输入部门:");
    		scanf("%s", department);
    		p = head;
    		while (p != NULL)//先计算平均数
    		{
    			if (strcmp(p->department, department) == 0);
    			{
    				ave += p->salary;
    				count++;
    			}
    			p = p->next;
    		}
    		ave /= count;
    		count = 0;
    		printf("\n  --%s部门超过平均工资员工信息如下:\n", department);
    		print_emp_h();
    		p = head;
    		while (p != NULL)
    		{
    			if ((strcmp(p->department, department) == 0) && (p->salary > ave))
    			{
    				count++;
    				print_emp(p);
    			}
    			p = p->next;
    		}
    		printf("\n  共%d人\n", count);
    		pause();
    	}break;//break出case2
    	case 3://计算所有员工平均、最低、最高工资信息
    	{
    		p = head;
    		max = min = p->salary;
    		while (p != NULL)
    		{
    			if (p->salary > max) max = p->salary;
    			if (p->salary < min) min = p->salary;
    			ave += p->salary;
    			count++;
    			p = p->next;
    		}
    		ave /= count;
    		printf("\n  --所有员工平均、最低、最高工资信息如下:\n");
    		printf("  ==========================================================\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||          平均工资:%-8.2f                            ||\n", ave);
    		printf("  ||          最高工资:%-8.2f                            ||\n", max);
    		printf("  ||          最低工资:%-8.2f                            ||\n", min);
    		printf("  ||                                                      ||\n");
    		printf("  ==========================================================\n");
    		pause();
    	}break;
    	case 4://计算所有超过平均工资员工信息
    	{
    		p = head;
    		while (p != NULL)
    		{
    			count++;
    			ave += p->salary;
    			p = p->next;
    		}
    		ave /= count;
    		count = 0;
    		printf("\n  --超过平均工资员工信息如下:\n");
    		print_emp_h();
    		p = head;
    		while (p != NULL)
    		{
    			if(p->salary > ave)
    			{
    				count++;
    				print_emp(p);
    			}
    			p = p->next;
    		}
    		printf("\n  共%d人\n", count);
    		pause();
    	}break;
    	}
    }
    void sort_emp(EMP *head, int sel)//排序
    {
    	int count, sel1;
    	float max, min, max1;
    	int minnum, maxnum, minnum1;
    	EMP *p=NULL, *p1=NULL;
    	p = head;
    	switch (sel)
    	{
    	case 1://全部员工根据工资由大到小排序
    	{
    		p = head;
    		max = min = p->salary;
    		while (p != NULL)
    		{
    			if (p->salary > max) max = p->salary;
    			if (p->salary < min) min = p->salary;
    			p = p->next;
    		}
    		max1 = max + 1;//保存最大值
    		printf("\n  --全体员工信息排序:\n");
    		print_emp_h();
    		while (1)//1循环
    		{
    			max = min;
    			p = head;
    			while (p != NULL)
    			{
    				if ((p->salary>max) && (p->salary < max1)) max = p->salary;
    				p = p->next;
    			}
    			p = head;
    			count = 0;
    			while (p != NULL)//2循环2
    			{
    				if (p->salary == max)
    				{
    					p1 = p;
    					count++;//找出最大值的员工个数,方便检查是否个数为1;
    				}
    				p = p->next;
    			}
    			if (count == 1) print_emp(p1);//只有一个员工时直接输出
    			else//多个员工排序,找出他们的工号输出
    			{
    				maxnum = minnum = p1->num;//此时的p1是有最大值的最后一位员工
    				p = head;
    				while (p != NULL)
    				{
    					if ((p->salary == max) && (p->num > maxnum)) maxnum = p->num;//找出最大值中最前最后的员工
    					if ((p->salary == max) && (p->num < minnum)) minnum = p->num;
    					p = p->next;
    				}
    				minnum1 = minnum - 1;
    				while (1)
    				{
    					minnum = maxnum;
    					p = head;
    					while (p != NULL)
    					{
    						if ((p->salary == max) && (p->num <= minnum) && (p->num>minnum1))
    						{
    							minnum = p->num;
    							p1 = p;
    						}
    						p = p->next;
    					}
    					print_emp(p1);
    					minnum1 = minnum;
    					if (minnum == maxnum) break;
    				}
    			}
    			max1 = max;
    			if (max == min) break;
    		}
    		pause();
    	}break;
    	case 2://按岗位排序
    	{
    		menu_workpost();
    		scanf("%d", &sel1);
    		if(sel1==0)break;
    		if(sel1 != 0 && sel1 != 1 && sel1 != 2 && sel1 != 3 && sel1 != 4)
    		{
    			printf("\n  --选择有误!请按任意键返回上一层菜单! ");getchar(); getchar();break;
    		}
    		switch (sel1)
    		{
    		case 1:printf("\n  --经理员工信息排序:\n"); break;
    		case 2:printf("\n  --技术员员工信息排序:\n"); break;
    		case 3:printf("\n  --销售员员工信息排序:\n"); break;
    		case 4:printf("\n  --销售经理员工信息排序:\n"); break;
    		}
    		p = head;
    		max = min = p->salary;
    		while (p != NULL)
    		{
    			if ((p->salary > max) && (p->wop == WOP(sel1))) max = p->salary;
    			if ((p->salary < min) && (p->wop== WOP(sel1))) min = p->salary;
    			p = p->next;
    		}
    		max1 = max + 1;
    		printf("\n  --全体员工信息排序:\n");
    		print_emp_h();
    		while (1)
    		{
    			max = min;
    			p = head;
    			while (p != NULL)
    			{
    				if ((p->salary>max) && (p->salary < max1)&&(p->wop==WOP(sel1))) max = p->salary;
    				p = p->next;
    			}
    			p = head;
    			count = 0;
    			while (p != NULL)
    			{
    				if ((p->salary == max) && (p->wop == WOP(sel1)))
    				{
    					p1 = p;
    					count++;
    				}
    				p = p->next;
    			}
    			if (count == 1) print_emp(p1);
    			else
    			{
    				maxnum = minnum = p1->num;
    				p = head;
    				while (p != NULL)
    				{
    					if ((p->salary == max) && (p->num > maxnum) && (p->wop == WOP(sel1))) maxnum = p->num;
    					if ((p->salary == max) && (p->num < minnum) && (p->wop == WOP(sel1))) minnum = p->num;
    					p = p->next;
    				}
    				minnum1 = minnum - 1;
    				while (1)
    				{
    					minnum = maxnum;
    					p = head;
    					while (p != NULL)
    					{
    						if ((p->salary == max) && (p->num <= minnum) && (p->num>minnum1) && (p->wop == WOP(sel1)))
    						{
    							minnum = p->num;
    							p1 = p;
    						}
    						p = p->next;
    					}
    					print_emp(p1);
    					minnum1 = minnum;
    					if (minnum == maxnum) break;
    				}
    			}
    			max1 = max;
    			if (max == min) break;
    		}
    		pause();
    	}
    	}
    }
    void inquiry_emp(EMP *head, int sel)//浏览员工信息
    {
    	int sel1,sel2, count, page, npage=1,num;
    	char department[20], name[20];
    	EMP *p;
    	switch (sel)
    	{
    	case 1://按照工号
    	{
    		printf("\n  --全体员工信息表:\n");
    		count = 0;
    		p = head;
    		while (p != NULL)//计算有多少个员工
    		{
    			count++;
    			p = p->next;
    		}
    		page = count / 10;//共多少页
    		if ((count - page * 10)>0) page += 1;//看是否整十,   如56/10=5,56>50,所以要加一页
    		npage = 1;//numpage设定为第一页
    		while (1)
    		{
    			count = 0;
    			p = head;
    			while (p != NULL)
    			{
    				if (count == (npage - 1) * 10) break;//如果是0 ,就不用数了
    				count++;
    				p = p->next;
    			}
    			p = head;
    			
    			print_emp_h();//应该写在下面的while里面第二行
    			while (p != NULL)
    			{
    				
    				
    				print_emp(p);
    				count++;
    				if (count == npage * 10) break;
    				p = p->next;//分页后没有改变成员信息
    			}
    			printf("  ==========================================================\n");
    			printf("  ||              当前页数:第%d页           共%d页           ||\n", npage, page);
    			printf("  ==========================================================\n");
    			printf("  || 1 - 首页  2 - 上一页  3 - 下一页  4 - 尾页  0 -退出    ||\n");
    			printf("  ==========================================================\n");
    			printf("\n  --请输入您的选择:");
    			scanf("%d", &sel1);
    			if (sel1 == 0) break;
    			switch (sel1)
    			{
    			case 1:npage = 1; break;
    			case 2:if (npage == 1); else npage -= 1; break;
    			case 3:if (npage == page); else npage += 1; break;
    			case 4:npage = page; break;
    			}
    		}
    		}break;
    	case 2://按照部门
    	{
    		printf("\n  --请输入部门名:");
    		scanf("%s", department);
    		p = head;
    		printf("\n  --%s部门的员工信息表:\n",department);
    		print_emp_h();
    		while (p != NULL)
    		{
    			if (strcmp(p->department, department) == 0) print_emp(p);
    			p = p->next;
    		}
    		pause();
    	}break;
    	case 3://按照岗位
    	{
    		while (1)
    		{
    			menu_workpost();
    			scanf("%d", &sel1);
    			p = head;
    			if (sel1 == 0) break;
    			switch (sel1)
    			{
    			case 1:
    				printf("\n  --经理的员工信息表:\n");
    				print_emp_h();
    				while (p != NULL)
    				{
    					if (p->wop == manager) print_emp(p);
    					p = p->next;
    				}
    				break;
    			case 2:
    				printf("\n  --技术员的员工信息表:\n");
    				print_emp_h();
    				while (p != NULL)
    				{
    					if (p->wop == technician) print_emp(p);
    					p = p->next;
    				}
    				break;
    			case 3:
    				printf("\n  --销售员的员工信息表:\n");
    				print_emp_h();
    				while (p != NULL)
    				{
    					if (p->wop == salesperson) print_emp(p);
    					p = p->next;
    				}
    				break;
    			case 4:
    				printf("\n  --技术员的员工信息表:\n");
    				print_emp_h();
    				while (p != NULL)
    				{
    					if (p->wop == salesmanager) print_emp(p);
    					p = p->next;
    				}
    				break;
    			default:printf("\n  --选择有误!"); getchar();getchar();
    			}
    			pause();
    		}
    	}break;
    	case 4://按照已知条件
    	{
    		menu_condition();
    		scanf("%d", &sel1);
    		p = head;
    		switch (sel1)
    		{
    		case 1:
    		{
    			printf("\n  --请输入员工号:");
    			scanf("%d", &num);
    			while ((p->num != num) && (p != NULL)) p = p->next;
    			if (p->num != num)
    			{
    				printf("\n  无该员工号!\n");
    				sel1 = 0;
    			}
    		}break;
    		case 2:
    		{
    			printf("\n  --请输入姓名:");
    			scanf("%s", name);
    			while ((strcmp(p->name, name) != 0) && (p != NULL))	p = p->next;
    			if (strcmp(p->name, name) != 0)
    			{
    				printf("\n  无该员工姓名!\n");
    				sel1 = 0;
    			}
    		}break;
    		}
    		if (sel1)
    		{
    			printf("\n  已找到该员工信息!\n");
    			printf("\n  --该员工信息如下:");
    			print_emp_h();
    			print_emp(p);
    			pause();
    		}
    	}break;
    	}
    }
    EMP *del_emp(EMP *head, int sel)//删除
    {
    	int num, sel1;
    	char name[20];
    	EMP *p = head, *p1 = NULL;
    	switch (sel)
    	{
    	case 1:
    	{
    		printf("\n  --请输入员工号:");
    		scanf("%d", &num);
    		while ((p->num != num) && (p != NULL))//不是所找工号&&不为空(直到找到是所找的员工)
    		{
    			p1 = p;
    			p = p->next;//因为找到员工号或空而跳出
    		}
    		if (p->num != num)
    		{
    			printf("\n  无该员工号!\n");
    			sel1 = 0;//sel1返回0
    		}
    	}break;
    	case 2:
    	{
    		printf("\n  --请输入姓名:");
    		scanf("%s", name);
    		while ((strcmp(p->name, name) != 0) && (p != NULL))
    		{
    			p1 = p;
    			p = p->next;
    		}
    		if (strcmp(p->name, name) != 0)
    		{
    			printf("\n  无该员工姓名!\n");
    			sel1 = 0;//sel1返回0
    		}
    	}break;
    	}
    	if (sel)//如果有这个员工
    	{
    		pause();
    		printf("\n  已找到该员工信息!\n");
    		printf("\n  --该员工信息如下:");
    		print_emp_h();
    		print_emp(p);
    		printf("  -----------------------| 是否删除 |-----------------------\n");
    		printf("  ==========================================================\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||            - 1 - 是                 - 2 - 否         ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ==========================================================\n");
    		printf("\n  --请输入您的选择:");
    		scanf("%d", &sel1);
    		if (sel1 == 1)
    		{
    			if (head == p) head = p->next;
    			else p1->next = p->next;//p1是p的上一个
    			free(p);//删除p
    		}
    		printf("\n  删除成功!\n");
    	}
    	return head;//
    }
    EMP *edit_emp(EMP *head, int sel)//修改员工信息
    {
    	int num, sel1 = 1;
    	char name[20];
    	EMP *p = NULL;
    	switch (sel)
    	{
    	case 1:
    	{
    		printf("\n  --请输入员工号:");
    		scanf("%d", &num);
    		p = head;
    		while ((p->num != num) && (p->next != NULL)) p = p->next;
    		if (p->num != num)
    		{
    			printf("\n  无该员工号!\n");
    			sel1 = 0;
    		}
    	}break;
    	case 2:
    	{
    		printf("\n  --请输入姓名:");
    		scanf("%s", name);
    		p = head;
    		while ((strcmp(p->name, name) != 0) && (p->next != NULL)) p = p->next;
    		if (strcmp(p->name, name) != 0)
    		{
    			printf("\n  无该员工姓名!\n");
    			sel1 = 0;
    		}
    	}break;
    	}
    	if (sel1)
    	{
    		printf("\n  已找到该员工信息!\n");
    		printf("\n  --该员工信息如下:");
    		print_emp_h();
    		print_emp(p);
    		printf("\n  --请选择要修改的信息:\n");
    		printf("\n  ----------------------| 请选择内容 |----------------------\n");
    		printf("  ==========================================================\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||    - 1 - 姓名       - 2 - 性别       - 3 - 部门      ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||    - 4 - 岗位       - 5 - 年龄       - 0 - 取消操作  ||\n");
    		printf("  ||                                                      ||\n");
    		if (p->wop == technician)
    		{
    			printf("  ||    - 6 - 工作时间                                    ||\n");
    			printf("  ||                                                      ||\n");
    		}
    		if (p->wop == salesperson)
    		{
    			printf("  ||    - 6 - 销售额                                        ||\n");
    			printf("  ||                                                        ||\n");
    		}
    		printf("  ==========================================================\n");
    		printf("\n  --请输入您的选择:");
    		scanf("%d", &sel);
    		switch (sel)
    		{
    		case 1:
    			printf("\n  --请输入姓名:");
    			scanf("%s", p->name);
    			break;
    		case 2:
    			sex_choice(p);
    			break;
    		case 3:
    			printf("\n  --请输入部门:");
    			scanf("%s", p->department);
    			break;
    		case 4:
    		{
    			menu_workpost();
    			scanf("%d", &sel);
    			switch (sel)
    			{
    				p->wop = manager;
    				p->salary = 8000;
    				break;
    			case 2:
    				p->wop= technician;
    				printf("\n  --已更改成技术员,是否输入工作时间?( 1 - 是    2 - 否 ):");
    				scanf("%d", &sel);
    				if (sel == 1)
    				{
    					printf("\n  --请输入工作时间:");
    					scanf("%d", &p->work.worktime);
    					p->salary = (float)p->work.worktime * 100;
    				}
    				break;
    			case 3:
    				p->wop = salesperson;
    				printf("\n  --已更改成销售员,是否输入销售额?( 1 - 是    2 - 否 ):");
    				scanf("%d", &sel);
    				if (sel == 1)
    				{
    					printf("\n  --请输入销售额:");
    					scanf("%d", &p->work.amount);
    					p->salary = (float)p->work.amount*(float)0.04;
    				}
    				count_smsalary(head, p);
    				break;
    			case 4:
    				p->wop = salesmanager;
    				count_smsalary(head, p);
    				break;
    
    			}
    		}break;
    		case 5:
    			printf("\n  --请输入年龄:");
    			scanf("%d", &p->age);
    			break;
    		case 6:
    		{
    			if (p->wop == technician)
    			{
    				printf("\n  --请输入工作时间:");
    				scanf("%d", &p->work.worktime);
    				p->salary = (float)p->work.worktime * 100;
    			}
    			if (p->wop == salesperson)
    			{
    				printf("\n  --请输入销售额:");
    				scanf("%d", &p->work.amount);
    				p->salary = (float)p->work.amount*(float)0.04;
    			}
    		}break;
    		case 0:break;
    		default:printf("\n  --选择有误!"); getchar();getchar();
    		}
    	}
    	if (sel1) printf("\n  --修改成功!");
    	return head;//
    }
    EMP *add_emp(EMP *head, int sel)//添加员工
    {
    	EMP *n = NULL, *p = NULL;
    	if ((n = (EMP*)malloc(sizeof(EMP))) == NULL)
    	{
    		printf("\n  不能分配内存空间!\n");
    		exit(0);
    	}
    	n->next = NULL;
    	printf("  --请输入员工信息数据:\n");
    	printf("  --请输入姓名:");
    	scanf("%s", n->name);
    	sex_choice(n);
    	printf("  --请输入部门:");
    	scanf("%s", n->department);
    	printf("  --请输入年龄:");
    	scanf("%d", &n->age);
    	if (sel == 1)
    	{
    		n->wop = manager;
    		n->salary = 8000;
    	}
    	else if (sel == 2)
    	{
    		n->wop = technician;
    		printf("  --请输入工作时间:");
    		scanf("%d", &n->work.worktime);
    		n->salary = (float)n->work.worktime * 100;
    	}
    	else if (sel == 3)
    	{
    		n->wop = salesperson;
    		printf("  --请输入销售额:");
    		scanf("%d", &n->work.amount);
    		n->salary = (float)n->work.amount*(float)0.04;
    		count_smsalary(head, n);
    	}
    	else
    	{
    		n->wop = salesmanager;
    		count_smsalary(head, n);
    	}
    	if (head == NULL)
    	{
    		n->num = 1;
    		head = n;
    	}
    	else
    	{
    		p = head;
    		while (p->next != NULL) p = p->next;
    		n->num = p->num + 1;
    		p->next = n;
    	}
    	printf("  添加成功!\n");
    	return head;
    }
    EMP *load_inf(EMP *head)//打开文件数据
    {
    	FILE *fp;
    	EMP *s = NULL, *p = NULL;
    	int length, count, sel;
    	printf("  -------------------| 员工工资管理系统 |-------------------\n");
    	printf("\n  --正在读取信息,请稍后…\n");
    	printf("\n  --正在打开本员工数据文件\n");
    	if ((fp = fopen("employee.txt", "rb")) == NULL)//打开文件
    	{
    		printf("\n  --错误:无法打开员工文件数据,是否新建数据文件?\n");
    		printf("\n  --1  - 是    2 - 否,退出程序\n");
    		printf("\n  --请输入您的选择:");
    		scanf("%d", &sel);
    		if (sel == 1)
    			if ((fp = fopen("employee.txt", "wb")) == NULL)//将文件设置为wb打开就是新建文件
    			{
    				printf("\n  --错误:无法新建员工数据文件\n");
    				exit(0);
    			}
    			else printf("\n  --已为您新建员工数据文件!\n");
    		else exit(0);
    	}
    	count = 0;
    	printf("\n  --正在读取员工数据文件信息\n");
    	fseek(fp, 0, 2);
    	length = ftell(fp);
    	fseek(fp, 0, 0);
    	while (ftell(fp) != length)
    	{
    		if ((s = (EMP*)malloc(sizeof(EMP))) == NULL)
    		{
    			printf("\n  --无法分配内存空间!\n");
    			fclose(fp);
    		}
    		if (fread(s, sizeof(EMP), 1, fp) != 1)
    		{
    			free(s);
    			break;
    		}
    		if (head == NULL)
    			head = p = s;
    		else
    		{
    			p->next = s;
    			p = s;
    		}
    		count++;
    	}
    	fclose(fp);
    	printf("\n  --已读取%d名员工信息!\n", count);
    	printf("\n  --数据加载成功!按任意键继续...");
    	getchar();
    	return head;
    }
    void save_inf(EMP *head)//保存信息
    {
    	FILE *fp;
    	EMP *p;
    	int sel1 = 1;
    	system("cls");
    	printf("  -------------------| 员工工资管理系统 |-------------------\n");
    	printf("\n  --正在保存信息,请稍后...\n");
    	printf("\n  --正在保存员工信息\n");
    	if ((fp = fopen("employee.txt", "wb")) == NULL)
    	{
    		printf("\n  --错误:无法读取本科生数据文件\n");
    		exit(0);
    	}
    	p = head;
    	while (p != NULL)
    	{
    		if (fwrite(p, sizeof(EMP), 1, fp) != 1)
    		{
    			printf("  --错误:写入本科生学生数据出错!\n");
    			sel1 = 0;
    			fclose(fp);
    		}
    		p = p->next;
    	}
    	printf("\n  --保存员工信息成功\n");
    	fclose(fp);
    	if (sel1) printf("\n  保存数据成功!\n");
    }
    void main()
    {
    	int sel, sel1;
    	EMP *head = NULL, *p = NULL;//定义两个员工类指针
    	head = load_inf(head);//
    	while (1)
    	{
    		p = head;
    		while (p != NULL)
    		{
    			if (p->wop == salesmanager) count_smsalary(head, p);
    			p = p->next;
    		}
    		sel1 = 1;
    		system("cls");
    		printf("  -------------------| 员工工资管理系统 |-------------------\n");
    		printf("  ==========================================================\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||   - 1 - 添加员工信息            - 2 - 修改员工信息   ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||   - 3 - 删除员工信息            - 4 - 查询员工信息   ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||   - 5 - 员工信息排序            - 6 - 员工工资统计   ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||   - 7 - 恢复出厂设置            - 8 - 保存信息       ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ||   - 0 - 退出程序                                     ||\n");
    		printf("  ||                                                      ||\n");
    		printf("  ==========================================================\n\n");
    		printf("\n  --请输入您的选择:");
    		scanf("%d", &sel);
    		if (sel == 0)
    		{
    			save_inf(head);
    			printf("  按任意键退出...\n");
    			getchar();
    			break;
    		}
    		switch (sel)
    		{
    		case 1:
    			while (sel1)
    			{
    				menu_head("添加员工信息");
    				menu_workpost();
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:case 3:case 4:head = add_emp(head, sel1); getchar(); getchar(); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 2:
    			while (sel1)
    			{
    				menu_head("修改员工信息");
    				menu_condition();
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:head = edit_emp(head, sel1); getchar(); getchar(); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 3:
    			while (sel1)
    			{
    				menu_head("删除员工信息");
    				menu_condition();
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:head = del_emp(head, sel1); getchar(); getchar(); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 4:
    			while (sel1)
    			{
    				menu_head("查询员工信息");
    				printf("\n  --请选择功能\n\n");
    				printf("  ==========================================================\n");
    				printf("  ||                                                      ||\n");
    				printf("  ||       - 1 - 全部员工         - 2 - 按部门显示        ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ||       - 3 - 按岗位显示       - 4 - 职工号/姓名查询   ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ||       - 0 - 退出                                     ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ==========================================================\n");
    				printf("\n  --请输入您的选择:");
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:case 3:case 4:inquiry_emp(head, sel1); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 5:
    			while (sel1)
    			{
    				menu_head("员工信息排序");
    				printf("\n  --请选择功能\n\n");
    				printf("  ==========================================================\n");
    				printf("  ||                                                      ||\n");
    				printf("  ||       - 1 - 全部员工         - 2 - 按岗位显示        ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ||       - 0 - 退出                                     ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ==========================================================\n");
    				printf("\n  --请输入您的选择:");
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:sort_emp(head, sel1); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 6:
    			while (sel1)
    			{
    				menu_head("员工工资统计");
    				printf("\n  --请选择功能\n\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("  ||       - 0 - 退出                                     ||\n");
    				printf("  ||                                                      ||\n");
    				printf("  ==========================================================\n");
    				printf("\n  --请输入您的选择:");
    				scanf("%d", &sel1);
    				switch (sel1)
    				{
    				case 1:case 2:case 3:case 4:count_emp(head, sel1); break;
    				case 0:break;
    				default:printf("\n  --选择有误!"); getchar();getchar();
    				}
    			}break;
    		case 7:
    			if (clean_inf() == 1)
    			{
    				head = NULL;
    			}
    			printf("  按任意键继续...");
    			getchar();
    			getchar();
    			break;
    		case 8:
    			save_inf(head);
    			printf("  按任意键继续...");
    			getchar();
    			getchar();
    			break;
    		case 0:save_inf(head); break;
    		default:printf("\n  --选择有误!"); getchar(); getchar(); break;
    		}
    	}
    }
    
    展开全文
  • 课程设计报告 * 课 程 面向对象课程设计 姓 名 院 系 专业年级 学 号 指导教师 日 期 目 录 1 需求与功能分析 1 2 系统框架图 2 3 类的设计与分析 2 4 非成员函数的设计与分析 4 5 特色算法分析 4 6 存在的问题及...
  • 高校工资管理系统课程设计报告

    热门讨论 2009-06-15 15:30:50
    高校工资管理系统 系统分析报告 目录 (一)工资管理系统简介 3 (二)工资管理系统需求分析 3 (三)功能结构设计分析 4 3.1员工变动 4 3.2部门管理 5 3.3工资输入 5 3.4初始化当月工资 5 3.5工资计算 5 3.6年终...
  • 企业员工薪水,薪资,工资管理系统,适用于毕业设计及课程设计
  • JAVA编程,oracle数据库,员工工资管理系统。 保存有关工资计算以及工资管理所必须的数据。能对各种数据进行插入、修改、删除等操作。能对数据进行查询、统计。 正确计算出个人月工资。能对病假扣款系数进行修正。能...
  • 【实例截图】【核心代码】工资管理系统└── 工资管理系统├── mysql数据库备份文件│ └── gongzi_guanli.sql├── readme.txt├── 数据库课程设计报告 工资管理系统 .doc└── 系统php源代码└── ...

    【实例简介】

    里面还有数据库设计报告文档,数据库有存储过程,触发器。希望对你有帮助!

    【实例截图】

    【核心代码】

    工资管理系统

    └── 工资管理系统

    ├── mysql数据库备份文件

    │   └── gongzi_guanli.sql

    ├── readme.txt

    ├── 数据库课程设计报告 工资管理系统 .doc

    └── 系统php源代码

    └── gongzi

    ├── check.php

    ├── conn.php

    ├── foot.php

    ├── function.js

    ├── gongzhong.php

    ├── gongzi.php

    ├── gzh_add.php

    ├── gzh_edit.php

    ├── gzi_jiesuan_chongxin.php

    ├── gzi_jiesuan.php

    ├── gzi_select.php

    ├── head.php

    ├── images

    │   ├── bg_button.jpg

    │   ├── bg_foot.jpg

    │   ├── bg_input.jpg

    │   ├── bg_login.jpg

    │   ├── bg_main.jpg

    │   ├── bg_top.jpg

    │   ├── bz.png

    │   └── nav_bg.jpg

    ├── index.php

    ├── indexx.php

    ├── jiangjin.php

    ├── jintie.php

    ├── jj_jiesuan_chongxin.php

    ├── jj_jiesuan.php

    ├── jt_add.php

    ├── jt_edit.php

    ├── kaoqin.php

    ├── kq_add.php

    ├── kq_select.php

    ├── lb_add.php

    ├── lb_edit.php

    ├── leibie.php

    ├── login_check.php

    ├── login_out.php

    ├── mm_menu.js

    ├── page_bottom.php

    ├── page_top.php

    ├── readme.txt

    ├── select.php

    ├── style.css

    ├── yg_add.php

    ├── yg_edit.php

    ├── yuangong.php

    └── zhixing.php

    5 directories, 49 files

    展开全文
  • 目录 一 需求分析 1 二 概要... 程序完成企业人事工资管理能够实现工资的录入统计整个单位的平均 工资最高工资最低工资 查询修改删除等功能 4. 程序执行的命令 1 录入员工工资信息 2 选择需要执行的操作添加统计删除修
  • 数据库课设,员工考勤管理系统,资源共享。
  • 员工工资管理系统 系统描述 项目类型:Java Swing 开发语言:Java语言 运行环境:win7/win10/jdk1.8 开发工具:Eclipse 运行工具:idea/Eclipse/MyEclipse,Eclipse最兼容 数 据 库:MySql5.x 是否有课程报告:有...

    员工工资管理系统

    系统描述

    项目类型:Java Swing
    开发语言:Java语言
    运行环境:win7/win10/jdk1.8
    开发工具:Eclipse
    运行工具:idea/Eclipse/MyEclipse,Eclipse最兼容
    数 据 库:MySql5.x
    是否有课程报告:有完整报告
    适用场景:课程设计学习参考,毕业设计参考对学计算机的大学生来说非常适合学习。
    备注:数据库源码齐全
    

    注意:

    ​ CRUD:指的是增删改查操作

    功能描述:

    • 员工信息管理
      • CRUD
    • 部门信息管理
      • CRUD
    • 员工工资设定
      • 查询
      • 修改
    • 系统设置
      • 信息统计
      • 修改密码
      • 增加管理员
    • 退出系统

    项目部分截图

    image-20210128193112400

    image-20210128193149936

    image-20210128193211521

    image-20210128193227219

    image-20210128194213816

    文档目录

    image-20210128195949991

    有需要的联系【私信】

    👉点此获取联系方式

    展开全文
  • 职工工资管理系统源代码,C语言实训,包含增删查改,排序,实现对文件的操作,含栈、单链、数组管理员工信息,及时整理员工工资信息,可以经修改后直接用
  • 本文实例讲述了python3实现的简单工资管理系统。分享给大家供大家参考,具体如下:工资管理系统要求:1. 查询员工工资2. 修改员工工资3. 增加新员工记录4. 退出执行代码:#!/usr/bin/env python3# author:robert# --...

    本文实例讲述了python3实现的简单工资管理系统。分享给大家供大家参考,具体如下:

    工资管理系统要求:

    1. 查询员工工资

    2. 修改员工工资

    3. 增加新员工记录

    4. 退出

    执行代码:

    #!/usr/bin/env python3

    # author:robert

    # --*-- coding: utf-8 --*--

    def file_test():

    with open("info.txt",'r',encoding="utf-8") as f:

    file = list(f)

    return file

    def server():

    for i in range(1):

    print("1.查询员工工资\n2.修改员工工资\n3.增加新员工记录\n4.退出")

    return i

    loginsucces = false

    while true:

    i = server()

    serial_number = input("请选择你的服务>>:")

    if serial_number.isdigit():

    serial_number = int(serial_number)

    file = file_test()

    if serial_number < 5 and serial_number >= 0:

    if serial_number == 1:

    name = input("请输入要查询的员工姓名:").strip()

    for i in file:

    file = i.strip().split()

    if name in file:

    break

    for i in file:

    if name in file:

    name_sum = file[1]

    print("\033[32;1m%s的工资是:%s\033[0m\n"%(name,name_sum))

    break

    else:

    print("\033[31;1m没有此用户!\033[0m\n")

    elif serial_number == 2:

    name_old = input("请输入要修改的员工姓:").strip()

    for ii in file:

    file = ii.strip().split()

    if name_old in file:

    print(file)

    sum_old = file[1]

    name_alter,sum_alter = input("请输入修改的新员工姓名和工资,用空格分割:").strip().split()

    with open("info.txt","r",encoding="utf-8") as f:

    lines = f.readlines()

    with open("info.txt","w",encoding="utf-8") as f_a:

    for line in lines:

    if name_old in line:

    line = line.replace(name_old,name_alter)

    f_a.write(line)

    f_a.close()

    with open("info.txt", "r", encoding="utf-8") as f:

    lines = f.readlines()

    with open("info.txt", "w", encoding="utf-8") as f_b:

    for line in lines:

    if name_alter in line:

    line = line.replace(sum_old,sum_alter)

    f_b.write(line)

    f_b.close()

    print("修改成功")

    break

    if loginsucces == true: break

    else:

    print("\033[31;1m没有此用户!\033[0m\n")

    elif serial_number == 3:

    try:

    name_new, sum_new = input("请输入要增加的员工姓名和工资,用空格分割:").strip().split()

    except valueerror:

    print("\033[31;1m输入的参数不够!\033[0m\n")

    else:

    if name_new.isalpha() and sum_new.isdigit():

    for ii in file:

    file = ii.strip().split()

    if name_new not in file:

    with open("info.txt", "a+", encoding="utf-8") as f_c:

    f_c.write("\n%s %s"%(name_new,sum_new))

    print("增加成功")

    break

    if loginsucces == true: break

    else:

    print("\033[31;1m参数类型不对!\033[0m\n")

    elif serial_number == 4:

    print("\033[31;1m谢谢使用,下次再见!\033[0m\n")

    exit()

    else:

    print("\033[31;1m请输入正确的序号!\033[0m\n")

    else:

    print("\033[31;1m输入的不是整数!\033[0m\n")

    info.txt

    name salary

    alex 100000

    rain 80000

    egon 50000

    yuan 30000

    希望本文所述对大家python程序设计有所帮助。

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 系统基于jsp+mysql的人力资源管理(员工管理、工资管理系统,功能如下: 1.支持登陆、登出 2.部门管理模块:添加、删除、修改、按条件筛选部门 3.员工管理模块:员工添加、编辑、删除、按条件筛选查询 4.工资...
  • 百度网盘下载源代码:Demo....工资管理系统 一, 基本功能要求: 1)以密码登录系统 密码登录时读取文件info.txt(保存员工信息)和Admin.txt(保存管理员息) 如果密码错误或者用户账号不存在,会给出相应提示
  • 人事工资管理系统,旨在为公司提供一个高效的人事和工资管理系统,主要提供公司管理员工,管理部门,考勤,员工工资等几个功能模块。 员工模块使用分页技术实现展示员工信息,添加员工,删除员工,修改员工信息与...
  • 工资管理系统处理的事务主要有工资管理,员工信息管理,部门信息管理,职务信息管理,职称信息管理。职务和职称以及部门信息管理主要服务于工资管理和员工信息管理,系统接收的输入项目有员工信息,部门信息,职务...
  • 员工薪酬管理信息系统设计的目的就是开发一个功能实用,用户操作方便,易学易用的发放薪酬(包括基本工资,奖金与罚金)的微型高效管理软件。为此,经过系统调研、需求分析、概念设计、逻辑设计、物理设计系统...
  • 主要 用于实现课程系统办公人员对其办公系统内所有公务员进行管理,实现对员工信息的查询、录入、修改和删除;以及发布重要通知、最新信息和规章制度。通过“网上办公,无纸办公”,大大提高办公效率,体现现代政府的...
  • C++工资管理系统.doc

    2020-03-26 16:19:35
    C++工资管理系统 C++工资管理系统 C++工资管理系统 某大学 面向对象程序设计 课程设计报告...员工工资管理系统 一设计要求 用类函数和派生类来计算某公司雇员的工资通过多层派生和多重派生来实现对不同工资级别的工资管
  • C++工资管理系统.docx

    2020-11-25 20:41:37
    某大学 旬对象程序设计课程设计报告书 题目 工资管理系统(C++) 院 专 班 姓 学 系 软件学院 业 软件工程 级 名 号 课设时间 2016.12.22 指导教师 二O六年十二月 面向对象程序设计课程设计报告书 员工工资管理系统 一...
  • 工资管理系统源码下载

    万次阅读 2016-12-16 13:43:38
    数据库课程设计——薪资管理系统 ...为了管理现代化的要求,某单位建立一个工资管理系统。该系统管理员工的基本信息,以及计算出每位员工的工资,按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资;
  • 课程设计内容 课题描述 本系统是为某个公司编写雇员工资支付程序。 所完成的功能包括: 一般工人(Worker)按每月工作的天数计算工资; 销售人员(Salesman)在基本工资基础上每月还有销售提成; 经理(Manager)...
  • Java课程设计:采用Swing制作界面实现的人事管理系统源码 PPT,还包括论文,这套系统可完成三大功能:员工管理、工资管理、业绩管理,是一个典型的Java数据库信息管理系统,运用SWT技术设计主界面,漂亮实用,同时...
  • c语言课程设计 职工信息管理系统 系统功能简介: 系统以菜单方式工作 1)职工信息录入(文件保存职工信息) 2)输出职工信息、浏览职工信息 3)查询职工信息 4)根据员工号查找职工信息 5)根据工资、年龄、性别对...
  • 数据库课程设计 人事管理系统

    热门讨论 2010-01-05 09:28:46
    人事管理系统 员工基本信息表:员工编号,员工姓名,性别,年龄,政治面貌,住址,联系电话,备注 员工学历与工作信息表:员工编号,学历,工作经历,合同开始时间,合同结束时间 部门表:部门编号,部门名称,部门...
  • 10 届 第 2 学年 1 学期 Java 语言程序设计小组课程设计 报告书 小组名称 致知小组 小组题目 小型工资管理系统 专 业 信息管理与信息系统 班 级 6 班 姓 名 组长 钱海燕 组员 史丞玉 胡晓康 付爽 刘文婷 指导教师 任...
  • 数据库课程设计人力资源管理系统

    热门讨论 2009-11-27 18:51:50
    主要有十三个功能按纽,分别是:员工信息编辑,调动信息编辑,奖惩信息编辑,员工信息查询,考勤信息编辑,考勤信息查询,评价信息编辑,评价信息查询,工资编辑,工资查询,系统设定,打印员工档案,打印员工工资,...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

员工工资管理系统课程设计