人事管理系统 c语言版

int menu(){
printf("请按提示输入完成操作!\n");  
printf("1.查询员工信息\n");  
printf("2.统计员工数量\n");  
printf("3.录入员工信息\n");  
printf("4.删除员工信息\n");  
printf("5.按id排序所有员工\n"); 
printf("6.打印所有员工信息\n");
printf("7.退出系统\n");   
return 0;

}

如menu()函数所示,该系统一共有7个功能


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct emp{
	int id;
	char name[50];
	struct emp * next;
//	struct emp * prev;
};

struct emp * initList();

struct emp * addListTailNode(struct emp * head);

struct emp * deleteListNode(struct emp * head,int id);

struct emp * searchEmp(struct emp * head,int id);

int printList(struct emp * l);

int printNode(struct emp * p);

struct emp * sortList(struct emp * head);

int getListLen(struct emp * head);

int writeToDisk(struct emp * head);

struct emp * readFromDisk();

int menu();

int usage(struct emp * head);



#include "emp.h"

int main(){
	struct emp * head;
	head=readFromDisk();
	usage(head);
	return 0;
}

struct emp * initList(){
	struct emp * head;
	head=(struct emp *)malloc(sizeof(struct emp));
	head->next=NULL;
	return head;
}

struct emp * addListTailNode(struct emp * head){  
	int id;  
	char name[50];   
	struct emp * p, * last , * check;  
	last = head;  
	while(last->next!=NULL){  
		last=last->next;  
	}  
	printf("依次输入:员工id号,姓名!\n");  
	scanf("%d%s",&id,&name);  
	check = head;  
	while(check!=last){  //遍历 
		check=check->next;
		if(id==check->id){  
			printf("添加失败!员工id号重复!\n");  
			return head;  
		}  
	}  
	p=(struct emp *)malloc(sizeof(struct emp));   
	p->id=id;  
	strcpy(p->name,name);  
	//
	last->next=p;    
	last=p;    
	p->next=NULL;  
	printf("%s员工信息已添加!\n",p->name);  
	return head;  
}  

struct emp * deleteListNode(struct emp * head,int id){  
	struct emp * p,* q;  
	p = head->next;  
	while(p!=NULL){  
		if(p->next->id==id){  
			break;  
		}  
		p=p->next;  
	}  
	if(head->next==NULL){  
		printf("书籍信息为空!删除失败!\n");  
	}  
	else{    
		q = p->next;
		p->next = q->next;
		printf("%s书籍信息被删除!\n",q->name); 
		free(q);  
	}  
	return head;  
}  

struct emp * searchEmp(struct emp * head,int id){//查询,返回节点信息  
	struct emp * p;  
	p = head->next;  
	while(p!=NULL){  
		if(p->id==id){  
			break;  
		}  
		p=p->next;  
	}  
	return p;  
} 

int printNode(struct emp * p){//打印节点信息  
	if(p!=NULL){  
		printf("员工id: %d    员工姓名:%s\n",p->id,p->name);  
	}  
	else{  
		printf("系统内无该员工信息!\n");  
	}  
	return 0;  
}  

int printList(struct emp * head){  //打印整条链表
	struct emp * p;  
	p = head->next;  
	while(p!=NULL){  
		printNode(p);  
		p=p->next;  
	}  
	return 0;  
}  

struct emp * sortList(struct emp * head){//排序
	struct emp * p,* q;
	int temp_id;
	char temp_name[50];
	for(p=head->next;p!=NULL;p=p->next){
		for(q=p->next;q!=NULL;q=q->next){
			if(p->id>q->id){
				temp_id = q->id;
				q->id = p->id;
				p->id = temp_id;
				//
				strcpy(temp_name,q->name);
				strcpy(q->name,p->name);
				strcpy(p->name,temp_name);
			}
		}
	}
	return head;
}

int getListLen(struct emp * head){
	int len=0;
	struct emp * p;
	p=head->next;
	while(p!=NULL){
		len++;
		p=p->next;
	}
	return len;
}

int writeToDisk(struct emp * head){
	FILE * fp;
	struct emp * p;
	if((fp = fopen("D:\\emp.hhtx", "w")) == 0){
		printf("写入失败……!\n");
		return 0;
	}
	//
	p=head->next;
	while(p!=NULL){
		fwrite(p,sizeof(struct emp),1,fp);
		printf("%d  %s\n",p->id,p->name);
		p=p->next;
	}
	fclose(fp);
	return 0;
}

struct emp * readFromDisk(){
	FILE * fp;  
	struct emp * head,* last,* p,* temp;
	head = initList();
	if((fp = fopen("D:\\emp.hhtx", "r")) == 0){
		printf("加载失败……未找到存档数据!\n\n");
		return head;
	}
	//
	last = head;  
	p=(struct emp *)malloc(sizeof(struct emp));  
	while(p!=NULL){
		p=(struct emp *)malloc(sizeof(struct emp));  
		fread(p,sizeof(struct emp),1,fp);
		printf("读取数据: %d  %s\n",p->id,p->name); 
		//
		last->next=p;    
        last=p;    
		p=p->next;
	}
	fclose(fp);
	printf("系统数据初始化完成!");
	return head;
}

int menu(){
	printf("请按提示输入完成操作!\n");  
	printf("1.查询员工信息\n");  
	printf("2.统计员工数量\n");  
	printf("3.录入员工信息\n");  
	printf("4.删除员工信息\n");  
	printf("5.按id排序所有员工\n"); 
	printf("6.打印所有员工信息\n");
	printf("7.退出系统\n");   
	return 0;
}

int usage(struct emp * head){
	int x,id;   
	struct emp * p;
	menu();
	while(1){  
		printf("请输入序列号:");  
		scanf("%d",&x);  
		switch(x){  
		case 1:  
			printf("输入所要查询的员工的id号:");  
			scanf("%d",&id);  
			p = searchEmp(head,id);  
			printNode(p);  
			printf("---------------------------------\n");  
			break; 
		case 2:
			printf("系统中一共存在%d个员工\n",getListLen(head));
			break;
		case 3:   
			head=addListTailNode(head);  
			printf("---------------------------------\n");  
			break;  
		case 4:  
			printf("输入所要删除的员工的id号:");  
			scanf("%d",&id);  
			head=deleteListNode(head,id);  
			printf("---------------------------------\n");  
			break; 
		case 5:
			printf("排序开始……\n");
			head=sortList(head);
			printf("排序已完成!\n");
			printf("---------------------------------\n");  
			break;
		case 6:  
			printList(head);  
			printf("---------------------------------\n");  
			break;  
		case 7:    
			writeToDisk(head);
			printf("保存完成……\n");
			printf("已退出系统!\n");  
			printf("---------------------------------\n"); 
			return 0; 
		default:
			return 0;  
		}  
	}  
	return 0;
}



系统功能如下: 1)系统以菜单方式工作 具有主控界面,用户按照主控界面提示选择相应的功能; 2)系统录入并保存功能 要求用户输入一条新的员工信息,这些信息保存在结构体类型数组中空的元素的各字段中,并写入到文件中进行保存; 3)系统修改功能 根据用户输入的待修改的员工编号,查找该员工的编号的记录,若找到该记录,则修改除员工编号外的字段的值,若未找到该记录,提示用户“未找到符合要求的记录”; 4)系统删除功能 根据用户输入的待删除的员工编号,查找该员工编号的记录,若找到该记录,则将此人的相关数据删除,若未找到该记录,提示用户“未找到符合要求的记录”; 5)系统查询功能(多种查询方式) 用户可以按照员工编号或姓名等字段在结构体数组中进行查找,若能找到该记录,则以打印输出此记录的信息,否则,打印出“未找到该记录”的提示信息; 用户可以输入一个工资段,如<3000,可查询该工资段的人数并在屏幕上显示输出,显示结果如下: 请输入查询的工资段:<3000 工资段 人数 员工编号 <3000 10 ............ 6)系统浏览记录功能 用户可以直接浏览所有员工信息,要求库中存在10条以上记录,用户可以设置每次显示记录的条数来显示系统中的所有记录情况; 7)系统其他功能模块 根据课题适当加入相应的扩展功能,自由发挥; 注:主要完成从磁盘文件中读出记录信息到数组中,供执行期间的各种操作,文件可以是顺序文件,数组长度可固定(如100); 员工信息包括员工编号、姓名、工资、学历、职务、电话等;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值