根据题意:
一、教师信息定义为结构体,其成员年月也为结构体(可直接定义成两个成员变量,本题没有强制要求),婚姻状态采用共用体类型。
二、输入信息直接写在main函数,实际软件开发应单独写输入函数,输入验证我只写了性别和婚姻状态的验证,其余成员的输入验证需要自己添加。(实际开发,验证也应单独写函数调用)。
三、输出单独函数。
#include
typedef union maType//结婚状态共用体
{
int type;//0未婚1已婚2离异
}MTE;
typedef struct s_date
{
int year;
int month;
}SDATE;
typedef struct teacher
{
char idNum[20];
char name[20];
int sex;//0女1男
SDATE date;
MTE mtype;
char dtName[100];//工作部门名称
}TEER;
void printfTinfo(TEER tInfo);
int main()
{
TEER tInfo;
printf("输入一名教师信息:\n");
printf("工资卡号(20个字符):"),scanf("%s",tInfo.idNum);
printf("姓名(20个字符):"),scanf("%s",tInfo.name);
do
printf("性别(0女1男):"),scanf("%d",&tInfo.sex);
while(tInfo.sex!=0 && tInfo.sex!=1);
printf("出生年月(格式:YYYY MM):"),scanf("%d%d",&tInfo.date.year,&tInfo.date.month);
do
printf("婚姻状态(0未婚1已婚2离异):"),scanf("%d",&tInfo.mtype.type);
while(tInfo.mtype.type!=0 && tInfo.mtype.type!=1 && tInfo.mtype.type!=2);
printfTinfo(tInfo);
return 0;
}
void printfTinfo(TEER tInfo)
{
printf("\n----------------\n输入的信息为:\n");
printf("工资卡号:%s\n",tInfo.idNum);
printf("姓名:%s\n",tInfo.name);
printf("性别:%s\n",tInfo.sex?"男":"女");
printf("出生年月:%04d-%02d\n",tInfo.date.year,tInfo.date.month);
printf("婚姻状态:");
switch(tInfo.mtype.type)
{
case 0:printf("未婚\n");break;
case 1:printf("已婚\n");break;
case 2:printf("离异\n");break;
}
}