Enter operation code: i Enter part number: 833 Enter part name: Disk Drive Enter quantity on hand: 90 Enter operation code: i Enter part number: 788 Enter part name: USB 3.0 Enter quantity on hand: 67 Enter operation code: s Enter part number: 832 Part not found. Enter operation code: 833 Illegal code. Enter operation code: s Enter part number: 833 Part name: Disk Drive Quantity on hand: 90 Enter operation code: u Enter part number: 788 Enter change in quantity on hand(- means minus): 3 Enter operation code: p Part Number Part Name Quantity on Hand 833 Disk Drive 90 788 USB 3.0 70 Enter operation code: q
注意:菜单可以没有
因为 readline 函数和这个程序的主干没有太大关系,我们用单独的头文件和源文件包含它。
readline.h
#ifndef READLINE_H #define READLINE_H
/*********************************************************** * * read_line: Skips leading white-space characters, then * reads the remainder of the input line and * stores it in str. Truncates the line if its * length exceeds n. Return the number of * characters stores. * ***********************************************************/
/********************************************************** * * find_part: Looks up a part number in the inventory * array.Returns the array index if the part * number is found;otherwise,return -1 * ***********************************************************/ intfind_part(int number) {
int i;
for (i = 0; i < num_parts; i++) { if (inventory[i].number == number) return i; }
return-1; }
/********************************************************** * * insert: Inserts the part into the database.Prints * an error message and returns prematurely * if the part already exists or the database * is full. * ***********************************************************/ voidinsert() { int part_number;
if (num_parts == MAX_PARTS) { printf("Database is full; can't add more parts.\n"); return; }
printf("Enter part number: "); scanf("%d", &part_number);
if (find_part(part_number) >= 0) { printf("Part already exists.\n"); return; }
inventory[num_parts].number = part_number; printf("Enter part name: "); read_line(inventory[num_parts].name, NAME_LEN); printf("Enter quantity on hand: "); scanf("%d", &inventory[num_parts].on_hand); num_parts++; }
/************************************************************ * * search: Look up a part by the number user enters. * If the part exists, prints the name and quantity * on hand;if not, print an error message. * ************************************************************/ voidsearch() { int index, number;
printf("Enter part number: "); scanf("%d", &number);
index = find_part(number);
if (index == -1) { printf("Part not found.\n"); return; } printf("Part name: %s\n", inventory[index].name); printf("Quantity on hand: %d\n", inventory[index].on_hand); }
/************************************************************ * * update: Prompts user to enter a number. * Print an error message if the part doesn't exist; * otherwise,prompts the user to enter change in * quantity on hand and updates the database. * ************************************************************/
voidupdate() { int number, index, change;
printf("Enter part number: "); scanf("%d", &number);
index = find_part(number);
if (index == -1) { printf("Part not found.\n"); return; }
printf("Enter change in quantity on hand(- means minus): "); scanf("%d", &change); inventory[index].on_hand += change;
}
/************************************************************ * * print: Print a listing of all parts in the database, * showing the part number,part name and quantity * on hand.Parts are printed in the order in which * they were entered into the database. * ************************************************************/
voidprint() { int i;
printf("Part Number Part Name Quantity on Hand\n"); for (i = 0; i < num_parts; i++) { printf("%6d%20s%15d\n", inventory[i].number, inventory[i].name, inventory[i].on_hand); } }