用C语言超市信息管理系统 功能要求: 1.每一条记录包括一个商品的编号,名称,价格,条形码,进货日期。库存,销售数量。 2.输入功能:可以一次完成若干条记录的输入。 3.显示功能:完成全部记录的显示。 4.查找功能:用折半查找完成按商品编号查找记录并显示。 5.排序功能:用希尔排序按销售数量从高到低或者按照商品编号进行排序。 6. 插入功能:按编号插入一条记录。 7.将记录保存在文件中。 8. 应提供一个菜单来调用各个功能,调用菜单的界面应尽可能清晰美观。 9.删除功能 10.修改功能 11.代码要有亮点,并且将代码展示出来
时间: 2024-01-21 08:16:45 浏览: 17
以下是一个基于C语言的超市信息管理系统的实现,具有上述功能要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct product {
int id;
char name[50];
float price;
char barcode[20];
char purchase_date[20];
int stock;
int sold_count;
};
// Function prototypes
void display_menu();
void add_product(struct product *products, int *count);
void display_products(struct product *products, int count);
void search_product(struct product *products, int count);
void sort_products_by_sold_count(struct product *products, int count);
void sort_products_by_id(struct product *products, int count);
void insert_product(struct product *products, int *count);
void delete_product(struct product *products, int *count);
void modify_product(struct product *products, int count);
void save_to_file(struct product *products, int count);
void load_from_file(struct product *products, int *count);
int main() {
struct product products[100];
int count = 0;
int choice;
load_from_file(products, &count);
do {
display_menu();
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_product(products, &count);
break;
case 2:
display_products(products, count);
break;
case 3:
search_product(products, count);
break;
case 4:
sort_products_by_sold_count(products, count);
break;
case 5:
sort_products_by_id(products, count);
break;
case 6:
insert_product(products, &count);
break;
case 7:
delete_product(products, &count);
break;
case 8:
modify_product(products, count);
break;
case 9:
save_to_file(products, count);
printf("Products saved to file!\n");
break;
case 10:
load_from_file(products, &count);
printf("Products loaded from file!\n");
break;
case 11:
printf("Exiting program...\n");
break;
default:
printf("Invalid choice. Please try again.\n");
}
} while (choice != 11);
return 0;
}
void display_menu() {
printf("\n-- Supermarket Information Management System --\n");
printf("1. Add product\n");
printf("2. Display all products\n");
printf("3. Search product by ID\n");
printf("4. Sort products by sold count\n");
printf("5. Sort products by ID\n");
printf("6. Insert product\n");
printf("7. Delete product\n");
printf("8. Modify product\n");
printf("9. Save products to file\n");
printf("10. Load products from file\n");
printf("11. Exit\n");
}
void add_product(struct product *products, int *count) {
printf("\nEnter product details:\n");
printf("ID: ");
scanf("%d", &products[*count].id);
printf("Name: ");
scanf("%s", products[*count].name);
printf("Price: ");
scanf("%f", &products[*count].price);
printf("Barcode: ");
scanf("%s", products[*count].barcode);
printf("Purchase date: ");
scanf("%s", products[*count].purchase_date);
printf("Stock: ");
scanf("%d", &products[*count].stock);
printf("Sold count: ");
scanf("%d", &products[*count].sold_count);
(*count)++;
}
void display_products(struct product *products, int count) {
if (count == 0) {
printf("\nNo products found.\n");
return;
}
printf("\n%-5s %-20s %-10s %-20s %-20s %-8s %-10s\n", "ID", "Name", "Price", "Barcode", "Purchase date", "Stock", "Sold");
for (int i = 0; i < count; i++) {
printf("%-5d %-20s %-10.2f %-20s %-20s %-8d %-10d\n", products[i].id, products[i].name, products[i].price, products[i].barcode, products[i].purchase_date, products[i].stock, products[i].sold_count);
}
}
void search_product(struct product *products, int count) {
if (count == 0) {
printf("\nNo products found.\n");
return;
}
int id;
printf("\nEnter product ID to search for: ");
scanf("%d", &id);
int left = 0;
int right = count - 1;
int found = 0;
while (left <= right) {
int mid = (left + right) / 2;
if (products[mid].id == id) {
printf("\n%-5s %-20s %-10s %-20s %-20s %-8s %-10s\n", "ID", "Name", "Price", "Barcode", "Purchase date", "Stock", "Sold");
printf("%-5d %-20s %-10.2f %-20s %-20s %-8d %-10d\n", products[mid].id, products[mid].name, products[mid].price, products[mid].barcode, products[mid].purchase_date, products[mid].stock, products[mid].sold_count);
found = 1;
break;
} else if (products[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (!found) {
printf("\nProduct not found.\n");
}
}
void sort_products_by_sold_count(struct product *products, int count) {
for (int gap = count / 2; gap > 0; gap /= 2) {
for (int i = gap; i < count; i++) {
struct product temp = products[i];
int j;
for (j = i; j >= gap && products[j - gap].sold_count < temp.sold_count; j -= gap) {
products[j] = products[j - gap];
}
products[j] = temp;
}
}
printf("\nProducts sorted by sold count (descending order):\n");
display_products(products, count);
}
void sort_products_by_id(struct product *products, int count) {
for (int gap = count / 2; gap > 0; gap /= 2) {
for (int i = gap; i < count; i++) {
struct product temp = products[i];
int j;
for (j = i; j >= gap && products[j - gap].id > temp.id; j -= gap) {
products[j] = products[j - gap];
}
products[j] = temp;
}
}
printf("\nProducts sorted by ID:\n");
display_products(products, count);
}
void insert_product(struct product *products, int *count) {
int id;
printf("\nEnter product ID to insert: ");
scanf("%d", &id);
// Shift elements to make room for insertion
int i;
for (i = *count - 1; i >= 0 && products[i].id > id; i--) {
products[i + 1] = products[i];
}
// Insert new element
printf("Enter product details:\n");
printf("Name: ");
scanf("%s", products[i + 1].name);
printf("Price: ");
scanf("%f", &products[i + 1].price);
printf("Barcode: ");
scanf("%s", products[i + 1].barcode);
printf("Purchase date: ");
scanf("%s", products[i + 1].purchase_date);
printf("Stock: ");
scanf("%d", &products[i + 1].stock);
printf("Sold count: ");
scanf("%d", &products[i + 1].sold_count);
products[i + 1].id = id;
(*count)++;
}
void delete_product(struct product *products, int *count) {
if (*count == 0) {
printf("\nNo products found.\n");
return;
}
int id;
printf("\nEnter product ID to delete: ");
scanf("%d", &id);
int i;
for (i = 0; i < *count; i++) {
if (products[i].id == id) {
// Shift elements after deletion point
for (int j = i; j < *count - 1; j++) {
products[j] = products[j + 1];
}
(*count)--;
printf("\nProduct with ID %d deleted.\n", id);
return;
}
}
printf("\nProduct not found.\n");
}
void modify_product(struct product *products, int count) {
if (count == 0) {
printf("\nNo products found.\n");
return;
}
int id;
printf("\nEnter product ID to modify: ");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (products[i].id == id) {
printf("\nEnter new product details:\n");
printf("Name: ");
scanf("%s", products[i].name);
printf("Price: ");
scanf("%f", &products[i].price);
printf("Barcode: ");
scanf("%s", products[i].barcode);
printf("Purchase date: ");
scanf("%s", products[i].purchase_date);
printf("Stock: ");
scanf("%d", &products[i].stock);
printf("Sold count: ");
scanf("%d", &products[i].sold_count);
printf("\nProduct with ID %d modified.\n", id);
return;
}
}
printf("\nProduct not found.\n");
}
void save_to_file(struct product *products, int count) {
FILE *fp = fopen("products.dat", "wb");
fwrite(&count, sizeof(int), 1, fp);
fwrite(products, sizeof(struct product), count, fp);
fclose(fp);
}
void load_from_file(struct product *products, int *count) {
FILE *fp = fopen("products.dat", "rb");
if (fp == NULL) {
printf("\nNo file found.\n");
return;
}
fread(count, sizeof(int), 1, fp);
fread(products, sizeof(struct product), *count, fp);
fclose(fp);
}
```
该程序使用了结构体来存储商品信息,并提供了各种功能来添加、显示、查找、排序、插入、删除和修改商品信息,以及将商品信息保存到文件中或从文件中加载商品信息。该程序还提供了一个清晰美观的菜单界面,让用户可以方便地使用各种功能。