05 设计异质链表实现学校人员管理.docx

上传人:b****8 文档编号:11422653 上传时间:2023-03-01 格式:DOCX 页数:20 大小:17.49KB
下载 相关 举报
05 设计异质链表实现学校人员管理.docx_第1页
第1页 / 共20页
05 设计异质链表实现学校人员管理.docx_第2页
第2页 / 共20页
05 设计异质链表实现学校人员管理.docx_第3页
第3页 / 共20页
05 设计异质链表实现学校人员管理.docx_第4页
第4页 / 共20页
05 设计异质链表实现学校人员管理.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

05 设计异质链表实现学校人员管理.docx

《05 设计异质链表实现学校人员管理.docx》由会员分享,可在线阅读,更多相关《05 设计异质链表实现学校人员管理.docx(20页珍藏版)》请在冰豆网上搜索。

05 设计异质链表实现学校人员管理.docx

05设计异质链表实现学校人员管理

第5章设计异质链表实现学校人员管理

5.5源程序代码

/*****************************************************************************/

/*

模块名称:

12.cpp

功能描述:

这是一个非多态方法实现的异质链表程序

创建人:

修改记录:

*/

#include

#include

#include

//枚举三种节点类型

enumnode_type{student,staff,professor};

//结构体,表示学生的特殊信息

structstudent_type

{

floataverage;//平均分

intgrade;//年级

};

/*************************************************************************/

/*

函数名称:

node

功能描述:

定义类node

修改记录:

*/

classnode

{

friendclasslist;

private:

charname[15];//姓名

charsex[2];//性别

intage;//年龄

charID[20];//身份证号

charaddress[30];//地址

longphone;//电话

node_typetype;//节点类型

//联合,定义单一节点类型

union

{

student_types;

floatannual_salary;

floathourly_salary;

};

node*next;

public:

node(char*name1,char*sex1,intage1,char*id1,char*address1,longphone1,node_typetype1)

{

strcpy(name,name1);

strcpy(sex,sex1);

age=age1;

strcpy(ID,id1);

strcpy(address,address1);

phone=phone1;

type=type1;

next=0;

}

node()

{

name[0]='\0';

sex[0]='\0';

age=0;

ID[0]='\0';

address[0]='\0';

phone=0;

next=0;

}

/*************************************************************************/

/*

函数名称:

set_node_type

功能描述:

设置节点的类型

修改记录:

*/

voidset_node_type(node_typetype1)

{

type=type1;

}

/*************************************************************************/

/*

函数名称:

set_name

功能描述:

设置姓名

修改记录:

*/

voidset_name(char*name1)

{

strcpy(name,name1);

}

/*************************************************************************/

/*

函数名称:

set_sex

功能描述:

设置性别

修改记录:

*/

voidset_sex(char*sex1)

{

strcpy(sex,sex1);

}

/*************************************************************************/

/*

函数名称:

set_age

功能描述:

设置年龄

修改记录:

*/

voidset_age(intage1)

{

age=age1;

}

/*************************************************************************/

/*

函数名称:

set_ID

功能描述:

设置身份证号

修改记录:

*/

voidset_ID(char*id1)

{

strcpy(ID,id1);

}

/*************************************************************************/

/*

函数名称:

set_address

功能描述:

设置地址

修改记录:

*/

voidset_address(char*address1)

{

strcpy(address,address1);

}

/*************************************************************************/

/*

函数名称:

set_phone

功能描述:

设置电话号码

修改记录:

*/

voidset_phone(longphone1)

{

phone=phone1;

}

/*************************************************************************/

/*

函数名称:

set_average

功能描述:

设置学生的平均分

修改记录:

*/

voidset_average(floataverage1)

{

s.average=average1;

}

/*************************************************************************/

/*

函数名称:

set_grade

功能描述:

设置学生的年级

修改记录:

*/

voidset_grade(intgrade1)

{

s.grade=grade1;

}

/*************************************************************************/

/*

函数名称:

set_annual_salary

功能描述:

设置教授的年薪

修改记录:

*/

voidset_annual_salary(floatsalary)

{

annual_salary=salary;

}

/*************************************************************************/

/*

函数名称:

set_annual_salary

功能描述:

设置教工的小时工资

修改记录:

*/

voidset_hourly_salary(floathsalary)

{

hourly_salary=hsalary;

}

};

/*************************************************************************/

/*

函数名称:

list

功能描述:

list类的定义

修改记录:

*/

classlist

{

private:

node*root;

public:

list()

{

root=0;

}

voidinsert(node*n);

voidremove(char*id1);

voidsearch(char*id1);

voidprint_list();

};

/*************************************************************************/

/*

函数名称:

insert

功能描述:

插入节点

修改记录:

*/

voidlist:

:

insert(node*n)

{

//list以ID为关键字排序,ID从小到大的顺序进行排列

charkey[18];

strcpy(key,n->ID);

node*current_node=root;

node*previous=0;

while(current_node!

=0&&strcmp(current_node->ID,key)<0)

{

previous=current_node;

current_node=current_node->next;

}

node*new_node=newnode(n->name,n->sex,n->age,n->ID,n->address,n->phone,n->type);

switch(n->type)

{

casestudent:

new_node->s.grade=n->s.grade;

new_node->s.average=n->s.average;

break;

caseprofessor:

new_node->annual_salary=n->annual_salary;

break;

casestaff:

new_node->hourly_salary=n->hourly_salary;

}

new_node->next=current_node;

if(previous==0)

root=new_node;

else

previous->next=new_node;

}

此函数的效果图可以参考图5.2。

/*************************************************************************/

/*

函数名称:

remove

功能描述:

删除节点

修改记录:

*/

voidlist:

:

remove(char*id1)

{

node*current_node=root;

node*previous=0;

while(current_node!

=0&&strcmp(current_node->ID,id1)<0)

{

previous=current_node;

current_node=current_node->next;

}

if(current_node!

=0&&previous==0)

{

root=current_node->next;

deletecurrent_node;

cout<<"身份证号:

"<

"<

}

elseif(current_node!

=0&&previous!

=0)

{

previous->next=current_node->next;

deletecurrent_node;

cout<<"身份证号:

"<

"<

}

else

cout<<"对不起,链表中没有这个人员的信息!

"<

}

此函数的效果图可以参考图5.3。

/*************************************************************************/

/*

函数名称:

print_list

功能描述:

显示整个链表

修改记录:

*/

voidlist:

:

print_list()

{

node*cur=root;

while(cur!

=0)

{

cout<<"\t姓名:

\t\t"<name<

cout<<"\t性别:

\t\t"<sex<

cout<<"\t年龄:

\t\t"<age<

cout<<"\t身份证号:

\t"<ID<

cout<<"\t地址:

\t\t"<address<

cout<<"\t电话号码:

\t"<phone<

switch(cur->type)

{

casestudent:

cout<<"\t人员身份:

\t学生"<

cout<<"\t平均分:

\t"<s.average<

cout<<"\t年级:

\t\t"<s.grade<

break;

caseprofessor:

cout<<"\t人员身份:

\t教授"<

cout<<"\t年薪:

\t\t"<annual_salary<

break;

casestaff:

cout<<"\t人员身份:

\t教工"<

cout<<"\t小时工资:

\t"<hourly_salary<

break;

}

cur=cur->next;

cout<

}

}

此函数的效果图可以参考图5.4。

/*************************************************************************/

/*

函数名称:

search

功能描述:

查询节点信息

修改记录:

*/

voidlist:

:

search(char*id1)

{

node*current_node=root;

node*previous=0;

while(current_node!

=0&&strcmp(current_node->ID,id1)<0)

{

previous=current_node;

current_node=current_node->next;

}

if(current_node!

=0)

{

cout<<"\t姓名:

\t\t"<name<

cout<<"\t性别:

\t\t"<sex<

cout<<"\t年龄:

\t\t"<age<

cout<<"\t身份证号:

\t"<ID<

cout<<"\t地址:

\t\t"<address<

cout<<"\t电话号码:

\t"<phone<

switch(current_node->type)

{

casestudent:

cout<<"\t人员身份:

\t学生"<

cout<<"\t平均分:

\t"<s.average<

cout<<"\t年级:

\t\t"<s.grade<

break;

caseprofessor:

cout<<"\t人员身份:

\t教授"<

cout<<"\t年薪:

\t\t"<annual_salary<

break;

casestaff:

cout<<"\t人员身份:

\t教工"<

cout<<"\t小时工资:

\t"<hourly_salary<

break;

}

}

else

cout<<"对不起,没有找到这个人!

"<

}

此函数的效果图可以参考图5.5。

/*************************************************************************/

/*

函数名称:

main

功能描述:

主函数

修改记录:

*/

voidmain()

{

inti=1;

cout<

cout<<"----------------------------------------------------------------"<

cout<<"**"<

cout<<"欢迎进入异质链表的非多态性实现程序"<

cout<<"**"<

cout<<"-----------------------------------------------------------------"<

listpeople;

nodetemp;

charna[15];

charsex[2];

intage;

charID[20];

charadd[30];

longph;

inttype;

floatannual_salary;

floathourly_salary;

floataverage;

intgrade;

while(i)

{

cout<

cout<<"请选择您的查询内容:

"<

cout<<"1.链表中插入节点;"<

cout<<"2.链表中删除节点;"<

cout<<"3.显示整个链表;"<

cout<<"4.查询链表中的节点;"<

cout<<"0.退出;"<

cout<<"请选择按键(0-4):

";

cin>>i;

cout<

//判断输入,0退出

if(i>=0&&i<=4)

{

switch(i)

{

//case1:

链表中插入节点

case1:

{

cout<<"\t请输入姓名:

";

cin>>na;

cout<<"\t请输入性别:

";

cin>>sex;

cout<<"\t请输入年龄:

";

cin>>age;

cout<<"\t请输入身份证号:

";

cin>>ID;

cout<<"\t请输入家庭地址:

";

cin>>add;

cout<<"\t请输入电话号码:

";

cin>>ph;

cout<<"\t请输入人员类别(0:

student;1:

professor;2:

staff):

";

cin>>type;

//输入三种人员的不同信息

switch(type)

{

//学生信息

case0:

cout<<"\t请输入平均分:

";

cin>>average;

cout<<"\t请输入年级:

";

cin>>grade;

temp.set_average(average);

temp.set_grade(grade);

temp.set_node_type(student);

break;

//教授信息

case1:

cout<<"\t请输入年薪:

";

cin>>annual_salary;

temp.set_annual_salary(annual_salary);

temp.set_node_type(professor);

break;

//教工信息

case2:

cout<<"\t请输入小时工资:

";

cin>>hourly_salary;

temp.set_hourly_salary(hourly_salary);

temp.set_node_type(staff);

break;

}

temp.set_name(na);

temp.set_sex(sex);

temp.set_age(age);

temp.set_ID(ID);

temp.set_address(add);

temp.set_phone(ph);

people.insert(&temp);

break;

}

//删除节点信息

case2:

{

cout<<"请输入要删除的人员的身份证号:

";

cin>>ID;

people.remove(ID);

break;

}

//显示链表所有节点

case3:

people.print_list();

break;

//查询链表中的节点

case4:

cout<<"请输入要查询的人员的身份证号:

";

cin>>ID;

people.search(ID);

break;

}

}

else

cout<<"按键错误,请重新选择!

"<

cout<

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1