用switch语句制作菜单

声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生。

switch语句可以用来在字符界面下制作菜单。给每个菜单项指定一个编号,用户通过输入编号来选择菜单项,switch语句判断用户输入的编号并执行相应的任务。下面我们通过一个例子来学习制作的过程。

例:编写一个简单程序对某门课的成绩进行统计分析,包括求平均成绩、找出最高成绩、统计不及格的人数和统计80分以上的人数。要求将这些功能制作成菜单项,用户可以随意选择。成绩存储在文件“grade.txt”中,每一行存储一个成绩

分析:

定义四个函数分别实现四个功能,并对四个功能分别编号为1,2,3,4。用switch语句判断用户输入的编号,如果用户输入1,则调用求平均成绩的函数,…,输入4,则调用统计80分以上人数的函数。为了能让用户多次选择,加一个循环来重复操作直到用户不想继续为止。下面是详细的程序。

程序:

#include "stdio.h" 
#include "stdlib.h" 
#define NUMOFSTU 38
 
//print函数用于在显示菜单时,打印星号和空格。
void print(char c, int n)
{
    int i;
    for(i=1;i<=n;i++)
        putchar(c);
}
 
//ave()函数用于求平均成绩 
void ave()
{
    int i;
    float score,average,sum=0;
    FILE*fp; 
    fp= fopen("grade.txt","r");
    for(i=1;i<=NUMOFSTU;i++)
    {
        fscanf(fp,"%f",&score);
        sum+= score;
    }
    average= sum/NUMOFSTU;
    printf("\nTheaverage score is %.2f\n",average);
    fclose(fp);                        
}
 
//max()函数用于找最高成绩
void max()
{
    int i;
    float score,max = -1;
    FILE*fp; 
    fp= fopen("grade.txt","r");
    for(i=1;i<=NUMOFSTU;i++)
    {
        fscanf(fp,"%f",&score);
        if(score>max)
            max= score;
    }
    printf("\nThemaximum score is %.2f\n",max);
    fclose(fp);    
}
 
//numOfFailing()函数用于统计不及格人数
void numOfFailing()
{
    int i,count=0;
    float score;
    FILE*fp; 
    fp= fopen("grade.txt","r");
    for(i=1;i<=NUMOFSTU;i++)
    {
        fscanf(fp,"%f",&score);
        if(score<=60)
            count++;
    }
    printf("\nThenumber of failing grade is %d\n",count);      
    fclose(fp);
}
 
//numOf80()函数用于统计80分以上人数
void numOf80()
{
    int i,count=0;
    float score;
    FILE*fp; 
    fp= fopen("grade.txt","r");
    for(i=1;i<=NUMOFSTU;i++)
    {
        fscanf(fp,"%f",&score);
        if(score>=80)
            count++;
    }
    printf("\nThenumber of grades greater than 80 is %d\n",count);     
    fclose(fp);                
}

//显示菜单
void showMenu()
{
    putchar('\n');
    print(' ',10);
    print('*',60);
    putchar('\n');
    print(' ',20);
    printf("1--Calculate the average score\n");
    print(' ',20);
    printf("2--Find the maximum score\n"); 
    print(' ',20);
    printf("3--Count the number of failing grades\n");
    print(' ',20);
    printf("4--Count the number of grades greater than 80\n");
    print(' ',20);
    printf("5--Exit\n");
    print(' ',10);
    print('*',60);
    putchar('\n');
}

int main()
{
    int choice;
    char ifcontinue;
    
    showMenu();       
    //等待用户选择菜单项
    while(1)
    {
        printf("\nPleaseselect menu item (key in 1-5): ");
        scanf("%d",&choice);
        //根据用户不同的选择,调用相应的函数               
        switch(choice)
        {
            case1: ave(); break;
            case2: max(); break;
            case3: numOfFailing(); break;
            case4: numOf80(); break;
            case5: exit(0);break;
            default:printf("\nInvalid input!\n");
        }
        printf("\nIfyou want to continue, press y, otherwise, press any other key!");
        getchar();
        ifcontinue= getchar();
        if(ifcontinue!='y')
            break;             
    }
    return 0;
}

图1显示了运行结果。首先显示菜单,并提示用户输入菜单项的编号,当用户选择了1以后,程序输出平均成绩。如果还想继续,可以输入字符’y’,用户可以选择其他操作。 

 

                                                                                             图1. 运行结果

  • 20
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值