单链表的应用——人事信息管理系统

// 闲来无事,写几行代码,温习一下单链表,功能不全,可补充。

///////////////////////////////////////////////////
/*Person Information Management System-PIMY
*功能菜单/////////////////////////////////////////
*1. 添加//////////////////////////////////////////
*2. 删除//////////////////////////////////////////
*	2.1按名字删除//////////////////////////////////
*	2.2按id删除////////////////////////////////////
*3. 查找//////////////////////////////////////////
*	3.1所有人//////////////////////////////////////
*	3.2按名字查找//////////////////////////////////
*	3.3按id查找////////////////////////////////////
*4. 退出//////////////////////////////////////////
*//////////////////////////////////////////////////
//*************************************************
///////////////////////////////////////////////////
////////////////Author: Mr Chen////////////////////
///////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
///////////////////////////////////////////////////
//the struct of person
typedef struct person
{
	char name[50];
	int age;
	char id[20];
	person *next;
} node,personList;

//Menu():design of the PIMY menu
void mainMenu()
{
	printf("\n");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t┃                  人事信息管理系统                    ┃\n");
	printf("\t\t┃﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌┃\n");
	printf("\t\t┃                      ◇Menu◇                        ┃\n");
	printf("\t\t┃           1........录入    2........查找             ┃\n");
	printf("\t\t┃           3........删除    4........退出             ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
//getCommand():接受用户操作指令
void searchMenu()
{
	printf("\n");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t┃                  人事信息管理系统                    ┃\n");
	printf("\t\t┃﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌┃\n");
	printf("\t\t┃                   ◇Search-Menu◇                    ┃\n");
	printf("\t\t┃           1........全部    2........名字             ┃\n");
	printf("\t\t┃           3........ID      4........退出             ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
void delMenu()
{
	printf("\n");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t┃                  人事信息管理系统                    ┃\n");
	printf("\t\t┃﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌┃\n");
	printf("\t\t┃                   ◇Delete-Menu◇                    ┃\n");
	printf("\t\t┃           1........全部    2........名字             ┃\n");
	printf("\t\t┃           3........ID      4........退出             ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
int getCommand()
{
	int c;
	printf("输入你的操作指令:");
	scanf("%d",&c);
	getchar();
	return c;
}
//create()
node *create()
{
	node *head;
	head = (node *)malloc(sizeof(node));
	head->next = NULL;
	return head;
}
//addPerson()
node *addPerson(node *head)
{
	node *p;
	int i = 0;
	int num;
	char buf[256];
	printf("需要录入的人数:");
	scanf("%d",&num);
	getchar();
	if(num<1)
	{
		printf("输入错误,人数必须大于0\n");
	}
	else{
		while(num-->0)
		{
			p = (node *)malloc(sizeof(node));
			printf("请出入第%d个人的信息:\n",(i++)+1);
			gets(buf);
			if(sscanf(buf,"%s%d%s",&p->name,&p->age,&p->id) !=3)
			{
				printf("There is a mistake\n");
			}
			else
			{
				p->next = head->next;
				head->next = p;
			}
		}
		printf("录入完毕!\n");
	}
	return head;
}

//showAllPerson():show all persons` information
void showAllPerson(node *head)
{
	node *p;

	printf("姓名\t年龄\tID\n");
	p = head->next;
	while(p!=NULL)
	{
		printf("%s\t%d\t%s\n",p->name,p->age,p->id);
		p = p->next;
	}
}
//searchName():根据名字查找个人信息
void searchName(node *head)
{
	node *p;

	char name[50];
	int i = 0;
	printf("请输入名字:");
	scanf("%s",&name);
	printf("姓名\t年龄\tID\n");
	p = head->next;
	while(p!=NULL)
	{
		if(strcmp(p->name,name)==0)
		{
			printf("%s\t%d\t%s\n",p->name,p->age,p->id);
			//	p = p->next;
			i++;
		}
		p = p->next;
	}
	if(i==0)
	{
		printf("查无此人!\n");
	}
}
//
void searchId(node *head)
{
	node *p;
	char id[20];
	int i = 0;
	printf("请输入ID:");
	scanf("%s",&id);
	printf("姓名\t年龄\tID\n");
	p = head->next;
	while(p!=NULL)
	{
		if(strcmp(p->id,id)==0)
		{
			printf("%s\t%d\t%s\n",p->name,p->age,p->id);
			i++;
		}
		p = p->next;
	}
	if(i==0)
	{
		printf("查无此人!\n");
	}
}

//search():一级菜单查找
void search(node *head)
{
	if(head->next ==NULL)
	{
		printf("系统信息为空,查找失败!\n");
	}
	else
	{
		searchMenu();
		int c = getCommand();
		switch(c)
		{
		case 1:
			showAllPerson(head);
			break;
		case 2:
			searchName(head);
			break;
		case 3:
			searchId(head);
			break;
		default:
			printf("输入有误!\n");
			break;
		}
	}
}
//deleteName():按名字删除
node *deleteName(node *head)
{
	node *p,*q;
	char name[50];
	p = head;
	q = head->next;

	printf("请输入名字:");
	scanf("%s",&name);

	while(q&&(strcmp(q->name,name)!=0))
	{
		p = q;
		q = q->next;
	}
	if(q)
	{
		if(p==head)
		{
			head->next = q->next;
		}
		else
		{
			p->next = q->next;
		}
		//	delete q;
		free(q);
		printf("删除完毕!\n");
	}
	else
	{
		printf("系统中没有此人!\n");
	}
	return head;
}
//deleteId():按ID删除
node *deleteId(node *head)
{
	node *p,*q;
	char id[20];
	p = head;
	q = head->next;

	printf("请输入ID:");
	scanf("%s",&id);
	while(q&&(strcmp(q->id,id)!=0))
	{
		p = q;
		q = q->next;
	}
	if(q)
	{
		if(p==head)
		{
			head->next = q->next;
		}
		else
		{
			p->next = q->next;
		}
		//	delete q;
		free(q);
		printf("删除完毕!\n");
	}
	else
	{
		printf("系统中没有此人!\n");
	}
	return head;
}
node *delAllPerson(node *head)
{
	node *p,*q;
	p = head->next;
	while(p!=NULL)
	{
		q = p;
		p = p->next;
		free(q);
	}
	head->next = NULL;
	printf("删除完毕!\n");
	return head;
}
//delete():一级菜单
node *delPerson(node *head)
{
	if(head->next==NULL)
	{
		printf("系统信息为空,删除失败!\n");
	}
	else
	{
		delMenu();
		int c = getCommand();
		switch(c)
		{
		case 1:
			head = delAllPerson(head);
			break;
		case 2:
			head = deleteName(head);
			break;
		case 3:
			head = deleteId(head);
			break;
		default:
			printf("输入有误!\n");
			break;
		}
	}
	return head;
}
//////////////////////////////////////////////////
//
int main()
{
	int c;
	node *head = create();
	while(1)
	{
		mainMenu();
		c = getCommand();
		switch(c)
		{
		case 1:
			head = addPerson(head);
			break;
		case 2:
			search(head);
			break;
		case 3:
			head = delPerson(head);
			break;
		case 4:
			printf("你已退出人事信息管理系统!\n");
			exit(0);
		default:
			printf("输入错误!\n");
			break;
		}
	}
	return 0;
}

运行结果:

时间: 2024-10-26 01:10:46

单链表的应用——人事信息管理系统的相关文章

基于Java EE技术的公司职员信息管理系统查询与统计功能的设计与实现

获取项目源文件,技术交流与指导联系Q:1225467431 摘要 二十一世纪的今天,随着互联网的普及与发展,计算机技术已经广泛的应用于人们的生产办公中,特别是信息的处理加工,更大大的推进着企业的生产效率的增长,企业管理信息化已经成为一个必然的趋势. 本课题研究并开发基于J2EE多层框架的人事信息管理系统.此系统不同于以往的人事信息管理软件,而是在互联网的大背景下,实现以数据库服务器来维护人事信息数据,浏览器客户端来动态访问服务器,这种采用B/S架构的管理系统,有利于充分利用互联网覆盖范围广,通信

校园学生消费信息管理系统(C++)

本人第一次写博客,也不知道该怎么写,只能按着自己能想到的思路来分享一下自己做的东西. 这个程序其实是我在大一下学期c++要求写的课程设计,奈何那时懂的不多,加上不好好学习,没能完整实现里面要求的功能.现在回过头来写,实在有不少感慨.这个课程设计要求编写代码实现校园学生消费信息记录,实现最基本的删除.修改.查询等功能,后来我添加了将信息保存到文件的功能. 说一下实现这个系统的思路吧.结构体是一个很好用的数据结构,将不同基本数据类型任意结合,是存储学生基本信息的最好结构.那么怎么对这个结构体进行管理

单链表之头插法的理解!

如图:头结点是*L...头结点一般储存单链表的长度的信息. 首节点是(*L)->next...是储存元素的值和下一个元素的位置的信息. 现在我想插入一个新的节点p... 第一:新节点的指针域指向首节点. 第二:修改头结点的指针域,使其指向新节点p. 重点语录 链表是以地址来发现元素的 链表读一个数据,系统就申请一个存储单元.二者是同步的 c++代码实现. #include<iostream.h> typedef int Elemtype; typedef struct node { El

指针、链表的原理和各类操作相关心得以及学生信息管理系统

伴随着学期末的到来,C语言程序设计这门课也接近尾声.经过前两次的教学,我们对C语言也有了深刻的了解,学习的内容也不断的加深.这次我们就学习了C语言程序设计里应用最广泛,也是最难学习的知识--链表和指针的应用. 关于指针和链表这两个的应用和上次的管理系统有着直接的关系,没有添加链表和指针的管理系统无法做到精确的查找.数据存储方面也显得不方便.所以指针和链表的作用能够直接指向你所需要的数据地址,使程序更加完善.这次我就利用指针的应用制作了一个管理员工工资等信息的程序. §1 指向结构体变量的指针变量

利用链表实现简单的学生信息管理系统

#include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct student{ int id; char name[20]; int age; char sex; char birthday[20]; char address[20]; char phone[15]; char email[30]; struct student *next;}student; student *head

数据结构之线性表(顺序表,单链表)——图书管理系统

顺序表: 代码如下: 1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 #include<iomanip> 5 using namespace std; 6 #define OK 1 7 #define ERROR 0 8 #define OVERFLOW -2 9 typedef int Status; 10 typedef int ElemType; 11 12 #define M

学生信息管理系统修改

北京工业大学耿丹学院 c语言设计课程报告   课程设计名称:高级语言程序设计 专业班级:计算机科学与技术1 姓名:吴双 学号:150809201   2016年5月10日 一 对c语言指针链表的体会 ------------------------ 二 修改学生信息管理系统 ------------------------ 三 体会 ------------------------ 一 对c语言指针链表的体会 1.指针 简单来说,指针是一个存储计算机内存地址的变量. 用 int *ptr 这种形

如何使用C++实现单链表

线性表--链表 为什么假期也在发文章 //TODO NullGirlfrindException 请忽略以上两行无聊的事实...... 如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候,却需要移动大量的元素,效率较低,那么是否有一种方法可以改善或者解决这个问题呢? 首先我们需要考虑,为什么顺序表中的插入删除操作会涉及到元素的移动呢? 好家伙,问题就

自写信息管理系统——C实现

信息管理系统 简介: 该管理系统分为三个权限:学生,老师,管理员 用双向链表实现,文件储存,有账号密码功能. 密码实现MD5加密,较难破解 实现了链表添加,查找,排序,删除等基本操作 共分为6个文件 5个.cpp文件  1个.h文件 下面上代码 : mian.cpp: #include<stdio.h> #include<math.h> #include<string.h> #include<conio.h> #include<stdlib.h>