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