黑马程序员C++学习笔记

1.关于if语句使用的逻辑问题【未解决】

/*这里可以书写多行注释
 版权:copyright*/
#include<iostream>
using namespace std;

int main()
{
    //选择结构 单行if语句
    float score = 0;
    cout << "请输入你的分数" << endl;
    cin >> score;
    cout << "您输入的分数是" << score << endl;
    if (score >= 600)
    {
        cout << "恭喜您考上了一本大学" << endl;
    }
    else if(500 <= score < 600)
    {
        cout << "二本" << endl;
    }
    else if(score > 400)
    {
        cout << "专科" << endl;
    }
    else
    {
        cout << "nothing" << endl;
    }
    
    
}

当输入66时,程序输出二本,debug时发现程序直接运行了

else if(500 <= score < 600)
    {
        cout << "二本" << endl;
    }然后跳出。


2.结构体的应用案例引发的错误【待排查】

#include<iostream>
#include<string>
using namespace std;


//学生的结构体定义
struct Student
{
    string sName;
    int score;
};

//老师的结构体定义
struct Teacher
{
    string tName;
    struct Student sArray[5];
};

//给老师和学生赋值的函数
void allocateSpace(struct Teacher tArray[], int len)
{
    string nameSeed = "ABCDE";
    //给老师赋值
    for(int i = 0; i < len; i++ )
    {
        tArray[i].tName = "Teacher_";
        tArray[i].tName += nameSeed[i];
        for (int j = 0; j < 5; j++)
        {
            tArray[i].sArray[j].sName = "Student_";
            tArray[i].sArray[j].sName += nameSeed[j];
            tArray[i].sArray[j].score = 60;
        }    
    }
}

//打印所有信息
void printInfo(struct Teacher tArray[], int len)
{
    string nameSeed = "ABCDE";
    //给老师赋值
    for (int i = 0; i < len; i++)
    {
        cout << "老师姓名:" << tArray[i].tName << endl;  //编译器显示此行引起程序崩溃
        for (int j = 0; j < 5; j++)
        {
            cout << "学生姓名:" << tArray[i].sArray[j].sName << endl
                << "考试分数:" << tArray[i].sArray[j].score << endl;
        }
    }
}
int main()
{
    //1.创建三名老师的数组
    struct Teacher tArray[3];
    int len = sizeof(tArray) / sizeof(tArray[0]);
    allocateSpace(tArray, len);
    printInfo(tArray, 5);
    system("pause");
    return 0;
}

 

 3.C++实现通讯录管理系统

#include<iostream>
#include<string>
using namespace std;
#define MAX 1000

struct Person
{
    string m_Name;
    int m_Sex;
    int m_Age;
    string m_Phone;
    string m_Addr;
};

struct Addressbooks
{
    struct Person personArray[MAX];
    int m_Size;
};


//显示菜单
void showMenu()
{
    cout << "*************************" << endl;
    cout << "*****  1.添加联系人  *****" << endl;
    cout << "*****  2.显示联系人  *****" << endl;
    cout << "*****  3.删除联系人  *****" << endl;
    cout << "*****  4.查找联系人  *****" << endl;
    cout << "*****  5.修改联系人  *****" << endl;
    cout << "*****  6.清空联系人  *****" << endl;
    cout << "*****  7.打开python  *****" << endl;
    cout << "*****  0.退出" << endl;
    cout << "*************************" << endl;

}


//添加过程
void add_person(Addressbooks * abs)
{
    string name;
    cout << "请输入姓名" << endl;
    cin >> name;
    abs->personArray[abs->m_Size].m_Name = name;

    cout << "请输入性别" << endl;
    cout << "1 --- 男" << endl;
    cout << "2 --- 女" << endl;
    int sex = 0;
    while (true)
    {
        cin >> sex;
        if (sex == 1 || sex == 2)
        {
            abs->personArray[abs->m_Size].m_Sex = sex;
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }


    cout << "请输入年龄: " << endl;
    int age = 0;
    cin >> age;
    abs->personArray[abs->m_Size].m_Age = age;

    cout << "请输入联系电话: " << endl;
    string phone;
    cin >> phone;
    abs->personArray[abs->m_Size].m_Phone = phone;

    cout << "请输入家庭住址: " << endl;
    string address;
    cin >> address;
    abs->personArray[abs->m_Size].m_Addr = address;

    //更新通信录人数
    abs->m_Size++;
    cout << "添加成功" << endl;
}

//1.添加联系人
void addPreson(Addressbooks* abs)
{
    
    //判断通信录是否已满,如果满了就不再添加
    if (abs->m_Size == MAX)
    {
        cout << "通信录已满,无法添加!" << endl;
        return;
    }
    else
    {
        add_person(abs);
        system("pause");
        system("cls");
    }
}


//2.显示所有的联系人
void showPerson(Addressbooks* abs)
{ 
//判断通信录中人数是否为0,如果为0,提示记录为空
//如果不为0,显示记录的联系人信息
if (abs->m_Size == 0)
{
    cout << "当前记录为空" << endl;
}
else
{
    for (int i = 0; i < abs->m_Size; i++)
    {
        cout << "姓名:" << abs->personArray[i].m_Name << endl;
        cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "":"")<< endl;
        cout << "年龄:" << abs->personArray[i].m_Age << endl;
        cout << "电话:" << abs->personArray[i].m_Phone<< endl;
        cout << "地址:" << abs->personArray[i].m_Addr << endl;
        cout << endl;
    }
}
    system("pause");
    system("cls");
}


//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数一 通信录  参数二 对比姓名
int isExist(Addressbooks * abs, string name)
{
    for (int i = 0; i < abs->m_Size; i++)
    {
        if (abs->personArray[i].m_Name == name)
        {
            return i;
        }
    }
    return -1; //如果遍历结束都没有找到,返回-1
}



//3.删除指定的联系人
void deletePerson(Addressbooks* abs)
{
    cout << "请输入您要删除的联系人" << endl;
    string name;
    cin >> name;

    //ret == -1 未查到
    //ret != -1 查到了
    int ret = isExist(abs, name);
    if (ret != -1)
    {
        for (int i = ret; i < abs->m_Size; i++)
        {
            //数据前移
            abs->personArray[i] = abs->personArray[i + 1];
        }
        cout << "删除成功!" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}


//4.查找指定的联系人信息
void findPerson(Addressbooks* abs)
{
    cout << "请输入您要查找的联系人" << endl;
    string name;
    cin >> name;

    //判断指定的联系人是否存在通信录中
    int ret = isExist(abs, name);
    if (ret != -1)
    {
        cout << "姓名:" << abs->personArray[ret].m_Name << endl;
        cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "" : "") << endl;
        cout << "年龄:" << abs->personArray[ret].m_Age << endl;
        cout << "电话:" << abs->personArray[ret].m_Phone << endl;
        cout << "地址:" << abs->personArray[ret].m_Addr << endl;
        cout << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}


//5.修改指定联系人
void modifyPerson(Addressbooks * abs)
{
    cout << "请输入您要修改的联系人" << endl;
    string name;
    cin >> name;

    int ret = isExist(abs, name);

        if (ret != -1)
        {
            abs->m_Size = ret;
            add_person(abs);
            cout << "修改成功!" << endl;
        }
        else
        {
            cout << "查无此人" << endl;
        }
        system("pause");
        system("cls");

}


//6.清空联系人
void cleanPerson(Addressbooks* abs)
{
    cout << "该操作会删除全部联系人,是否确认清空?(y/n)" << endl;
    while (true)
    {
        int choose;
        cin >> choose;
        if (choose == 1 || choose == 2)
        {
            if (choose == 1)
            {
                abs->m_Size = 0;
                cout << "通讯录已清空!" << endl;
            }
            else
            {
                cout << "已取消删除!" << endl;
            }
            break;
        }
        else
        {
            cout << "输入有误,请重新输入" << endl;
        }

    }

    system("pause");
    system("cls");
}




int main()
{
    //创建通信录结构体变量
    Addressbooks abs;
    //初始化通信录中当前人员个数
    abs.m_Size = 0;
    int select = 0; //创建用户选择输入变量
    while (true)
    {
        showMenu();
        cin >> select;
        switch (select)
        {
        case 1:
            addPreson(&abs);  //利用地址传递,可以修改实参
            break;
        case 2:
            showPerson(&abs);
            break;
        case 3:
            deletePerson(&abs);
            break;
        case 4:
            findPerson(&abs);
            break;
        case 5:
            modifyPerson(&abs);
            break;
        case 6:
            cleanPerson(&abs);
            break;
        case 7:
            system("python");
        case 0:
            cout << "欢迎下次使用" << endl;
            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }


    system("pause");
    return 0;
}

 

posted @ 2020-02-07 13:12  今夕清欢  阅读(1434)  评论(3编辑  收藏  举报