这道c语言怎么写?

 我来答
自我编程
2019-11-11 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

根据题意:

要验证学号输入,应该有一个学生名单。

所以我定义了init函数来初始化一个学生名单,只是测试用数据,你想要手动输入学生名单,请修改该函数。

由于实现动态刷新信息,用到getch来暂停刷新,这个函数头文件conio在windows下有效,你要是使用的其他操作系统,可以自定义类似函数来替换,或者直接删除所有getch()和system("cls")语句。

命令符的输入验证按照题目要求。

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#include <conio.h>

#define STUN 5//学生最大人数

#define CN 100//输入命令符号字符串最大个数

typedef struct stu//学生个人信息,如想添加比如班级、年级等,自行添加

{

    char id[20];//学号

    char name[10];//姓名

    float score;//成绩

}STU;

STU *init();//初始化一组学生信息

void showStus(STU *stus);//打印学生信息

void cmdA(STU *);//录入学生成绩,判断等级

void cmdH();

void cmdQ();

int cmdGet();//识别命令A、H、Q分别返回1、2、3。输入无效命令时返回0


int main()

{

    int n=0;

    STU *stus=NULL;

    system("cls");

    stus=init();

    while(!n)

    {

        printf("[StuSc3]\n");

        n=cmdGet();

        if(!n)

        {

            printf("命令必须以A、H、Q开头,不区分大小写,忽略空格和tab字符\n");

            printf("按任意键返重新输入命令符。。。\n");

            getch();

        }

        switch(n)

        {

            case 1:showStus(stus);cmdA(stus);break;

            case 2:cmdH();break;

            case 3:cmdQ();return 0;

        }

        n=0;

        system("cls");

    }

    return 0;

}

STU *init()

{

    int i;

    char nstr[25];

    static STU stus[STUN];

    for(i=0;i<STUN;i++)

    {

        strcpy(stus[i].id,"S00");

        itoa(i+1,nstr,10);

        strcat(stus[i].id,nstr);

        strcpy(stus[i].name,"学生");

        strcat(stus[i].name,nstr);

        stus[i].score=0;

    }

    return stus;

}

void showStus(STU *stus)//打印学生信息

{

    int i;

    printf("当前学生信息:\n");

    for(i=0;i<STUN;i++){

        printf("学号:%s 姓名:%s 成绩:%.1f ",stus[i].id,stus[i].name,stus[i].score);

        printf("%s%s%s\n",stus[i].score>=85?"优秀":"",stus[i].score<85 && stus[i].score>=60?"合格":"",stus[i].score<60?"不合格":"");

    }

    printf("\n");

}

void cmdA(STU *stus)

{

    STU *stuSave=NULL;

    int i,flag;

    char id[20];//学号

    float score;//成绩

    while(1)

    {

        printf("请输入学号及成绩:(输入END结束输入)\n");

        scanf("%s",id);

        if(strcmp(id,"END")==0)

            break;

        flag=0;

        stuSave=NULL;

        for(i=0;i<STUN;i++)

            if(strcmp(stus[i].id,id)==0)

            {

                flag=1;

                stuSave=&stus[i];

                break;

            }

        if(!flag)

        {

            printf("该学生不存在!\n任意键重新输入。。。\n");

            getch();

            continue;

        }

        scanf("%f",&score);

        if(score<0){

            printf("成绩不能为负数!\n任意键重新输入。。。\n");

            getch();

            continue;

        }

        stuSave->score=score;

        system("cls");

        showStus(stus);

    }


}

void cmdH()

{

    printf("使用帮助:\n");

    printf("输入命令符A、H、Q,不区分大小写,忽略开头的空格及tab字符,忽略之后所有字符\n");

    printf("命令A:录入学生成绩,判断成绩等级\n");

    printf("命令H:帮助文档\n");

    printf("命令Q:退出程序\n");

    printf("按任意键返回命令符输入。。。\n");

    getch();

}

void cmdQ()

{

    printf("再见!\n");

    printf("按任意键结束程序。。。\n");

    getch();

}

int cmdGet()

{

    char inStr[CN],*p=inStr;

    printf("ST3>\n");

    scanf("%s",inStr);

    while(*p!=0)

    {

        if(*p=='A' || *p=='a')

            return 1;

        if(*p=='H' || *p=='h')

            return 2;

        if(*p=='Q' || *p=='q')

            return 3;

        if(*p!=' ' && *p!='\t')//跳过空格和tab

        {

            printf("无效命令\n");

            return 0;

        }

        p++;

    }

    return 0;

}

匿名用户
2019-11-11
展开全部

可以探讨

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乙乐苼22
2019-11-10 · 贡献了超过127个回答
知道答主
回答量:127
采纳率:0%
帮助的人:8.2万
展开全部
OK ,具体可以探讨。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式