首页 > 编程语言 >C语言程序设计小案例

C语言程序设计小案例

时间:2023-11-19 10:01:44浏览次数:35  
标签:案例 int menu 菜品 C语言 stu printf 程序设计 order

C语言之点菜单

1.c语言怎么编写菜单:欢迎光临,点餐,浏览菜单,菜品名称,菜品价格,菜品份数,备注,点餐信息,修改点餐信息,删除点餐订单,查询点餐订单,结算价格。这些功能如何实现?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_DISHES 100 // 菜品数量上限
#define MAX_NAME_LEN 20 // 菜品名称最大长度

// 菜品结构体
typedef struct {
    char name[MAX_NAME_LEN]; // 菜品名称
    float price; // 菜品价格
    int count; // 菜品份数
    char note[100]; // 备注
} Dish;

// 菜单结构体
typedef struct {
    Dish dishes[MAX_DISHES]; // 菜品列表
    int count; // 菜品数量
} Menu;

// 显示欢迎信息
void welcome() {
    printf("欢迎光临!\n");
}

// 显示菜单
void show_menu(Menu *menu) {
    printf("菜单如下:\n");
    for (int i = 0; i < menu->count; i++) {
        printf("%d. %s\t%.2f元/份\n", i + 1, menu->dishes[i].name, menu->dishes[i].price);
    }
}

// 添加菜品
void add_dish(Menu *menu) {
    if (menu->count >= MAX_DISHES) {
        printf("菜品数量已达上限,无法添加!\n");
        return;
    }
    Dish dish;
    printf("请输入菜品名称:");
    scanf("%s", dish.name);
    printf("请输入菜品价格:");
    scanf("%f", &dish.price);
    printf("请输入菜品份数:");
    scanf("%d", &dish.count);
    printf("请输入备注:");
    scanf("%s", dish.note);
    menu->dishes[menu->count++] = dish;
    printf("添加成功!\n");
}

// 修改菜品
void modify_dish(Menu *menu) {
    int index;
    printf("请输入要修改的菜品序号:");
    scanf("%d", &index);
    if (index < 1 || index > menu->count) {
        printf("无效的菜品序号!\n");
        return;
    }
    Dish *dish = &menu->dishes[index - 1];
    printf("请输入新的菜品名称(回车不修改):");
    char name[MAX_NAME_LEN];
    scanf("%s", name);
    if (strlen(name) > 0) {
        strcpy(dish->name, name);
    }
    printf("请输入新的菜品价格(回车不修改):");
    char price_str[10];
    scanf("%s", price_str);
    if (strlen(price_str) > 0) {
        dish->price = atof(price_str);
    }
    printf("请输入新的菜品份数(回车不修改):");
    char count_str[10];
    scanf("%s", count_str);
    if (strlen(count_str) > 0) {
        dish->count = atoi(count_str);
    }
    printf("请输入新的备注(回车不修改):");
    char note[100];
    scanf("%s", note);
    if (strlen(note) > 0) {
        strcpy(dish->note, note);
    }
    printf("修改成功!\n");
}

// 删除菜品
void delete_dish(Menu *menu) {
    int index;
    printf("请输入要删除的菜品序号:");
    scanf("%d", &index);
    if (index < 1 || index > menu->count) {
        printf("无效的菜品序号!\n");
        return;
    }
    for (int i = index - 1; i < menu->count - 1; i++) {
        menu->dishes[i] = menu->dishes[i + 1];
    }
    menu->count--;
    printf("删除成功!\n");
}

// 查询菜品
void query_dish(Menu *menu) {
    int index;
    printf("请输入要查询的菜品序号:");
    scanf("%d", &index);
    if (index < 1 || index > menu->count) {
        printf("无效的菜品序号!\n");
        return;
    }
    Dish *dish = &menu->dishes[index - 1];
    printf("菜品名称:%s\n", dish->name);
    printf("菜品价格:%.2f元/份\n", dish->price);
    printf("菜品份数:%d\n", dish->count);
    printf("备注:%s\n", dish->note);
}

// 显示点餐信息
void show_order(Menu *menu, int *order) {
    printf("点餐信息如下:\n");
    float total_price = 0;
    for (int i = 0; i < menu->count; i++) {
        if (order[i] > 0) {
            Dish *dish = &menu->dishes[i];
            printf("%s\t%.2f元/份\t%d份\t%s\n", dish->name, dish->price, order[i], dish->note);
            total_price += dish->price * order[i];
        }
    }
    printf("总价:%.2f元\n", total_price);
}

// 修改点餐信息
void modify_order(Menu *menu, int *order) {
    int index, count;
    printf("请输入要修改的菜品序号:");
    scanf("%d", &index);
    if (index < 1 || index > menu->count) {
        printf("无效的菜品序号!\n");
        return;
    }
    Dish *dish = &menu->dishes[index - 1];
    printf("请输入新的份数:");
    scanf("%d", &count);
    order[index - 1] = count;
    printf("修改成功!\n");
}

// 删除点餐订单
void delete_order(Menu *menu, int *order) {
    int index;
    printf("请输入要删除的菜品序号:");
    scanf("%d", &index);
    if (index < 1 || index > menu->count) {
        printf("无效的菜品序号!\n");
        return;
    }
    order[index - 1] = 0;
    printf("删除成功!\n");
}

// 查询点餐订单
void query_order(Menu *menu, int *order) {
    show_order(menu, order);
}

// 结算价格
void checkout(Menu *menu, int *order) {
    show_order(menu, order);
}

int main() {
    Menu menu = {0};
    int order[MAX_DISHES] = {0};
    welcome();
    while (1) {
        printf("请选择操作:\n");
        printf("1. 浏览菜单\n");
        printf("2. 点餐\n");
        printf("3. 修改点餐信息\n");
        printf("4. 删除点餐订单\n");
        printf("5. 查询点餐订单\n");
        printf("6. 结算价格\n");
        printf("7. 退出\n");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                show_menu(&menu);
                break;
            case 2:
                show_menu(&menu);
                add_dish(&menu);
                break;
            case 3:
                show_order(&menu, order);
                modify_order(&menu, order);
                break;
            case 4:
                show_order(&menu, order);
                delete_order(&menu, order);
                break;
            case 5:
                query_order(&menu, order);
                break;
            case 6:
                checkout(&menu, order);
                return 0;
            case 7:
                return 0;
            default:
                printf("无效的操作!\n");
                break;
        }
    }
    return 0;
}

C语言程序设计小案例_#include

C语言之班级成绩

2.假设这学期班级30个同学,每个同学6科成绩,设计简单的学生成绩统计系统要求:

  1. 记录每个人每科的平均成绩
  2. 记录每科成绩的最高分及其位序
  3. 统计每科成绩的平均分
  4. 输出以上相关数据内容
#include <stdio.h>
#include <stdlib.h>

#define N 30 // 学生人数
#define M 6 // 科目数

struct student {
    char name[20]; // 姓名
    float score[M]; // 成绩
    float avg; // 平均成绩
};

void input(struct student stu[]);
void output(struct student stu[]);
void fail(struct student stu[]);
void sort(struct student stu[]);
void insert(struct student stu[]);void modify(struct student stu[]);

int main() {
    struct student stu[N];
    int choice;
    while (1) {
        printf("请选择功能:\n");
        printf("1. 输入成绩\n");
        printf("2. 输出成绩\n");
        printf("3. 输出不及格学生名单\n");
        printf("4. 成绩排序\n");
        printf("5. 删除记录\n");
        printf("6. 插入记录\n");
        printf("7. 修改记录\n");
        printf("0. 退出程序\n");
        scanf("%d", &choice);
        switch (choice) {
            case 0:
                exit(0);
            case 1:
                input(stu);
                break;
            case 2:
                output(stu);
                break;
            case 3:
                fail(stu);
                break;
            case 4:
                sort(stu);
                break;
            case 5:
                // TODO: 删除记录
                break;
            case 6:
                insert(stu);
                break;
            case 7:
                modify(stu);
                break;
            default:
                printf("输入错误,请重新输入!\n");
                break;
        }
    }
    return 0;
}

void input(struct student stu[]) {
    int i, j;
    for (i = 0; i < N; i++) {
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", stu[i].name);
        for (j = 0; j < M; j++) {
            printf("请输入%s的%s成绩:", stu[i].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
            scanf("%f", &stu[i].score[j]);
        }
        float sum = 0;
        for (j = 0; j < M; j++) {
            sum += stu[i].score[j];
        }
        stu[i].avg = sum / M;
    }
    printf("输入完成!\n");
}

void output(struct student stu[]) {
    int i, j;
    printf("姓名\t语文\t数学\t英语\t物理\t化学\t生物\t平均分\n");
    for (i = 0; i < N; i++) {
        printf("%s\t", stu[i].name);
        for (j = 0; j < M; j++) {
            printf("%.1f\t", stu[i].score[j]);
        }
        printf("%.1f\n", stu[i].avg);
    }
}

void fail(struct student stu[]) {
    int i, j, count = 0;
    printf("不及格学生名单:\n");
    printf("姓名\t语文\t数学\t英语\t物理\t化学\t生物\t平均分\n");
    for (i = 0; i < N; i++) {
        int flag = 0;
        for (j = 0; j < M; j++) {
            if (stu[i].score[j] < 60) {
                flag = 1;
                break;
            }
        }
        if (flag) {
            printf("%s\t", stu[i].name);
            for (j = 0; j < M; j++) {
                printf("%.1f\t", stu[i].score[j]);
            }
            printf("%.1f\n", stu[i].avg);
            count++;
        }
    }
    if (count == 0) {
        printf("没有不及格学生!\n");
    }
}

void sort(struct student stu[]) {
    int i, j, k;
    float max;
    for (i = 0; i < N; i++) {
        for (j = i; j < N; j++) {
            if (stu[j].avg > stu[i].avg) {
                struct student temp = stu[i];
                stu[i] = stu[j];
                stu[j] = temp;
            }
        }
    }
    printf("按平均分从高到低排序:\n");
    printf("姓名\t平均分\n");
    for (i = 0; i < N; i++) {
        printf("%s\t%.1f\n", stu[i].name, stu[i].avg);
    }
    printf("每科成绩的最高分及其位序:\n");
    printf("科目\t最高分\t位序\n");
    for (i = 0; i < M; i++) {
        max = 0;
        k = 0;
        for (j = 0; j < N; j++) {
            if (stu[j].score[i] > max) {
                max = stu[j].score[i];
                k = j;
            }
        }
        printf("%s\t%.1f\t%d\n", i + 1 == 1 ? "语文" : i + 1 == 2 ? "数学" : i + 1 == 3 ? "英语" : i + 1 == 4 ? "物理" : i + 1 == 5 ? "化学" : "生物", max, k + 1);
    }
}

void insert(struct student stu[]) {
    int i, j, pos;
    printf("请输入要插入的位置(1-%d):", N);
    scanf("%d", &pos);
    if (pos < 1 || pos > N) {
        printf("位置错误!\n");
        return;
    }
    pos--;
    for (i = N - 1; i > pos; i--) {
        stu[i] = stu[i - 1];
    }
    printf("请输入要插入的学生的姓名:");
    scanf("%s", stu[pos].name);
    for (j = 0; j < M; j++) {
        printf("请输入%s的%s成绩:", stu[pos].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
        scanf("%f", &stu[pos].score[j]);
    }
    float sum = 0;
    for (j = 0; j < M; j++) {
        sum += stu[pos].score[j];
    }
    stu[pos].avg = sum / M;
    printf("插入完成!\n");
}

void modify(struct student stu[]) {
    int i, j, pos;
    printf("请输入要修改的位置(1-%d):", N);
    scanf("%d", &pos);
    if (pos < 1 || pos > N) {
        printf("位置错误!\n");
        return;
    }
    pos--;
    printf("请输入%s的新姓名:", stu[pos].name);
    scanf("%s", stu[pos].name);
    for (j = 0; j < M; j++) {
        printf("请输入%s的%s成绩:", stu[pos].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
        scanf("%f", &stu[pos].score[j]);
    }
    float sum = 0;
    for (j = 0; j < M; j++) {
        sum += stu[pos].score[j];
    }
    stu[pos].avg = sum / M;
    printf("修改完成!\n");
}

C语言程序设计小案例_i++_02

【Tips:C语言中非法字符的返回值均为1。】

C语言之比较

3.c语言软件版本比较

输入的第一行有一个整数T,代表有T组测试。

接下来有T组测试。

每组测试分两行,

第一行有三个整数代表第一个软件版本的主版本号,子版本号和修订号。

第二行也有三个整数代表第二个软件版本的主版本号,子版本号和修订号。
数据中出现的整数都在[0,1000]范围之内。
对于每组测试,如果第一个软件的版本新点,请输出First,如果第二个软件的版本新点,请输出Second,否则输出Same。
样例输入:

3
1 1 0
1 1 1
1 1 1
1 1 0
1 1 1
1 1 1

样例输出:

Second
First
Same

代码怎么编写?

#include <stdio.h>
#include<string.h>
char a[100005][7];
int main()
{
    int t;
    scanf("%d", &t); // 输入测试组数
    
    int i=0;
    while(t--) // 循环处理每组测试
    {
        int v1[3], v2[3]; // 存放两个软件版本号的数组
        scanf("%d %d %d", &v1[0], &v1[1], &v1[2]); // 输入第一个软件版本号
        scanf("%d %d %d", &v2[0], &v2[1], &v2[2]); // 输入第二个软件版本号
 
        // 逐个比较版本号的主版本号、子版本号、修订号
        if(v1[0] > v2[0])
            strcpy(a[++i],"First");
        else if(v1[0] < v2[0])
            strcpy(a[++i],"Second");
        else if(v1[1] > v2[1])
            strcpy(a[++i],"First");
        else if(v1[1] < v2[1])
            strcpy(a[++i],"Second");
        else if(v1[2] > v2[2])
            strcpy(a[++i],"First");
        else if(v1[2] < v2[2])
            strcpy(a[++i],"Second");
        else
            strcpy(a[++i],"Same");
    }
    for(int j=1; j<=i; j++){
        printf("%s\n",a[j]);
    }
    return 0;
}

C语言程序设计小案例_#include_03








标签:案例,int,menu,菜品,C语言,stu,printf,程序设计,order
From: https://blog.51cto.com/u_16174658/8469962

相关文章

  • 2023-2024-1 20231307《计算机基础与程序设计》第8周学习总结
    作业信息作业属于的课程<班级链接>(2022-2023-1-计算机基础与程序设计)作业要求<作业要求>(2022-2023-1计算机基础与程序设计第一周作业)作业目标《计算机科学概论》第9章和《C语言程序设计》第7章作业正文https://www.cnblogs.com/lzt-/p/17841598.html教材学......
  • C语言基础实例:两个整数相加
    使用 scanf() 来接收输入, printf() 与 %d 格式化输出整数。运行实例实例#include<stdio.h>intmain(){ intfirstNumber,secondNumber,sumOfTwoNumbers;printf("输入两个数:"); scanf("%d%d",&firstNumber,&secondNumber);sumOfTwoNumbers=fir......
  • C语言(冒泡顺序):利用数组存储十个数并按从大到小的顺序输出
      时隔好几天,我又上线啦!这几天有点懒所以就没有更新。接下来废话少说,让我们开始今天的学习吧。  请先看流程图:   开始编写代码:#include<stdio.h>intmain(){inta[10],i,j,t;printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i+......
  • 2023-2024-1 20231405《计算机基础与程序设计》第八周学习总结
    2023-2024-120231405《计算机基础与程序设计》第八周学习总结作业信息作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009作业的目标自学《计算......
  • 2023-2024-1 20231402《计算机基础与程序设计》第8周学习总结
    2023-2024-120231402《计算机基础与程序设计》第8周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第8周作业这个作业的目标自学计算机科学概论第9章,《C语言程序设计》第7章作业正......
  • 【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!
    目录一、概要二、效果演示三、代码讲解3.1爬虫采集行政处罚数据3.2存MySQL数据库3.3发送告警邮件&微信通知3.4定时机制四、总结一、概要您好!我是@马哥python说,一名10年程序猿。我原创开发了一套定时自动化爬取方案,完整开发流程如下:采集数据->筛选数据->存MySQL数据库......
  • 2023-2024-1 20231327《计算机基础与程序设计》第8周学习总结
    学期(2023-2024-1)学号(20231327)《计算机基础与程序设计》第8周学习总结作业信息课程<班级的链接>(2023-2024-1-计算机基础与程序设计)要求<作业要求的链接>(2023-2024-1计算机基础与程序设计第7周作业)目标<了解并使用循环结构>作业正文https://i.cnblogs.com/p......
  • C语言【控制语句】
    C语言【控制语句】一、分支控制语句1、if语句略。2、switch...case如下switch(表达式){ case常量1://...break;case常量2://...break;defaule://...break;}注意:switch括号里的表达式只能存在......
  • 入门c语言--基于c库函数strstr的实现
    #include<stdio.h>#include<assert.h>char*my_strstr(constchar*p1,constchar*p2){ assert(p1&&p2);//检查p1和p2是否为空指针//创建s1,s2来在p1,p2中进行移动,创建指针tmp来保存开始移动时的s1的位置 char*s1=NULL; char*s2=NULL; char*tmp=(char*)p1;//对p1......
  • 2023-2024-1 20231321 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231321《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第八周作业)这个作业的目标<计算机科学概论......