寒假集训第一天——结构体
来源:互联网 发布:淘宝lol神半价怎么搜 编辑:程序博客网 时间:2024/06/05 02:38
期待已久的寒假集训终于开始了,第一天讲的内容比较简单——结构体,之前就学了点。。。
表示普通的结构体会用,涉及到指针都不大会,今天算是学了点指针的用法。。。
作业描述如下:
结构体
今天作业
1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
2.建立结构体数组,实现对多个同学的信息输入,输出
3.实现简单的统计功能,比如统计做题数大于150的同 学并输出其完整信息
4.实现查找功能,包括按姓名、学号查找
5.实现信息修改功能
6.按做题数目进行排序(选作)
7.其他功能可以自由扩展,多多益善 ^_^
8.程序一个函数实现一个功能
9.代码测试成功后贴在论坛上,大家互相学习借鉴
1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
2.建立结构体数组,实现对多个同学的信息输入,输出
3.实现简单的统计功能,比如统计做题数大于150的同 学并输出其完整信息
4.实现查找功能,包括按姓名、学号查找
5.实现信息修改功能
6.按做题数目进行排序(选作)
7.其他功能可以自由扩展,多多益善 ^_^
8.程序一个函数实现一个功能
9.代码测试成功后贴在论坛上,大家互相学习借鉴
花了一上午完成作业。。。
#include<stdio.h>#include<string.h>#include<stdlib.h>//#include<windows.h>#define NAMELEN 20#define MAXNUM 100#define MAXPHO 13#define MAXID 13int cmp(const void *p1,const void *p2);void acm_sort(struct acmer *p,int count);//排序功能函数void find(struct acmer *p,int count);//查找功能函数void change(struct acmer *p,int count);//修改功能函数void countt(struct acmer *p,int count);//统计功能函数struct dates//内嵌结构先定义{ int year; int month; int day;};struct acmer{ char name[NAMELEN]; char stuid[MAXID]; char phonum[MAXPHO]; int ac; struct dates date;//内嵌结构};struct acmer stu[MAXNUM];int main (){ //freopen("1.txt","r",stdin); int index,f=0,select; int count=0; puts("———————————————————————————————\n\n\n\t\t\t欢迎使用本系统\t\t\t\n\n\t\t\t\t\t\t by:juncoder\n———————————————————————————————"); puts("首次使用本系统需要键入acmer信息,确认请键入回车!"); if(getchar()=='\n') { system("cls"); puts("请输入acmer的姓名"); while(count<MAXNUM &&gets(stu[count].name)!=NULL && stu[count].name[0]!='\0')//实现对多个同学的信息输入 { printf("输入学号\n"); scanf("%s",stu[count].stuid); printf("输入电话号码\n"); scanf("%s",&stu[count].phonum); printf("输入做题题目\n"); scanf("%d",&stu[count].ac); printf("输入出生年月\n"); scanf("%d/%d/%d",&stu[count].date.year,&stu[count].date.month,&stu[count].date.day); count++; while(getchar()!='\n')continue; if(count<MAXNUM) printf("输入下一个acmer的姓名\n"); } if(count==0) { puts("没有信息输入!无法实现其他功能操作!"); exit(1); } } else exit(1); system("cls"); puts("键入回车进行功能选择"); if(getchar()) system("cls"); puts("功能列表"); puts("1.查找"); puts("2.修改"); puts("3.排序"); puts("4.统计"); scanf("%d",&select); system("cls");//清屏 switch(select){ case 1:find(&stu[0],count);break; case 2:change(&stu[0],count);break; case 3:acm_sort(&stu[0],count);break; case 4:countt(&stu[0],count);break; default:puts("暂未开发其他功能!"); }}void find(struct acmer *p,int count)//查找功能函数{ int index,f,n; char names[NAMELEN]; char xuehao[MAXID]; puts("1.按姓名查找"); puts("2.按学号查找"); scanf("%d",&n); switch(n) { case 1: { gets(names); puts("输入想查找的姓名"); scanf("%s",&names); for(p=stu;p<stu+count;p++) if(strcmp(names,p->name)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); f=1; } if(f==0) printf("不存在此人"); }break; case 2: { puts("输入想查找的学号"); scanf("%s",&xuehao); for(p=stu;p<stu+count;p++) if(strcmp(xuehao,p->stuid)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); f=1; } if(f==0) printf("不存在此人"); }break; }}void change(struct acmer *p,int count)//修改功能函数{ int index=1,num,t,zshu,y,m,d,f=0; char ch_pho[MAXPHO],numid[MAXID]; puts("输入要修改信息的学号"); scanf("%s",numid); puts("选择要修改的信息内容:"); puts("1.电话号码\n2.做题数\n3.出生年月"); scanf("%d",&t); switch(t){ case 1: { puts("该acmer的原信息:"); for(p=stu;p<stu+count;p++) { if(strcmp(numid,p->stuid)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); puts("输入修改的电话号码:"); getchar(); gets(ch_pho); strcpy(p->phonum,ch_pho); f=1; } } };break; case 2: { puts("该acmer的原信息:"); for(p=stu;p<stu+count;p++) { if(strcmp(numid,p->stuid)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); puts("输入修改的做题数:"); getchar(); scanf("%d",&zshu); p->ac=zshu; f=1; } } };break; case 3: { puts("该acmer的原信息:"); for(p=stu;p<stu+count;p++) { if(strcmp(numid,p->stuid)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); puts("输入修改的出生年月:"); getchar(); scanf("%d/%d/%d",&y,&m,&d); p->date.year=y; p->date.month=m; p->date.day=d; f=1; } } };break; } if(f){ puts("修改完该acm的信息:"); for(p=stu;p<stu+count;p++) { if(strcmp(numid,p->stuid)==0) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",index,p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); } } } else puts("不存在此人");}void acm_sort(struct acmer *p,int count)//排序功能函数{ p=stu; qsort(p,count,sizeof(struct acmer),cmp); for(p=stu;p<stu+count;p++) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); }}int cmp(const void *p1,const void *p2)//排序{ const struct acmer *a1=(const struct acmer*)p1; const struct acmer *a2=(const struct acmer*)p2; return (a1->ac)>(a2->ac)?1:0;}void countt(struct acmer *p,int count)//统计功能函数{ int n,m,num,f=0; puts("1.统计做题数"); puts("2.统计出生年月"); scanf("%d",&n); system("cls"); switch(n){ case 1: { puts("1.统计大于"); puts("2.统计小于"); scanf("%d",&m); system("cls"); switch(m) { case 1: { puts("输入x,统计做题数大于x的同学"); scanf("%d",&num); system("cls"); for(p=stu;p<stu+count;p++) { if(p->ac>num) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); f=1; } } if(f==0) printf("没有同学做题数超过%d",num); }break; case 2: { puts("输入x,统计做题数小于x的同学"); scanf("%d",&num); system("cls"); for(p=stu;p<stu+count;p++) { if(p->ac<num) { printf("姓名:%s 学号:%s 电话号码:%s 做题数:%d 出生年月:%d/%d/%d\n",p->name, p->stuid,p->phonum,p->ac, p->date.year,p->date.month,p->date.day); f=1; } } if(f==0) printf("没有同学做题数小于%d",num); }break; } }break; case 2: { puts("此功能暂未完善!"); }break; default:puts("暂未开发其他功能!"); }}
略长了点。。。
总结下学到的知识点:
1.先说下排序吧,这次排序也是用快排函数。重要的是直接对数组结构使用排序,函数的第三参数参量为sizeof(struct acmer)。。。
关于cmp函数的写法:
int cmp(const void *p1,const void *p2)//必须的形式{ const struct acmer *a1=(const struct acmer*)p1; const struct acmer *a2=(const struct acmer*)p2; return (a1->ac)>(a2->ac)?1:0;}
2.还学到一个小功能
system("cls");//清屏包含在stdlib.h头文件中。。。
待更新。。。
0 0
- 寒假集训第一天——结构体
- 寒假集训第一天--结构体训练
- 2017.1.12——寒假集训第一天
- 寒假集训的第一天
- 集训第一天 结构体
- 寒假集训作业(1)——结构体
- 集训 第一天 三分 结构体排序
- 寒假集训第三天——栈和队列
- 2017.1.14——寒假集训第三天
- 寒假集训——KMP
- 寒假集训——AreYouBusy
- 寒假集训——饭卡
- 假寒假第一天
- SDUT_2015寒假集训_结构体练习_A-Milk
- SDUT_2015寒假集训_结构体练习_C-分类游戏
- SDUT_2015寒假集训_结构体练习_G-最终排名
- 寒假集训第四天——排序
- 寒假集训——二叉树
- 字符串在Oracle数据库中的转换问题
- Tomcat7 启动错误,提示“严重java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap..”
- 黑马程序员高级视频学习笔记银行调度系统
- 汽车维修黑幕大揭秘
- 多态(Polymorphism)
- 寒假集训第一天——结构体
- Android工程图片资源命名禁忌
- Android OnLowMemory和OnTrimMemory
- c++ 全局变量
- Python 核心编程笔记 第六章 序列(字符串部分)
- c# datetime与 timeStamp 互相转换
- C/C++程序员必须熟练应用的开源项目 .
- 文件的本质
- c/c++中 函数为什么要用到char ** 传参 .