hur.cn - 华软网

 热门搜索

请高手指点这个MFC程序

  作者:未知    来源:网络    更新时间:2011/4/15
我用了String,Arrary类 ,运行时不对,为什么?




# include "stdafx.h"
#include<afxtempl.h>
#include<afxwin.h>
#include<iostream>
using namespace std;

//设计类CStudent
class CStudent{

public:
int no;//学号、姓名、年龄、专业
char name[10];
CString age;
CString major;

public:
void print()
{

cout<<no<<"\t"<<name<<"\t"<<(LPCTSTR)age<<"\t"<<(LPCTSTR)major<<endl;
}

};

//对CStudent类举行管理
class Guanli{

///CStudent cstudent=new CStudent;
CStudent *cstudent;
public:
CArray<CStudent,CStudent&>m_CStudent;
public:
Guanli(CStudent * cstudent)
{

cstudent->no=11;
strcmp(cstudent->name,"li");
cstudent->age=19;
cstudent->major="CS";
int i;
// for(i=0;i<4;i++)
// {


// }


for(i=0;i<4;i++)
{
   m_CStudent.Add(*cstudent);



}
}

void CInquireNo(CStudent * cstudent);//按学号查询
void CInquireName(CStudent * cstudent);//按姓名查询

void CDeleteNo(CStudent * cstudent);//按学号删除
void CDeleteName(CStudent * cstudent);//按姓名删除

void CInsert(CStudent * cstudent);//加入学生对象

};



/*Guanli(CStudent * cstudent){

cstudent->no=11;
cstudent->name="li";
cstudent->age=19;
cstudent->major="CS";
int i;
for(i=0;i<4;i++){

cstudent->print();
}

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

   m_CStudent.Add(CStudent,CStudent);
}
}*/



//加入学生对象
void Guanli::CInsert(CStudent * cstudent){

// CString no;
// CString name;
// CString age;
// CString major;
CStudent cstudent1;
  cstudent1.age=23;
cstudent1.major="DD";
strcmp(cstudent1.name,"wangwu");
cstudent1.no=66;
// cout<<"请输入要增加学生的学号、姓名、年龄、专业"<<endl;
  // cin>>*(LPCTSTR)cstudent1->no>>*(LPCTSTR)cstudent1->name>>*(LPCTSTR)cstudent1->age>>*(LPCTSTR)cstudent1->major;
m_CStudent.Add(cstudent1);
}  

//按学号查询
void Guanli::CInquireNo(CStudent * cstudent)
{

cout<<"请输入要查询学生的学号"<<endl;
int no;
  cin>>no;
int i=0;

// int m=m_CStudent.GetSize();
for(i;i<(int)m_CStudent.GetSize();i++)
{

if(no==cstudent->no)
{

cout<<"输出此学号学生的信息"<<endl;
  cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
cstudent->print();
}
break;
}
if(i>(int)m_CStudent.GetSize())
{

cout<<"没有该学生"<<endl;
}
}

//按姓名查询
void Guanli::CInquireName(CStudent * cstudent)
{

cout<<"请输入要查询学生的姓名"<<endl;
char name[10];
  cin>>name;
int i;
for(i=0;i<(int)m_CStudent.GetSize();i++)
{

if(strcmp(name,cstudent->name))
{

cout<<"输出此学号学生的信息"<<endl;
  cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
cstudent->print();
}
break;
}
if(i>(int)m_CStudent.GetSize())
{

cout<<"没有该学生"<<endl;
}
}

//按学号删除
void Guanli::CDeleteNo(CStudent * cstudent)
{

cout<<"请输入要删除学生的学号"<<endl;
int no;
  cin>>no;
int i;
for(i=0;i<(int)m_CStudent.GetSize();i++)
{

if(no==cstudent->no)
{
  
int j;
for(j=0;j<m_CStudent.GetSize()-1;j++)
{

m_CStudent.Add(*cstudent);
}
//  cout<<"输出此学号学生的信息"<<endl;
  // cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
//  cout<<(LPCTSTR)cstudent->no<<"\t"<<(LPCTSTR)cstudent->name<<"\t"<<(LPCTSTR)cstudent->age>>"\t">>(LPCTSTR)cstudent->major<<endl;
}
  break;
}
if(i>(int)m_CStudent.GetSize())
{

cout<<"没有该学生"<<endl;
}
}

//按姓名删除
void Guanli::CDeleteName(CStudent * cstudent)
{

cout<<"请输入要删除学生的学号"<<endl;
char name[10];
  cin>>name;
int i;
for(i=0;i<(int)m_CStudent.GetSize();i++)
{

if(strcmp((LPCTSTR)name,cstudent->name))
{
strcmp(cstudent->name,NULL);
strcmp(cstudent->age,NULL);
strcmp(cstudent->major,NULL);
cstudent->no=NULL;
/* int j;
for(j=0;j<CArray.GetSize()-1;j++)
{

m_CStudent.Add(*cstudent);
}*/
//  cout<<"输出此学号学生的信息"<<endl;
  // cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
//  cout<<(LPCTSTR)cstudent->no<<"\t"<<(LPCTSTR)cstudent->name<<"\t"<<(LPCTSTR)cstudent->age>>"\t">>(LPCTSTR)cstudent->major<<endl;
}
break;
}
if(i>(int)m_CStudent.GetSize())
{

cout<<"没有该学生"<<endl;
}
}


int main(int argc, char* argv[])
{
//printf("Hello World!\n");
// CStudent * cstudent0;
CStudent cstudent0;
Guanli *p;
  p=NULL;
// p=&q;
int t;
while(1)
{

cout<<"请选摘要执行的操作"<<"\n"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"1.按学号查询"<<"\t"<<"2.按姓名查询"<<"\t"<<"3.按学号删除"<<"\t"<<"4.按姓名删除"<<"\t"<<"5.加入学生对象"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cin>>t;
if(t<1 || t>9)
{
  
break;
}//if
else{

switch(t)
{
case 1:
  p->CInquireNo(&cstudent0);//按学号查询
break;
case 2:
p->CInquireName(&cstudent0);
break;
case 3:
p->CDeleteNo(&cstudent0);
break;
case 4:
p->CDeleteName(&cstudent0);
break;
case 5:
p->CInsert(&cstudent0);
break;
default:
break;
}
}//else
}//while
return 0;
}//main



---华软 网友回答---
溃散照旧结果不对?单步追踪一下
---华软网友回复---
不对的详细描写是?
---华软网友回复---
void Guanli::CInquireNo(CStudent * cstudent)
{

cout<<"请输入要查询学生的学号"<<endl;
int no;
  cin>>no;
int i=0;

// int m=m_CStudent.GetSize();
for(i;i<(int)m_CStudent.GetSize();i++)
{

if(no==cstudent->no)
{

cout<<"输出此学号学生的信息"<<endl;
  cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
cstudent->print();
}
break;
}
if(i>(int)m_CStudent.GetSize())
{

cout<<"没有该学生"<<endl;
}
}

这个执行到for(i;i<(int)m_CStudent.GetSize();i++)
就不能再继续执行了
---华软网友回复---

#include "stdafx.h"
#include<afxtempl.h>
#include<afxwin.h>
#include<iostream>
using namespace std;

//设计类CStudent
class CStudent{
public:
int no;//学号、姓名、年龄、专业
char name[10];
CString age;
CString major;

public:
void print()
{
    cout<<no<<"\t"<<name<<"\t"<<(LPCTSTR)age<<"\t"<<(LPCTSTR)major<<endl;
}

};

//对CStudent类举行管理
class Guanli{

public:
      CArray<CStudent,CStudent&>m_CStudent;
public:
      Guanli()
  {
 
       /* for(int i=0;i<4;i++) //你要的这个初始化没意义,若要则把注释去掉即可
{
          CStudent cstudent;
  cstudent.no=i+1;
  strcpy(cstudent.name,"li");
  cstudent.age="19";
  cstudent.major="CS";
      
          m_CStudent.Add(cstudent);
}*/

  }

void CInquireNo();//按学号查询
void CInquireName();//按姓名查询

void CDeleteNo();//按学号删除
void CDeleteName();//按姓名删除

void CInsert();//加入学生对象

};



//加入学生对象
void Guanli::CInsert(){

     CStudent cstudent;
     cout<<"请输入要增加学生的学号、姓名、年龄、专业"<<endl;

 char temp_age[5];//cin不能作用于CString对象,临时用字符数组取代
 for (int i=0;i<5;i++)
   temp_age[i]='\0';//初始化为空

     char temp_major[10];
 for (i=0;i<10;i++)
   temp_major[i]='\0';//初始化为空

     cin>>cstudent.no>>cstudent.name>>temp_age>>temp_major;

 for (i=0;temp_age[i]!='\0';i++)//拷贝回去
      cstudent.age+=temp_age[i];
     for (i=0;temp_major[i]!='\0';i++)//拷贝回去
      cstudent.major+=temp_major[i];

      m_CStudent.Add(cstudent);
}   

//按学号查询
void Guanli::CInquireNo()
{

    cout<<"请输入要查询学生的学号"<<endl;
    int no;
    cin>>no;
int i;
    for(i=0;i<m_CStudent.GetSize();i++)

        if(no==m_CStudent[i].no)
{

               cout<<"输出此学号学生的信息"<<endl;
               cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
               m_CStudent[i].print();
               return;//找到后直接前往
}
        
}
  
     cout<<"没有该学生"<<endl;

}

//按姓名查询
void Guanli::CInquireName()
{

    cout<<"请输入要查询学生的姓名"<<endl;
    char name[10];
    cin>>name;
    int i=0;
    for(i;i<m_CStudent.GetSize();i++)


      if(strcmp(name,m_CStudent[i].name)==0)
  {

          cout<<"输出此学号学生的信息"<<endl;
          cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"年龄"<<"\t"<<"专业"<<endl;
          m_CStudent[i].print();
          return;
  }
}
      
      cout<<"没有该学生"<<endl;

}

//按学号删除
void Guanli::CDeleteNo()
{

   cout<<"请输入要删除学生的学号"<<endl;
   int no;
   cin>>no;
   int i;
   for(i=0;i<m_CStudent.GetSize();i++)
   { 

      if(no==m_CStudent[i].no)
      {
  m_CStudent.RemoveAt(i);//删除
          return;
  }
   }
  
      cout<<"没有该学生"<<endl;
  
}

//按姓名删除
void Guanli::CDeleteName()
{

   cout<<"请输入要删除学生的姓名"<<endl;
   char name[10];
   cin>>name;
   int i;
   for(i=0;i<m_CStudent.GetSize();i++)
   { 

      if(strcmp(name,m_CStudent[i].name)==0)
      {
  m_CStudent.RemoveAt(i);//删除
          return;
  }
   }
   
   cout<<"没有该学生"<<endl;

}


int main(int argc, char* argv[])
{

    Guanli p;
 
   int t;
   while(1)
   {

  cout<<"请选摘要执行的操作"<<"\n"<<endl;
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
      cout<<"1.按学号查询"<<"\t"<<"2.按姓名查询"<<"\t"<<"3.按学号删除"<<"\t"<<"4.按姓名删除"<<"\t"<<"5.加入学生对象"<<endl;
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
      cin>>t;
      if(t<1 || t>9)
  {
         break;
  }//if

     else{

      switch(t)
  {
           case 1:
             p.CInquireNo();//按学号查询
             break;
           case 2:
             p.CInquireName();
             break;
          case 3:
             p.CDeleteNo();
             break;
          case 4:
             p.CDeleteName();
             break;
          case 5:
             p.CInsert();
             break; 
         default:
             break;
  }
}//else
}//while
return 0;
}//main



---华软网友回复---
楼上的
为什么运行不了 是否是我环境有问题?
---华软网友回复---
有没有改一下设置:PROJECT->settings:在General第一个选中框中选择USE MFC IN A SHARED DLL
---华软网友回复---
建一个win32 console application 
第二步如果是见一个empty PROJECT 的话就再建一个.cpp加入该project,把代码复制进去,删除#include"stdafx.h",并如上所说修改设置,
第二步若是建一个"hello world",则直接把代码考进去,再修改设置即可
---华软网友回复---
我已经都修改了 可是照旧不对 啊       
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。