Codeblocks+C+win32写亲戚关系计算器(下篇)
Codeblocks+C+win32写亲戚关系计算器(下篇)
二.程序设计
1.界面设计
(1)在resedit中设计亲戚关系计算器界面,并保存。
(2)关闭resedit后,codeblocks将自动生成相应的申明。
2.代码编写
(1)整个项目地址(有待完善)
https://download.****.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);
}