zoukankan      html  css  js  c++  java
  • C语言实现血型查询系统

    1、题目:根据血型遗传关系,编程实现:(1)输入父亲或母亲一个人的血型时,输出子女可能的血型;(2)输入子女的血型时,输出其父母可能的血型;(3)同时输入父亲和母亲的血型时,输出子女可能的血型;(4)同时输入父母和子女血型时能判断是否具有血型血缘关系。

    2、设计要求:(1)程序运行时有友好的操作提示界面;(2)可进行多人次输入,将血型关系总表输入文件保持,在主菜单中能选择查看血型关系总表;(3)有输入错误检查,并限制出错次数,如:应输入字母时输入其它内容,能提示错误并要求重新输入;(4)程序中有详细的注释说明;

    3、设计思路:本设计基于血型对照表,血型对照表如下图所示。血型有A、B、AB和O型血四种,四种血型两两组合共有十六种情况。根据血型组合表,可以将这十六中组合存储到一个数组table当中,然后根据需要来设计不同功能如何读取数组、读取哪一个单元。

    4、流程图

    5、完整源程序

    #include<stdio.h>
    
    //从键盘中接收用户的选择,若输入不和发给出提示,让用户重新输入。 
    int receive()	
    {
    	int in;
    	int count = 4;
    	while(count>0)
    	{
    		scanf("%d",&in);
    		if(in>0 && in<5) break;	//合法输入,跳出循环 
    		else	//非法输入,提示用户重新输入,并且记录输入次数 
    		{
    			count--;
    			printf("		输入错误!!!您还有%d次输入机会!
    		请输入1、2、3或4:",count);
    		}
    	}
    	return in;
    }
    //输入父亲或母亲一个人的血型时,输出子女可能的血型;
    void func1(int bloodType[][6])	
    {
    	int in, i, j;
    	int subTable[4] = {0,0,0,0};
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		+ 父亲或母亲血型如下:
    ");
    	printf("		+ 1、A型血
    ");
    	printf("		+ 2、B型血
    ");
    	printf("		+ 3、AB型血
    ");
    	printf("		+ 4、O型血
    ");
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		输入:");
    	in = receive();
    	for(i=0; i<16; i++)
    	{
    		if(bloodType[i][0] == in)
    		{
    			for(j=2; j<6; j++)
    			{
    				if(bloodType[i][j] == 1)
    					subTable[j-2] = 1;
    			}
    		}
    	}
    	printf("		子女可能出现的血型为:");
    	if(subTable[0] == 1) printf("	A型 ");
    	if(subTable[1] == 1) printf("	B型 ");
    	if(subTable[2] == 1) printf("	AB型 ");
    	if(subTable[3] == 1) printf("	O型 ");
    	printf("
    ");
    }
    //输入子女的血型时,输出其父母可能的血型;
    void func2(int bloodType[][6])
    {
    	int in, i, j;
    	char subTable[3] = {'A','B','O'};
    
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		+ 子女血型如下:
    ");
    	printf("		+ 1、A型血
    ");
    	printf("		+ 2、B型血
    ");
    	printf("		+ 3、AB型血
    ");
    	printf("		+ 4、O型血
    ");
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		输入:");
    	in = receive();
    	
    	printf("		父母可能的血型为:
    ");
    	for(i=0; i<10; i++)
    	{
    		if(bloodType[i][in+1] == 1)
    		{
    			if(bloodType[i][0] == 1) printf("			A型 ");
    			else if(bloodType[i][0] == 2) printf("			B型 ");
    			else if(bloodType[i][0] == 3) printf("			AB型 ");
    			else printf("			O型");
    			if(bloodType[i][1] == 1) printf("+ A型 
    ");
    			else if(bloodType[i][1] == 2) printf("+ B型 
    ");
    			else if(bloodType[i][1] == 3) printf("+ AB型 
    ");
    			else printf("+ O型 
    ");
    		}
    	}
    	printf("
    ");
    }
    //同时输入父亲和母亲的血型时,输出子女可能的血型;
    void func3(int bloodType[][6])
    {
    	int in1, in2;
    	int i, j;
    
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		+ 血型如下:
    ");
    	printf("		+ 1、A型血
    ");
    	printf("		+ 2、B型血
    ");
    	printf("		+ 3、AB型血
    ");
    	printf("		+ 4、O型血
    ");
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		请输入父亲血型的选项:");
    	in1 = receive();
    	printf("		请输入母亲血型的选项:");
    	in2 = receive();
    
    	for(i=0; i<16; i++)
    	{
    		if(bloodType[i][0] == in1 && bloodType[i][1] == in2)
    		{
    			printf("		子女可能的血型为:");
    			for(j=2; j<6; j++)
    			{
    				if(bloodType[i][j] == 1)
    				{
    					if(j == 2) printf("A型 ");
    					if(j == 3) printf("B型 ");
    					if(j == 4) printf("AB型 ");
    					if(j == 5)  printf("O型 ");
    				}
    			}
    			printf("
    ");
    			break;
    		}
    	}
    }
    //同时输入父母和子女血型时能判断是否具有血型血缘关系。
    void func4(int bloodType[][6])
    {
    	int in1, in2, in3;
    	int i, j, flag = 0;
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		+ 血型选择如下:
    ");
    	printf("		+ 1、A型血
    ");
    	printf("		+ 2、B型血
    ");
    	printf("		+ 3、AB型血
    ");
    	printf("		+ 4、O型血
    ");
    	printf("		++++++++++++++++++++++++++++++++++++++
    ");
    	printf("		请输入父亲血型的选项:");
    	in1 = receive();
    	printf("		请输入母亲血型的选项:");
    	in2 = receive();
    	printf("		请输入子女血型的选项:");
    	in3 = receive();
    	
    	for(i=0; i<16; i++)
    	{
    		if(bloodType[i][0] == in1 && bloodType[i][1] == in2)
    		{
    			if(bloodType[i][in3+1] == 1)
    			{
    				printf("		父母和子女有血缘关系
    
    ");
    				flag = 1;
    			}
    			break;
    		}
    	}
    	if(flag == 0) printf("		父母和子女没有血缘关系
    
    ");
    }
    //控制函数,根据用户的选择调用不同的功能函数 
    void console(int bloodTable[][6])
    {
    	int in, count, isEnd = 0;
    	while(isEnd != 2)
    	{
    		printf("		++++++++++++++++++++++++++++++++++++++
    ");
    		printf("		+ 1、输入父亲或母亲一个人的血型
    ");
    		printf("		+ 2、输入子女的血型
    ");
    		printf("		+ 3、同时输入父亲和母亲的血型
    ");
    		printf("		+ 4、输入父母和子女血型,确认血缘关系
    ");
    		printf("		++++++++++++++++++++++++++++++++++++++
    ");
    		printf("		输入:");
    		in = receive();
    		switch(in)
    		{
    		case 1 : func1(bloodTable); break;	
    		case 2 : func2(bloodTable); break;
    		case 3 : func3(bloodTable); break;	
    		case 4 : func4(bloodTable); break;	
    		default : break;
    		}
    		printf("		是否要继续查询?
    ");
    		printf("		++++++++++++++++++++++++++++++++++++++
    ");
    		printf("		+ 1、继续
    ");
    		printf("		+ 2、结束
    ");
    		printf("		++++++++++++++++++++++++++++++++++++++
    ");
    		printf("		输入:");
    		count = 4;
    		while(count>0)	//询问用户是否结束查询,并设置输入非法处理 
    		{
    			count--;
    			scanf("%d",&isEnd);
    			if(isEnd == 1 || isEnd == 2) break;
    			else printf("		输入错误!!!您还有%d次输入机会!
    		请输入1或2:",count);
    		}
    	}
    	printf("		查询结束!!
    ");
    }
    
    int main()
    {
    //	将A、B、AB、O四种血型,父母十六种组合存储到数组table[][]种
    //	其中table[0]和table[1]表示父母的血型,值1、2、3、4分别代表A、B、AB、O四种血型
    //	table[…][2]、table[…][3]、table[…][4]、table[…][5]表示子女的 A、B、AB、O四种血型,值为1表示存在,否则为0 
    	int table[16][6] = {{1,1,1,0,0,1}, {1,2,1,1,1,1}, {1,3,1,1,1,0}, {1,4,1,0,0,1}, {2,2,0,1,0,1}, {2,3,1,1,1,0}, {2,4,0,1,0,1}, {3,3,1,1,1,0}, 
    	{3,4,1,1,0,0},{4,4,1,1,1,0},{2,1,1,1,1,1}, {3,1,1,1,1,0}, {4,1,1,0,0,1}, {3,2,1,1,1,0}, {4,2,0,1,0,1}, {4,3,1,1,0,0}};
    //	调用控制函数 
    	console(table);
    	return 0;
    }
    

    6、运行结果展示

  • 相关阅读:
    IDEA生成可执行的jar文件
    Android ROM包定制(解包,增删模块,打包)
    frida的用法--Hook Java代码篇
    C语言sprintf和sscanf函数用法
    C语言memcpy函数的用法
    自己动手编译Android(LineageOS)源码
    j2ee高级开发技术课程第三周
    linux内核学习之全局描述符表(GDT)(二)
    螺旋队列顺时针方向 和逆时针方向的实现
    zigzag数组:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组
  • 原文地址:https://www.cnblogs.com/godfriend/p/10985984.html
Copyright © 2011-2022 走看看