自己写了一段代码,在主函数中怎么调用函数都没用,代码如下
#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();
}