Skip to content

ChenHaoHu/KinshipCalculator

Repository files navigation

KinshipCalculator

简单使用 QT 实现一个亲属关系计算器,这里只描述了部分亲属关系

下载链接

gif

处理亲戚关系思路

使用二维数组记录亲戚关系,第一列记录的是每个亲戚的可能的10种关系

 "我", "爸爸", "妈妈", "哥哥", "弟弟", "姐姐", "妹妹", "儿子", "女儿", "未知亲戚"

根据这个关系,二维数组里每一行记录的就是一位亲戚的 10种 关系:

{"爸爸", "爷爷", "奶奶", "伯伯", "叔叔", "姑姑", "姑姑", "我", "妹妹", "未知亲戚"},
{"妈妈", "外公", "外婆", "大舅", "小舅", "大姨妈", "小姨妈", "我", "妹妹", "未知亲戚"},     

当用户点击等于的时候,首先会对字符串进行切割,得出亲戚关系称谓的顺序,然后根据这个顺序得出最终称呼

比如: 我的爸爸的妈妈的女儿

qt界面

qt界面

程序执行顺序

  • 切割输入框的字符串 得出 [我,爸爸,妈妈,女儿]

  • 第一个是,所以在首行第一个

  • 第二个是爸爸,故在当前行找到爸爸,因为已经移动到爸爸了,故跳到爸爸那一行

  • 第三个是妈妈,故在爸爸这一行找到与第一行对应的妈妈的位置,即是当前行的第三个 奶奶(我的爸爸的妈妈),因为已经移动到奶奶了,故跳到奶奶那一行

  • 最后一个是女儿,故在奶奶这一行找到与第一行对应的女儿的位置,即是当前行的第九个 姑妈(我的爸爸的妈妈的女儿)

扩展

​ 扩展即在data中添加更多的人物关系即可

代码

void MainWindow::on_sum_clicked()
{

    QString data[12][12] = {
        {"", "爸爸", "妈妈", "哥哥", "弟弟", "姐姐", "妹妹", "儿子", "女儿", "未知亲戚"},
        {"爸爸", "爷爷", "奶奶", "伯伯", "叔叔", "姑姑", "姑姑", "", "妹妹", "未知亲戚"},
        {"妈妈", "外公", "外婆", "大舅", "小舅", "大姨妈", "小姨妈", "", "妹妹", "未知亲戚"},
        {"哥哥", "爸爸", "妈妈", "哥哥", "", "姐姐", "妹妹", "侄儿", "侄女", "未知亲戚"},
        {"弟弟", "爸爸", "妈妈", "", "弟弟", "姐姐", "妹妹", "侄儿", "侄女", "未知亲戚"},
        {"姐姐", "爸爸", "妈妈", "哥哥", "", "姐姐", "妹妹", "外甥", "外甥女", "未知亲戚"},
        {"妹妹", "爸爸", "妈妈", "", "弟弟", "姐姐", "妹妹", "外甥", "外甥女", "未知亲戚"},
        {"儿子", "", "妻子", "哥哥", "弟弟", "姐姐", "妹妹", "孙子", "孙女", "未知亲戚"},
        {"女儿", "", "妻子", "哥哥", "弟弟", "姐姐", "妹妹", "外孙子", "外孙女", "未知亲戚"},
        {"爷爷", "曾祖父", "曾祖母", "伯祖父", "伯祖父", "祖姑母", "祖姑母", "爸爸", "姑妈", "未知亲戚"},
        {"奶奶", "曾祖父", "曾祖母", "伯祖父", "伯祖父", "祖姑母", "祖姑母", "爸爸", "姑妈", "未知亲戚"},
        {"未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚", "未知亲戚"}};

    int size1 = 12;
    int size2 = 12;

    QStringList split = out.split("");

    QString str = "aa";

    int i = 0;
    int j = 0;
    int flag = 0;

    for (int x = 1; x < split.size(); ++x)
    {
        str = split.at(x);

        for (int k = 0; k < size1; k++)
        {
            if (data[0][k] == str)
            {
                j = k;
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            out = "未知亲戚";
        }
        else
        {
            out = data[i][j];
            flag = 0;
        }

        for (int k = 0; k < size1; k++)
        {
            if (out == data[k][0])
            {
                i = k;
                flag = 1;
                break;
            }
        }

        if (flag == 0)
        {
            i = 10;
        }
    }
    // ui->out->setText("不知道,妈个鬼我哪知道!!!");

    ui->out->setText(out);

    out = "";
}