帮忙修改一个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++数组、指针编程 在线等