C语言实现餐饮结账管理系统

所属分类: 软件编程 / C 语言 阅读数: 102
收藏 0 赞 0 分享

本文实例为大家分享了C语言餐饮结账管理系统的具体代码,供大家参考,具体内容如下

使用C语言编写餐饮结账管理系统课程设计,包含设计报告,源代码.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 30
struct bill
{
 int num;       //编号
 int time[4];     //时间
 int table;      //台面号
 int count;      //顾客数量
 char name[20];    //服务生姓名
 int money;      //实收金额
}bill[M];
int N;
/*菜单*/
void menu()
{
  char c;
 void input();
 void modify();
 void deleter();
 void search1();
 void search2();
 void sort();
 void income();
  void number();
 do
 {
 printf("\n\n\n");
   printf("     <<<<餐饮结账管理系统>>>>         \n");
   printf("----------------------------------------------------\n");
    printf("\n\n");
   printf("---1录入    2修改    3删除     ----\n\n");
   printf("---4台面号查询        5接待服务生查询----\n\n");
   printf("---6金额排序  7总收入   8顾客总数   ----\n\n");
   printf("---       0退出           ----\n\n");
   printf("---------------------------------------------------\n");
    printf("\n\n");
   printf("请选择服务(0-8)");
    c=getchar();
    switch(c)
 {
    case '1': {input();getchar();break;}
    case '2': {modify();getchar();break;}
    case '3': {deleter();getchar();break;}
      case '4': {search1();getchar();break;}
    case '5': {search2();getchar();break;}
    case '6': {sort();getchar();break;}
    case '7': {income();getchar();break;}
    case '8': {number();getchar();break;}
    case '0': 
   {
        printf("\n谢谢使用,再见!");
     exit(0);
         printf("\n");
   }
    default:
   {
        printf("\n输入有误,重试!:");
        c=getchar();
   }
 }
 }while(1);
 
}
/*信息录入,将录入的信息存入文件bill中*/
void input()     
{
  FILE *fp;
  int i;
  if((fp=fopen("bill","w"))==NULL)
  {
   printf("cannot open the file\n");
   return;
  }
  printf("输入信息个数(0-%d)?:",M-1);
  scanf("%d",&N);
  printf("请输入数据:\n");

  for(i=0;i<N;i++)
  {
   printf("输入账单 %d 信息:\n",i+1);
   printf("编号:");
   scanf("%d",&bill[i].num);
   printf("时间(月.日 时:分):");
  scanf("%d%d%d%d",&bill[i].time[0],&bill[i].time[1],&bill[i].
time[2],&bill[i].time[3]);
   printf("台面号:");
  scanf("%d",&bill[i].table);
  printf("顾客数量:");
  scanf("%d",&bill[i].count);
  printf("接待服务生:");
  scanf("%s",bill[i].name);
  printf("实收金额:");
  scanf("%d",&bill[i].money);
  }
   for(i=0;i<N;i++)
  {
   if(fwrite(&bill[i],sizeof(struct bill),1,fp)!=1)
  {
  printf("file write error\n");
  return;
  }
  }
  fclose(fp);
}
/*从文件中读取信息并存入数组sbill[N]*/
void readFromFile()
{
  int i;
 FILE *fp;
  if((fp=fopen("bill","rb"))==NULL)
  {
   printf("cannot open the file\n");
   return;
  }
  for(i=0;i<N;i++)
  fread(&bill[i],sizeof(struct bill),1,fp);
  fclose(fp);
}
/*保存函数*/
void save()
{
 FILE *fp;
  int i;
  if((fp=fopen("bill","w"))==NULL)
  {
   printf("cannot open the file\n");
   return;
  }
  for(i=0;i<N;i++)
  {
  if(bill[i].num!='\0')
    if(fwrite(&bill[i],sizeof(struct bill),1,fp)!=1)
  {
   printf("file write error\n");
   return;
  }
  }
  fclose(fp);
}
/*信息全部显示*/
void display_all()
{
 int i;
  readFromFile();
 printf("全部信息:\n");
 for(i=0;i<N;i++)
 {
 printf("编号:%d 时间:%d.%d %d:%d 台面号:%d 顾客数量:%d 接待服务生:%s 实施金额:%d",bill[i].num,bill[i].time[0],bill[i].time[1], bill[i].time[2],bill[i].time[3],bill[i].table,bill[i].count,bill[i].name,bill[i].money);
   printf("\n");
 }
}
/*单个信息显示*/
void display(int i)
{ 
printf("编号:%d 时间:%d%d%d%d 台面号:%d 顾客数量:%d 接待服务生:%s 实施金额:%d",bill[i].num,bill[i].time[0],bill[i].time[1],bill[i].time[2],bill[i].time[3],bill[i].table,bill[i].count,bill[i].name,bill[i].money);
}
/* 修改函数调用函数*/
int modify_a(int i)
{ 
 int c,w1;
  printf("\n修改选项=>\n\n 1).编号 2).时间 3).台面号 4).顾客数量 5).接待服务生 6).实收金额 7).取消并返回");
  printf("请选择?: [ ]");
  scanf("%d",&c);
  if(c>7||c<1) 
 { 
 printf("\n选择错误,请重试"); 
 getchar();
 }
 do
  {
 switch(c)
  { case 1: printf("编号:"); scanf("%d",&bill[i].num); break;
 case 2:printf("时间:") ; scanf("%d.%d%d:%d",&bill[i].time[0],&bill
[i].time[1],&bill[i].time[2],&bill[i].time[3]);break;
case 3: printf("台面号:"); scanf("%d",&bill[i].table); break;
   case 4: printf("顾客数量:"); scanf("%d",&bill[i].count); break;
   case 5: printf("接待服务生:"); scanf("%s",bill[i].name); break;
   case 6: printf("实收金额:"); scanf("%d",&bill[i].money); break;
  case 7: menu(); 
  }
 printf("\n现在:\n");
  display(i);
  printf("\n确定?\n 1).是 2).不,重新修改 3).返回不保存 [ ");
  scanf("%d",&w1);
 }while(w1==2);
  return(w1);
}
/*修改信息*/
void modify()
{ 
 int i,n,k,w0=1,w1; 
  readFromFile(); 
 do
 { 
 k=-1;
    display_all();
   do
 { 
  printf("\n输入要修改的编号数\n编号:");
      scanf("%d",&n);
      for(i=0;i<N;i++)
      if(bill[i].num-n==0) 
  {
   k=i; 
  }
     if(k==-1) 
   printf("\n\n没有记录请重新输入!");
 }while(k==-1);
 w1=modify_a(k);
  if(w1==1) 
 {
 printf("\n 修改成功 \n是否继续? 1).是 2).保存返回 [");
    save(); 
    scanf("%d",&w0); 
 }
  }while(w0==1);  
}
/*删除记录*/
void deleter()
{
 int i,k,n,w0,w1;
  readFromFile();  
 do
 {
 k=-1;
 display_all();
 do
 {
   printf("\n输入要删除的编号:\n");
   scanf("%d",&n);
      for(i=0;i<N;i++)
    if(n-bill[i].num==0)
  {
    k=i;
  }
   if(k==-1)
  printf("\n无记录,请重新输入!\n");  
 }while(k==-1);
    display(i);
 printf("\n确定删除? 1)是 2)返回\n [");
 scanf("%d",&w0); 
 if(w0==1)
 {
  for(i=k;i<N;i++)
  {
  bill[i]=bill[i+1];
    save();
  }
 }
 else break;
    display_all();
 printf("\n删除成功,是否继续? 1)是 2)返回 [ ");
 scanf("%d",&w1);
 }while(w1==1);
}
/*台面号查询*/
void search1()
{
  int i,j,w0;
  int number;
  readFromFile();
  do
  {
  j=-1;
  printf("\n请输入台面号查询:");
    scanf("%d",&number);
    for(i=0;i<N;i++)
  {
      if(number==bill[i].table)
   {
   j=i;
        display(j);
   printf("\n");
   }
  } 
    if(j==-1)
    printf("无此号!");
    printf("\n继续? 1)是 2)返回 [");
    scanf("%d",&w0);
  }while(w0==1);
}
/*接待服务生查询*/
void search2()
{
  char a[20];
  int i,j,w0;
  do
  {
  j=-1;
  printf("\n请输入接待服务生姓名查询:");
    scanf("%s",a);
    for(i=0;i<N;i++)
  {
      if(strcmp(bill[i].name,a)==0)
   { 
   j=i;
        display(j);
   printf("\n");
   } 
  } 
    if(j==-1)
    printf("无此姓名!");
    printf("\n继续? 1)是 2)返回 [ ");
    scanf("%d",&w0);
  }while(w0==1);
}
/*金额排序*/
void sort()
{
 int i,j,w0;
 struct bill t;
  readFromFile();
  printf("\n\n");
 for(j=0;j<N-1;j++)
 for(i=0;i<N-1-j;i++)
  if(bill[i].money<bill[i+1].money)
  {
  t=bill[i];
        bill[i]=bill[i+1];     /*调换bill[i]与bill[i+1]的值*/
        bill[i+1]=t;
  }
  printf("由大到小为:\n");
 for(i=0;i<N;i++)
 {
 display(i);
 printf("\n");
 }
  do
 {
 printf("\n返回? 1)是 2)否");
 scanf("%d",&w0);
 }while(w0==2);
}
/*总收入统计*/
void income()
{
 int i,sum=0,w0;
  readFromFile();
 for(i=0;i<N;i++)
   sum=sum+bill[i].money;
  printf("\n\n");
 printf("总收入:%d",sum);
 do
 {
 printf("\n返回? 1)是 2)否");
 scanf("%5d",&w0);
 }while(w0==2);
}
/*顾客总数统计*/
void number()
{
  int i,number=0,w0;
  readFromFile();
 for(i=0;i<N;i++)
   number=number+bill[i].count;
 printf("\n\n");
 printf("顾客总数:%d",number);
 do
 {
 printf("\n返回? 1)是 2)否");
 scanf("%5d",&w0);
 }while(w0==2);
}
/*主函数*/
void main()
{
 menu();
}

源码下载:C语言餐饮结账管理系统

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多