学生信息查询

题目要求:

²1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
²2.建立结构体数组,实现对多个同学的信息输入,输出
²3.实现简单的统计功能,比如统计做题数大于150的同  学并输出其完整信息
²4.实现查找功能,包括按姓名、学号查找
²5.实现信息修改功能
²6.按做题数目进行排序(选作)
²7.其他功能可以自由扩展,多多益善 ^_^
²8.程序一个函数实现一个功能
²9.代码测试成功后贴在论坛上,大家互相学习借鉴
 
 
运用结构体构建一个新的数据类型
首先说明信息输入模块,在第一遍写的时候,多组输入没有实现,原因是scanf输入时遗留在输入流中的回车被gets吸收,可以用fflush清空缓冲流,修改后的代码如下:
 
 
int xxgl(void)
{
    n++;
    while(1)
    {
        printf("请输入姓名:");
        char temp[30];
      fflush(stdin);
        gets(temp);
        if(strcmp(temp,"\0")==0)
            break;
        else
        {
            strcpy(stu[n].name,temp);
        }
        printf("请输入学号:");
        scanf("%s%*c",stu[n].xh);
        printf("请输入手机号:");
        scanf("%s%*c",stu[n].sjh);
        printf("请输入做题数:");
        scanf("%d%*c",&stu[n].num);
        printf("请输入出生年:");
        scanf("%d%*c",&stu[n].birthday.year);
        printf("请输入出生月:");
        scanf("%d%*c",&stu[n].birthday.month);
        printf("请输入出生日:");
        scanf("%d%*c",&stu[n].birthday.day);
        n++;
    }
    main();
}

 
 
全部代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct date
{
    int year;
    int month;
    int day;
};
struct acmer
{
    int bh;
    char name[30];
    char xh[20];
    char sjh[20];
    int num;
    struct date birthday;
};

volatile int n = 0;
struct acmer stu[40];
struct acmer tmp;

int xxgl(void);
int xxcx(void);
int xm(void);
int xh(void);
int xxtj(void);


int main()
{
    int a;
    printf("请选择要执行的功能序号:\n");
    printf("\t1.学生信息管理\n");
    printf("\t2.学生信息查询\n");
    printf("\t3.学生信息统计\n");
    printf("\t0.退出系统\n");
    scanf("%d%*c",&a);

    switch(a)
    {
    case 1:
        xxgl();
        break;
    case 2:
        xxcx();
        break;
    case 3:
        xxtj();
        break;
    case 0:
        return 0;
    }
    return 0;
}

int xxgl(void)
{
    n++;
    printf("请输入姓名:");
    scanf("%s",stu[n].name);
    printf("请输入学号:");
    scanf("%s",stu[n].xh);
    printf("请输入手机号:");
    scanf("%s",stu[n].sjh);
    printf("请输入做题数:");
    scanf("%d",&stu[n].num);
    printf("请输入出生年:");
    scanf("%d",&stu[n].birthday.year);
    printf("请输入出生月:");
    scanf("%d",&stu[n].birthday.month);
    printf("请输入出生日:");
    scanf("%d",&stu[n].birthday.day);
    main();
}

int xxcx(void)
{
    printf("请选择:\n");
    printf("\t1.按姓名查询\n");
    printf("\t2.按学号查询\n");
    printf("\t0.返回主菜单\n");
    int c;
    scanf("%d",&c);
    switch(c)
    {
    case 1:
        xm();
        break;
    case 2:
        xh();
        break;
    case 0:
        return 0;
    }
    main();
}

int xm(void)
{
    char st[30];
    int bo = 0,x = 0;
    int m,y,z;
    printf("请输入要查询的姓名:");
    scanf("%s",st);
    while(x < n)
    {
        x++;
        z = strcmp(st,stu[x].name);
        if(z == 0)
        {
            bo = 1;
            break;
        }

    }
    if(bo == 1)
    {
        printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t",stu[x].name,stu[x].xh,stu[x].sjh,stu[x].num,stu[x].birthday.year,stu[x].birthday.month,stu[x].birthday.day);
        printf("是否修改该学生的信息?1代表修改,0代表不修改");
        scanf("%d",&m);
        if(m == 1)
        {
            printf("请输入要修改的信息:");
            printf("\t1.修改姓名\t2.修改学号\t3.修改手机号码\t4.修改做题数\t5.修改出生年月日\n");
            scanf("%d",&y);
            getchar();
            switch(y)
            {
            case 1:
                gets(stu[x].name);
                break;
            case 2:
                gets(stu[x].xh);
                break;
            case 3:
                gets(stu[x].sjh);
                break;
            case 4:
                scanf("%d",&stu[x].num);
                break;
            case 5:
                scanf("%d%d%d",&stu[x].birthday.year,&stu[x].birthday.month,&stu[x].birthday.day);
            }
        }
    }
    else
        printf("该学生不是集训队的成员\n");
    return 0;
}


int xh(void)
{
    char st[20];
    int bo = 0,x = 0;
    printf("请输入要查询的学号:");
    scanf("%s",st);
    while(x <= n)
    {
        x++;
        if(strcmp(st,stu[x].xh) == 0)
        {
            bo = 1;
            break;
        }

    }
    if(bo == 1)
        printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t",stu[x].name,stu[x].xh,stu[x].sjh,stu[x].num,stu[x].birthday.year,stu[x].birthday.month,stu[x].birthday.day);
    else
        printf("该学生不是集训队的成员\n");
    return 0;
}



int xxtj(void)
{
    int i,j,m,x;
    for(i = 1; i <= n-1; i++)
    {
        for(j = 1; j<=n-i; j++)
        {
            if(stu[j].num > stu[j+1].num)
            {
                tmp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = tmp;
            }
        }
    }
    printf("请输入要查询的最少题目数:");
    scanf("%d",&m);
    for(i = 1; i<=n; i++)
    {
        if(stu[i].num >= m)
            break;
    }
    if(i <= n)
    {
        for(x = i; x <= n; x++)
            printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\n",stu[x].name,stu[x].xh,stu[x].sjh,stu[x].num,stu[x].birthday.year,stu[x].birthday.month,stu[x].birthday.day);
    }
    else
        printf("没有比这题目数高的同学\n");
    main();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值