| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:大大帮帮偶啊~ 错了25个...不知道该怎么改了~
只看楼主 加入收藏
weiqi1716
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-1-22
收藏
 问题点数:0 回复次数:3 
大大帮帮偶啊~ 错了25个...不知道该怎么改了~
// zhigong.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <memory.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;

struct Employee
{//声明职工的结构作为链表节点。
 //-----数据域-----
 string m_Code;
 string m_Name;
 unsigned short int m_Year;
 string m_Sex;
 string m_Time;
 unsigned int m_Wage;
 //链表节点的指针域---
 struct Employee* Next;
};
 
typedef struct Employee Node;
typedef Node* Link;

//-------函数声明-------------
Link Create(Link Head);
void Release(Link Head);
Link Add(Link Head);
bool Search(Link Head);
Link Search_Unique(Link Head);
void Display_List(Link Head);
void Display_Node(Link pNode);
Link Modify(Link Head);
Link Del(Link Head);
void Save_ByFile(Link Head,fstream& ofile);
Link Sort(Link Head);
//-------函数实现--------------------------
Link Create(Link Head)
{//创建一个带头节点的空链表。
 Head=(Link)new Node;
 if(!Head)
 {
  cout<<"分配内存失败!"<<endl;
  return NULL;
 }
Head->m_Code="";
Head->m_Name="";
Head->m_Year=0;
Head->m_Sex="";
Head->m_Time="";
Head->m_Wage=0;
Head->Next=NULL;

return Head;
}

void Release(Link Head)
{//释放链表。
 Link ptr;//声明一个操作用的指针。
 while(Head!=NULL)
 {
  ptr=Head;
  Head=Head->Next;
  delete ptr;//释放节点资源。
 }
}

Link Add(Link Head)
{//前插法添加数据。
 Link pNew;// 声明一个新节点。
 char again;
 string code,name,sex,time;
 unsigned short int year;
 unsigned int wage;
 do
 {
  pNew=(Link)new Node;
  //数据域。
  cout<<"请输入职工编号:";
  cin>>code;
  cout<<endl<<"请输入职工姓名:";
  cin>>name;
  cout<<endl<<"请输入职工出生年份:";
  cin>>year;
  while(cin.fail())
  {
   cout<<"请输入正确的年份格式。"<<endl;
   cin.clear();
   fflush(stdin);
   cin>>year;
  }
  cout<<endl<<"请输入职工性别:";
  cin>>sex;
  cout<<endl<<"请输入职工工龄:";
  cin>>time;
  cout<<endl<<"请输入职工工资:";
  cin>>wage;
  while(cin.fail())
  {  
   cout<<"请输入正确的工资数据。"<<endl;
   cin.clear();
   fflush(stdin);
   cin>>wage;
  }
  cout<<endl;
  pNew->m_Code=code;
  pNew->m_Name=name;
  pNew->m_Year=year;
  pNew->m_Sex=sex;
  pNew->m_Time=time;
  pNew->m_Wage=wage;
  //指针域。
  pNew->Next=Head->Next;
  Head->Next=pNew;
  cout<<"数据添加成功!是否继续添加?(Y/N)"<<endl;
  cin>>again;
  }
  while(again=='Y'||again=='y');
  return Head;
}

bool Search(Link Head)
{
Link ptr;
char *time;
ptr=Head->Next;
cin>>time;
cout<<endl<<"----------------查询结果------------------"<<endl;
while(ptr)
{
if(memcmp(ptr->m_Time) == 0)
{
Display_Node(ptr);//打印满足条件的节点。
return true;
}
ptr=ptr->Next;//查询下一节点。
}
cout<<"无此信息。"<<endl;
return false;
}

Link Search_Unique_Front(Link Head)
{//查询满足“职工编码“的职工信息。
 Link ptr;
 string code;
 ptr=Head;
 cout<<"请输入职工编码:";
 cin>>code;
 cout<<endl<<"----------------查询结果------------------"<<endl;
 while(ptr->Next)
 {
  if(ptr->Next->m_Code==code)
  Display_Node(ptr);//打印满足条件的节点。
  return ptr;//注意,是返回的查询到的节点的直接前趋节点。
  ptr->Next=ptr->Next->Next;//查询下一节点。
 }
 return ptr;
 }

 void Display_List(Link Head)
 {
 Link ptr;
 ptr=Head->Next;
 cout<<"==================所有职工信息=================="<<endl;
 while(ptr)
 {
  Display_Node(ptr);
  ptr=ptr->Next;
 }
}

void Display_Node(Link pNode)
{//在标准输出设备上输出。
 cout<<setw(10)<<left<<pNode->m_Code
 <<setw(10)<<left<<pNode->m_Name
 <<setw(10)<<left<<pNode->m_Year
 <<setw(10)<<left<<pNode->m_Sex
 <<setw(10)<<left<<pNode->m_Time
 <<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
}

Link Modify(Link Head)
{// 修改单一个节点。
 Link ptr;
 ptr=Search_Unique_Front(Head);
 string code,name,sex,time;
 unsigned short int year;
 unsigned int wage;
 if(ptr->Next)
 {
  cout<<"-------你现在可以修改此职工的信息了-------"<<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<<"请输入职工性别:";
  cin>>sex;
  cout<<endl<<"请输入职工工龄:";
  cin>>time;
  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_Time=time;
  ptr->Next->m_Wage=wage;
  }
  cout<<"没找到此职工的记录,无法修改。"<<endl;
  return Head;
}

Link Del(Link Head)
{
 Link ptr;
 Link ptr_front;
 ptr=Search_Unique_Front(Head);
 ptr_front=ptr->Next;
 if(ptr)
 {
  ptr_front->Next=ptr->Next;
  delete ptr;//删除此节点。
 }
 cout<<"没找到此职工的记录,无法删除。"<<endl;
 return Head;
}


void Save_ByFile(Link Head,fstream& ofile)
{
 Link pNode;
 pNode=Head->Next;
 ofile.clear();//清除文件结束状态。
 while(pNode)
 {
  ofile<<setw(10)<<left<<pNode->m_Code
  <<setw(10)<<left<<pNode->m_Name
  <<setw(10)<<left<<pNode->m_Year
  <<setw(10)<<left<<pNode->m_Sex
  <<setw(10)<<left<<pNode->m_Time
  <<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
  pNode=pNode->Next;
 }
 cout<<"数据文件保存成功!"<<endl;
}

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<<"从高到低,排序成功!回到界面按7显示结果!"<<endl;
return Head;
}


int main()
{
Link Head=0;
Head=Create(Head);
fstream iofile;
iofile.open("d:\\iofile.txt",ios_base::in|ios_base::out|ios_base::app);//文件以三种方式打开。
if(!iofile)
{
cout<<"打开文件失败!"<<endl;
return -1;
}
int menu;
while(1)
{
cout<<"*****************************************************"<<endl;
cout<<"*====================职工管理=======================*"<<endl;
cout<<"*===================================================*"<<endl;
cout<<"* 1.添加信息 2.修改信息 3.删除信息 4.信息查询 *"<<endl;
cout<<"* 5.保存文件 6.工资排行 7.信息显示 0.退出系统 *"<<endl;
cout<<"*****************************************************"<<endl;
cout<<endl<<"请选择相应操作菜单项:";
cin>>menu;
while(cin.fail())
{
cout<<"请选择正确的菜单选项!"<<endl;
cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu)
{
case 0:
cout<<"成功退出系统!"<<endl;
return 0;
case 1:
Head=Add(Head);
break;
case 2:
Head=Modify(Head);
break;
case 3:
Head=Del(Head);
break;
case 4:
Search(Head);
break;
case 5:
Save_ByFile(Head,iofile);
break;
case 6:
Sort(Head);
break;
case 7:
Display_List(Head);
break;
default:
cout<<"请选择正确的菜单项进行操作。多谢合作!"<<endl;

}
}
Release(Head);
iofile.close();
return 0;
}




还有原来的代码修改的时候会把之前的数据都清空 要怎么改?

Link Modify(Link Head)
{// 修改单一个节点。
Link ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,time;
unsigned short int year;
unsigned int wage;
if(ptr->Next)
{
cout<<"-------你现在可以修改此职工的信息了-------"<<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<<"请输入职工性别:";
cin>>sex;
cout<<endl<<"请输入职工工龄:";
cin>>time;
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_Time=time;
ptr->Next->m_Wage=wage;
}
cout<<"没找到此职工的记录,无法修改。"<<endl;
return Head;
}
搜索更多相关主题的帖子: 应用程序 include 控制台 
2008-01-22 11:54
三月里de小雨
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-10-2
收藏
得分:0 
看的头都晕了

请问小雨谁带我追寻
追寻那一颗爱我的心
2008-01-23 17:02
rocketabc
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-7-6
收藏
得分:0 
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <memory.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
#pragma   comment(lib,"ws2_32.lib")
struct Employee
{//声明职工的结构作为链表节点。
//-----数据域-----
string m_Code;
string m_Name;
unsigned short int m_Year;
string m_Sex;
string m_Time;
unsigned int m_Wage;
//链表节点的指针域---
struct Employee* Next;
};

typedef struct Employee Node;
typedef Node* Link;

//-------函数声明-------------
Link Create(Link Head);
void Release(Link Head);
Link Add(Link Head);
bool Search(Link Head);
Link Search_Unique(Link Head);
void Display_List(Link Head);
void Display_Node(Link pNode);
Link Modify(Link Head);
Link Del(Link Head);
void Save_ByFile(Link Head,fstream& ofile);
Link Sort(Link Head);
//-------函数实现--------------------------
Link Create(Link Head)
{//创建一个带头节点的空链表。
Head=(Link)new Node;
if(!Head)
{
  cout<<"分配内存失败!"<<endl;
  return NULL;
}
Head->m_Code="";
Head->m_Name="";
Head->m_Year=0;
Head->m_Sex="";
Head->m_Time="";
Head->m_Wage=0;
Head->Next=NULL;

return Head;
}

void Release(Link Head)
{//释放链表。
Link ptr;//声明一个操作用的指针。
while(Head!=NULL)
{
  ptr=Head;
  Head=Head->Next;
  delete ptr;//释放节点资源。
}
}

Link Add(Link Head)
{//前插法添加数据。
Link pNew;// 声明一个新节点。
char again;
string code,name,sex,time;
unsigned short int year;
unsigned int wage;
do
{
  pNew=(Link)new Node;
  //数据域。
  cout<<"请输入职工编号:";
  cin>>code;
  cout<<endl<<"请输入职工姓名:";
  cin>>name;
  cout<<endl<<"请输入职工出生年份:";
  cin>>year;
  while(cin.fail())
  {
   cout<<"请输入正确的年份格式。"<<endl;
   cin.clear();
   fflush(stdin);
   cin>>year;
  }
  cout<<endl<<"请输入职工性别:";
  cin>>sex;
  cout<<endl<<"请输入职工工龄:";
  cin>>time;
  cout<<endl<<"请输入职工工资:";
  cin>>wage;
  while(cin.fail())
  {  
   cout<<"请输入正确的工资数据。"<<endl;
   cin.clear();
   fflush(stdin);
   cin>>wage;
  }
  cout<<endl;
  pNew->m_Code=code;
  pNew->m_Name=name;
  pNew->m_Year=year;
  pNew->m_Sex=sex;
  pNew->m_Time=time;
  pNew->m_Wage=wage;
  //指针域。
  pNew->Next=Head->Next;
  Head->Next=pNew;
  cout<<"数据添加成功!是否继续添加?(Y/N)"<<endl;
  cin>>again;
  }
  while(again=='Y'||again=='y');
  return Head;
}

bool Search(Link Head)
{
Link ptr;
char *time;
ptr=Head->Next;
cin>>time;
cout<<endl<<"----------------查询结果------------------"<<endl;
while(ptr)
{
if(memcmp(&ptr->m_Time,&time,sizeof(ptr->m_Time)) == 0)
{
Display_Node(ptr);//打印满足条件的节点。
return true;
}
ptr=ptr->Next;//查询下一节点。
}
cout<<"无此信息。"<<endl;
return false;
}

Link Search_Unique_Front(Link Head)
{//查询满足“职工编码“的职工信息。
Link ptr;
string code;
ptr=Head;
cout<<"请输入职工编码:";
cin>>code;
cout<<endl<<"----------------查询结果------------------"<<endl;
while(ptr->Next)
{
  if(ptr->Next->m_Code==code)
  Display_Node(ptr);//打印满足条件的节点。
  return ptr;//注意,是返回的查询到的节点的直接前趋节点。
  ptr->Next=ptr->Next->Next;//查询下一节点。
}
return ptr;
}

void Display_List(Link Head)
{
Link ptr;
ptr=Head->Next;
cout<<"==================所有职工信息=================="<<endl;
while(ptr)
{
  Display_Node(ptr);
  ptr=ptr->Next;
}
}

void Display_Node(Link pNode)
{//在标准输出设备上输出。
cout<<setw(10)<<left<<pNode->m_Code
<<setw(10)<<left<<pNode->m_Name
<<setw(10)<<left<<pNode->m_Year
<<setw(10)<<left<<pNode->m_Sex
<<setw(10)<<left<<pNode->m_Time
<<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
}

Link Modify(Link Head)
{// 修改单一个节点。
Link ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,time;
unsigned short int year;
unsigned int wage;
if(ptr->Next)
{
  cout<<"-------你现在可以修改此职工的信息了-------"<<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<<"请输入职工性别:";
  cin>>sex;
  cout<<endl<<"请输入职工工龄:";
  cin>>time;
  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_Time=time;
  ptr->Next->m_Wage=wage;
  }
  cout<<"没找到此职工的记录,无法修改。"<<endl;
  return Head;
}

Link Del(Link Head)
{
Link ptr;
Link ptr_front;
ptr=Search_Unique_Front(Head);
ptr_front=ptr->Next;
if(ptr)
{
  ptr_front->Next=ptr->Next;
  delete ptr;//删除此节点。
}
cout<<"没找到此职工的记录,无法删除。"<<endl;
return Head;
}


void Save_ByFile(Link Head,fstream& ofile)
{
Link pNode;
pNode=Head->Next;
ofile.clear();//清除文件结束状态。
while(pNode)
{
  ofile<<setw(10)<<left<<pNode->m_Code
  <<setw(10)<<left<<pNode->m_Name
  <<setw(10)<<left<<pNode->m_Year
  <<setw(10)<<left<<pNode->m_Sex
  <<setw(10)<<left<<pNode->m_Time
  <<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
  pNode=pNode->Next;
}
cout<<"数据文件保存成功!"<<endl;
}

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<<"从高到低,排序成功!回到界面按7显示结果!"<<endl;
return Head;
}


int main()
{
Link Head=0;
Head=Create(Head);
fstream iofile;
iofile.open("d:\\iofile.txt",ios_base::in|ios_base::out|ios_base::app);//文件以三种方式打开。
if(!iofile)
{
cout<<"打开文件失败!"<<endl;
return -1;
}
int menu;
while(1)
{
cout<<"*****************************************************"<<endl;
cout<<"*====================职工管理=======================*"<<endl;
cout<<"*===================================================*"<<endl;
cout<<"* 1.添加信息 2.修改信息 3.删除信息 4.信息查询 *"<<endl;
cout<<"* 5.保存文件 6.工资排行 7.信息显示 0.退出系统 *"<<endl;
cout<<"*****************************************************"<<endl;
cout<<endl<<"请选择相应操作菜单项:";
cin>>menu;
while(cin.fail())
{
cout<<"请选择正确的菜单选项!"<<endl;
cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu)
{
case 0:
cout<<"成功退出系统!"<<endl;
return 0;
case 1:
Head=Add(Head);
break;
case 2:
Head=Modify(Head);
break;
case 3:
Head=Del(Head);
break;
case 4:
Search(Head);
break;
case 5:
Save_ByFile(Head,iofile);
break;
case 6:
Sort(Head);
break;
case 7:
Display_List(Head);
break;
default:
cout<<"请选择正确的菜单项进行操作。多谢合作!"<<endl;

}
}
Release(Head);
iofile.close();
return 0;
}






/*Link Modify(Link Head)
{// 修改单一个节点。
Link ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,time;
unsigned short int year;
unsigned int wage;
if(ptr->Next)
{
cout<<"-------你现在可以修改此职工的信息了-------"<<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<<"请输入职工性别:";
cin>>sex;
cout<<endl<<"请输入职工工龄:";
cin>>time;
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_Time=time;
ptr->Next->m_Wage=wage;
}
cout<<"没找到此职工的记录,无法修改。"<<endl;
return Head;
}*/

帮你改号了啊

兴趣和爱好是我追求的方向
2008-01-23 21:05
rocketabc
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-7-6
收藏
得分:0 
其实就2错误

兴趣和爱好是我追求的方向
2008-01-23 21:05
快速回复:大大帮帮偶啊~ 错了25个...不知道该怎么改了~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023665 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved