• 结构体作业


    结构体作业

     
     
     
    1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
    2.
    建立结构体数组,实现对多个同学的信息输入,输出

    3.
    实现简单的统计功能,比如统计做题数大于150的同学并输出其完整信息

    4.
    实现查找功能,包括按姓名、学号查找

    5.
    实现信息修改功能

    6.
    按做题数目进行排序(选作)

    7.
    其他功能可以自由扩展,多多益善 ^_^

    8.
    程序一个函数实现一个功能

    【code】

      1 /*2012年2月9日—by秦川*/
    2 #include<stdio.h>
    3 #include<stdlib.h>
    4 #include<string.h>
    5 #define M 50
    6 struct date
    7 {
    8 int year;
    9 int month;
    10 int day;
    11 };
    12 typedef struct
    13 {
    14 char name[20];
    15 char num[11];
    16 char tele[11];
    17 int solve;
    18 struct date birth;
    19 }acmer;
    20 int enter(acmer t[]);//输入记录
    21 void list(acmer t[],int n);//显示记录
    22 void search1(acmer t[],int n);//按姓名查找显示
    23 void search2(acmer t[],int n);//按学号查找显示
    24 void update(acmer t[],int n);//修改记录
    25 int find1(acmer t[],int n,char*s);//查找姓名函数
    26 int find2(acmer t[],int n,char*s);//查找学号函数
    27 void tongji(acmer t[],int n);//统计做题数函数
    28 void sort(acmer t[],int n);//降序排序函数
    29 int add(acmer t[],int n);//插入记录函数,参数为结构体数组和记录数
    30 int Delete(acmer t[],int n);//删除函数,参数为记录数组和记录条数
    31 int menu_select();//主菜单函数
    32 //主函数开始
    33 void main()
    34 {
    35 int length;
    36 acmer adr[M];
    37 system("cls");//清屏
    38 for(;;)
    39 {
    40 switch (menu_select())
    41 {
    42 case 1:length=enter(adr);break;
    43 case 2:list(adr,length);break;
    44 case 3:update(adr,length);break;
    45 case 4:search1(adr,length);break;
    46 case 5:search2(adr,length);break;
    47 case 6:tongji(adr,length);break;
    48 case 7:sort(adr,length);break;
    49 case 8:length=Delete(adr,length);break;
    50 case 9:length=add(adr,length);break;
    51 case 0:exit(0);
    52 }
    53 }
    54 }
    55 //菜单函数,菜单返回值为整数,代表所选的菜单项
    56 int menu_select()
    57 {
    58 int c;
    59 printf("********************菜单********************\n\n");
    60 printf("1. 输入记录\n");
    61 printf("2. 显示记录\n");
    62 printf("3. 修改记录\n");
    63 printf("4. 按姓名查找记录\n");
    64 printf("5. 按学号查找记录\n");
    65 printf("6. 统计记录\n");
    66 printf("7. 按做题数降序排序\n");
    67 printf("8. 删除记录\n");
    68 printf("9. 插入记录\n");
    69 printf("0. 退出程序\n\n");
    70 printf("********************************************\n");
    71 do
    72 {
    73 printf("请选择:");
    74 scanf("%d",&c);
    75 }while(c<0||c>9);
    76 return c;
    77 }
    78 //输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度
    79 int enter(acmer t[])
    80 {
    81 int i,n;
    82 system("cls");
    83 printf("\n请输入您要输入的数据组数\n");
    84 scanf("%d",&n);
    85 printf("请输入记录\n");
    86 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
    87 printf("----------------------------------------------------\n");
    88 for(i=0;i<n;i++)
    89 {
    90 scanf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,&t[i].solve,&t[i].birth.year,&t[i].birth.month,&t[i].birth.day);
    91 printf("----------------------------------------------------\n");
    92 }
    93 return n;
    94 }
    95 void list(acmer t[],int n)
    96 {
    97 int i;
    98 system("cls");
    99 printf("\n\n********************************************\n");
    100 printf("姓名 学号 电话 做题数 生日\n");
    101 printf("--------------------------------------------\n");
    102 for(i=0;i<n;i++)
    103 {
    104 printf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
    105 printf("\n");
    106 }
    107 printf("*********************结束*********************\n");
    108 }
    109 void update(acmer t[],int n)
    110 {
    111 char s[20];
    112 int i;
    113 printf("请输入要修改的姓名\n");
    114 scanf("%s",s);
    115 i=find1(t,n,s);
    116 printf("请输入更改后的信息\n");
    117 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
    118 printf("----------------------------------------------------\n");
    119 scanf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,&t[i].solve,&t[i].birth.year,&t[i].birth.month,&t[i].birth.day);
    120 }
    121 //按姓名查找记录
    122 void search1(acmer t[],int n)
    123 {
    124 char s[20];
    125 int i;
    126 system("cls");
    127 printf("请输入姓名\n");
    128 scanf("%s",s);
    129 i=find1(t,n,s);
    130 if(i>n-1)
    131 printf("没找到。。\n");
    132 else
    133 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
    134 }
    135 //按学号查找记录
    136 void search2(acmer t[],int n)
    137 {
    138 char s[20];
    139 int i;
    140 system("cls");
    141 printf("请输入学号\n");
    142 scanf("%s",s);
    143 i=find2(t,n,s);
    144 if(i>n-1)
    145 puts("没找到。。");
    146 else
    147 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
    148 }
    149 void tongji(acmer t[],int n)
    150 {
    151 int i,s,l=0;
    152 printf("请输入要统计的最小做题数:\n");
    153 scanf("%d",&s);
    154 printf("姓名 学号 电话 做题数 生日\n");
    155 printf("----------------------------------------------------\n");
    156 for(i=0;i<s;i++)
    157 {
    158 if(atoi(t[i].num)>=s)
    159 {
    160 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
    161 printf("----------------------------------------------------\n");
    162 l++;
    163 }
    164 }
    165 if(l==0) puts("没找到。。");
    166 printf("*********************结束*********************\n");
    167 }
    168 //查找函数,参数为记录数组,记录条数,以及姓名
    169 int find1(acmer t[],int n,char *s)
    170 {
    171 int i;
    172 for(i=0;i<n;i++)
    173 {
    174 if(strcmp(s,t[i].name)==0)
    175 return i;
    176 }
    177 return i;
    178 }
    179 //查找函数,参数为记录数组,记录条数,以及学号
    180 int find2(acmer t[],int n,char *s)
    181 {
    182 int i;
    183 for(i=0;i<n;i++)
    184 {
    185 if(strcmp(s,t[i].num)==0)
    186 return i;
    187 }
    188 return i;
    189 }
    190 //降序排序函数,参数为结构体数组和记录数
    191 void sort(acmer t[],int n)
    192 {
    193 int i,j,flag;
    194 acmer temp;
    195 for(i=0;i<n;i++)
    196 {
    197 flag=0;
    198 for(j=0;j<n-1;j++)
    199 if(t[j].solve<t[j+1].solve)
    200 {
    201 flag=1;
    202 strcpy(temp.name,t[i].name);
    203 strcpy(temp.num,t[i].num);
    204 strcpy(temp.tele,t[i].tele);
    205 temp.solve=t[i].solve;
    206 temp.birth.year=t[i].birth.year;
    207 temp.birth.month=t[i].birth.month;
    208 temp.birth.day=t[i].birth.day;
    209 strcpy(t[i].name,t[j].name);
    210 strcpy(t[i].num,t[j].num);
    211 strcpy(t[i].tele,t[j].tele);
    212 t[i].solve=t[j].solve;
    213 t[i].birth.year=t[j].birth.year;
    214 t[i].birth.month=t[j].birth.month;
    215 t[i].birth.day=t[j].birth.day;
    216 strcpy(t[j].name,temp.name);
    217 strcpy(t[j].num,temp.num);
    218 strcpy(t[j].tele,temp.tele);
    219 t[j].solve=temp.solve;
    220 t[j].birth.year=temp.birth.year;
    221 t[j].birth.month=temp.birth.month;
    222 t[j].birth.day=temp.birth.day;
    223 }
    224 if(flag==0)break;
    225 }
    226 system("cls");
    227 printf("排序成功\n");
    228 }
    229 //插入记录函数,参数为结构体数组和记录数
    230 int add(acmer t[],int n)
    231 {
    232 system("cls");
    233 acmer temp;
    234 int i,j;
    235 char s[20];
    236 printf("请输入记录\n");
    237 printf("****************************************************\n");
    238 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
    239 printf("----------------------------------------------------\n");
    240 scanf("%s %s %s %d %d %d %d",temp.name,temp.num,temp.tele,&temp.solve,&temp.birth.year,&temp.birth.month,&temp.birth.day);
    241 printf("----------------------------------------------------\n");
    242 printf("请输入插入位置的姓名\n");
    243 scanf("%s",s);
    244 i=find1(t,n,s);
    245 for(j=n-1;j>=i;j--)
    246 {
    247 strcpy(t[j+1].name,t[j].name);
    248 strcpy(t[j+1].num,t[j].num);
    249 strcpy(t[j+1].tele,t[j].tele);
    250 t[j+1].solve=t[j].solve;
    251 t[j+1].birth.year=t[j].birth.year;
    252 t[j+1].birth.month=t[j].birth.month;
    253 t[j+1].birth.day=t[j].birth.day;
    254 }
    255 strcpy(t[i].name,temp.name);
    256 strcpy(t[i].num,temp.num);
    257 strcpy(t[i].tele,temp.tele);
    258 t[i].solve=temp.solve;
    259 t[i].birth.year=temp.birth.year;
    260 t[i].birth.month=temp.birth.month;
    261 t[i].birth.day=temp.birth.day;
    262 n++;
    263 return n;
    264 system("cls");
    265 puts("插入成功!");
    266 }
    267 //删除函数,参数为记录数组和记录条数
    268 int Delete(acmer t[],int n)
    269 {
    270 char s[20];
    271 int ch=0;
    272 int i,j;
    273 system("cls");
    274 printf("请输入要删除的姓名\n");
    275 scanf("%s",s);
    276 i=find1(t,n,s);
    277 if(i>n-1)
    278 printf("没找到。。\n");
    279 else
    280 {
    281 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
    282 printf("确定删除?请输入__(1为删除,0为取消)\n");
    283 scanf("%d",&ch);
    284 if(ch==1)
    285 {
    286 for(j=i+1;j<n;j++)
    287 {
    288 strcpy(t[j-1].name,t[j].name);
    289 strcpy(t[j-1].num,t[j].num);
    290 strcpy(t[j-1].tele,t[j].tele);
    291 t[j-1].solve=t[j].solve;
    292 t[j-1].birth.year=t[j].birth.year;
    293 t[j-1].birth.month=t[j].birth.month;
    294 t[j-1].birth.day=t[j].birth.day;
    295 }
    296 n--;
    297 system("cls");
    298 puts("成功删除!");
    299 }
    300 }
    301 return n;
    302 }
  • 相关阅读:
    【面试】代码默写-DCL单例
    【状态机】SCXML2
    【面试】JVM
    【面试】HashMap
    读取resource下sql脚本并执行
    Maven 二进制资源文件(excel pdf...)部署出错,乱码的解决方案
    【JVM】java内存模型
    【Spring】源码二、IOC
    mapstruct 高级用法
    warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 8.0 to 13.2.99.
  • 原文地址:https://www.cnblogs.com/pony1993/p/2344369.html
Copyright © 2020-2023  润新知