一个简单C语言点餐系统的学习心得

首先附上源代码:

 1 #include <stdio.h>
 2
 3 void main_munu(){
 4     //打印主菜单
 5     char a[6][20]={"菜单","凉菜","热销菜","主食","饭后甜点","饮料"};
 6     int i;
 7     printf("%s\n",a[0]);
 8     for(i=1;i<6;i++)
 9     {
10         printf("\t%d.%s\n",i,a[i]);
11     }
12     printf("\t0.点餐结束\n");
13 }
14
15 void menu_liangcai(){
16     //凉菜类打印
17     char a[3][20]={"木耳辣根","姜汁皮蛋","肉丝苦菊"};//定义字符数组,存放菜名
18     printf("请具体选择菜品:\n");
19     for (int i = 0; i < 3; i ++) {
20         printf("\t\t%d.%s\n",i+1,a[i]);
21     }
22     printf("\t\t0.返回上层菜单\n");
23 }
24
25 void menu_rexiao(){
26     //热销菜打印
27     char a[3][20]={"葱烧排骨","麻婆豆腐","香辣小河虾"};//定义字符数组,存放菜名
28     printf("请具体选择菜品:\n");
29     for (int i = 0; i < 3; i ++) {
30         printf("\t\t%d.%s\n",i+1,a[i]);
31     }
32     printf("\t\t0.返回上层菜单\n");
33 }
34
35 void menu_zhushi(){
36     // 主食类打印
37     char a[3][20]={"香肠焖饭","海鲜炒面","玉米馒头"};//定义字符数组,存放菜名
38     printf("请具体选择菜品:\n");
39     for (int i = 0; i < 3; i ++) {
40         printf("\t\t%d.%s\n",i+1,a[i]);
41     }
42     printf("\t\t0.返回上层菜单\n");
43 }
44
45 void menu_tiandian(){
46     //甜点类打印
47     char a[3][20]={"草莓冰淇淋","懒人布丁","香橙果冻"};//定义字符数组,存放菜名
48     printf("请具体选择菜品:\n");
49     for (int i = 0; i < 3; i ++) {
50         printf("\t\t%d.%s\n",i+1,a[i]);
51     }
52     printf("\t\t0.返回上层菜单\n");
53 }
54
55 void menu_yinliao(){
56     //饮料类打印
57     char a[3][20]={"倾橙汁恋","可口可乐","秘制凉茶"};//定义字符数组,存放菜名
58     printf("请具体选择菜品:\n");
59     for (int i = 0; i < 3; i ++) {
60         printf("\t\t%d.%s\n",i+1,a[i]);
61     }
62     printf("\t\t0.返回上层菜单\n");
63 }

(1)在打印菜单信息的过程中,采用了数组的方法,利用了for循环来打印输出各级菜单的菜品,同时通过顾客输入编号来控制要点的菜品。

 1 int main(int argc, const char * argv[]) {
 2     printf("***** 法克招牌快餐店 *****\n");
 3     printf(" *****  欢迎您点餐 *****\n");
 4     int M;//定义用户选择的分类代号为M;
 5     int n;//定义用户输入子菜单下的菜品代号为n;
 6     int x[5][3] = {0};//定义每类菜品被点数量
 7     int price1[5][3] = {0};//每种菜品的价格总价
 8     int price[5][3] = {{12,15,13},{25,20,30},{5,5,10},{6,5,3},{3,4,5}};//定义每样菜品单价
 9     int total = 0;//定义所有菜品总价 初始化为0;
10     char name[5][3][20] = {{"木耳辣根","姜汁皮蛋","肉丝苦菊"},{"葱烧排骨","麻婆豆腐","香辣小河虾"},{"香肠焖饭","海鲜炒面","玉米馒头"},{"草莓冰淇淋","懒人布丁","香橙果冻"},{"倾橙汁恋","可口可乐","秘制凉茶"}};
11     while (1) {
12         main_munu();
13         scanf("%d",&M);//接收用户输入的菜品分类代号
14         if (M == 0) {
15             break;
16         }
17         switch (M) {
18             case 1:
19             {
20                 menu_liangcai();
21                 while (1) {
22                     scanf("%d",&n);
23                     if (n == 0) {
24                         //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择);
25                         break;
26                     }
27                     //统计 每样菜品总价格 与被点次数
28                     price1[0][n-1] += price[0][n-1];
29                     x [0][n-1] ++;
30                 }
31             }
32                 if(n == 0)break;//如果输入为0,结束选菜;
33             case 2:
34             {
35                 menu_rexiao();
36                 while (1) {
37                     scanf("%d",&n);
38                     if (n == 0) {
39                         //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择);
40                         break;
41                     }
42                     price1[1][n-1]+=price[1][n-1];
43                     x[1][n-1]++;
44                 }
45             }
46                 if(n == 0)break;//如果输入为0,结束选菜;
47             case 3:
48             {
49                 menu_zhushi();
50                 while (1) {
51                     scanf("%d",&n);
52                     if (n == 0) {
53                         //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择);
54                         break;
55                     }
56                     price1[2][n-1] += price[2][n-1];
57                     x[2][n-1]++;
58                 }
59             }
60                 if(n == 0)break;//如果输入为0,结束选菜;
61             case 4:
62             {
63                 menu_tiandian();
64                 while (1) {
65                     scanf("%d",&n);
66                     if (n == 0) {
67                         //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择);
68                         break;
69                     }
70                     price1[3][n-1] += price[3][n-1];
71                     x[3][n-1]++;
72                 }
73             }
74                 if(n == 0)break;//如果输入为0,结束选菜;
75             case 5:
76             {
77                 menu_yinliao();
78                 while (1) {
79                     scanf("%d",&n);
80                     if (n == 0) {
81                         //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择);
82                         break;
83                     }
84                     price1[4][n-1] += price[4][n-1];
85                     x[4][n-1]++;
86                 }
87             }
88
89                 if(n == 0)break;//如果输入为0,结束选菜;
90         }
91
92     }
93     

(2)通过数组x[5][3]、price1[5][3]、price[5][3]分别记录了每类菜品被点数量、每种菜品的价格总价、每样菜品单价。在从键盘输入菜品的编号后通过switch语句来控制点餐的进程,再利用数组x[5][3]、price1[5][3]来记录顾客点餐信息。,最后在经过统计累加起来得到顾客点餐信息以及总价格total。顾客在主菜单输入“0”结束点餐,在子菜单中输入“0”返回上一级菜单。

 1 //打印相关信息
 2     printf("菜名\t\t\t单价(元)\t数量\t总价格(元)\n-----------------------------------\n");
 3     for (int i = 0; i < 5; i++) {
 4         for (int j = 0; j < 3; j++) {
 5             if (price1[i][j] != 0) {//用价格判断顾客是否选择 确认打印
 6                 printf("%s\t\t%3d\t\t%3d\t%3d\n",name[i][j],price[i][j],x[i][j],price1[i][j]);
 7                 total += price1[i][j];//计算总价格
 8             }
 9         }
10     }
11     printf("总价格:\t\t\t\t\t%3d\n",total);
12     printf("祝您用餐愉快,期待您的下次光临!\n");
13     return 0;
14 }

(3)通过两个for语句控制打印出顾客点餐信息。

这个系统的优点有很多:一、这个系统代码的思路很清楚,层层递进;二、亮点是通过数组控制点餐的数量和价格,在顾客每一次选择菜品之后,都会进行数组的更新,在计算总价的时候,无疑方便了很多;三、在最后打印了顾客的点菜信息,符合现实中的实际情况。

缺点就是在点菜的时候不能直接选择要点的菜品的数量,只能返回到上一级菜单中再点一次,这样操作起来有点麻烦。

在深入了解了这个简单的点餐系统之后,我从中学到了很多知识点,也有点明白了“实践是检验真理的唯一标准”这句话。我觉得在编程之前,要把自己的想法写在纸上,如果是简单一点的程序不需要这样,如果程序比较复杂,就写下来,这样可以让思路更加清晰。良好的编程习惯是学好C语言的重要因素,只有勤动手,多动脑才能学好C语言,光说不练是不行的。

学习C语言需要的是坚持下去的毅力,认真对待每次错误的耐心,还有孜孜不倦的努力。拥有一个良好的心态,相信自己,你就会发现学好C语言不再困难!

原文地址:https://www.cnblogs.com/duanjs815/p/10469962.html

时间: 2024-11-09 20:55:42

一个简单C语言点餐系统的学习心得的相关文章

分享并开源一个简单粗暴的redmine测试报告系统

背景 软件测试的最后有一道比较繁琐的工作,就是编写测试报告.手写测试报告在数据统计和分析上面要耗费比较大的事件和精力.之前工作室使用mantis管理bug缺陷.公司有内部有个系统,可以直接从mantis上面获取数据并进行统计,生成一份测试报告.后来换了一个工作室,bug缺陷管理平台也从原来的mantis 换成了redmine (http://www.redmine.org/ ). 然后走上了一条手写测试报告的不归路(测试人员前期还是推荐手写测试报告的).搞游戏的都知道,平时加班加点压力就够大的.

简单的餐厅点餐系统

package org.lanlandetiankong; import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;import java.util.Set; class Menu { Strin

利用JS跨域做一个简单的页面访问统计系统

其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们需要自己来设计统计系统.由于前段时间公司的业务需求,我也是自己尝试了下,本文提供的是一个基本思路,统计系统也比较简单. 几个基本统计需求: 1.统计web每个页面用户访问量 2.统计用户访问者的和IP地址信息 3.页面之间的跳转情况 4.访问高峰时间段 服务器结构: 数据库表设计: 以上只是我简单列

一点点linux系统的学习心得

我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作(当时估计该公司非常缺乏,哈哈),我在收到录取通知后才开始学习Linux技术.但是,由于本科生不是计算机专业,我甚至不知道CPU,内存,硬盘等的概念,我也不知道他们的功能到底是什么.坦率地说,我的Linux知识,包括计算机基础,都是在下班后学到的.所以,如果你对计算机有一定的了解,请相信Linux对你

【SSH + BootStrap】实现的无线点餐系统

大二那会学习java学web的时候折腾了一个简单的无线点餐系统,cms形式的一个简单网站. 现在马上大四了,一年多没搞这方面发现东西忘得还真快,整理一下,顺便开源了. 1.简介 后端基于spring, struts1和hibernate,前台用bootstrap实现. 实现的功能也比较少,基本的crud操作,文件上传,ajax异步刷新等. 关于bootstrap的学习,请移步 Bootstrap中文网 2.代码结构和类图结构 3 applicationContext.xml配置文件 <?xml

Go语言之从0到1实现一个简单的Redis连接池

Go语言之从0到1实现一个简单的Redis连接池 前言 最近学习了一些Go语言开发相关内容,但是苦于手头没有可以练手的项目,学的时候理解不清楚,学过容易忘. 结合之前组内分享时学到的Redis相关知识,以及Redis Protocol文档,就想着自己造个轮子练练手. 这次我把目标放在了Redis client implemented with Go,使用原生Go语言和TCP实现一个简单的Redis连接池和协议解析,以此来让自己入门Go语言,并加深理解和记忆.(这样做直接导致的后果是,最近写JS时

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)

近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽小,五脏俱全,在此做一归纳和整理.以下先上源代码: 一.index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String

实现一个基于WCF的分布式缓存系统

前言: 用到分布式的东西很多了,一直想做一个简单的分布式小项目练练手学习下.后来决定来一个简单的分布式缓存的系统. 在企业应用开发中缓存的用例不胜枚举,但是每次更多的是单机的部署与使用,没有对应的需求是一个原因,另一个原因总是好高骛远做过的总是不想再进行修正. 这次的分布式就从最简单的分布式缓存开始.说简单是因为没有实现分布式缓存高深的寻址,或者对备份处理的牛X实现.只是实现了“分布”这个目的,不足之处还请大家指导. 分布的实现方式有哪些? 既然做“分布”,当然要看看主流的“分布”实现方式.小弟

Oracle 9.2.0.4的一个简单安装脚本(含安装前补丁p3006854)

#! /bin/bashecho "#########oracle9R204 的一个简单的安装脚本 ##############################"## 为系统添加oracle的用户和用户组#groupadd dbagroupadd oinstalluseradd -c "Oracle software owner" -g oinstall -G dba oraclepasswd oracle # 创建oracle 的安装目录 mkdir /oracl