這個程式的設計背景是訂餐管理系統,功能有訂餐、查詢、修改、洗掉、查看已有訂餐名單、退出系統。翻譯沒有錯誤,但是運行的時候,在查詢、修改和洗掉這三項功能里出錯,選擇編號為1的進行功能操作沒有問題,但是編號是1以后的都會先出來一句設計的報錯“沒有查詢到可以修改/洗掉的資料”,但選擇的功能可繼續運行下去,比如照常可以修改洗掉,只不過每回都會先報錯,不知道程式哪里出了問題,請大家幫忙看看?

程式如下:
#include<stdio.h>
#include<string.h>
#define MaxSize 20
struct guest_info{
char name[10];
int sum;
char time[10];
int num;
}guest[MaxSize];
void Insert(int *count);
void Search(int count);
void Update(int count);
void Delete(int *count);
void Show(int count);
void Exit(void);
int main()
{
int i;
int count=0;
do
{printf("\n");
printf("1----點餐(Insert)\n");
printf("2----查詢(Search)\n");
printf("3----修改訂餐資訊(Update)\n");
printf("4----洗掉訂單(Delete)\n");
printf("5----顯示訂餐資訊(Show)\n");
printf("6----退出(Exit)\n");
scanf("%d",&i);
switch(i)
{case 1:Insert(&count);
break;
case 2:Search(count);
break;
case 3:Update(count);
break;
case 4:Delete(&count);
break;
case 5:Show(count);
break;
case 6:Exit( );
break;
default:printf("錯誤選擇!請重選");
}
}while (i!=8);
return 0;
}
void Insert(int * count)
{int i,in_num;
if(* count==MaxSize)
{printf("空間已滿!");return ;}
printf("請輸入編號:");
scanf("%d",&in_num);
for(i=0;i<* count;i++)
if(guest[i].num==in_num)
{printf("已有相同編號,請重新操作。\n");return ; }
guest[i].num=in_num;
printf("請輸入姓名:");
scanf("%s",guest[i].name);
printf("請輸入用餐人數:");
scanf("%d",&guest[i].sum);
printf("請輸入用餐時間:");
scanf("%s",guest[i].time);
(* count)++;
}
void Search(int count)
{int i,num,flag=1;
printf("請輸入要查詢的編號:");
scanf("%d",&num);
for(i=0;i<count&&flag;i++)
if(guest[i].num==num)
{printf("\n姓名:%s\n",guest[i].name);
printf("用餐人數:%d\n",guest[i].sum);
printf("用餐時間:%s\n",guest[i].time);
flag=0;
}
else
printf("\n沒有查詢到相關資訊\n");
}
void Update(int count)
{int i,num,flag=1;
printf("請輸入要修改的姓名的編號:");
scanf("%d",&num);
for(i=0;i<count&&flag;i++)
if(guest[i].num==num)
{
printf("請輸入人數:");
scanf("%d",&guest[i].sum);
printf("請輸入用餐時間:");
scanf("%s",guest[i].time);
flag=0;
}
else
printf("\n沒有查詢到可以修改的資料!\n");
}
void Delete(int * count)
{int i,j,num,flag=1;
printf("請輸入要洗掉的姓名的編號:");
scanf("%d",&num);
for(i=0;i<* count&&flag;i++)
{if(guest[i].num==num)
{for(j=i;j<* count-1;j++)
guest[j]=guest[j+1];
flag=0;
(* count)--;
}
else
printf("\n沒有查詢到可以洗掉的資料!\n");
}
}
void Show(int count)
{int i;
printf("\n");
printf("編號 姓名 人數 用餐時間\n");
for(i=0;i<count;i++)
{printf("%4d",guest[i].num);
printf("%8s",guest[i].name);
printf("%9d",guest[i].sum);
printf("%12s\n",guest[i].time);
}
}
void Exit(void)
{
printf("已退出,歡迎下次使用。\n");
}
運行結果
uj5u.com熱心網友回復:
可參uj5u.com熱心網友回復:
幾個函式邏輯判斷有誤,#include<stdio.h>修改如下,供參考:
#include<string.h>
#define MaxSize 20
struct guest_info{
char name[10];
int sum;
char time[10];
int num;
}guest[MaxSize];
void Insert(int *count);
void Search(int count);
void Update(int count);
void Delete(int *count);
void Show(int count);
void Exit(void);
int main()
{
int i;
int count=0;
do
{printf("\n");
printf("1----點餐(Insert)\n");
printf("2----查詢(Search)\n");
printf("3----修改訂餐資訊(Update)\n");
printf("4----洗掉訂單(Delete)\n");
printf("5----顯示訂餐資訊(Show)\n");
printf("6----退出(Exit)\n");
scanf("%d",&i);
switch(i)
{case 1:Insert(&count);
break;
case 2:Search(count);
break;
case 3:Update(count);
break;
case 4:Delete(&count);
break;
case 5:Show(count);
break;
case 6:Exit( );
break;
default:printf("錯誤選擇!請重選");
}
}while (i!=6);// (i!=8)
return 0;
}
void Insert(int * count)
{
int i,in_num;
if(* count==MaxSize)
{printf("空間已滿!");return ;}
printf("請輸入編號:");
scanf("%d",&in_num);
for(i=0;i<* count;i++)
if(guest[i].num==in_num)
{printf("已有相同編號,請重新操作。\n");return ; }
guest[i].num=in_num;
printf("請輸入姓名:");
scanf("%s",guest[i].name);
printf("請輸入用餐人數:");
scanf("%d",&guest[i].sum);
printf("請輸入用餐時間:");
scanf("%s",guest[i].time);
(* count)++;
}
void Search(int count)
{
int i,num,flag=1;
printf("請輸入要查詢的編號:");
scanf("%d",&num);
for(i=0;i<count&&flag;i++)
if(guest[i].num==num)
{
printf("\n姓名:%s\n",guest[i].name);
printf("用餐人數:%d\n",guest[i].sum);
printf("用餐時間:%s\n",guest[i].time);
flag=0;
}
//else
if(flag) printf("\n沒有查詢到相關資訊\n");
}
void Update(int count)
{
int i,num,flag=1;
printf("請輸入要修改的編號:");//printf("請輸入要修改的姓名的編號:");
scanf("%d",&num);
for(i=0;i<count&&flag;i++)
if(guest[i].num==num)
{
printf("請輸入人數:");
scanf("%d",&guest[i].sum);
printf("請輸入用餐時間:");
scanf("%s",guest[i].time);
flag=0;
}
//else
if(flag) printf("\n沒有查詢到可以修改的資料!\n");
}
void Delete(int * count)
{
int i,j,num,flag=1;
printf("請輸入要洗掉的編號:");//printf("請輸入要洗掉的姓名的編號:");
scanf("%d",&num);
for(i=0;i<* count&&flag;i++)
//{
if(guest[i].num==num)
{
for(j=i;j<* count-1;j++)
guest[j]=guest[j+1];
flag=0;
(* count)--;
}
//else
if(flag) printf("\n沒有查詢到可以洗掉的資料!\n");
//}
}
void Show(int count)
{
int i;
printf("\n");
printf("編號 姓名 人數 用餐時間\n");
for(i=0;i<count;i++)
{
printf("%4d",guest[i].num);
printf("%8s",guest[i].name);
printf("%9d",guest[i].sum);
printf("%12s\n",guest[i].time);
}
}
void Exit(void)
{
printf("已退出,歡迎下次使用。\n");
}
uj5u.com熱心網友回復:
邏輯有點小問題。比如說,當你在查詢一個編號時,如果這個編號是后面插入的,那么它和前面插入的不相等,就會輸出錯誤提示;但是隨著回圈進行下去,找到了相等的編號時,函式功能又能夠正常執行。所以說,判斷一個編號是否存在,是需要將已有的編號全部遍歷完之后才能得出的結論,而不是每個編號都進行錯誤提示。
uj5u.com熱心網友回復:
void Update(int count){int i,num,flag=1;
printf("請輸入要修改的姓名的編號:");
scanf("%d",&num);
for(i=0;i<count&&flag;i++)
if(guest[i].num==num)
{
printf("請輸入人數:");
scanf("%d",&guest[i].sum);
printf("請輸入用餐時間:");
scanf("%s",guest[i].time);
flag=0;
}
else
printf("\n沒有查詢到可以修改的資料!\n");
}
把else陳述句從for回圈里洗掉。因為每回圈一次只要沒找到,就會else一次
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244459.html
標籤:C語言
上一篇:個人財務系統管理
下一篇:小白請教大佬們
