题目描述
现有一个包含商品信息的文件”product.txt”,初始时文件为空。编程实现对所有商品如下信息的管理:商品编号(唯一)、商品名称、商品类型、单价、供应商名称、供应商联系电话等。要求提供菜单选择,实现商品信息的录入、查找、增加、修改、删除、排序、显示、读取、保存等功能。要求将商品信息存入文件”product.txt”。
文件”product.txt“内容如下
编号 名称 单价
01 牛奶 1.5
02 橙汁 5.8
03 酸奶 2.5
04 啤酒 5.5
05 矿泉水 2.5
11 牙膏 6.8
12 牙刷 4.6
13 洗发水 22.5
14 沐浴液 27
15 护发素 25.8
21 上衣 155
22 牛仔裤 215
23 帽子 55
24 袜子 12.3
25 睡衣 49.9
31 火腿 23
32 培根 21
33 酱肉 45
34 牛肉 65
35 羊肉 48
实现代码
以下是一个实现商品信息管理的 C 语言程序,使用 Visual Studio 2022 编译器编写,在 Windows 系统上运行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PRODUCTS 100 // 最大商品数量
// 商品信息结构体
typedef struct {
char id[3]; // 商品编号
char name[30]; // 商品名称
char type[20]; // 商品类型
float price; // 单价
char supplier_name[30]; // 供应商名称
char supplier_phone[12]; // 供应商联系电话
} Product;
// 商品信息数组
Product products[MAX_PRODUCTS];
int product_count = 0; // 当前商品数量
// 读取商品信息文件
void read_products_file() {
FILE* fp;
fp = fopen("product.txt", "r");
if (fp == NULL) {
printf("无法打开商品信息文件\n");
exit(1);
}
while (!feof(fp)) {
fscanf(fp, "%s %s %s %f %s %s",
products[product_count].id,
products[product_count].name,
products[product_count].type,
&products[product_count].price,
products[product_count].supplier_name,
products[product_count].supplier_phone);
product_count++;
}
fclose(fp);
}
// 保存商品信息到文件
void save_products_file() {
FILE* fp;
fp = fopen("product.txt", "w");
if (fp == NULL) {
printf("无法打开商品信息文件\n");
exit(1);
}
for (int i = 0; i < product_count; i++) {
fprintf(fp, "%s %s %s %.2f %s %s\n",
products[i].id,
products[i].name,
products[i].type,
products[i].price,
products[i].supplier_name,
products[i].supplier_phone);
}
fclose(fp);
}
// 按商品编号排序
void sort_products_by_id() {
for (int i = 0; i < product_count - 1; i++) {
for (int j = i + 1; j < product_count; j++) {
if (strcmp(products[i].id, products[j].id) > 0) {
Product temp = products[i];
products[i] = products[j];
products[j] = temp;
}
}
}
}
// 根据商品编号查找商品,返回商品在数组中的下标,未找到返回 -1
int find_product_by_id(char id[3]) {
for (int i = 0; i < product_count; i++) {
if (strcmp(products[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 添加商品
void add_product() {
if (product_count >= MAX_PRODUCTS) {
printf("商品数量已达上限,无法添加新商品\n");
return;
}
Product product;
printf("请输入商品信息:\n");
printf("编号(两位数字):");
scanf("%s", product.id);
printf("名称:");
scanf("%s", product.name);
printf("类型:");
scanf("%s", product.type);
printf("单价:");
scanf("%f", &product.price);
printf("供应商名称:");
scanf("%s", product.supplier_name);
printf("供应商联系电话:");
scanf("%s", product.supplier_phone);
if (find_product_by_id(product.id) >= 0) {
printf("编号为 %s 的商品已存在,无法添加相同编号的商品\n", product.id);
return;
}
products[product_count] = product;
product_count++;
printf("添加商品成功!\n");
}
// 修改商品
void modify_product() {
char id[3];
printf("请输入要修改的商品编号:");
scanf("%s", id);
int index = find_product_by_id(id);
if (index < 0) {
printf("未找到编号为 %s 的商品\n", id);
return;
}
Product product = products[index];
printf("请输入新的商品信息(不修改的项直接回车):\n");
printf("名称(%s):", product.name);
char name[30];
fgets(name, 30, stdin);
if (strlen(name) > 1) {
name[strlen(name) - 1] = '\0'; // 去掉输入的回车符
strcpy(product.name, name);
}
printf("类型(%s):", product.type);
char type[20];
fgets(type, 20, stdin);
if (strlen(type) > 1) {
type[strlen(type) - 1] = '\0';
strcpy(product.type, type);
}
printf("单价(%.2f):", product.price);
char price_str[10];
fgets(price_str, 10, stdin);
if (strlen(price_str) > 1) {
product.price = atof(price_str);
}
printf("供应商名称(%s):", product.supplier_name);
char supplier_name[30];
fgets(supplier_name, 30, stdin);
if (strlen(supplier_name) > 1) {
supplier_name[strlen(supplier_name) - 1] = '\0';
strcpy(product.supplier_name, supplier_name);
}
printf("供应商联系电话(%s):", product.supplier_phone);
char supplier_phone[12];
fgets(supplier_phone, 12, stdin);
if (strlen(supplier_phone) > 1) {
supplier_phone[strlen(supplier_phone) - 1] = '\0';
strcpy(product.supplier_phone, supplier_phone);
}
products[index] = product;
printf("修改商品成功!\n");
}
// 删除商品
void delete_product() {
char id[3];
printf("请输入要删除的商品编号:");
scanf("%s", id);
int index = find_product_by_id(id);
if (index < 0) {
printf("未找到编号为 %s 的商品\n", id);
return;
}
for (int i = index; i < product_count - 1; i++) {
products[i] = products[i + 1];
}
product_count--;
printf("删除商品成功!\n");
}
// 显示所有商品信息
void show_all_products() {
printf("商品编号\t商品名称\t商品类型\t单价\t供应商名称\t供应商联系电话\n");
for (int i = 0; i < product_count; i++) {
printf("%s\t\t%s\t\t%s\t\t%.2f\t%s\t\t%s\n",
products[i].id,
products[i].name,
products[i].type,
products[i].price,
products[i].supplier_name,
products[i].supplier_phone);
}
}
int main() {
read_products_file();
int choice;
do {
printf("\n商品信息管理系统\n");
printf("1. 添加商品\n");
printf("2. 修改商品\n");
printf("3. 删除商品\n");
printf("4. 查找商品\n");
printf("5. 按编号排序\n");
printf("6. 显示所有商品\n");
printf("7. 保存商品信息到文件\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_product();
break;
case 2:
modify_product();
break;
case 3:
delete_product();
break;
case 4: {
char id[3];
printf("请输入要查找的商品编号:");
scanf("%s", id);
int index = find_product_by_id(id);
if (index < 0) {
printf("未找到编号为 %s 的商品\n", id);
} else {
printf("商品编号\t商品名称\t商品类型\t单价\t供应商名称\t供应商联系电话\n");
printf("%s\t\t%s\t\t%s\t\t%.2f\t%s\t\t%s\n",
products[index].id,
products[index].name,
products[index].type,
products[index].price,
products[index].supplier_name,
products[index].supplier_phone);
}
break;
}
case 5:
sort_products_by_id();
printf("按编号排序完成!\n");
break;
case 6:
show_all_products();
break;
case 7:
save_products_file();
printf("保存商品信息到文件成功!\n");
break;
case 0:
break;
default:
printf("无效的操作\n");
}
} while (choice != 0);
return 0;
}
程序中使用了结构体来存储商品信息,实现了录入、查找、增加、修改、删除、排序、显示、读取和保存等功能。程序首先会读取商品信息文件,然后根据用户选择执行不同的操作。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END