#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
//定义成员信息结构体(成员编号、姓名、年龄、性别、职位)
typedef struct student_inf{
char name_mber[20];
char posit_mber[20];
char gender_mber[10];
int age_mber;
int serial_num;
struct student_inf * next;
}*linklist;
linklist creat(void);
int show_all(linklist head);
int enquiry(linklist head);
int update(linklist head);
int delete_inf(linklist head);
int exit_list(void);
int search_serial_num(linklist head);
int search_name(linklist head);
int insert(linklist head);
int main( int argc, char * argv[] )
{
int i,flag_exit=0;
linklist head=NULL;
head=(linklist)malloc(sizeof(linklist));
while(1)
{
//1.清屏并清空缓存
system("cls");
fflush(stdin);
printf("---------------------xxxxx---------------------\n");
printf("| 人员信息系统 |\n");
printf("|菜单(输入序号): |\n");
printf("| 1.录入成员信息 |\n");
printf("| 2.显示所有成员信息 |\n");
printf("| 3.信息查询 |\n");
printf("| 4.修改成员信息 |\n");
printf("| 5.删除信息 |\n");
printf("| 6.插入信息 |\n");
printf("| 0.退出系统 |\n");
printf("-----------------------------------------------\n");
//2.选择功能
scanf("%d",&i);
switch(i)
{
case 1:
//2.1进入创建链表函数
head=creat();
break;
case 2:
//2.2进入显示信息函数
show_all(head);
break;
case 3:
//2.3进入查询信息函数
enquiry(head);
break;
case 4:
//2.4进入修改信息函数
update(head);
break;
case 5:
//2.5进入删除信息函数
delete_inf(head);
break;
case 6:
//2.6进入插入信息函数
insert(head);
break;
case 0:
//2.7将提出程序标志位赋为1
flag_exit=1;
printf("感谢使用!!!!!\n");
break;
default:
//2.8未找到以上功能
printf("此项正在功能更新中!");
system("pause");
break;
}
//3.检查是否退出该程序
if(flag_exit==1)
{
break;
}
}
return 0;
}
//插入信息
int insert(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
// 2.清空缓存
system("cls");
fflush(stdin);
linklist new_inf=NULL,obj=NULL;
int insert_num,find_flag=0;
obj=head->next;
//3.选择在哪插入新信息
printf("在哪位成员编号后插入新成员(如:在成员编号2后插入新成员):");
scanf("%d",&insert_num);
//4.开始添加新信息
while(obj!=NULL)
{
// 4.1 找到要添加新信息的位置
if(obj->serial_num==insert_num)
{
//4.1.1清屏并添加新信息
system("cls");
new_inf=(linklist)malloc(sizeof(linklist));
printf("请输入成员信息:(成员编号 姓名 性别 年龄 职务)\n");
printf("成员编号:");
scanf("%d",&new_inf->serial_num);
printf("姓名:");
scanf("%s",new_inf->name_mber);
printf("性别:");
scanf("%s",new_inf->gender_mber);
printf("年龄:");
scanf("%d",&new_inf->age_mber);
printf("职务:");
scanf("%s",new_inf->posit_mber);
//4.1.2将新信息加入到该信息表中
new_inf->next=obj->next;
obj->next=new_inf;
find_flag=1;
break;
}
//4.2未找到就继续向下找
obj=obj->next;
}
//5.检查是否成功添加新信息
if(find_flag==1)
{
printf("插入成功!!!\n");
// 汇编:RET / RETI
}
else
{
printf("未找到此对象\n");
}
system("pause");
return 0;
}
//查询成员信息(选择查询方式)
int enquiry(linklist head)
{
// sleep ...
// timeval
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
int method,flag_enqry=0;
//2.选择查询方式
while(1)
{
//2.1清屏并清空缓存
system("cls");
fflush(stdin);
//2.2选择查询方式
printf("请输入序号选择(1.成员编号查询 2.姓名查询 0.退出):");
scanf("%d",&method); // block ...
switch(method)
{
case 1:
//2.2.1通过序号查询
search_serial_num(head);
break;
case 2:
//2.2.2通过姓名查询
search_name(head);
break;
case 0:
//2.2.3退出查询
flag_enqry=1;
break;
}
//2.3检查退出标志
if(flag_enqry==1)
{
break;
}
}
return 0;
}
//修改成员信息
int update(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
//2.清屏并清空缓存
system("cls");
fflush(stdin);
int num_updt,flag_up=0;
linklist updt_head=NULL;
//3.输入要修改信息的成员编号
printf("请输入要修改的成员编号:");
scanf("%d",&num_updt);
updt_head=head->next;
//4.从链表中寻找与该编号相同信息
while(updt_head!=NULL)
{
//4.1编号与要查询的编号相同则开始修改
if(updt_head->serial_num==num_updt)
{
printf("修改编号:");
scanf("%d",&updt_head->serial_num);
printf("修改姓名:");
scanf("%s",updt_head->name_mber);
printf("修改性别:");
scanf("%s",updt_head->gender_mber);
printf("修改年龄:");
scanf("%d",&updt_head->age_mber);
printf("修改职务:");
scanf("%s",updt_head->posit_mber);
//4.2找到相同的编号后将标志位赋为1并退出循环
flag_up=1;
break;
}
updt_head=updt_head->next;
}
//5.检查是否找到该编号
if(flag_up==1)
{
printf("修改成功\n");
}
else
{
printf("未找到此成员编号\n");
}
system("pause");
return 0;
}
//删除成员信息
int delete_inf(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
//2.清屏并清空缓存
system("cls");
fflush(stdin);
linklist fro=NULL,obj=NULL;
int find_flag=0,dlt_srial_num;
//3.输入要删除的成员编号
printf("请输入要删除的成员编号:");
scanf("%d",&dlt_srial_num);
fro=obj=head;
//4.从链表中寻找与该编号相同信息
while(obj!=NULL)
{
//4.1编号相同则将指向它的指针去指向它指向的指针
if(obj->serial_num==dlt_srial_num)
{
fro->next=obj->next;
//4.1.1找到该编号后将标志位赋为1
find_flag=1;
break;
}
//4.2编号不同则将这一次变为上一次,然后这一次后移一个
fro=obj;
obj=obj->next;
}
//5.检查是否找到该编号
if(find_flag==1)
{
printf("删除成功!\n");
}
else
{
printf("未找到删除对象\n");
}
system("pause");
return 0;
}
//录入成员信息
linklist creat( void )
{
int flag_creat;
//1.创建头结点、尾结点和成员结点
linklist head = NULL, end = NULL, note = NULL;
head=(linklist)malloc(sizeof(linklist));
end=head;
//2、开始创建结点
while(1)
{
//2.1清屏并清空缓存
system("cls");
fflush(stdin);
//2.2开始创建新结点并输入结点信息
note=(linklist)malloc(sizeof(linklist));
printf("请输入成员信息:(成员编号 姓名 性别 年龄 职务)\n");
printf("成员编号:");
scanf("%d",¬e->serial_num);
printf("姓名:");
scanf("%s",note->name_mber);
printf("性别:");
scanf("%s",note->gender_mber);
printf("年龄:");
scanf("%d",¬e->age_mber);
printf("职务:");
scanf("%s",note->posit_mber);
end->next =note;
end=note;
//2.3输入0退出输入其他则继续创建
printf("输入下一位成员(1) 退出并保存(0)\n") ;
scanf("%d",&flag_creat);
if(flag_creat==0)
{
break;
}
}
//3.将尾结点指向的下一个指针赋为NULL
end->next =NULL;
return head;
}
//显示全部成员信息
int show_all(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
int flag_show;
//2.清屏并清空缓存
fflush(stdin);
system("cls");
linklist inst_head=NULL;
inst_head=head;
inst_head=inst_head->next;
//3.一直循环到链表末尾
while(inst_head!=NULL)
{
//3.1打印出成员相关信息
printf("编号:%d\t",inst_head->serial_num);
printf("姓名:%s\t",inst_head->name_mber);
printf("性别:%s\t",inst_head->gender_mber);
printf("年龄:%d\t",inst_head->age_mber);
printf("职务:%s\n",inst_head->posit_mber);
//3.2指向下一位
inst_head=inst_head->next;
}
//4.输入0返回主菜单
printf("按0返回主菜单\n");
while(1)
{
scanf("%d",&flag_show);
if(flag_show==0)
{
break;
}
}
return 0;
}
//通过成员编号查询成员信息
int search_serial_num(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
//2.清屏并清空缓存
system("cls");
fflush(stdin);
int num_search,flag_sn=0;
linklist ser_head=NULL;
//3输入要查询的成员编号
printf("请输入要查询的人员编号:");
scanf("%d",&num_search);
ser_head=head->next;
//4.寻找该编号
while(ser_head!=NULL)
{
//4.1编号相同则打印其信息
if(ser_head->serial_num==num_search)
{
printf("编号:%d\t",ser_head->serial_num);
printf("姓名:%s\t",ser_head->name_mber);
printf("性别:%s\t",ser_head->gender_mber);
printf("年龄:%d\t",ser_head->age_mber);
printf("职务:%s\n",ser_head->posit_mber);
//4.1.1找到编号后将标志位赋1
flag_sn=1;
break;
}
//4.2继续向下找
ser_head=ser_head->next;
}
//5.检测是否找到该编号
if(flag_sn==0)
{
printf("未找到编号为%d的成员",num_search);
}
system("pause");
fflush(stdin);
return 0;
}
//通过名字查询成员信息
int search_name(linklist head)
{
//1.检查是否为野指针
if ( head==NULL )
{
return -1;
}
//2.清屏并清空缓存
system("cls");
fflush(stdin);
int flag_sn=0;
char name_search[20];
linklist ser_head=NULL;
//3输入要查询的成员姓名
printf("请输入要查询的人员姓名:");
scanf("%s",name_search);
ser_head=head->next;
//4.寻找该姓名
while(ser_head!=NULL)
{
//4.1姓名相同则打印其信息
if(strcmp(ser_head->name_mber,name_search)==0)
{
printf("编号:%d\t",ser_head->serial_num);
printf("姓名:%s\t",ser_head->name_mber);
printf("性别:%s\t",ser_head->gender_mber);
printf("年龄:%d\t",ser_head->age_mber);
printf("职务:%s\n",ser_head->posit_mber);
//4.1.1找到姓名后将标志位赋1
flag_sn=1;
break;
}
//4.2继续向下找
ser_head=ser_head->next;
}
//5.检测是否找到该姓名
if(flag_sn==0)
{
printf("未找到姓名为%s的成员",name_search);
}
system("pause");
fflush(stdin);
return 0;
}