这是我们的实验题 不会做啊 请各位高手帮个忙
实验要求:
1. 针对所要求实现的题目进行分析和设计,实现程序的编制;杜绝拷贝、粘贴其他同学程序的现象;
2. 根据自己实验的完成情况,认真撰写实验报告,要求手写完成;坚决杜绝实验报告的抄袭现象;
3. 在实验报告中,对实现过程的关键程序代码要进行注释和说明;
4. 实验报告要求使用统一的实验报告用纸,实验报告的格式如下。其中
实验日期:2007.10.17
提交实验报告日期:2007.11.9
实验报告格式:
一、实验项目名称:线性表的应用—商品信息管理
二、实验项目目的:
完成程序的编写、调试,实现超市商品信息管理中的录入、输出、插入、删除、查找及销售等功能。掌握以一维数组、链表实现线性表的方法,掌握文件指针的使用。具体要求如下:
1、 各功能均用独立的模块实现;
2、 具有菜单选择功能;
3、 可在运行该程序过程中多次选择执行不同的功能。
4、 实验分为三部分,即以一维数组实现商品信息线性表、以链表实现商品信息表、用文件存储商品信息等。
第一部分以一维数组实现商品信息表:
提示:商品信息存放在一个线性表中,线性表使用一个一维数组构成,数组元素的结构类型定义如下:
struct good_stype
{
long int num;
char name[20];
int price;
int stock;
};
第二部分以链表实现商品信息表:
链表节点的数据结构定义如下:
typedef struct goodstype
{
long int num;
char name[20];
float price;
int stock;
}GOODS;
typedef struct nodetype
{
GOODS data;
struct nodetype* next;
}NODE;
三、实验过程:
第一部分:
所实现的程序流程图如下:
所实现的程序代码如下:
第二部分:
第三部分:
四、实验结果:
对于程序实现的功能分别进行实验,实验结果如下:
第一部分:
第二部分:
第三部分:
五、实验心得与体会:
(包括:程序整体的分析、针对某个比较复杂模块的分析、编程经验等)
本次实验所给定的参考代码如下:
第一部分:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXLEN 100
typedef struct goodstype
{
long int num;
char name[20];
float price;
int stock;
}GOODS;
int menu()
{
int ch;
printf("*****************************\n");
printf("* 1------------input *\n");
printf("* 2------------output *\n");
printf("* 3------------insert *\n");
printf("* 4------------delete *\n");
printf("* 5------------search *\n");
printf("* 6------------sale *\n");
printf("* 0------------exit *\n");
printf("*****************************\n");
printf("please input your choice:(0-5)\n");
scanf("%d",&ch);
return(ch);
}
int input(GOODS g[])
{
long tnum;
int i=0,n=0;
printf("please input good information(end:num=-1)\n");
printf("input num:");
scanf("%ld",&tnum);
while (tnum!=-1)
{
n++;
g[i].num=tnum;
printf("input name:");
scanf("%s",g[i].name);
printf("input price:");
scanf("%f",&g[i].price);
printf("input stock:");
scanf("%d",&g[i].stock);
i++;
printf("input num:");
scanf("%ld",&tnum);
}
return n;
}
void output(GOODS g[],int n)
{
int i;
printf(" num name price stock\n");
for(i=0;i<=n-1;i++)
printf("%6ld%16s%10.2f%6d\n",g[i].num,g[i].name,g[i].price,g[i].stock);
}
void insert(GOODS g[],int *n,int i,GOODS x)
{
int j;
if(*n==MAXLEN-1)
printf("list is full!");
else
if(i<0||i>*n)
printf("invalid insert position!\n");
else
{
for(j=*n-1;j>=i;j--)
g[j+1]=g[j];
g[i]=x;
(*n)++;
}
}
void dele(GOODS g[],int *n,int i)
{
int j;
if(*n==0)
printf("list is empty!");
else
if(i<0||i>*n-1)
printf("invalid delete position!\n");
else
{
for(j=i+1;j<=*n-1;j++)
g[j-1]=g[j];
(*n)--;
}
}
int search(GOODS g[],int n,long int tnum)
{
int i=n-1;
while(i>=0&&g[i].num!=tnum)
i--;
return(i);
}
void sale(GOODS g[],int n)
{
GOODS a[100];
int i,j=0,k,count;
long tnum;
float money=0.0;
printf("input sale goods num: (end of -1)");
scanf("%ld",&tnum);
while(tnum!=-1)
{
k=search(g,n,tnum);
if(k==-1)
printf("this goods not exist!\n");
else
{
printf("input sale goods count:");
scanf("%d",&count);
if(g[k].stock<count)
printf("not enough goods!\n");
else
{
money=money+g[k].price*count;
g[k].stock=g[k].stock-count;
j++;
a[j].num=g[k].num;
strcpy(a[j].name,g[k].name);
a[j].price=g[k].price;
a[j].stock=count;
}
}
printf("input sale goods num:end of -1");
scanf("%ld",&tnum);
}
printf("**********超市购物小票**********\n");
printf(" num name price count \n");
for(i=1;i<=j;i++)
printf("%6ld%16s%10.2f%6d\n",a[i].num,a[i].name,a[i].price,a[i].stock);
printf("total money:%10.2f yuan.\n",money);
}
void main()
{
GOODS g[MAXLEN],x;
int k,*len,sel;
long search_num;
len=(int*)malloc(sizeof(int));
sel=menu();
while(sel!=0)
{
switch (sel)
{
case 1: /*录入模块*/
*len=input(g);
break;
case 2: /*输出模块*/
output(g,*len);
break;
case 3: /*插入模块*/
printf("input insert position:");
scanf("%d",&k);
printf("input insert element:");
scanf("%ld %s %f %d",&x.num,x.name,&x.price,&x.stock);
insert(g,len,k,x);
output(g,*len);
break;
case 4: /*删除模块*/
printf("input delete position:");
scanf("%d",&k);
dele(g,len,k);
output(g,*len);
break;
case 5: /*查找模块*/
printf("input the num of search goods:");
scanf("%ld",&search_num);
k=search(g,*len,search_num);
if(k==-1)
printf("not find!\n");
else
printf(" num name price stock\n");
printf("%6ld%16s%10.2f%6d\n",g[k].num,g[k].name,g[k].price,g[k].stock);
break;
case 6: /*打印购物小票模块*/
sale(g,*len);
break;
case 0:
exit(0);
} /*switch*/
sel=menu();
} /*while*/
}
第二部分:
第三部分: