【C++】收银模拟系统【大学课程设计】

这个课程设计是本人在大一下学期的课程结课设计,完全由个人开发完成!
现在来给大家进行我的课程设计思路详解!
欢迎点赞、关注、交流!!
看帖点赞是种美德!


【收银模拟系统】

一、设计要求

该程序的功能:
(1)分类录入、修改3大类食品的基本信息;
(2)录入顾客购买的食品;
(3)计算顾客的消费金额;
(4)录入顾客交款额以及找零;
(5)打印购物单给客户。

二、设计思路

我的设计思路是通过不同的函数模块来实现各大功能,并可以进行相互调用,同时使得调试时可以明确bug的位置。主要8个模块如下:
在这里插入图片描述

void Menu();//主菜单
void Add();//录入商品
void Fix();//修改商品信息
void PrintMeal();//打印菜单
void Order();//点餐或购物单
void Count();//计数模块(计算商品数和总价)
void Print();//打印小票
void Exit();//退出系统
void Setwindows();//窗口界面设置模块

三、运用到的知识点

1、结构体(用来储存不同类型的数据)
2、指针(访问和取值)
3、单链表(储存连续的商品信息)
4、循环(常见的执行查找和取值的方法)
5、选择结构(主要用于主菜单switch()语句)
6、Windows头文件(获取系统实时时间已经对程序窗口大小的基本设定)

四、函数模块解析

1、主函数

其实最后会发现主函数内容特别简单,因为程序的执行实际上是不同函数的互相调用!

int main()//主函数
{
	Setwindows();
	init();
	Menu();
	system("pause");
}

2、结构体

主要是存储各种不同的数据,如下:

typedef struct Meals//餐品信息结构体
{
    char id[Max];   //  餐品序号 
    char name[Max];  // 餐品名称
    float price; // 餐品价格
}Meals; 
typedef struct Add_order//点餐信息结构体
{
	char Mealname[Max];
	char Meal_id[Max];//餐品编号
	 unsigned int num;//餐品数量
	 float All_money;//餐品总价
	 float Mealprice;//餐品价格
	 float Meal_money;//一种餐品价格
}Add_Order;

typedef struct NodeList//创建链表分别有数据域、指针域
{
	Meals data;
	Add_order order;
	struct NodeList *next;
}Node;

  Node  *head=NULL;//头节点和尾结点的初始化
  Node *last=NULL;
  

3、链表初始化

实际上是可以看做两条线,并且进度相同,但是另一条可以回到起点重新开始加载内容(说的有点抽象哈哈)
举个例子:

头结点尾结点
猪肉猪肉
苹果苹果
牛奶牛奶
花生花生
然后我想要取出【牛奶】时则是通过头结点开始往下进行查找!
void init()//链表初始化
  {
    last= head= new Node; // 为头结点分配空间
    last -> next = NULL;
    head -> next = NULL;
  }

4、主菜单

主要是简单的打印功能,但是排版也花了我挺久的!
以及switch语句的运用,分别跳转到不同的功能!
并且打印系统实时时间
在这里插入图片描述

代码如下:

void Menu()//菜单系统
{
	system("CLS");
	
	cout<<endl;
cout<<"---------------------------【解忧杂货铺】收银系统---------------------------"<<endl;
cout<<"|"<<setw(75)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"1.录入系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"2.修改系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"3.目录系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"4.点菜系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"5.结算系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"6.账单系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"7.退出系统"<<setw(35)<<"|"<<endl;
for(int i=0;i<20;i++)
cout<<"|"<<setw(75)<<"|"<<endl;
cout<<"\t\t\t说吧想干嘛(1-7):"<<endl;

SYSTEMTIME sy;//获取实时时间
GetLocalTime(&sy);
cout<<endl;
cout<<"\t\t\tTime:"<<sy.wYear<<"/"<<sy.wMonth<<"/"<<sy.wDay<<"/"<<sy.wHour<<":"<<sy.wMinute<<":"<<sy.wSecond<<endl;
int choose;
	cin>>choose;
	switch(choose)
	{
		case 1:Add();break;
		case 2:Fix();break;
		case 3:PrintMeal();break;
		case 4:Order();break;
		case 5:Count();break;
		case 6:Print();break;
		case 7:Exit();break;
		default :break;
			
	}
}

5、录入系统

首先创建一个新的结点用来存储本次输入的商品信息,存储到链表中,通过尾接法将链表连接起来:然后如果需要继续输入则再次调用本函数来实现:
在这里插入图片描述在这里插入图片描述

void Add()
{
	
	Node *a=new Node;
	system("CLS");
	cout<<"---------------------------【解忧杂货铺】录入系统---------------------------"<<endl;
	cout<<"|"<<"\t"<<"请输入餐品编号:";
	cin>>a->data.id;
	cout<<endl;
	cout<<"|"<<"\t"<<"请输入餐品名称:";
	cin>>a->data.name;cout<<endl;
	cout<<"|"<<"\t"<<"请输入餐品价格:";
	cin>>a->data.price;cout<<endl;
	cout<<"|"<<"\t\t\t\t\t"<<"录入成功!"<<setw(35)<<" "<<endl;
	
for(int i=0;i<20;i++)
cout<<"|"<<setw(75)<<"|"<<endl;
    last->next=a;
	last=a;
	last->next=NULL;
	int x;
	x=MessageBox(NULL,(LPCTSTR)TEXT("点餐系统"),(LPCTSTR)TEXT("是否继续点餐?"),MB_OKCANCEL);
    switch(x)
	{
		case 1 :Add();break;
		default: Menu();break;
	}
}

五、完整代码附录:

#include<iostream>
#include<iomanip>
#include<stdint.h>
#include<windows.h>
#include<cstring>
const int Max =20;
using namespace std;

void Menu();
void Add();
void Fix();
void PrintMeal();
void Order();
void Count();
void Print();
void Exit();
void Setwindows(); 
typedef struct Meals//餐品信息结构体
{
    char id[Max];   //  餐品序号 
    char name[Max];  // 餐品名称
    float price; // 餐品价格
}Meals; 
typedef struct Add_order//点餐信息结构体
{
	char Mealname[Max];
	char Meal_id[Max];//餐品编号
	 unsigned int num;//餐品数量
	 float All_money;//餐品总价
	 float Mealprice;//餐品价格
	 float Meal_money;//一种餐品价格
}Add_Order;

typedef struct NodeList//创建链表分别有数据域、指针域
{
	Meals data;
	Add_order order;
	struct NodeList *next;
}Node;

  Node  *head=NULL;//头节点和尾结点的初始化
  Node *last=NULL;
  
 void init()//链表初始化
  {
    last= head= new Node; // 为头结点分配空间
    last -> next = NULL;
    head -> next = NULL;
  }

void Setwindows()
{
	system("CLS");
	system("mode con:cols=80 lines=35");
	system("color 3f");
}
 void Choose()//
 {
	 int x;
	//cout<<"|"<<"\t\t"<<"是否继续录入?"<<endl;
    //cout<<"y:是 n:否"<<endl;dao
	x=MessageBox(NULL,(LPCTSTR)TEXT("餐品的添加"),(LPCTSTR)TEXT("是否继续录入?"),MB_OKCANCEL);
	switch(x)
	{	
	case 0:Add();
	case 1:Menu();
    }
 }

void PrintMeal()
{
	system("CLS");
	Node *b;
	b=head;
	int mealnum=0;//录入商品数量
	cout<<"---------------------------【解忧杂货铺】目录系统---------------------------"<<endl;
	cout<<"|"<<"\t餐品名称"<<"\t"<<"\t餐品编号"<<"\t餐品价格"<<setw(20)<<"|"<<"\t"<<endl;
	do
    {
        b = b -> next;
        cout<<setw(10)<<b->data.name<<"\t\t\t"<<b->data.id<<"\t\t"<<b->data.price<<endl;
		 mealnum++;
    }
	while(b != NULL&&b->next!=NULL );
	cout<<endl;
	cout<<endl;
	cout<<"\t\t\t\t"<<"共["<<mealnum<<"]个商品"<<endl;
	cout<<"<按任意键返回菜单>"<<endl;
	getchar();
	getchar();
	Menu();
	
}

void Add()
{
	
	Node *a=new Node;
	system("CLS");
	cout<<"---------------------------【解忧杂货铺】录入系统---------------------------"<<endl;
	cout<<"|"<<"\t"<<"请输入餐品编号:";
	cin>>a->data.id;
	cout<<endl;
	cout<<"|"<<"\t"<<"请输入餐品名称:";
	cin>>a->data.name;cout<<endl;
	cout<<"|"<<"\t"<<"请输入餐品价格:";
	cin>>a->data.price;cout<<endl;
	cout<<"|"<<"\t\t\t\t\t"<<"录入成功!"<<setw(35)<<" "<<endl;
	
for(int i=0;i<20;i++)
cout<<"|"<<setw(75)<<"|"<<endl;
    last->next=a;
	last=a;
	last->next=NULL;
	int x;
	x=MessageBox(NULL,(LPCTSTR)TEXT("点餐系统"),(LPCTSTR)TEXT("是否继续点餐?"),MB_OKCANCEL);
    switch(x)
	{
		case 1 :Add();break;
		default: Menu();break;
	}
}

void Order()
{
	
	Node *a=new Node;
	a=head;
	char id[Max];
	int i=0;
	system("CLS");
	cout<<"---------------------------【解忧杂货铺】点菜系统---------------------------"<<endl;
	if(a==NULL||a->next==NULL)
	cout<<"还未录入餐品,请录入后进行点餐!"<<endl;
	cout<<"\t"<<"请输入餐品编号:"<<endl;
	cin>>id;
	while(a!=NULL&&a->next!=NULL)
	{	
	a=a->next;
	if(strcmp(a->data.id,id)==0)
	{
		strcpy(a->order.Meal_id,a->data.id);
		strcpy(a->order.Mealname,a->data.name);
		a->order.Mealprice=a->data.price;
		
	cout<<"\t"<<"输入餐品数量:"<<endl;
	cin>>a->order.num;
	a->order.Meal_money=(a->order.num)*(a->data.price);//计算点餐金额并保存
	cout<<endl;
	cout<<"\t"<<"点菜成功!"<<endl;break;
	}
	if(a->next==NULL&&strcmp(a->data.id,id)!=0)
	
		{
		cout<<"\t"<<"没有该餐品的信息!"<<endl;
		
        }
	
	}	
 for(int i=0;i<20;i++)
 cout<<"|"<<setw(75)<<"|"<<endl;
	int x;
	x=MessageBox(NULL,(LPCTSTR)TEXT("点餐系统"),(LPCTSTR)TEXT("是否继续点餐?"),MB_OKCANCEL);
    switch(x)
	{
		case 1 :Order();break;
		default:Menu();break;
	}
	
	}

void Fix()
{
	system("cls");
	char  Sid[Max];
	Node *a=head;
	int mealnum=0;//录入商品数量
	cout<<"---------------------------【解忧杂货铺】修改系统---------------------------"<<endl;
	cout<<"|"<<"\t餐品名称"<<"\t"<<"\t餐品编号"<<"\t餐品价格"<<setw(20)<<"|"<<"\t"<<endl;
	do
    {
        a = a -> next;
        cout<<setw(10)<<a->data.name<<"\t\t\t"<<a->data.id<<"\t\t"<<a->data.price<<endl;
		 mealnum++;
    }
	while(a != NULL&&a->next!=NULL );
	cout<<endl;
	cout<<endl;
	cout<<"\t\t\t\t"<<"共["<<mealnum<<"]个商品"<<endl;

	a=head;
	char  id[Max];float price;
	for(int i=0;i<20;i++)
cout<<"|"<<setw(75)<<"|"<<endl;
	cout<<"请输入需要修改的餐品编号:"<<endl;
	cin>>Sid;
	while(a!=NULL&&a->next!=NULL)
	{
		a=a->next;
		if (strcmp(a->data.id,Sid) == 0)
		{
			cout<<"|"<<"\t"<<"输入新编号:"<<endl;
			cin>>id;
			strcpy(a->data.id,id);
			cout<<"|"<<"\t"<<"输入新价格:"<<endl;
			cin>>price;
			a->data.price=price;
			cout<<"|"<<"\t"<<"修改成功!"<<endl;break ;	
		}
		if(strcmp(a->data.id,Sid) != 0&&a->next!=NULL&&a==NULL) cout<<"|"<<"\t"<<"没有找到该餐品!"<<endl;
	}
	cout<<"<按任意键返回菜单>"<<endl;
	getchar();
	getchar();
	Menu();
}
float G_money;
void Count()//账单系统
{
	Node *a=new Node;
	a=head;
	int i=0;double Money=0;
	system("CLS");
	if(a->order.Meal_id==NULL&&a->next==NULL)
		{
			cout<<"**************您还未点餐品,请点餐后结算!***********"<<endl;
			cout<<"自动返回菜单中——"<<endl;
			Sleep(2000);
			Menu();
	    }
	else{
	cout<<"---------------------------【解忧杂货铺】结算系统---------------------------"<<endl;
	cout<<"|餐品单号"<<"\t"<<"餐品名称"<<"\t"<<"餐品数量"<<"\t"<<"餐品单价"<<setw(21)<<"|"<<endl;
	while(a!=NULL&&a->next!=NULL)
	{
		a=a->next;
		cout<<"|"<<a->order.Meal_id<<"\t\t"<<a->order.Mealname<<"\t\t"<<a->order.num<<"\t\t"<<a->order.Mealprice<<endl;
		if(a->order.Meal_money!=NULL)
		Money+=a->order.Meal_money;
				
	}
	for(int i=0;i<20;i++)
    cout<<"|"<<setw(75)<<"|"<<endl;
	cout<<"--"<<"餐品总价:"<<Money<<endl;
	cout<<"--"<<"收  钱  :"<<endl;
	cin>>G_money;
	
	if(G_money>Money)
		 cout<<"应找零:"<<G_money-Money<<endl;
	else cout<<"金额不足!"<<endl;
	cout<<"<按任意键返回菜单>"<<endl;
	getchar();
	getchar();
	Menu();
	}
}
void Print()
{
	Node *a=new Node;
	a=head;
	int i=0;double Money=0;
	system("CLS");
	cout<<"---------------------------【解忧杂货铺】账单系统---------------------------"<<endl;
	cout<<"|餐品单号"<<"\t"<<"餐品名称"<<"\t"<<"餐品数量"<<"\t"<<"餐品单价"<<setw(21)<<"|"<<endl;
	while(a!=NULL&&a->next!=NULL)
	{
		a=a->next;
		cout<<"|"<<a->order.Meal_id<<"\t\t"<<a->order.Mealname<<"\t\t"<<a->order.num<<"\t\t"<<a->order.Mealprice<<endl;
		if(a->order.Meal_money!=NULL)
		Money+=a->order.Meal_money;
	}
	for(int i=0;i<20;i++)
    cout<<"|"<<setw(75)<<"|"<<endl;
	cout<<"\t\t总价:"<<Money<<"\t实收:"<<G_money<<"\t找零:"<<G_money-Money<<endl;
	cout<<endl;
	cout<<"\t\t\t\t"<<"祝您用餐愉快!"<<endl;
	SYSTEMTIME sy;//获取实时时间
    GetLocalTime(&sy);
    cout<<endl;
    cout<<"\t\t\tTime:"<<sy.wYear<<"/"<<sy.wMonth<<"/"<<sy.wDay<<"/"<<sy.wHour<<":"<<sy.wMinute<<":"<<sy.wSecond<<endl;
	cout<<"<按任意键返回菜单>"<<endl;
	getchar();
	getchar();
	Menu();
}
void Exit()
{
	system("cls");
	cout<<endl;
	cout<<endl;
	cout<<"*****************************欢迎下次使用!***********************************"<<endl;
	cout<<"                              \a 正在退出!"<<endl;
	Sleep(1000);
	exit(0);
}

void Menu()//菜单系统
{
	system("CLS");
	
	cout<<endl;
cout<<"---------------------------【解忧杂货铺】收银系统---------------------------"<<endl;
cout<<"|"<<setw(75)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"1.录入系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"2.修改系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"3.目录系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"4.点菜系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"5.结算系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"6.账单系统"<<setw(35)<<"|"<<endl;
cout<<"|"<<"\t\t\t\t"<<"7.退出系统"<<setw(35)<<"|"<<endl;
for(int i=0;i<20;i++)
cout<<"|"<<setw(75)<<"|"<<endl;
cout<<"\t\t\t说吧想干嘛(1-7):"<<endl;

SYSTEMTIME sy;//获取实时时间
GetLocalTime(&sy);
cout<<endl;
cout<<"\t\t\tTime:"<<sy.wYear<<"/"<<sy.wMonth<<"/"<<sy.wDay<<"/"<<sy.wHour<<":"<<sy.wMinute<<":"<<sy.wSecond<<endl;
int choose;
	cin>>choose;
	switch(choose)
	{
		case 1:Add();break;
		case 2:Fix();break;
		case 3:PrintMeal();break;
		case 4:Order();break;
		case 5:Count();break;
		case 6:Print();break;
		case 7:Exit();break;
		default :break;
			
	}
}

int main()//主函数
{
	Setwindows();
	init();
	Menu();
	system("pause");
}


看帖点赞是种美德哦!!
欢迎交流和期待大佬回访!

  • 33
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kook小辉的进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值