结构数组的应用

编写一个用来维护仓库存储的零件的信息的数据库。程序围绕一个结构数组构建,且每个结构包括以下信息:零件的编号、名称及数量。程序支持下列操作。

1>添加新零件编号、名称和初始的现货数量。如果零件已经在数组库中,或者数组库已满,那么程序必须显示出错信息。

2>给定零件编号,显示出零件的名称和当前的现货数量。如果零件编号不在数组库中,那么程序必须显示出错误信息。

3>给定零件编号,改变现有的零件数量。如果零件编号不在数组库中,那么程序必须显示出错信息。

4>显示列出数组库中全部信息的表格。零件必须按照录入的顺序显示出来。

5>终止程序的执行。

使用i(插入)、u(更新)、p(显示)和q(退出)分别表示这些操作。

 

程序代码如下:

inventory.c

//输入3个字符串,按由小到大的顺序输出。
#include<string.h>
#include<stdio.h>
#include "readline.c"

#define NAME_LEN 25
#define MAX_PARTS 100

struct part
{
 int number;//零件编号
 char name[NAME_LEN+1];//零件名称
 int on_hand;//现有零件数量
}inventory[MAX_PARTS];//定义零件数组,数组元素为结构part

int num_part=0;//外部变量,零件的数量

int find_part(int number);//显示列出数组库中全部信息的表格
void insert(void);//添加新零件编号、名称和初始现货数量
void search(void);//给定零件编号,显示出零件的名称和当前的现货数量
void update(void);//给定零件编号,改变现有的零件数量
void print(void);//

int main(void)
{
 char code;
 for(;;)
 {
  printf("Enter operation code:");
  scanf("%c",&code);
  while(getchar()!='/n');//循环直到遇到换行才退出,就能把剩下的字符全部清空。
  switch(code)
  {
   case 'i':
    insert();
    break;
   case 's':
    search();
    break;
   case 'u':
    update();
    break;
   case 'p':
    print();
    break;
   case 'q':
    return 0;
   default:
    printf("Illegal code./n");
  }
 printf("/n");
 }
}

int find_part(int number)//查看数组库中是否存在该零件,如果存在,返回该零件在数组库中的编号
{
 int i;
 for(i=0;i<num_part;i++)
  if(inventory[i].number==number)
   return i;
 return -1;
}

void insert(void)
{
 int number;
 int on_hand;

 if(num_part>=MAX_PARTS)//数组库已满
 {
  printf("Database is full;Cannot add more part./n");
 }

 printf("Enter part number:");
 scanf("%d",&number);

 if(find_part(number)>0)//零件已在数组库中
 {
  printf("Part already exist./n");
 }
 inventory[num_part].number=number;//将待插入的零件名存储到输入库中,零件编号为num_part

 printf("Enter part name:");//将待插入零件的零件名存储到数组库中
 read_line(inventory[num_part].name,NAME_LEN);

 printf("Enter quantity on hand:");//将待插入零件的数量存储到数组库中
 scanf("%d",&on_hand);
 inventory[num_part].on_hand=on_hand;

 num_part++;//数组库中对应的零件记录数加1
}

void search(void)
{
 int number;
 int i;
 printf("Enter part number:");
 scanf("%d",&number);

 i=find_part(number);//得到零件在数组库中的编号

    if(i==-1)//零件不在数组库中
 {
  printf("Part not find./n");
 }
 else
 {
  printf("Part name:%s/n",inventory[i].name);
  printf("Quatity on hand:%d/n",inventory[i].on_hand);

 }
}

void update(void)
{
 int number,change;
 int i;
 printf("Enter part number:");
 scanf("%d",&number);

 i=find_part(number);//得到零件在数组库中的编号

    if(i==-1)//零件不在数组库中
 {
  printf("Part not find./n");
 }
 else
 {
  printf("Enter change in quantity on hand:");
  scanf("%d",&change);//改变现有的零件数量
  inventory[i].on_hand+=change;
 }
}

void print(void)
{
 int i;
 printf("Part number/tPart Name/tQuatity on hand/n");
 for(i=0;i<num_part;i++)
 {
  printf("/t%d/t%s/t%d/n",inventory[i].number,inventory[i].name,inventory[i].on_hand);
 }
 printf("/n");
}

readline.c

#include <stdlib.h>
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#include "readline.c"

int read_line(char str[],int n)//从显示器中读取信息到字符串
{
 char ch;
 int i=0;
 while(isspace(ch=getchar()));//略过字符串之前的空白字符

 ch=getchar();//获取一个字符串中的字符
 while(ch!='/n' && ch!=EOF)
 {
  if(i<n)
   str[i++]=ch;
  ch=getchar();
 }
 str[i]='/0';
 return i;
}

readline.h

#ifndef READLINE_H
#define READLINE_H
int read_line(char str[],int n);
#endif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值