Codeblocks+C+win32写亲戚关系计算器(下篇)

Codeblocks+C+win32写亲戚关系计算器(下篇)

二.程序设计
1.界面设计
(1)在resedit中设计亲戚关系计算器界面,并保存。在。这里插入图片描述
(2)关闭resedit后,codeblocks将自动生成相应的申明。
在这里插入图片描述
在这里插入图片描述

2.代码编写
(1)整个项目地址(有待完善)
https://download.csdn.net/download/weixin_38936626/10893998
(2)代码目录Source下,main.cpp内容如下:

#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "resource.h"
//栈里元素个数
#define	SIZE    100
HINSTANCE hInst;
HWND edit1;
HWND edit2;
//HWND button1;
int count=0;
//存放输入亲戚序列
char process[100][30];
int pro[100];
//性别:男为0,女为1
int gender;
//结果
char result[30];
char gg[30];
//计算过程层号
int Layerno;
int ppro;
int preLayerno;
int prepro;
char de[3]="的";
//亲戚关系大全
char output[132][11][30]={
//我是男的
{"自己","父亲","母亲","哥哥","弟弟","姐姐","妹妹","儿子","女儿","错误","老婆"},
//兄弟族(男)
{"哥哥","父亲","母亲","哥哥","*哥哥/弟弟/我","姐姐","*姐姐/妹妹","侄子","侄女","错误","嫂子"},
{"弟弟","父亲","母亲","*哥哥/弟弟/我","弟弟","*姐姐/妹妹","妹妹","侄子","侄女","错误","弟妹"},
{"侄子","*哥哥/弟弟","*嫂子/弟妹","侄子","侄子","侄女","侄女","侄孙子","侄孙女","错误","侄妇"},
{"侄女","*哥哥/弟弟","*嫂子/弟妹","侄子","侄子","侄女","侄女","侄外孙子","侄外孙女","侄女婿","错误"},
{"嫂子","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","兄弟姻弟","兄弟姻姐","兄弟姻妹","侄子","侄女","哥哥","错误"},
{"弟妹","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","兄弟姻弟","兄弟姻姐","兄弟姻妹","侄子","侄女","哥哥","错误"},
{"兄弟姻兄","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","*兄弟姻兄/兄弟姻弟","兄弟姻姐","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","叔姻侄子","叔姻侄女","错误","兄弟姻嫂子"},
{"兄弟姻弟","兄弟姻伯父","兄弟姻伯母","*兄弟姻兄/兄弟姻弟","兄弟姻弟","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","兄弟姻妹","叔姻侄子","叔姻侄女","错误","兄弟姻弟妹"},
{"兄弟姻姐","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","*兄弟姻兄/兄弟姻弟","兄弟姻姐","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","叔姻外甥","叔姻外甥女","兄弟姻姐夫","错误"},
{"兄弟姻妹","兄弟姻伯父","兄弟姻伯母","*兄弟姻兄/兄弟姻弟","兄弟姻弟","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","兄弟姻妹","叔姻外甥","叔姻外甥女","兄弟姻妹夫","错误"},
//姐妹族(男)
{"姐姐","父亲","母亲","哥哥","*哥哥/弟弟/我","姐姐","*姐姐/妹妹","外甥","外甥女","姐夫","错误"},
{"妹妹","父亲","母亲","*哥哥/弟弟/我","弟弟","*姐姐/妹妹","妹妹","外甥","外甥女","妹夫","错误"},
{"外甥","*姐夫/妹夫","*姐姐/妹妹","外甥","外甥","外甥女","外甥女","甥孙子","甥孙女","错误","甥妇"},
{"外甥女","*姐夫/妹夫","*姐姐/妹妹","外甥","外甥","外甥女","外甥女","甥外孙子","甥外孙女","甥女婿","错误"},
{"姐夫","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","姐妹姻弟","姐妹姻姐","姐妹姻妹","外甥","外甥女","错误","姐姐"},
{"妹夫","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","姐妹姻弟","姐妹姻姐","姐妹姻妹","外甥","外甥女","错误","妹妹"},
{"姐妹姻兄","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻姐","*姐妹姻姐/姐妹姻妹","姑姻侄子","姑姻侄女","错误","姐妹姻嫂子"},
{"姐妹姻弟","姐妹姻伯父","姐妹姻伯母","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻弟","*姐妹姻姐/姐妹姻妹","姐妹姻妹","姑姻侄子","姑姻侄女","错误","姐妹姻弟妹"},
{"姐妹姻姐","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻姐","*姐妹姻姐/姐妹姻妹","姑姻外甥","姑姻外甥女","姐妹姻姐夫","错误"},
{"姐妹姻妹","姐妹姻伯父","姐妹姻伯母","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻弟","*姐妹姻姐/姐妹姻妹","姐妹姻妹","姑姻外甥","姑姻外甥女","姐妹姻妹夫","错误"},
//男息族(男)
{"儿子","自己","老婆","儿子","儿子","女儿","女儿","孙子","孙女","错误","儿媳妇"},
{"孙子","儿子","儿媳妇","孙子","孙子","孙女","孙女","曾孙子","曾孙女","错误","孙媳妇"},
{"孙女","儿子","儿媳妇","孙子","孙子","孙女","孙女","曾外孙男","曾外孙女","孙女婿","错误"},
{"儿媳妇","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","男息姻女","男息姻女","孙子","孙女","儿子","错误"},
{"男息姻男","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","*男息姻女/儿媳妇","*男息姻女/儿媳妇","男息姻孙","男息姻孙女","错误","男息姻女"},
{"男息姻女","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","*男息姻女/儿媳妇","*男息姻女/儿媳妇","男息姻外孙","男息姻外孙女","男息姻婿","错误"},
//女息族(男)
{"女儿","自己","老婆","儿子","儿子","女儿","女儿","外孙","外孙女","女婿","错误"},
{"外孙","女婿","女儿","外孙","外孙","外孙女","外孙女","外曾孙","外曾孙女","错误","外孙妇"},
{"外孙女","女婿","女儿","外孙","外孙","外孙女","外孙女","外曾外孙","外曾外孙女","外孙婿","错误"},
{"女婿","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","女息姻男","女息姻男","女息姻女","女息姻女","外孙","外孙女","错误","女儿"},
{"女息姻男","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","*女息姻男/女婿","*女息姻男/女婿","女息姻女","女息姻女","女息姻孙","女息姻孙女","错误","女息姻妇"},
{"女息姻女","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","*女息姻男/女婿","*女息姻男/女婿","女息姻女","女息姻女","女息姻外孙","女息姻外孙女","女息姻婿","错误"},
//妻族
{"老婆","丈父","丈母","大舅子","小舅子","大姨子","小姨子","儿子","女儿","自己","错误"},
{"大舅子","丈父","丈母","大舅子","*大舅子/小舅子","大姨子","*大姨子/小姨子/老婆","妻侄子","妻侄女","错误","大舅姆"},
{"小舅子","丈父","丈母","*大舅子/小舅子","小舅子","*大姨子/小姨子/老婆","小姨子","妻侄子","妻侄女","错误","小舅姆"},
{"大姨子","丈父","丈母","大舅子","*大舅子/小舅子","大姨子","*大姨子/小姨子/老婆","妻外甥","妻外甥女","大姨夫","错误"},
{"小姨子","丈父","丈母","*大舅子/小舅子","小舅子","*大姨子/小姨子/老婆","小姨子","妻外甥","妻外甥女","小姨夫","错误"},
{"丈父","祖丈人","祖丈母娘","伯丈人","叔丈人","姑丈母","姑丈母","*大舅子/小舅子","*大姨子/小姨子/老婆","错误","丈母"},
{"丈母","外祖丈人","外祖丈母娘","舅丈人","舅丈人","姨丈母","姨丈母","*大舅子/小舅子","*大姨子/小姨子/老婆","丈父","错误"},
{"叔丈人","祖丈人","祖丈母娘","*伯丈人/叔丈人/丈父","叔丈人","姑丈母","姑丈母","堂舅子","堂姨子","错误","叔丈母"},
{"伯丈人","祖丈人","祖丈母娘","伯丈人","*伯丈人/叔丈人/丈父","姑丈母","姑丈母","堂舅子","堂姨子","错误","伯丈母"},
{"姑丈母","祖丈人","祖丈母娘","*伯丈人/叔丈人/丈父","*伯丈人/叔丈人/丈父","姑丈母","姑丈母","姑表舅子","姑表姨子","姑丈人","错误"},
{"舅丈人","外祖丈人","外祖丈母娘","舅丈人","舅丈人","*姨丈母/丈母","*姨丈母/丈母","舅表舅子","舅表姨子","错误","舅丈母"},
{"姨丈母","外祖丈人","外祖丈母娘","舅丈人","舅丈人","*姨丈母/丈母","*姨丈母/丈母","从母舅子","从母姨子","姨丈人","错误"},
//父族(男)
{"父亲","祖父","祖母","伯父","叔父","姑母","姑母","*哥哥/弟弟/我","*姐姐/妹妹","母亲","错误"},
{"伯父","祖父","祖母","伯父","*伯父/叔父/父亲","姑母","姑母","*堂兄/堂弟","*堂姐/堂妹","错误","伯母"},
{"叔父","祖父","祖母","*伯父/叔父/父亲","叔父","姑母","姑母","*堂兄/堂弟","*堂姐/堂妹","错误","叔母"},
{"姑母","祖父","祖母","*伯父/叔父/父亲","*伯父/叔父/父亲","姑母","姑母","*姑表兄/姑表弟","*姑表姐/姑表妹","姑父","错误"},
{"祖父","曾祖父","曾祖母","伯祖父","叔祖父","姑祖母","姑祖母","*伯父/叔父/父亲","姑母","错误","祖母"},
{"祖母","外曾祖父","外曾祖母","舅祖父","舅祖父","姨祖母","姨祖母","*伯父/叔父/父亲","姑母","祖父","错误"},
{"叔祖父","曾祖父","曾祖母","*伯祖父/叔祖父/祖父","叔祖父","姑祖母","姑祖母","*堂叔父/堂伯父","堂姑母","错误","叔祖母"},
{"伯祖父","曾祖父","曾祖母","伯祖父","*伯祖父/叔祖父/祖父","姑祖母","姑祖母","*堂叔父/堂伯父","堂姑母","错误","伯祖母"},
{"姑祖母","曾祖父","曾祖母","*伯祖父/叔祖父/祖父","*伯祖父/叔祖父/祖父","姑祖母","姑祖母","*姑表叔父/姑表伯父","姑表姑母","故祖父","错误"},
{"舅祖父","曾外祖父","曾外祖母","舅祖父","舅祖父","*姨祖母/祖母","*姨祖母/祖母","*舅表叔父/舅表伯父","舅表姑母","错误","舅祖母"},
{"姨祖母","曾外祖父","曾外祖母","舅祖父","舅祖父","*姨祖母/祖母","*姨祖母/祖母","*姨表叔父/姨表伯父","姨表姑母","姨祖父","错误"},
//母族(男)
{"母亲","外祖父","外祖母","舅父","舅父","姨母","姨母","*哥哥/弟弟/我","*姐姐/妹妹","父亲","错误"},
{"舅父","外祖父","外祖母","舅父","舅父","*姨母/母亲","姨母","*舅表兄/舅表弟","*舅表姐/舅表妹","错误","舅母"},
{"姨母","外祖父","外祖母","舅父","舅父","*姨母/母亲","姨母","*姨表兄/姨表弟","*姨表姐/姨表妹","姨父","错误"},
{"外祖父","外曾祖父","外曾祖母","伯外祖父","叔外祖父","姑外祖母","姑外祖母","舅父","*姨母/母亲","错误","外祖母"},
{"外祖母","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","姨外祖母","姨外祖母","舅父","*姨母/母亲","外祖父","错误"},
{"叔外祖父","外曾祖父","外曾祖母","*伯外祖父/叔外祖父/外祖父","叔外祖父","姑外祖母","姑外祖母","堂舅父","堂姨母","错误","叔外祖母"},
{"伯外祖父","外曾祖父","外曾祖母","伯外祖父","*伯外祖父/叔外祖父/外祖父","姑外祖母","姑外祖母","堂舅父","堂姨母","错误","伯外祖母"},
{"姑外祖母","外曾祖父","外曾祖母","*伯外祖父/叔外祖父/外祖父","*伯外祖父/叔外祖父/外祖父","姑外祖母","姑外祖母","姑表舅父","姑表姨母","姑外祖父","错误"},
{"舅外祖父","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","*姨外祖母/外祖母","*姨外祖母/外祖母","舅表舅父","舅表姨母","错误","舅外祖母"},
{"姨外祖母","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","*姨外祖母/外祖母","*姨外祖母/外祖母","姨表舅父","姨表舅母","姨外祖父","错误"},
//我是女的
{"自己","父亲","母亲","哥哥","弟弟","姐姐","妹妹","儿子","女儿","老公","错误"},
//兄弟族(女)
{"哥哥","父亲","母亲","哥哥","*哥哥/弟弟","*姐姐/妹妹","*姐姐/妹妹/我","侄子","侄女","错误","嫂子"},
{"弟弟","父亲","母亲","*哥哥/弟弟","弟弟","*姐姐/妹妹/我","*姐姐/妹妹","侄子","侄女","错误","弟妹"},
{"侄子","*哥哥/弟弟","*嫂子/弟妹","侄子","侄子","侄女","侄女","侄孙子","侄孙女","错误","侄妇"},
{"侄女","*哥哥/弟弟","*嫂子/弟妹","侄子","侄子","侄女","侄女","侄外孙子","侄外孙女","侄女婿","错误"},
{"嫂子","兄弟姻伯父","兄弟姻伯母","兄弟姻兄,","兄弟姻弟","兄弟姻姐","兄弟姻妹","侄子","侄女","哥哥","错误"},
{"弟妹","兄弟姻伯父","兄弟姻伯母","兄弟姻兄,","兄弟姻弟","兄弟姻姐","兄弟姻妹","侄子","侄女","弟弟","错误"},
{"兄弟姻兄","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","*兄弟姻兄/兄弟姻弟","兄弟姻姐","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","舅姻侄子","舅姻侄女","错误","兄弟姻兄妇"},
{"兄弟姻弟","兄弟姻伯父","兄弟姻伯母","*兄弟姻兄/兄弟姻弟","兄弟姻弟","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","兄弟姻妹","舅姻侄子","舅姻侄女","错误","兄弟姻弟妇"},
{"兄弟姻姐","兄弟姻伯父","兄弟姻伯母","兄弟姻兄","*兄弟姻兄/兄弟姻弟","兄弟姻姐","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","舅姻外甥","舅姻外甥女","兄弟姻姐夫","错误"},
{"兄弟姻妹","兄弟姻伯父","兄弟姻伯母","*兄弟姻兄/兄弟姻弟","兄弟姻弟","*兄弟姻姐/兄弟姻妹/嫂子/弟妹","兄弟姻妹","舅姻外甥","舅姻外甥女","兄弟姻妹夫","错误"},
//姐妹族(女)
{"姐姐","父亲","母亲","哥哥","*哥哥/弟弟","姐姐","*姐姐/妹妹/我","外甥","外甥女","姐夫","错误"},
{"妹妹","父亲","母亲","*哥哥/弟弟","弟弟","*姐姐/妹妹/我","妹妹","外甥","外甥女","妹夫","错误"},
{"外甥","*姐夫/妹夫","*姐姐/妹妹","外甥","外甥","外甥女","外甥女","甥孙子","甥孙女","错误","甥妇"},
{"外甥女","*姐夫/妹夫","*姐姐/妹妹","外甥","外甥","外甥女","外甥女","甥外孙子","甥外孙女","甥女婿","错误"},
{"姐夫","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","姐妹姻弟","姐妹姻姐","姐妹姻妹","外甥","外甥女","错误","姐姐"},
{"妹夫","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","姐妹姻弟","姐妹姻姐","姐妹姻妹","外甥","外甥女","错误","妹妹"},
{"姐妹姻兄","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻姐","*姐妹姻姐/姐妹姻妹","姨姻侄子","姨姻侄女","错误","姐妹姻兄妇"},
{"姐妹姻弟","姐妹姻伯父","姐妹姻伯母","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻弟","*姐妹姻姐/姐妹姻妹","姐妹姻妹","姨姻侄子","姨姻侄女","错误","姐妹姻弟妇"},
{"姐妹姻姐","姐妹姻伯父","姐妹姻伯母","姐妹姻兄","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻姐","*姐妹姻姐/姐妹姻妹","姨姻外甥","姨姻外甥女","姐妹姻姐夫","错误"},
{"姐妹姻妹","姐妹姻伯父","姐妹姻伯母","*姐妹姻兄/姐妹姻弟/姐夫/妹夫","姐妹姻弟","*姐妹姻姐/姐妹姻妹","姐妹姻妹","姨姻外甥","姨姻外甥女","姐妹姻妹夫","错误"},
//男息族(女)
{"儿子","老公","自己","儿子","儿子","女儿","女儿","孙子","孙女","错误","儿媳妇"},
{"孙子","儿子","儿媳妇","孙子","孙子","孙女","孙女","曾孙子","曾孙女","错误","孙媳妇"},
{"孙女","儿子","儿媳妇","孙子","孙子","孙女","孙女","曾外孙男","曾外孙女","孙女婿","错误"},
{"儿媳妇","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","男息姻女","男息姻女","孙子","孙女","儿子","错误"},
{"男息姻男","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","*男息姻女/儿媳妇","*男息姻女/儿媳妇","男息姻孙","男息姻孙女","错误","男息姻女"},
{"男息姻女","*男息婚兄/男息婚弟","*男息婚姐/男息婚妹","男息姻男","男息姻男","*男息姻女/儿媳妇","*男息姻女/儿媳妇","男息姻外孙","男息姻外孙女","男息姻婿","错误"},
//女息族(女)
{"女儿","老公","自己","儿子","儿子","女儿","女儿","外孙","外孙女","女婿","错误"},
{"外孙","女婿","女儿","外孙","外孙","外孙女","外孙女","外曾孙","外曾孙女","错误","外孙妇"},
{"外孙女","女婿","女儿","外孙","外孙","外孙女","外孙女","外曾外孙","外曾外孙女","外孙婿","错误"},
{"女婿","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","女息姻男","女息姻男","女息姻女","女息姻女","外孙","外孙女","错误","女儿"},
{"女息姻男","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","*女息姻男/女婿","*女息姻男/女婿","女息姻女","女息姻女","女息姻孙","女息姻孙女","错误","女息姻妇"},
{"女息姻女","*女息姻兄/女息姻弟","*女息姻姐/女息姻妹","*女息姻男/女婿","*女息姻男/女婿","女息姻女","女息姻女","女息姻外孙","女息姻外孙女","女息姻婿","错误"},
//夫族
{"老公","婆父","婆母","大伯子","小叔子","大姑子","小姑子","儿子","女儿","错误","自己"},
{"大伯子","婆父","婆母","大伯子","*大伯子/小叔子/老公","大姑子","*大姑子/小姑子","夫侄子","夫侄女","错误","大伯子媳妇"},
{"小叔子","婆父","婆母","*大伯子/小叔子/老公","小叔子","*大姑子/小姑子","小姑子","夫侄子","夫侄女","错误","小婶子"},
{"大姑子","婆父","婆母","大伯子","*大伯子/小叔子/老公","大姑子","*大姑子/小姑子","夫外甥","夫外甥女","大姑夫","错误"},
{"小姑子","婆父","婆母","*大伯子/小叔子/老公","小叔子","*大姑子/小姑子","小姑子","夫外甥","夫外甥女","小姑夫","错误"},
{"婆父","祖公","祖婆","伯公","叔公","姑婆","姑婆","*大伯子/小叔子/老公","*大姑子/小姑子","错误","婆母"},
{"婆母","外祖公","外祖婆","舅公","舅公","姨婆","姨婆","*大伯子/小叔子/老公","*小姑子/小姑子","婆父","错误"},
{"伯公","祖公","祖婆","伯公","*伯公/叔公/婆父","姑婆","姑婆","*堂伯子/堂叔子","堂姑子","错误","伯婆"},
{"叔公","祖公","祖婆","*伯公/叔公/婆父","叔公","姑婆","姑婆","*堂伯子/堂叔子","堂姑子","错误","叔婆"},
{"姑婆","祖公","祖婆","*伯公/叔公/婆父","*伯公/叔公/婆父","姑婆","姑婆","*姑表叔子/姑表伯子","姑表姑子","姑公","错误"},
{"舅公","外祖公","外祖婆","舅公","舅公","*姨婆/婆母","*姨婆/婆母","*舅表叔子/舅表伯子","舅表姑子","错误","舅婆"},
{"姨婆","外祖公","外祖婆","舅公","舅公","*姨婆/婆母","*姨婆/婆母","*从母叔子/从母伯子","从母姑子","姨公","错误"},
//父族(女)
{"父亲","祖父","祖母","伯父","叔父","姑母","姑母","*哥哥/弟弟","*姐姐/妹妹/我","母亲","错误"},
{"伯父","祖父","祖母","伯父","*伯父/叔父/父亲","姑母","姑母","*堂兄/堂弟","*堂姐/堂妹","错误","伯母"},
{"叔父","祖父","祖母","*伯父/叔父/父亲","叔父","姑母","姑母","*堂兄/堂弟","*堂姐/堂妹","错误","叔母"},
{"姑母","祖父","祖母","*伯父/叔父/父亲","*伯父/叔父/父亲","姑母","姑母","*姑表兄/姑表弟","*姑表姐/姑表妹","姑父","错误"},
{"祖父","曾祖父","曾祖母","伯祖父","叔祖父","姑祖母","姑祖母","*伯父/叔父/父亲","姑母","错误","祖母"},
{"祖母","外曾祖父","外曾祖母","舅祖父","舅祖父","姨祖母","姨祖母","*伯父/叔父/父亲","姑母","祖父","错误"},
{"叔祖父","曾祖父","曾祖母","*伯祖父/叔祖父/祖父","叔祖父","姑祖母","姑祖母","*堂叔父/堂伯父","堂姑母","错误","叔祖母"},
{"伯祖父","曾祖父","曾祖母","伯祖父","*伯祖父/叔祖父/祖父","姑祖母","姑祖母","*堂叔父/堂伯父","堂姑母","错误","伯祖母"},
{"姑祖母","曾祖父","曾祖母","*伯祖父/叔祖父/祖父","*伯祖父/叔祖父/祖父","姑祖母","姑祖母","*姑表叔父/姑表伯父","姑表姑母","姑祖父","错误"},
{"舅祖父","曾外祖父","曾外祖母","舅祖父","舅祖父","*姨祖母/祖母","*姨祖母/祖母","*舅表叔父/舅表伯父","舅表姑母","错误","舅祖母"},
{"姨祖母","曾外祖父","曾外祖母","舅祖父","舅祖父","*姨祖母/祖母","*姨祖母/祖母","*姨表叔父/姨表伯父","姨表姑母","姨祖父","错误"},
//母族(女)
{"母亲","外祖父","外祖母","舅父","舅父","姨母","姨母","*哥哥/弟弟","*姐姐/妹妹/我","父亲","错误"},
{"舅父","外祖父","外祖母","舅父","舅父","*姨母/母亲","姨母","*舅表兄/舅表弟","*舅表姐/舅表妹","错误","舅母"},
{"姨母","外祖父","外祖母","舅父","舅父","*姨母/母亲","姨母","*姨表兄/姨表弟","*姨表姐/姨表妹","姨父","错误"},
{"外祖父","外曾祖父","外曾祖母","伯外祖父","叔外祖父","姑外祖母","姑外祖母","舅父","*姨母/母亲","错误","外祖母"},
{"外祖母","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","姨外祖母","姨外祖母","舅父","*姨母/母亲","外祖父","错误"},
{"叔外祖父","外曾祖父","外曾祖母","*伯外祖父/叔外祖父/外祖父","叔外祖父","姑外祖母","姑外祖母","堂舅父","堂姨母","错误","叔外祖母"},
{"伯外祖父","外曾祖父","外曾祖母","伯外祖父","*伯外祖父/叔外祖父/外祖父","姑外祖母","姑外祖母","堂舅父","堂姨母","错误","伯外祖母"},
{"姑外祖母","外曾祖父","外曾祖母","*伯外祖父/叔外祖父/外祖父","*伯外祖父/叔外祖父/外祖父","姑外祖母","姑外祖母","姑表舅父","姑表姨母","姑外祖父","错误"},
{"舅外祖父","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","*姨外祖母/外祖母","*姨外祖母/外祖母","舅表舅父","舅表姨母","错误","舅外祖母"},
{"姨外祖母","外曾外祖父","外曾外祖母","舅外祖父","舅外祖父","*姨外祖母/外祖母","*姨外祖母/外祖母","姨表舅父","姨表舅母","姨外祖父","错误"}
};
//栈的声明
struct stack{
	char sta[SIZE][30];
	int top;
};
//栈的初始化
void init_stack(struct stack* s)
{
	memset(s->sta, NULL, sizeof(s->sta));
	s->top = -1;
}
//压栈:1为满
int in_stack(struct stack* s, char* data)
{
	if(s->top == SIZE-1){
		printf("the stack is full. \n");
		return 1;
	}

    (s->top)++;
    strcpy(s->sta[s->top], data);
	return 0;
}
//出栈
char* out_stack(struct stack* s)
{
	char tmp[30];
	if(s->top < 0 ){
		printf("the stack is empty. \n");
		return NULL;
	} else {
	    strcpy(tmp, (s->sta)[s->top]);
		(s->top)--;
		return tmp;
	}
}
//栈的删除
void destory(struct stack *s)
{
	s->top = -1;
	memset(s->sta, NULL, sizeof(s->sta));
}
//显示输入亲戚序列
void change(char process[][30],char processchange[])
{
    int j,k,l=0;
    for(j=0; j<count-1; j++)
    {
        for(k=0; k<7; k++)
        {
            if(process[j][k]!='\0')
                processchange[l++] = process[j][k];
        }
        processchange[l++] = de[0];
        processchange[l++] = de[1];
    }
    for(k=0; k<7; k++)
    {
        if(process[count-1][k]!='\0')
            processchange[l++] = process[count-1][k];
    }
    processchange[l]='\0';
    printf("%s\n",processchange);
}
//按输入序列深度优先搜索
int compare(int x, int y, int z)
{
    int i, f;
    if(z==0)
    {
        for(i=0; i<66; i++)
        {
            if(strcmp(output[x][y], output[i][0]) == 0)
            {
                f=i+1;
                return f;
            }
        }
        return 0;
    }
    else
    {
        for(i=0; i<66; i++)
        {
            if(strcmp(output[x][y], output[66+i][0]) == 0)
            {
                f=66+i+1;
                return f;
            }
        }
        return 0;
    }
}
//判断亲戚关系是否存在多结果,并进行分析处理分别压入栈中,返回栈长
int Multiple(struct stack* s, int x, int y)
{
    //output[Layerno-1][pro][0]== '*'
    char temp[30];
    int i,k=0;
    int length=0;
    for(i=1;output[x-1][y][i]!='\0';i++)
    {
        if(output[x-1][y][i]!='/')
        {
            temp[k++]=output[x-1][y][i];
        }
        else
        {
            length++;
            printf("%s",temp);
            strcpy(gg,temp);
            printf("^^^^^^^^^^%s",gg);
            if(in_stack(s,temp))
            {
                printf("in_stack err. \n");
                exit(1);
            }
            k=0;
        }
    }
    printf("%s",temp);
    if(in_stack(s,temp))
    {
        printf("in_stack err. \n");
        exit(1);
    }
    return length+1;
}
//计算亲戚关系
int Calculation()
{
    struct stack S;
	init_stack(&S);
    int i;
    int total=count;
    if(count==0)
    {
        strcpy(result,"自己");
        return 0;
    }
    Layerno=0;
    ppro=0;
    preLayerno=Layerno;
    prepro=ppro;
    if(gender==0)//我是男的
        Layerno=1;
    else//我是女的
        Layerno=67;
    ppro=pro[0];
    if(strcmp(output[Layerno-1][ppro], "错误") == 0)//输入违法
    {
        strcpy(result,"输入违法");
        return 0;
    }

    Layerno=compare(Layerno, ppro, gender);
    //preLayerno=Layerno;

    //Layerno=compare(preLayerno, pro[0], gender);
    int key=0;
    for(i=1;i<count-1;i++)
    {
        /**************
        我是男的:1----------------自己
        兄弟族(男):2-11---------哥哥/弟弟
        姐妹族(男):12-21--------姐姐/妹妹
        男息族(男):22-27--------儿子
        女息族(男):28-33--------女儿
        妻族:34-45-----------------老婆
        父族(男):46-56-----------父亲
        母族(男):57-66-----------母亲
        +++++++++++++++++++++++++++++++++++++++
        我是女的:67---------------自己
        兄弟族(女):68-77--------哥哥/弟弟
        姐妹族(女):78-87--------姐姐/妹妹
        男息族(女):88-93--------儿子
        女息族(女):94-99--------女儿
        夫族:100-111---------------老公
        父族(女):112-122---------父亲
        母族(女):123-132---------母亲
        ***************/
        prepro=ppro;
        ppro=pro[i];
        /*if(key==0)
        {
            preLayerno=Layerno;
            Layerno=compare(Layerno, ppro, gender);
            printf("<<<<<%d",Layerno);
        }*/
        if(Layerno==0)
        {
            strcpy(result,"超出计算范围");
            return 0;
        }
        if(strcmp(output[Layerno-1][ppro], "错误") == 0)//输入违法
        {
            strcpy(result,"输入违法");
            return 0;
        }
        //优化某某的老公的老婆是某某,某某的老婆的老公是某某
        /*if((prepro==9&&pro==10)||(prepro==10&&pro==9))
        {

        }*/
        //key=0;
        if(output[Layerno-1][ppro][0]== '*')
        {
            printf("KKKKKKKKKKKKK\n");
            int i;
            int length;
            length=Multiple(&S ,Layerno, ppro);
            printf("%d",length);
            //for(i=0;i<length;i++)
            //{
                printf("KKKKKKKKKKKKK\n");
               // char *tmp;
                //tmp=out_stack(&S);
                //printf("%s\n",tmp);
                printf("HHHHHH%d",strcmp(gg, output[47][0]));

                printf("############%s",gg);
                printf("%s",output[47][0]);
                for(i=0; i<66; i++)
                {
                    if(gender==0)
                    {
                        //printf("   %d",strcmp(gg, output[i][0]));
                        if(strcmp(gg, output[i][0]) == 0)
                        {
                            preLayerno=Layerno;
                            printf("DDDDDDDDDDDD");
                            Layerno=i+1;
                            key=1;
                            break;
                        }
                        /*else
                        {
                            strcpy(result,"超出计算范围");
                            //return 0;
                        }*/
                    }
                    else
                    {
                        if(strcmp(gg, output[66+i][0]) == 0)
                        {
                            preLayerno=Layerno;
                            Layerno=66+i+1;
                            key=1;
                            break;
                        }
                        /*else
                        {
                            strcpy(result,"超出计算范围");
                            //return 0;
                        }*/
                    }
                }
            //}
        }
        //else
        //{
            //preLayerno=Layerno;
            //Layerno=compare(preLayerno, pro[0], gender);
        //}
        else
        {
            preLayerno=Layerno;
            Layerno=compare(preLayerno, pro[0], gender);
        }
    }
    //preLayerno=Layerno;
    //Layerno=compare(preLayerno, ppro, gender);
    printf("<<<<<%d",Layerno);
    prepro=ppro;
    ppro=pro[i];
    if(Layerno==0)
    {
        strcpy(result,"超出计算范围");
        return 0;
    }
    if(strcmp(output[Layerno-1][ppro], "错误") == 0)//输入违法
    {
        strcpy(result,"输入违法");
        return 0;
    }
    /*if(strcmp(output[Layerno-1][pro[count-1]], "错误") == 0)//输入违法
    {
        strcpy(result,"输入违法");
        return 0;
    }*/
    strcpy(result, output[Layerno-1][ppro]);
    printf("*****%s*****\n",result);
    return 0;
}

BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
        {
            edit1= GetDlgItem(hwndDlg, IDC_EDIT1);
            edit2= GetDlgItem(hwndDlg, IDC_EDIT2);
            //botton1= GetDlgItem(hwndDlg, IDC_BUTTON1);
            //SetTextColor(button1, RGB(255, 255, 255));
        }
        return TRUE;

        case WM_CLOSE:
        {
            if(MessageBox(hwndDlg,"关闭窗口?","提示",MB_YESNO)==IDYES)
            {
                EndDialog(hwndDlg, 0);
            }
        }
        return TRUE;

        case WM_COMMAND:
        {
            switch(LOWORD(wParam))
            {
                case IDC_RADIO1:
                    gender=0;
                    break;
                case IDC_RADIO2:
                    gender=1;
                    break;
                case IDC_BUTTON1:
                    strcpy(process[count],"爸爸");
                    pro[count]=1;
                    count++;
                    break;
                case IDC_BUTTON2:
                    strcpy(process[count],"妈妈");
                    pro[count]=2;
                    count++;
                    break;
                case IDC_BUTTON3:
                    strcpy(process[count],"哥哥");
                    pro[count]=3;
                    count++;
                    break;
                case IDC_BUTTON4:
                    strcpy(process[count],"弟弟");
                    pro[count]=4;
                    count++;
                    break;
                case IDC_BUTTON5:
                    strcpy(process[count],"姐姐");
                    pro[count]=5;
                    count++;
                    break;
                case IDC_BUTTON6:
                    strcpy(process[count],"妹妹");
                    pro[count]=6;
                    count++;
                    break;
                case IDC_BUTTON7:
                    strcpy(process[count],"儿子");
                    pro[count]=7;
                    count++;
                    break;
                case IDC_BUTTON8:
                    strcpy(process[count],"女儿");
                    pro[count]=8;
                    count++;
                    break;
                case IDC_BUTTON9:
                    strcpy(process[count],"老公");
                    pro[count]=9;
                    count++;
                    break;
                case IDC_BUTTON10:
                    strcpy(process[count],"老婆");
                    pro[count]=10;
                    count++;
                    break;
                case IDC_BUTTON11:  //撤销
                    if(count>0)
                    {
                        free(process[count]);
                        pro[count]=0;
                        count--;
                        free(result);
                    }
                    break;
                case IDC_BUTTON12:  //归零
                    for(;count>0;count--)
                    {
                        free(process[count]);
                        pro[count]=0;
                    }
                    free(result);
                    break;
                case IDC_BUTTON13:  //版本
                    if(MessageBox(hwndDlg,"亲戚计算器V1.0","版本",MB_OK)==IDYES)
                    {
                        EndDialog(hwndDlg, 0);
                    }
                    break;
                case IDC_BUTTON14:  //关于
                    if(MessageBox(hwndDlg,"作者:LUJING","关于",MB_OK)==IDYES)
                    {
                        EndDialog(hwndDlg, 0);
                    }
                    break;
                case IDC_BUTTON15:  //等于
                    //int i;
                    /*int procopy[100];
                    for(i=0;i<count;i++)
                    {
                        procopy[i]=pro[i];
                        printf("%s--%d****",process[i],pro[i]);
                        printf("%s--%d****",process[i],pro[i]);
                    }*/
                    char processchange[3000];
                    change(process, processchange);
                    SetWindowText(edit1, processchange);
                    Calculation();
                    SetWindowText(edit2, result);
                    break;
            }
        }
        return TRUE;
    }
    return FALSE;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    hInst=hInstance;
    InitCommonControls();
    return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);
}

猜你喜欢

转载自blog.csdn.net/weixin_38936626/article/details/85713599