這是題目:某公司有m個銷售員(代號、名稱等),負責銷售n種產品(代號、名稱、單價、數量等),每個銷售員下班前會將當天銷售的每種產品寫一張便條交上來,便條內容包括:銷售員代號、產品代號、產品的銷售數量。
功能要求:
(1)錄入:可以錄入銷售員、產品、和便條資訊
(2)查詢、修改與洗掉:可以查詢(修改與洗掉)銷售員、產品、便條資訊
(3)統計:每個銷售員每天、每月的銷售額;統計每個產品每天、每月的銷售額;
(4)排序:按日、月銷售額對銷售員、產品進行排序
(5)資料結構:結構體陣列和檔案
為什么我錄入了銷售員的資訊,再錄入產品資訊的話,退回選單查看銷售員資訊會多出產品的錯誤資訊。不懂,求指教

以下為源代碼
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _Salesman
{
int no; //銷售員代號
char name[20]; //銷售員名稱
}Salesman;
typedef struct _Commdity
{
int num; //產品代號
char _name[20]; //產品名稱
int price; //產品單價
int quantity; //產品數量
}Commdity;
typedef struct _Note
{
int _no; //銷售員代號
int _num; //產品代號
int _quantity; //產品銷售量
}Note;
//定義一個節點
typedef struct _Node
{
Salesman salesman;
Commdity commdity;
Note note;
struct _Node* Next;
}Node;
Node* Head=NULL; //頭結點
void menu(); //選單函式
void in(); //錄入資訊函式
void found(); //資訊查詢函式
int main() //主函式
{
system("color 5f");
int z;
while(1)
{
menu();
scanf("%d",&z);
switch(z)
{
case 1:
in(); //資訊錄入
break;
case 2:
found(); // 資訊查詢
break;
}
}
return 0;
}
void in() //資訊錄入
{
int z;
Node* newNode =(Node*)malloc(sizeof(Node)); //創建一個新節點
newNode->Next=NULL;
if(Head==NULL)
{
Head=newNode;
}
else
{
newNode->Next=Head;
Head=newNode;
}
printf("請選擇你需要錄入的選項:1.銷售員2.產品3.便條\n");
scanf("%d",&z);
printf("請錄入資訊\n");
switch(z)
{
case 1:
printf("銷售員代號:\n");
scanf("%d",&newNode->salesman.no);
printf("銷售員名稱:\n");
scanf("%s",&newNode->salesman.name);
break;
case 2:
printf("產品代號:\n");
scanf("%d",&newNode->commdity.num);
printf("產品名稱:\n");
scanf("%s",&newNode->commdity._name);
printf("產品單價:\n");
scanf("%d",&newNode->commdity.price);
printf("產品數量:\n");
scanf("%d",&newNode->commdity.quantity);
break;
case 3:
printf("銷售員代號:\n");
scanf("%d",&newNode->note._no);
printf("產品代號:\n");
scanf("%d",&newNode->note._num);
printf("產品銷售量:\n");
scanf("%d",&newNode->note._quantity);
break;
}
printf("資訊錄入成功!\n");
system("pause"); //防止閃屏
system("cls"); //清屏
}
void found() //資訊查詢函式
{
system("cls");
int m;
Node* p=Head;
//遍歷鏈表
printf("請選擇你需要查詢的資訊:1.銷售員2.產品3.便條\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf(" 銷售員資訊 \n");
printf("=========================================\n");
printf("銷售員代號\t銷售員名稱\n");
while(p!=NULL)
{
printf("%d %s\n",p->salesman.no,p->salesman.name);
p=p->Next;
}
break;
case 2:
printf(" 產品資訊 \n");
printf("=========================================\n");
printf("產品代號\t產品名稱\t產品單價\t產品數量\n");
while(p!=NULL)
{
printf("%d %s %d %d\n",p->commdity.num,p->commdity._name,p->commdity.price,p->commdity.quantity);
p=p->Next;
}
break;
case 3:
printf(" 便條資訊 \n");
printf("=========================================\n");
printf("銷售員代號\t產品代號\t產品銷售數量\n");
while(p!=NULL)
{
printf("%d %d %d\n",p->note._no,p->note._num,p->note._quantity);
p=p->Next;
}
break;
system("pause");
}
}
uj5u.com熱心網友回復:
樓主的結構體設計有問題,同一個節點,同時輸入三種資料是可以的,但代碼里分三次進入就不對了,因為每次進入都是新申請的節點空間,并不在第一次輸入的空間里。uj5u.com熱心網友回復:
那我要怎么設計呀?不太懂轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269150.html
標籤:其它技術問題
下一篇:【c++類方面的基礎問題】
