📄 sortmodify.cpp
字号:
/*Link Modify(Link Head)
{// 修改单一个节点。
Link ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,post,department;
//unsigned short int year;
//unsigned int wage;
string year,wage;
if(ptr->Next)
{
cout<<"\n-----------你现在可以修改此职工的信息了----------"<<endl;
//数据域。
cout<<"请输入职工编号:";
cin>>code;
cout<<endl<<"请输入职工姓名:";
cin>>name;
cout<<endl<<"请输入职工出生年份:";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。"<<endl;
cin.clear();
fflush(stdin);
cin>>year;
}
cout<<endl<<"请输入职工性别(1.男/2.女):";
cin>>sex;
cout<<endl<<"请输入职工职称:";
cin>>post;
cout<<endl<<"请输入职工部门:";
cin>>department;
cout<<endl<<"请输入职工工资:";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。"<<endl;
cin.clear();
fflush(stdin);
cin>>wage;
}
cout<<endl;
ptr->Next->m_Code=code;//因ptr是前趋节点,所以要用ptr->Next;
ptr->Next->m_Name=name;
ptr->Next->m_Year=year;
ptr->Next->m_Sex=sex;
ptr->Next->m_Post=post;
ptr->Next->m_Department=department;
ptr->Next->m_Wage=wage;
/*strcpy(ptr->Next->m_Code,code);//因ptr是前趋节点,所以要用ptr->Next;
strcpy(ptr->Next->m_Name,name);
strcpy(ptr->Next->m_Year,year);
strcpy(ptr->Next->m_Sex,sex);
strcpy(ptr->Next->m_Post,post);
strcpy(ptr->Next->m_Department,department);
strcpy(ptr->Next->m_Wage,wage); */
/* cout<<"你的修改已经成功了!"<<endl;
}
else
cout<<"没找到此职工的记录,无法修改。"<<endl;
return Head;
}*/
//修改职工信息函数
Link Modify(Link Head)
{// 修改单一个节点。
string co;
cout<<"输入你要修改的职工编号:"; cin>>co;
Link ptr;
Link ptr_front;
ptr_front=Head;
while(ptr_front){
ptr=ptr_front->Next;
if(ptr==NULL) break;
else if(ptr->m_Code==co){ break;//找到,为ptr
}
ptr_front=ptr_front->Next;
}
//string code,name,sex,post,department,year;
//unsigned int wage;
cout<<"找到一条记录如下:\n";
cout<<"---------------------------------------------------------------\n";
cout<<"职工编号 职工姓名 出生日期 性别\t职称\t 部门\t 工资\n";
Display_Node(ptr);
cout<<"---------------------------------------------------------------\n";
cout<<"请输入你要修改的内容:\n";
cout<<" ╭------------------------------------╮"<<endl;
cout<<" ∣1.职工编号 2.职工姓名 ∣"<<endl;
cout<<" ∣3.出生日期 4.性 别 ∣"<<endl;
cout<<" ∣5.职工职称 6.部 门 ∣"<<endl;
cout<<" ∣7.职工工资 0.取消修改 ∣ "<<endl;
cout<<" ╰------------------------------------╯"<<endl;
int choice;
string again;
int flag=0;
do{
cout<<endl<<"请选择:";
cin>>choice;
switch(choice){
case 1:
cout<<"请输入职工编号:";
//cin>>code;
cin>>ptr->m_Code;
break;
case 2:
cout<<endl<<"请输入职工姓名:";
//cin>>name;
cin>>ptr->m_Name;
break;
case 3:
cout<<endl<<"请输入职工出生日期:";
//cin>>year;
cin>>ptr->m_Year;
break;
case 4:
cout<<"请输入职工性别(1.男/2.女):";
//cin>>sex;
cin>>ptr->m_Sex;
break;
case 5:
cout<<"请输入职工职称:";
//cin>>post;
cin>>ptr->m_Post;
break;
case 6:
cout<<"请输入职工部门:";
//cin>>department;
cin>>ptr->m_Department;
break;
case 7:
cout<<"请输入职工工资:";
//cin>>wage;
cin>>ptr->m_Wage;
break;
case 0: return Head;
default:
cout<<"你的输入有误!请重新输入:";
}
cout<<"是否继续(y/n)?";
while(1){
cin>>again;
if(again=="N"||again=="n"){ flag=0;break;}
else if(again=="Y"||again=="y"){ flag=1;break;}
else cout<<"输入有误!请重新选择:";
}
}while(flag);
cout<<"信息已成功修改,请注意保存!\n\n";
return Head;
}
//对职工信息进行排序(包括按工资排序和按姓名进行字典排序)
Link Sort(Link Head)
{//我创建的是带头节点的链表。用直接插入法。
if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。
{
cout<<"数据节点数少于2个,不用排序!"<<endl;
return Head;
}
//-----------第二步;
Link ptr;
Link ptr_F;
Link ptr_N;
ptr=Head->Next->Next;
ptr_F=Head;
Head->Next->Next=NULL;//到此,分成了两个链表。
//第三步。
while(ptr)
{
ptr_N=ptr->Next;
ptr_F=Head;//ptr_F的归位。
while(ptr_F->Next)
{
if(ptr->m_Wage>ptr_F->Next->m_Wage)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}//while(ptr_F->Next)
if(ptr_F->Next==NULL)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}//while(ptr)
cout<<"\n从高到低,排序成功!信息如下:"<<endl;
Display_List(Head);
return Head;
}
//按姓名进行字典排序
Link Sort_byname(Link Head)
{//我创建的是带头节点的链表。用直接插入法。
if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。
{
cout<<"数据节点数少于2个,不用排序!"<<endl;
return Head;
}
//-----------第二步;
Link ptr;
Link ptr_F;
Link ptr_N;
ptr=Head->Next->Next;
ptr_F=Head;
Head->Next->Next=NULL;//到此,分成了两个链表。
//第三步。
while(ptr)
{
ptr_N=ptr->Next;
ptr_F=Head;//ptr_F的归位。
while(ptr_F->Next)
{
if(ptr->m_Name<ptr_F->Next->m_Name)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}//while(ptr_F->Next)
if(ptr_F->Next==NULL)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}//while(ptr)
cout<<"\n按字典序排序如下:"<<endl;
Display_List(Head);
return Head;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -