当前位置:编程学习 > C/C++ >>

帮忙修改一个c++程序,调试总是出错。

#include <iostream>

#include <string>

#include <string.h>

#include <fstream>

#include <vector>

#include <iomanip>

using namespace std;

class Employee{//定义职工类

public:

unsigned long num;//此处假设员工号全为数字

char name[20];

char 易做图;

unsigned int age;

string education;

unsigned long wage;

string address;

string phonenum;//数据成员定义完毕

void set();

void printo();//成员函数定义完毕

};

void Employee::set(){//读入数据并存储到文件

cout<<"现在开始分组输入数据,请根据提示逐条输入"<<endl;

cout<<"编号:(必须全为数字)";

cin>>num;

cout<<"姓名:";

cin>>name;

cout<<"性别(男为M,女为W)";

cin>>易做图;

cout<<"年龄:";

cin>>age;

cout<<"学历:";

cin>>education;

    cout<<"工资:";

cin>>wage;

cout<<"地址:";

cin>>address;

cout<<"电话:";

cin>>phonenum;//信息录入完毕

ofstream out("out.txt",ios::app);

out<<"编号:"<<num<<endl

       <<"姓名:"<<name<<endl

       <<"性别:"<<易做图<<endl

       <<"年龄:"<<age<<endl

       <<"学历:"<<education<<endl

       <<"工资:"<<wage<<endl

       <<"地址:"<<address<<endl

       <<"电话:"<<phonenum<<endl;

}

void Employee::printo(){//输出信息

cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;

    cout<<"┃"<<setw(12)<<num<<"┃"<<setw(12)<<name<<"┃"<<setw(12)<<易做图;

cout<<"┃"<<setw(12)<<age<<"┃"<<setw(12)<<education<<"┃"<<setw(12)<<wage;

    cout<<"┃"<<setw(12)<<address<<"┃"<<setw(12)<<phonenum<<"┃"<<endl;

}

    Employee yuangong;

vector<Employee> yg;

void setin();

    void printout();    

    void search();

   // void dechange();

int main(){


cout<<"职工信息管理系统设计"<<endl;

cout<<"┏━━━━━━━━━┓"<<endl;

cout<<"┃ 按数字键操作     ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 1、输入数据      ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 2、输出数据      ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 3、查询和排序    ┃"<<endl;

cout<<"┃                  ┃"<<endl;

//cout<<"┃ 4、删除和修改    ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 5、退出          ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┗━━━━━━━━━┛"<<endl;

int choice;

cin>>choice;

switch(choice)

{

case 1:setin();

case 2:printout();    

case 3:search();

//case 4:dechange();

case 5:exit(0);

}

}

void setin()

{

int i;

for(i=0;;i++){

        yuangong.set();

yg.push_back(yuangong)

        cout<<"---------------------------------"<<endl;

   }

cout<<"输入完毕,返回主菜单。"

single();

}

void printout(){

for(vector<int>::size_type ix=0;ix!=yg.size();++ix)

yg[ix].printo;

}

void search(){

Menu1:

cout<<"职工信息管理系统设计"<<endl;

cout<<"┏━━━━━━━━━┓"<<endl;

cout<<"┃ 按数字键操作     ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 1、按工资        ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 2、按学历        ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 3、排序          ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┃ 4、返回          ┃"<<endl;

cout<<"┃                  ┃"<<endl;

cout<<"┗━━━━━━━━━┛"<<endl;

int choice1;

unsigned swage;

string sedu;

cin>>choice1;

switch(choice1)

{

case 1:{

cout<<"请输入工资:";

cin>>swage;

for(vector<int>::size_type ix1=0;ix1!=yg.size();ix1++){

if(yg[ix1].wage==swage) yg[ix1].printo;

cout<<endl;

goto Menu1;}}

case 2:{

   cout<<"请输入学历:";

   cin>>sedu;

   for(vector<int>::size_type ix2=0;ix2!=yg.size();ix2++){

if(yg[ix2].wage==sedu) yg[ix2].printo;

cout<<endl;

goto Menu1;}}

case 3:{

   cout<<"以下为按工资排序并输出";

vector<Employee> yg2(yg);

string yggg

for(int ii=1;ii<yg2.size;i++)

        for(vector<int>::size_type ix3=0;ix3!=yg2.size();ix3++){

        if(yg2[j].wage<yg2[j+1].wage)

   {

       yggg=yg2[j];

       yg2[j]=yg2[j+1];

       yg2[j+1]=yggg;

}}

        for(vector<int>::size_type ix4=0;ix4!=yg.size();ix4++){

   yg[ix4].printo;

cout<<endl;}

goto Menu1;}

case 4:main();

}

 

答案:这个程序不只是语法错误,还有逻辑错误。能编译并不代表正确。
最后的main()是很有用的。用途是重新执行,从而能打印出菜单,等等。否则的话程序到那个地方就结束了。实际上这个应该修改成在main()里面加一个while(true){...} 的循环。就不用屡次调用main()了


1. 第40行
void printo();//成员函数定义完毕
};
这里的分号不能用中文分号。改成;

2. 第186行
yg.push_back(yuangong) 忘了分号。

3. 第192行
cout<<"输入完毕,返回主菜单。" 忘了分号。

4. 第202行,256行,270行,302行
yg[ix].printo; 没有函数括号。加()

5. 第270行
if(yg[ix2].wage==sedu) 是unsigned long和string互相比较。你的意思是if(yg[ix2].education==sedu)吧。。。干嘛把工资和学历相比较呢。

6. 第282行
string yggg 少了分号。

7. 第284行
for(int ii=1;ii<yg2.size;i++) 前面是ii后面变成i了。改成ii.
另外for(int ii=1;ii<yg2.size;ii++)应该改成for(int ii=1;ii<yg2.size();ii++)。 size()是函数。

8. 第286行
        for(vector<int>::size_type ix3=0;ix3!=yg2.size();ix3++){ 这里把所有的ix3都改成 j 。 因为后面用的都是 j.

9. 第282行
string yggg; 改为Employee yggg; 因为yggg是表示排序过程中交换两个Employee的中间值。

10. 最后一行
少了一个} 用来结束search() 定义。

11. 第194行
single()???这是啥啊?改成main()估计是你的意思。

12.以下为逻辑问题:
a. 输入永远不会结束。解决方法:改成bool Employee::set(),输入成功返回true, 如果输入编号为0则返回false. 返回false之后结束输入数据过程。
b. 输出格式有问题。在278行改成了cout<<"以下为按工资排序并输出"<<endl; (加了endl),然后把100行改成cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;
在305行和203行分别加上cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;






最终结果:
-----------------------



#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;
class Employee{//定义职工类
public:
unsigned long num;//此处假设员工号全为数字
char name[20];
char 易做图;
unsigned int age;
string education;
unsigned long wage;
string address;
string phonenum;//数据成员定义完毕
bool set();
void printo();//成员函数定义完毕
};
bool Employee::set(){//读入数据并存储到文件
cout<<"现在开始分组输入数据,请根据提示逐条输入"<<endl;
cout<<"编号:(必须全为数字,输入 0 退出)";
cin>>num;
if(num==0) return false;
cout<<"姓名:";
cin>>name;
cout<<"性别(男为M,女为W)";
cin>>易做图;
cout<<"年龄:";
cin>>age;
cout<<"学历:";
cin>>education;
    cout<<"工资:";
cin>>wage;
cout<<"地址:";
cin>>address;
cout<<"电话:";
cin>>phonenum;//信息录入完毕
ofstream out("out.txt",ios::app);
out<<"编号:"<<num<<endl
       <<"姓名:"<<name<<endl
       <<"性别:"<<易做图<<endl
       <<"年龄:"<<age<<endl
       <<"学历:"<<education<<endl
       <<"工资:"<<wage<<endl
       <<"地址:"<<address<<endl
       <<"电话:"<<phonenum<<endl;
return true;
}
void Employee::printo(){//输出信息
cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;
    cout<<"┃"<<setw(12)<<num<<"┃"<<setw(12)<<name<<"┃"<<setw(12)<<易做图;
cout<<"┃"<<setw(12)<<age<<"┃"<<setw(12)<<education<<"┃"<<setw(12)<<wage;
    cout<<"┃"<<setw(12)<<address<<"┃"<<setw(12)<<phonenum<<"┃"<<endl;
}
    Employee yuangong;
vector<Employee> yg;
void setin();
    void printout();    
    void search();
   // void dechange();
int main(){
cout<<"职工信息管理系统设计"<<endl;
cout<<"┏━━━━━━━━━┓"<<endl;
cout<<"┃ 按数字键操作     ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 1、输入数据      ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 2、输出数据      ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 3、查询和排序    ┃"<<endl;
cout<<"┃                  ┃"<<endl;
//cout<<"┃ 4、删除和修改    ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 5、退出          ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┗━━━━━━━━━┛"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:setin();
case 2:printout();    
case 3:search();
//case 4:dechange();
case 5:exit(0);
}
}
void setin()
{
int i;
for(i=0;;i++){
        if(yuangong.set())
yg.push_back(yuangong);
else break;
        cout<<"---------------------------------"<<endl;
   }
cout<<"输入完毕,返回主菜单。";
main();
}
void printout(){
for(vector<int>::size_type ix=0;ix!=yg.size();++ix)
yg[ix].printo();
cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;
}
void search(){
Menu1:
cout<<"职工信息管理系统设计"<<endl;
cout<<"┏━━━━━━━━━┓"<<endl;
cout<<"┃ 按数字键操作     ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 1、按工资        ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 2、按学历        ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 3、排序          ┃"<<endl;
cout<<"┃                  ┃"<<endl;
cout<<"┃ 4、返回          ┃"<<endl;
cout<<"┃     

上一个:C++用队列实现火车车厢重排问题
下一个:急!C++数组、指针编程 在线等

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,