数据结构课程设计之姓名和日期输入
2017-09-07 23:43
281 查看
C语言如何编程判断用户输入的是汉字且人名是合法的?
代码:
怎样保证用户输入的日期必须是正确的?
代码:
# include <stdio.h> # define N 8 # define At(t) (t<'a'||t>'z')&&(t<'A'||t>'Z')&&t!='-' int Getchar(char *A,int min,int max);//长度在[min,max] <闭区间> 之间时 函数结束 返回字符串A的长度 int BF(char a[],char b[]); int check(char S[]); int ISxing(char A[],int B);//如果姓氏查到返回 1 char name[]={"赵 钱 孙 李 周 吴 郑 王 冯 陈 楮 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 酆 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卞 齐 康 伍 余 元 卜 顾 孟 平 黄 和 穆 萧 尹 姚 邵 湛 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 茅 庞 熊 纪 舒 屈 项 祝 董 梁 杜 阮 蓝 闽 席 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 刁 锺 徐 丘 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 昝 管 卢 莫 经 房 裘 缪 干 解 应 宗 丁 宣 贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 陆 荣 翁 荀 羊 於 惠 甄 麹 家 封 芮 羿 储 靳 汲 邴 糜 松 井 段 富 巫 乌 焦 巴 弓 牧 隗 山 谷 车 侯 宓 蓬 全 郗 班 仰 秋 仲 伊 宫 宁 仇 栾 暴 甘 斜 厉 戎 祖 武 符 刘 景 詹 束 龙 叶 幸 司 韶 郜 黎 蓟 薄 印 宿 白 怀 蒲 邰 从 鄂 索 咸 籍 赖 卓 蔺 屠 蒙 池 乔 阴 郁 胥 能 苍 双 闻 莘 党 翟 谭 贡 劳 逄 姬 申 扶 堵 冉 宰 郦 雍 郤 璩 桑 桂 濮 牛 寿 通 边 扈 燕 冀 郏 浦 尚 农 温 别 庄 晏 柴 瞿 阎 充 慕 连 茹 习 宦 艾 鱼 容 向 古 易 慎 戈 廖 庾 终 暨 居 衡 步 都 耿 满 弘 匡 国 文 寇 广 禄 阙 东 欧 殳 沃 利 蔚 越 夔 隆 师 巩 厍 聂 晁 勾 敖 融 冷 訾 辛 阚 那 简 饶 空 曾 毋 沙 乜 养 鞠 须 丰 巢 关 蒯 相 查 后 荆 红 游 竺 权 逑 盖 益 桓 公 万俟 司马 上官 欧阳 夏侯 诸葛 闻人 东方 赫连 皇甫 尉迟 公羊 澹台 公冶 宗政 濮阳 淳于 单于 太叔 申屠 公孙 仲孙 轩辕 令狐 锺离 宇文 长孙 慕容 鲜于 闾丘 司徒 司空 丌官 司寇 仉 督 子车 颛孙 端木 巫马 公西 漆雕 乐正 壤驷 公良 拓拔 夹谷 宰父 谷梁 晋 楚 阎 法 汝 鄢 涂 钦 段干 百里 东郭 南门 呼延 归 海 羊舌 微生 岳 帅 缑 亢 况 后 有 琴 梁丘 左丘 东门 西门 商 牟 佘 佴 伯 赏 南宫 墨 哈 谯 笪 年 爱 阳 佟 第五 言 福 "}; char key[21][3]={"!","。","?","《","》",",","{","}","(",")","¥","‘","’",":",";","—","”","“","、","·","~"}; int main(){ char XM[N+1]; int F; while(1){ do{ printf("输入姓名<字节[4,%d]>:",N); Getchar(XM,4,N); }while(check(XM)); F=ISxing(XM,2)+ISxing(XM,4); if(!F) printf("姓氏有误!请重新"); else printf("姓名:%s\n",XM); } return 0; } int ISxing(char A[],int B)//如果姓氏查到返回 1 { char X=A[B],F=0; A[B]=0; if(BF(name,A)) F=1; A[B]=X; return F; } int check(char S[]) { int i=-1,j=0; while(S[++i]) if(S[i]>0) return printf("输入的不是中文字符!请重新"); while(j<21) if(BF(S,key[j++])) return printf("输入的不是汉字!请重新"); return 0; } int Getchar(char *A,int min,int max)//长度在[min,max] <闭区间> 之间时 函数结束 返回字符串A的长度 { int B,C; do{ A[max]=B=C=0; while((A[B++]=getchar())!='\n'&&B<max); if(A[B-1]!='\n')while(getchar()!='\n'&&++C); else A[--B]=0; if(C||B&&B<min) printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max); }while(C||B<min); return B; } int BF(char a[],char b[])//检查B在A里是否完整 {//匹配 a中b单词完整的个数 int i=0,j=0,k=0; do{ if (b[j]&&(a[i++]==b[j]))++j;//若a[i]与b[j]相等或是大小写关系 继续比较 else{ if(!b[j]) {//如果b字符串到头了 此时需要检查 b在a字符串是否为完整的单词 if((i!=j)&&At(a[i-j-1])||(i==j))//i==j时 b在a字符串的串首 如果不在串首,则i!=j 此时应检查a[i-j-1] if(!a[i]||a[i]&&At(a[i]))//如果b在a字符串的串尾 则a[i]==0 如果不在末尾 则检验 a[i] return 1;//存储当前匹配的单词位置 } else i-=j; j=0; } }while(a[i-1]); return 0; }
怎样保证用户输入的日期必须是正确的?
# include <stdio.h> int gainint(int *p,int a,int b); int GetDate(int a[]); int main(){ int a[3],F; F=GetDate(a); printf("%04d年%02d月%02d日\n%d",a[0],a[1],a[2],F); return 0; } int GetDate(int a[]){ char month[]={31,28,31,30,31,30,31,31,30,31,30,31}; int charge[6]={1,1,1,2016,12,0},i; char zifu[][5]={"年份","月份","天数"}; for(i=0;i<3;i++) { printf("请输入%s(%d--%d):\n",zifu[i],charge[i],charge[i+3]); gainint(&a[i],charge[i],charge[i+3]); if(i==0) month[1]=!(a[0]%4&&a[0]%100)||!(a[0]%400)?29:28; if(i==1) charge[5]=month[a[1]-1]; } return a[0]*10000+a[1]*100+a[2];//把年月日拼成一个数字 } int gainint(int *p,int a,int b)//a为最小值b为最大值 { do{ scanf("%d",p); while(getchar()!='\n'); if(*p>b||*p<a) printf("输入有误,请重新输入(%d--%d):",a,b); }while(*p>b||*p<a); return *p; }
相关文章推荐
- 数据结构课程设计之姓名和日期输入
- 问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包
- [5.18]编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号、和成绩,教师数据有编号 姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类stud
- 数据结构课程设计-12月30号
- 数据结构课程设计题目四_二叉树
- 数据结构课程设计:哈希表的设计
- 数据结构课程设计(C语言)——判断两序列是否为同一二叉搜索树
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计~二叉树的应用(二叉树)
- 浅说代码风格 - 数据结构课程设计
- 学生信息管理系统-数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计之航空订票系统
- 数据结构课程设计-二叉树操作系统
- 数据结构课程设计-学生信息管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计--“模拟图书管理系统的开发”
- 数据结构课程设计--图书管理系统