我最近的课设作业要求设计餐厅点菜系统。在关于点餐中我遇到了一个让我想不通的问题。
如下:
我的思路是先定义菜品信息结构体在一个头文件中。在餐厅管理员菜单中我可以录入新菜品并可将其保存在一个菜品信息的文本里面,然后在用户菜单中可查看文本中原有的菜品信息以及新录入的菜品信息。
可是不知道是我录入是出现错误,还是输出是出现错误,亦或是保存时出现错误,使得我输出(即查看菜单)中显示的只有菜名及菜品类型,没有菜品价格请大佬们指点我一下;
代码如下:
typedef struct dishes
{
int price;
char cm[15];
char lx[9]; //菜品类型
}CP;
//定义结构体全局数组
CP soft[30];
以下这段为录入的头文件里的代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"windows.h"
#include"string.h"
#include"time.h"
void input()
{
int i;
system("cls");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t*************欢迎来到xx餐厅菜品录入功能*************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\n\n\n");
for (i = 0; i <= 49; i++)
{
if (soft[i].price == 0)
{
int select;
printf("\t\t\t*****************************************************\n");
printf("\t\t\t* 1 确定输入 2 放弃输入 *\n");
printf("\t\t\t*****************************************************\n");
printf("\t\t\t 输入你的选择(1 or 2):");
scanf_s("%d", &select);
while (select != 1 && select != 2)
{
printf("\t\t\t 输入错误,请你重新输入你的选择(1 or 2):");
scanf_s("%d", &select);
}
if (select == 2)
break;
else
{
system("cls");
printf("\t\t\t*****************************************************\n");
printf("\t\t\t 输入第%d个菜品的信息 \n", i + 1);
printf("\t\t\t*****************************************************\n");
printf("输入价格:");
scanf_s("%d", &soft[i].price);
getchar(); //把上述输入价格后的回车键给处理掉
printf("输入菜名:");
gets_s(soft[i].cm);
printf("输入菜品类型:");
gets_s(soft[i].lx);
autosave();
}
}
}
system("pause");
}
做完这些在输出即查看菜单时我发现我输入的价格没有了或者变乱码了
如图
保存的代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"windows.h"
#include"string.h"
#include"time.h"
void autosave()
{
int x;
{
FILE *p;
p = fopen("C:\\Users\\65405\\Documents\\Visual Studio 2015\\Projects\\餐厅点餐系统.cpp\\餐厅点餐系统.cpp\\菜品信息.txt", "a");
if (p == NULL)
{
printf("文件打开失败\n");
exit(0);
}
fwrite(soft, sizeof(struct dishes), 30, p);
printf("\t\t\t数据保存中");
for (x = 1; x <= 6; x++)
{
printf(".");
Sleep(1000);
}
printf("\n");
fclose(p);
printf("\t\t\t数据保存成功\n");
}
system("pause");
}
查看的代码如下
#include<stdlib.h>
#include<stdio.h>
#include"time.h"
#include"windows.h"
#include"string.h"
void menu()
{
char c;
int x;
system("cls");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t***************欢迎查看城科港式餐厅菜单***************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\n\n\n");
FILE *p;
p = fopen("C:\\Users\\65405\\Documents\\Visual Studio 2015\\Projects\\餐厅点餐系统.cpp\\餐厅点餐系统.cpp\\菜品信息.txt", "r");
c = fgetc(p);
if (p == NULL)
{
printf("菜单打开失败\n");
exit(0);
}
printf("\t\t\t数据读取中");
for (x = 1; x <= 6; x++)
{
printf(".");
Sleep(1000);
}
printf("\n");
while ((c = fgetc(p)) != EOF)
{
putchar(c);
c = fgetc(p);
printf("%c", c);
}
printf("\t\t\t数据读取成功\n");
putchar('\n');
fclose(p);
system("pause");
order();
}