这个课程设计是本人在大一下学期的课程结课设计,完全由个人开发完成!
现在来给大家进行我的课程设计思路详解!
欢迎点赞、关注、交流!!
看帖点赞是种美德!
该程序的功能:
(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头文件(获取系统实时时间已经对程序窗口大小的基本设定)
…
其实最后会发现主函数内容特别简单,因为程序的执行实际上是不同函数的互相调用!
int main()//主函数
{
Setwindows();
init();
Menu();
system("pause");
}
主要是存储各种不同的数据,如下:
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;
}
主要是简单的打印功能,但是排版也花了我挺久的!
以及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;
}
}
首先创建一个新的结点用来存储本次输入的商品信息,存储到链表中,通过尾接法将链表连接起来:然后如果需要继续输入则再次调用本函数来实现:
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
#include
#include
#include
#include
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"<<"是否继续录入?"<
//cout<<"y:是 n:否"<
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");
}
看帖点赞是种美德哦!!
欢迎交流和期待大佬回访!