⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zgglxt.c

📁 1.问题描述   对单位的职工进行管理
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct worker_node{
	int num,birth,salary,tel;
	char name[20],pos[20],edu[20],adr[20],sex[20];
	struct worker_node *next,*ps;
};
struct worker_node *head=NULL;
/*fuction for creating  workers' information' document*/
struct worker_node *creat()
{
	struct worker_node *head=NULL,*tail,*p;
	int size =sizeof(struct worker_node);
	int num,birth,salary,tel;
	char name[20],pos[20],edu[20],adr[20],sex[20];
	
	printf("Input the infomation of workers:\n");
	scanf("%d",&num);
	while(num)
	{
		scanf("%s%s%d%d%d%s%s%s",name,sex,&tel,&birth,&salary,pos,edu,adr);		//输入数据
		p = (struct worker_node*)malloc(size);									//申请空间用于保存输入的数据
		p->num=num;
		strcpy(p->name,name);
		strcpy(p->sex,sex);
		p->tel=tel;
		p->birth=birth;  
		p->salary=salary;
		strcpy(p->pos,pos);
		strcpy(p->edu,edu);
		strcpy(p->adr,adr);
		if(head==NULL)															//判断是否是第一次
			head=p;
		else
			tail->next=p;
		tail=p;																	//把输入的数据放到末尾
		scanf("%d",&num);
	}
	tail->next=NULL;															//末尾指针指向空
	
	return head;
}




/*fuction for printing workers'document*/


void display(struct worker_node*phead)
{
	struct worker_node *ps;
	
	if(phead==NULL)																//判断链表是否为空
		printf("No massage!\n");
	else
	{	
		for(ps=phead;ps;ps=ps->next)											//逐个输出内容,直到链表结束
			printf("%d,%s,%s,%d,%d\n%d,%s,%s,%s\n",ps->num,ps->name,ps->sex,ps->tel,
			ps->birth,ps->salary,ps->pos,ps->edu,ps->adr);
	}
}

struct worker_node *sort(struct worker_node *head)
{
	struct worker_node *p1,*p2;
	int num,birth,salary,tel;
	char name[20],pos[20],edu[20],adr[20],sex[20];
	
	for(p1=head;p1->next;p1=p1->next)
	{
		for(p2=p1->next;p2;p2=p2->next)
		{
			if(p1->salary < p2->salary)											//判断工资是否为降序
			{
				num=p1->num;p1->num=p2->num;p2->num=num;						//交换两个结构里的内容
				birth=p1->birth;p1->birth=p2->birth;p2->birth=birth;
				salary=p1->salary;p1->salary=p2->salary;p2->salary=salary;
				tel=p1->tel;p1->tel=p2->tel;p2->tel=tel;
				
				strcpy(name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,name);
				strcpy(pos,p1->pos);strcpy(p1->pos,p2->pos);strcpy(p2->pos,pos);
				strcpy(edu,p1->edu);strcpy(p1->edu,p2->edu);strcpy(p2->edu,edu);
				strcpy(adr,p1->adr);strcpy(p1->adr,p2->adr);strcpy(p2->adr,adr);
				strcpy(sex,p1->sex);strcpy(p1->sex,p2->sex);strcpy(p2->sex,sex);
			}
		}
	}
	
	return head;																//把排好序的链表返回
}

struct worker_node *del(struct worker_node *head)
{
	struct worker_node *ps;
	
	for(ps=head;ps;ps=ps->next)
	{
		if(ps->next->salary<=1000)												//判断条件:工资是否小于1000
		{
			ps->next=ps->next->next;											//把指针指向下一个,去除不需要的结点
		}
	}
	if(head->salary<=1000)														//判断头指针是否满足条件
		head=head->next;
	return head;
}
int main()
{
	int a,b,c;
	FILE *fp;
	struct worker_node *head,*p;
	printf("  欢 迎 进 入 职 工 信 息 管 理 系 统!\n") ;
	if((fp=fopen("worker.txt","r"))==NULL)
	{
		printf(" 职工信息还未录入.请录入!\n确认请按 1       取消请按 0 \n");
		scanf("%d",&b);
		if( b=1)
		{
			head=creat();
			
			if((fp=fopen("worker.txt","w"))==NULL)
			{
				printf("Open Failed!\n");
				return 1;
			}
			for(p=head;p;p=p->next)
				fprintf(fp,"%d,%s,%s,%d,%d\n%d,%s,%s,%s\n",p->num,p->name,p->sex,p->tel,
				p->birth,p->salary,p->pos,p->edu,p->adr);
			fclose(fp);
		}
		else if(b=0)
			printf("操作取消!\n");  
		else  printf("输入无效字符\n");
	}
	else
	{
		fclose(fp);
	}
	
	printf("请 选 择 你 所 需 的 功 能!\n 职工信息浏览请按 1 \n 查询(按工资)请按 2 \n 信息删除请按 3      ");
	scanf("%d", &a);
	if(a=1) 
		display(head);
	if(a=2){
		head=sort(head);
		display(head);
	}
	if(a=3){
		head=del(head);
		display(head);
	}
	printf(" 保存按 1    取消按 2\n");
	scanf("%d",&c);
	if(c=1)
	{
		if((fp=fopen("workersearch.txt","w"))==NULL)
		{
			printf("Open Failed!\n");
			return 1;
		}
		for(p=head;p;p=p->next)
			fprintf(fp,"%d,%s,%s,%d,%d\n%d,%s,%s,%s\n",p->num,p->name,p->sex,p->tel,
			p->birth,p->salary,p->pos,p->edu,p->adr);
		fclose(fp);
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -