简单使用 QT 实现一个亲属关系计算器,这里只描述了部分亲属关系
处理亲戚关系思路
使用二维数组记录亲戚关系,第一列记录的是每个亲戚的可能的10种
关系
"我", "爸爸", "妈妈", "哥哥", "弟弟", "姐姐", "妹妹", "儿子", "女儿", "未知亲戚"
根据这个关系,二维数组里每一行记录的就是一位亲戚的 10种
关系:
{"爸爸", "爷爷", "奶奶", "伯伯", "叔叔", "姑姑", "姑姑", "我", "妹妹", "未知亲戚"},
{"妈妈", "外公", "外婆", "大舅", "小舅", "大姨妈", "小姨妈", "我", "妹妹", "未知亲戚"},
当用户点击等于的时候,首先会对字符串进行切割,得出亲戚关系称谓的顺序,然后根据这个顺序得出最终称呼
程序执行顺序:
-
切割输入框的字符串 得出
[我,爸爸,妈妈,女儿]
-
第一个是
我
,所以在首行第一个 -
第二个是
爸爸
,故在当前行找到爸爸
,因为已经移动到爸爸
了,故跳到爸爸
那一行 -
第三个是
妈妈
,故在爸爸
这一行找到与第一行对应的妈妈
的位置,即是当前行的第三个奶奶
(我的爸爸的妈妈),因为已经移动到奶奶
了,故跳到奶奶
那一行 -
最后一个是
女儿
,故在奶奶
这一行找到与第一行对应的女儿
的位置,即是当前行的第九个姑妈
(我的爸爸的妈妈的女儿)
扩展:
扩展即在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 = "我";
}