1. 程式人生 > >人事管理系統 c語言版

人事管理系統 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;
}