首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自己写了一段代码,在主函数中如何调用函数都没用,代码如上

2013-01-05 
自己写了一段代码,在主函数中怎么调用函数都没用,代码如下#includeiostream#includeconio.h#includef

自己写了一段代码,在主函数中怎么调用函数都没用,代码如下
#include<iostream>
#include<conio.h>
#include<fstream>
#include<iomanip>
using namespace std;
#include<string.h>
#define M 100   //定义一个存储学生相关信息的结构体
typedef struct
{
  char S_name[40];    //姓名 
  char S_number[20];  //学号
  char D_number[15];  //宿舍号
  int Total;          //学生总数
}Student,St;

class guanli
{
   public:
      guanli();
  ~guanli();
      void Add(Student S[M]);             //声明录入学生信息函数
  void Menu();                        //声明主菜单函数
  void searchheader();                //声明查询函数
  void display(Student S[M]);         //声明显示函数
  void showhead();                    //声明显示方式表头函数
  void sort_d_number(Student S[M]);   //声明按宿舍号排序函数
  //void search_s_number(Student S[M]); //声明以学号进行查询
  void search_d_number(Student S[M]); //声明以宿舍号进行查询
 // void search_s_name(Student S[M]);   //声明以姓名进行查询
  void exchangehead();                // 定义修改学生信息的表头函数
   /*protected:
   Node *head;                        //头结点指针
   void Init();                       //构造线性表*/
};

/*void guanli::Init()                       //初始化线性表
{
   head=new Node;
}*/
void guanli::Menu()
{
  Student S[M];
  S[0].Total=0;
  int choice;
  cout<<"************************************************"<<endl;
  cout<<"           欢迎使用宿舍管理系统                 "<<endl;
  cout<<"************************************************"<<endl;
  cout<<"*******************主菜单***********************"<<endl;
  cout<<"************************************************"<<endl;
  cout<<"            1.录入学生信息                      "<<endl;
  cout<<"            2.显示学生信息                      "<<endl;
  cout<<"            3.查询学生信息                      "<<endl;


  cout<<"            4.修改学生信息                      "<<endl;
  cout<<"            5.退出管理系统                      "<<endl;
  cout<<"************************************************"<<endl;
  cout<<"请选择:"<<endl;
  cin>>choice;
  switch(choice)
  {
  case 1:           //录入学生信息
  {
  Add(S);
  }
  case 2:           //显示学生信息
  {
  int choice2;
  showhead();
  cin>>choice2;
  if(choice2==1)  
  {
         sort_d_number(S);
 cout<<"    按宿舍号显示信息"<<endl;
 display(S);
  } 
  else
  {
  cout<<"输入错误,请重新输入。。。"<<endl;
  }
  }
  
 case 3:            //查询学生信息
  {
  int choice3;
      searchheader();
  cin>>choice3;
  /*if(choice3==1)   //按姓名查询
  {
  search_s_name(S);
  }
  else 
  if(choice3==2)//按学号查询
  {
  search_s_number(S);
  }*/
  //else
  if(choice3==3)//按宿舍号查询
  {
  search_d_number(S);
  }
  else//输入错误
  {
  cout<<"选择错误,请重新输入。。。"<<endl;
  }
  }
 case 4:                //修改学生信息
     {
 exchangehead();//调用修改学生信息表头函数
 int choice1;
 cin>>choice1;
 if(choice1==1)//单个删除
 {
 int i,j;
 int flag=0;   //用来判断表中是否存在要删除的学生的信息
 char number[20];
 cout<<"请输入你要删除学生的学号"<<endl;
 cin>>number;
 for(i=1;i<S[0].Total;i++)
 if(strcmp(S[i].S_number,number)==0)
 flag=i;
 if(!flag)
 {
 cout<<"你所要删除的学生在表中不存在!"<<endl;
 }
 else
 {
  for(i=flag;i<S->Total;i++)
  {
  j=i+1;
  strcpy(S[i].S_name,S[i].S_name);
  strcpy(S[i].S_number ,S[i].S_number);
  strcpy(S[i].D_number,S[i].D_number);
  };
  S[0].Total --;
  cout<<"删除成功!"<<endl;
 }
 }
 else if(choice==2)//全部删除
 {
 S[0].Total =0;
 cout<<"删除成功。。。"<<endl;
 }
 else
 if (choice==3)//修改信息
 {
 int i;
 int flag=0;
 char number[20];
 cout<<"请输入要修改学生的学号"<<endl;
 cin>>number;


 for(i=1;i<=S[0].Total ;i++)
 if(strcmp(S[i].S_number,number)==0)
 flag=i;
 if(!flag)
 {
 cout<<"你所要修改的学生不存在!"<<endl;
 }
 else
 {
 cout<<"**********************************"<<endl;
 cout<<"             修改前的信息         "<<endl;
 cout<<"**********************************"<<endl;
 cout<<"*****姓名*****学号*****宿舍号*****"<<endl;
 cout<<"**********************************"<<endl;
 cout<<"*****"<<setw(10)<<S[flag].S_name << "*****"<<setw(14)<<S[flag].S_number <<
 "*****"<<setw(8)<<S[flag].D_number <<"*****"<<endl;
 cout<<"**********************************"<<endl;
 cout<<"***********学生信息修改***********"<<endl;
 cout<<"学号:"<<endl;
 cin>>S[flag].S_number ;
 cout<<"姓名:"<<endl;
 cin>>S[flag].S_name ;
 cout<<"宿舍号:"<<endl;
 cin>>S[flag].D_number ;
 cout<<"**********************************"<<endl;
 cout<<"             修改后的信息         "<<endl;
 cout<<"**********************************"<<endl;
 cout<<"*****姓名*****学号*****宿舍号*****"<<endl;
 cout<<"**********************************"<<endl;
 cout<<"*****"<<setw(10)<<S[flag].S_name << "*****"<<setw(14)<<S[flag].S_number <<
 "*****"<<setw(8)<<S[flag].D_number <<"*****"<<endl;
 cout<<"**********************************"<<endl;
 }
 }
else//输入错误
{
cout<<"选择错误!"<<endl;
}
 }
 case 5://退出管理系统
 break;
 default:
 cout<<"输入错误"<<endl;
    }
}
void guanli::showhead ()//定义显示方式表头函数
{
cout<<"*********************************************"<<endl;
cout<<"             欢迎使用宿舍管理系统            "<<endl;
cout<<"*********************************************"<<endl;
cout<<"                 显示方式                    "<<endl;
cout<<"                                             "<<endl;
cout<<"                1.按学生学号                 "<<endl;
cout<<"                2.按学生宿舍                 "<<endl;
cout<<"                3.按学生姓名                 "<<endl;


cout<<"*********************************************"<<endl;
cout<<"请输入:   "<<endl;
}
void guanli::searchheader()//定义查询函数
{
cout<<"*********************************************"<<endl;
cout<<"             欢迎使用宿舍管理系统            "<<endl;
cout<<"*********************************************"<<endl;
cout<<"                 查询菜单                    "<<endl;
cout<<"                                             "<<endl;
cout<<"            1.按学生学号查询                 "<<endl;
cout<<"            2.按学生宿舍查询                 "<<endl;
cout<<"            3.按学生姓名查询                 "<<endl;
cout<<"*********************************************"<<endl;
cout<<"请输入:   "<<endl;
}
void guanli::Add(Student *S) //定义录入函数
{
  char ch[10];
  char ch1[2]={"0"};
  do
  {
  cout<<"***********学生信息录入系统***************"<<endl;
  cout<<"请输入第"<<S[0].Total+1<<"个学生的信息"<<endl;
  cout<<"学号:"<<endl;
  cin>>S[S[0].Total+1].S_number ;
  cout<<"姓名:"<<endl;
  cin>>S[S[0].Total+1].S_name ;
  cout<<"宿舍号:"<<endl;
  cin>>S[S[0].Total+1].D_number ;
  S[0].Total++;
  cout<<" 按数字键继续录入,按0退出"<<endl;
  cin>>ch;
  }
  while(strcmp(ch,ch1)!=0);
}

void guanli::display (Student *S)//定义显示函数
{
 int i;
 cout<<"*********************************************"<<endl;
 cout<<"             宿舍全体学生信息                "<<endl;
 cout<<"*********************************************"<<endl;
 cout<<"*****姓名********学号**********宿舍号********"<<endl;
 if(S[0].Total>0)
 {
 for(i=1;i<=S[0].Total;i++)
 {
 cout<<"                                             "<<endl;
 cout<<"*****"<<setw(10)<<S[i].S_name <<"********"<<setw(14)<<
S[i].S_number <<"**********"<<setw(8)<<S[i].D_number <<"********"<<endl;
 cout<<"*********************************************"<<endl;
 }


 }
 else
 {
 cout<<"*********************************************"<<endl;
 cout<<"                 无任何信息                  "<<endl;
 cout<<"*********************************************"<<endl;
 }
}

void guanli::sort_d_number (Student *S)//排序函数按照宿舍号从小到大排序
{
int i,j;
char t[20];
char name[30];
char number[15];
 for(i=1;i<=S[0].Total;i++)
   for(j=i;j<=S[0].Total;j++)
   if(S[i].D_number >S[j].D_number )
   {
   strcpy(name,S[i].S_name);
   strcpy(number,S[i].S_number);
   strcpy(t,S[i].D_number );
   strcpy(S[i].S_name,S[j].S_name);
   strcpy(S[i].S_number,S[j].S_number);
   strcpy(S[i].D_number,S[j].D_number);
   strcpy(S[j].S_name,name);
   strcpy(S[j].S_number,number);
   strcpy(S[j].D_number,t);
   }

}

void guanli::search_d_number(Student *S)//查询函数以宿舍号为关键字进行查询
{
 int high,low,mid;
 char number[20];
 int j;
 low=1;
 high=S[0].Total ;
 cout<<"请输入你想要查找学生的宿舍号:"<<endl;
 cin>>number;
 sort_d_number(S);//学生宿舍号从小到大排序函数
 cout<<"******************************************"<<endl;
 cout<<"             所查找的学生的信息           "<<endl;
 cout<<"******************************************"<<endl;
 cout<<"*****姓名********学号********宿舍号*******"<<endl;
 while(low<=high)
 {
 mid=(low+high)/2;
  if(strcmp(number,S[mid].D_number)==0)
  {
   int i=mid;
   j=1;
   cout<<"******************************************"<<endl;
   cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
   <<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
   for(i=mid+1;i<=high;i++)
   {
     if(strcmp(number,S[i].D_number)==0)
 {
 cout<<"******************************************"<<endl;
     cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
   <<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
 }
   }
   for(i=mid-1;i>=low;i--)
   {
    if(strcmp(number,S[i].D_number)==0)
{
 cout<<"******************************************"<<endl;
     cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
   <<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
}
   }
   break;
  }
  else
  if(strcmp(number,S[mid].D_number)>0)
  low=mid+1;
  else
  high=mid-1;
 }
 if(j!=1)


 {
 cout<<"******************************************"<<endl;
 cout<<"               查无此学生信息             "<<endl;
 cout<<"******************************************"<<endl;
 }
}

void guanli::exchangehead ()//定义修改学生信息表头函数
{
cout<<"******************************************"<<endl;
cout<<"            欢迎使用宿舍管理系统          "<<endl;
cout<<"******************************************"<<endl;
cout<<"******************修改菜单****************"<<endl;
cout<<"                                          "<<endl;
cout<<"****************1.删除单个信息************"<<endl;
cout<<"****************2.删除全部信息************"<<endl;
cout<<"****************3.修改学生信息************"<<endl;
cout<<"******************************************"<<endl;
cout<<"     请选择:    "<<endl;
}
void main()
{
  cout<<guanli.Menu()<<endl; 
}



[解决办法]
主函数修改为:

void main()
{
  //cout<<guanli.Menu()<<endl; 
    guanli a;   // 声明类对象
    a.Menu();   // 对象调用Menu()方法
    return;     // 主函数返回,可选
}

[解决办法]

//仅仅保证编译无错。
#include<iostream>
#include<conio.h>
#include<fstream>
#include<iomanip>

using namespace std;

#define M 100   //定义一个存储学生相关信息的结构体
typedef struct
{
char S_name[40];    //姓名 
char S_number[20];  //学号
char D_number[15];  //宿舍号
int Total;          //学生总数
}Student,St;

class guanli
{
public:
guanli(){}
~guanli(){}
void Add(Student S[M]);             //声明录入学生信息函数
void Menu();                        //声明主菜单函数
void searchheader();                //声明查询函数
void display(Student S[M]);         //声明显示函数
void showhead();                    //声明显示方式表头函数
void sort_d_number(Student S[M]);   //声明按宿舍号排序函数
//void search_s_number(Student S[M]); //声明以学号进行查询
void search_d_number(Student S[M]); //声明以宿舍号进行查询
// void search_s_name(Student S[M]);   //声明以姓名进行查询
void exchangehead();                // 定义修改学生信息的表头函数


/*protected:
Node *head;                        //头结点指针
void Init();                       //构造线性表*/
};

/*void guanli::Init()                       //初始化线性表
{
head=new Node;
}*/
void guanli::Menu()
{
Student S[M];
S[0].Total=0;
int choice;
cout<<"************************************************"<<endl;
cout<<"           欢迎使用宿舍管理系统                 "<<endl;
cout<<"************************************************"<<endl;
cout<<"*******************主菜单***********************"<<endl;
cout<<"************************************************"<<endl;
cout<<"            1.录入学生信息                      "<<endl;
cout<<"            2.显示学生信息                      "<<endl;
cout<<"            3.查询学生信息                      "<<endl;
cout<<"            4.修改学生信息                      "<<endl;
cout<<"            5.退出管理系统                      "<<endl;
cout<<"************************************************"<<endl;
cout<<"请选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:           //录入学生信息
{
Add(S);
}
case 2:           //显示学生信息
{
int choice2;
showhead();
cin>>choice2;
if(choice2==1)  
{
sort_d_number(S);
cout<<"    按宿舍号显示信息"<<endl;
display(S);

else
{
cout<<"输入错误,请重新输入。。。"<<endl;
}
}

case 3:            //查询学生信息
{
int choice3;
searchheader();
cin>>choice3;
/*if(choice3==1)   //按姓名查询
{
search_s_name(S);
}
else 
if(choice3==2)//按学号查询
{
search_s_number(S);
}*/
//else
if(choice3==3)//按宿舍号查询
{
search_d_number(S);
}
else//输入错误
{
cout<<"选择错误,请重新输入。。。"<<endl;
}
}
case 4:                //修改学生信息
{
exchangehead();//调用修改学生信息表头函数
int choice1;
cin>>choice1;


if(choice1==1)//单个删除
{
int i,j;
int flag=0;   //用来判断表中是否存在要删除的学生的信息
char number[20];
cout<<"请输入你要删除学生的学号"<<endl;
cin>>number;
for(i=1;i<S[0].Total;i++)
if(strcmp(S[i].S_number,number)==0)
flag=i;
if(!flag)
{
cout<<"你所要删除的学生在表中不存在!"<<endl;
}
else
{
for(i=flag;i<S->Total;i++)
{
j=i+1;
strcpy(S[i].S_name,S[i].S_name);
strcpy(S[i].S_number ,S[i].S_number);
strcpy(S[i].D_number,S[i].D_number);
};
S[0].Total --;
cout<<"删除成功!"<<endl;
}
}
else if(choice==2)//全部删除
{
S[0].Total =0;
cout<<"删除成功。。。"<<endl;
}
else
if (choice==3)//修改信息
{
int i;
int flag=0;
char number[20];
cout<<"请输入要修改学生的学号"<<endl;
cin>>number;
for(i=1;i<=S[0].Total ;i++)
if(strcmp(S[i].S_number,number)==0)
flag=i;
if(!flag)
{
cout<<"你所要修改的学生不存在!"<<endl;
}
else
{
cout<<"**********************************"<<endl;
cout<<"             修改前的信息         "<<endl;
cout<<"**********************************"<<endl;
cout<<"*****姓名*****学号*****宿舍号*****"<<endl;
cout<<"**********************************"<<endl;
cout<<"*****"<<setw(10)<<S[flag].S_name << "*****"<<setw(14)<<S[flag].S_number <<
"*****"<<setw(8)<<S[flag].D_number <<"*****"<<endl;
cout<<"**********************************"<<endl;
cout<<"***********学生信息修改***********"<<endl;
cout<<"学号:"<<endl;
cin>>S[flag].S_number ;
cout<<"姓名:"<<endl;
cin>>S[flag].S_name ;
cout<<"宿舍号:"<<endl;
cin>>S[flag].D_number ;
cout<<"**********************************"<<endl;
cout<<"             修改后的信息         "<<endl;
cout<<"**********************************"<<endl;
cout<<"*****姓名*****学号*****宿舍号*****"<<endl;
cout<<"**********************************"<<endl;
cout<<"*****"<<setw(10)<<S[flag].S_name << "*****"<<setw(14)<<S[flag].S_number <<
"*****"<<setw(8)<<S[flag].D_number <<"*****"<<endl;
cout<<"**********************************"<<endl;
}
}
else//输入错误
{
cout<<"选择错误!"<<endl;
}
}
case 5://退出管理系统
break;
default:
cout<<"输入错误"<<endl;
}
}
void guanli::showhead ()//定义显示方式表头函数
{
cout<<"*********************************************"<<endl;
cout<<"             欢迎使用宿舍管理系统            "<<endl;
cout<<"*********************************************"<<endl;
cout<<"                 显示方式                    "<<endl;


cout<<"                                             "<<endl;
cout<<"                1.按学生学号                 "<<endl;
cout<<"                2.按学生宿舍                 "<<endl;
cout<<"                3.按学生姓名                 "<<endl;
cout<<"*********************************************"<<endl;
cout<<"请输入:   "<<endl;
}
void guanli::searchheader()//定义查询函数
{
cout<<"*********************************************"<<endl;
cout<<"             欢迎使用宿舍管理系统            "<<endl;
cout<<"*********************************************"<<endl;
cout<<"                 查询菜单                    "<<endl;
cout<<"                                             "<<endl;
cout<<"            1.按学生学号查询                 "<<endl;
cout<<"            2.按学生宿舍查询                 "<<endl;
cout<<"            3.按学生姓名查询                 "<<endl;
cout<<"*********************************************"<<endl;
cout<<"请输入:   "<<endl;
}
void guanli::Add(Student *S) //定义录入函数
{
char ch[10];
char ch1[2]={"0"};
do
{
cout<<"***********学生信息录入系统***************"<<endl;
cout<<"请输入第"<<S[0].Total+1<<"个学生的信息"<<endl;
cout<<"学号:"<<endl;
cin>>S[S[0].Total+1].S_number ;
cout<<"姓名:"<<endl;
cin>>S[S[0].Total+1].S_name ;
cout<<"宿舍号:"<<endl;
cin>>S[S[0].Total+1].D_number ;
S[0].Total++;
cout<<" 按数字键继续录入,按0退出"<<endl;
cin>>ch;
}
while(strcmp(ch,ch1)!=0);
}

void guanli::display (Student *S)//定义显示函数
{
int i;
cout<<"*********************************************"<<endl;
cout<<"             宿舍全体学生信息                "<<endl;
cout<<"*********************************************"<<endl;


cout<<"*****姓名********学号**********宿舍号********"<<endl;
if(S[0].Total>0)
{
for(i=1;i<=S[0].Total;i++)
{
cout<<"                                             "<<endl;
cout<<"*****"<<setw(10)<<S[i].S_name <<"********"<<setw(14)<<
S[i].S_number <<"**********"<<setw(8)<<S[i].D_number <<"********"<<endl;
cout<<"*********************************************"<<endl;
}
}
else
{
cout<<"*********************************************"<<endl;
cout<<"                 无任何信息                  "<<endl;
cout<<"*********************************************"<<endl;
}
}

void guanli::sort_d_number (Student *S)//排序函数按照宿舍号从小到大排序
{
int i,j;
char t[20];
char name[30];
char number[15];
for(i=1;i<=S[0].Total;i++)
for(j=i;j<=S[0].Total;j++)
if(S[i].D_number >S[j].D_number )
{
strcpy(name,S[i].S_name);
strcpy(number,S[i].S_number);
strcpy(t,S[i].D_number );
strcpy(S[i].S_name,S[j].S_name);
strcpy(S[i].S_number,S[j].S_number);
strcpy(S[i].D_number,S[j].D_number);
strcpy(S[j].S_name,name);
strcpy(S[j].S_number,number);
strcpy(S[j].D_number,t);
}

}

void guanli::search_d_number(Student *S)//查询函数以宿舍号为关键字进行查询
{
int high,low,mid;
char number[20];
int j;
low=1;
high=S[0].Total ;
cout<<"请输入你想要查找学生的宿舍号:"<<endl;
cin>>number;
sort_d_number(S);//学生宿舍号从小到大排序函数
cout<<"******************************************"<<endl;
cout<<"             所查找的学生的信息           "<<endl;
cout<<"******************************************"<<endl;
cout<<"*****姓名********学号********宿舍号*******"<<endl;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(number,S[mid].D_number)==0)
{
int i=mid;
j=1;
cout<<"******************************************"<<endl;
cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
<<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
for(i=mid+1;i<=high;i++)
{
if(strcmp(number,S[i].D_number)==0)
{
cout<<"******************************************"<<endl;
cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
<<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
}
}
for(i=mid-1;i>=low;i--)
{
if(strcmp(number,S[i].D_number)==0)
{
cout<<"******************************************"<<endl;
cout<<"*****"<<setw(10)<<S[i].S_name<<"********"<<setw(14)<<S[i].S_number
<<"********"<<setw(8)<<S[i].D_number<<"*******"<<endl;
}
}
break;
}
else
if(strcmp(number,S[mid].D_number)>0)


low=mid+1;
else
high=mid-1;
}
if(j!=1)
{
cout<<"******************************************"<<endl;
cout<<"               查无此学生信息             "<<endl;
cout<<"******************************************"<<endl;
}
}

void guanli::exchangehead ()//定义修改学生信息表头函数
{
cout<<"******************************************"<<endl;
cout<<"            欢迎使用宿舍管理系统          "<<endl;
cout<<"******************************************"<<endl;
cout<<"******************修改菜单****************"<<endl;
cout<<"                                          "<<endl;
cout<<"****************1.删除单个信息************"<<endl;
cout<<"****************2.删除全部信息************"<<endl;
cout<<"****************3.修改学生信息************"<<endl;
cout<<"******************************************"<<endl;
cout<<"     请选择:    "<<endl;
}
void main()
{
guanli guangli;
guangli.Menu();
}

热点排行