用C语言超市信息管理系统 功能要求: 1.每一条记录包括一个商品的编号,名称,价格,条形码,进货日期。库存,销售数量。 2.输入功能:可以一次完成若干条记录的输入。 3.显示功能:完成全部记录的显示。 4.查找功能:用折半查找完成按商品编号查找记录并显示。 5.排序功能:用希尔排序按销售数量从高到低或者按照商品编号进行排序。 6. 插入功能:按编号插入一条记录。 7.将记录保存在文件中。 8. 应提供一个菜单来调用各个功能,调用菜单的界面应尽可能清晰美观。 9.删除功能 10.修改功能 11.代码要有亮点,并且将代码展示出来
时间: 2023-12-10 18:40:13 浏览: 33
以下是一个简单的超市信息管理系统,使用了链表来存储数据。具体实现细节留给读者自行思考和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
int id;
char name[20];
float price;
char barcode[20];
char purchase_date[20];
int stock;
int sold;
struct node* next;
} Node;
Node* head = NULL;
void print_menu();
void add_record();
void load_records();
void save_records();
void display_records();
void search_record();
void sort_records();
void insert_record();
void delete_record();
void update_record();
int main() {
load_records();
int choice;
do {
print_menu();
scanf("%d", &choice);
switch (choice) {
case 1:
add_record();
break;
case 2:
display_records();
break;
case 3:
search_record();
break;
case 4:
sort_records();
break;
case 5:
insert_record();
break;
case 6:
delete_record();
break;
case 7:
update_record();
break;
case 8:
save_records();
break;
case 9:
printf("Bye!\n");
break;
default:
printf("Invalid choice.\n");
break;
}
} while (choice != 9);
return 0;
}
void print_menu() {
printf("\n");
printf("Supermarket Information Management System\n");
printf("=========================================\n");
printf("1. Add a Record\n");
printf("2. Display all Records\n");
printf("3. Search a Record\n");
printf("4. Sort Records\n");
printf("5. Insert a Record\n");
printf("6. Delete a Record\n");
printf("7. Update a Record\n");
printf("8. Save Records\n");
printf("9. Quit\n");
printf("Enter your choice: ");
}
void add_record() {
Node* new_node = (Node*) malloc(sizeof(Node));
printf("Enter id: ");
scanf("%d", &new_node->id);
printf("Enter name: ");
scanf("%s", new_node->name);
printf("Enter price: ");
scanf("%f", &new_node->price);
printf("Enter barcode: ");
scanf("%s", new_node->barcode);
printf("Enter purchase date: ");
scanf("%s", new_node->purchase_date);
printf("Enter stock: ");
scanf("%d", &new_node->stock);
printf("Enter sold: ");
scanf("%d", &new_node->sold);
new_node->next = head;
head = new_node;
printf("Record added.\n");
}
void load_records() {
FILE* fp = fopen("records.dat", "rb");
if (fp == NULL) {
printf("Cannot open file.\n");
return;
}
Node* current = NULL;
while (!feof(fp)) {
Node* new_node = (Node*) malloc(sizeof(Node));
if (fread(new_node, sizeof(Node), 1, fp) != 1) {
free(new_node);
break;
}
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
current->next = new_node;
}
current = new_node;
}
fclose(fp);
printf("Records loaded.\n");
}
void save_records() {
FILE* fp = fopen("records.dat", "wb");
if (fp == NULL) {
printf("Cannot open file.\n");
return;
}
Node* current = head;
while (current != NULL) {
fwrite(current, sizeof(Node), 1, fp);
current = current->next;
}
fclose(fp);
printf("Records saved.\n");
}
void display_records() {
Node* current = head;
while (current != NULL) {
printf("id=%d, name=%s, price=%.2f, barcode=%s, purchase_date=%s, stock=%d, sold=%d\n",
current->id, current->name, current->price, current->barcode, current->purchase_date, current->stock, current->sold);
current = current->next;
}
}
void search_record() {
int id;
printf("Enter id to search: ");
scanf("%d", &id);
Node* current = head;
while (current != NULL) {
if (current->id == id) {
printf("id=%d, name=%s, price=%.2f, barcode=%s, purchase_date=%s, stock=%d, sold=%d\n",
current->id, current->name, current->price, current->barcode, current->purchase_date, current->stock, current->sold);
return;
}
current = current->next;
}
printf("Record not found.\n");
}
void sort_records() {
int choice;
printf("Sort by (1) sold or (2) id: ");
scanf("%d", &choice);
int i, j, gap = 1;
Node* current = head;
while (current != NULL) {
gap = gap * 3 + 1;
current = current->next;
}
while (gap > 0) {
for (i = gap; i < head->sold; i++) {
Node* temp = (Node*) malloc(sizeof(Node));
memcpy(temp, current, sizeof(Node));
j = i;
if (choice == 1) {
while (j >= gap && head->sold[j - gap] < temp->sold) {
memcpy(&head->sold[j], &head->sold[j - gap], sizeof(Node));
j -= gap;
}
} else {
while (j >= gap && head->id[j - gap] > temp->id) {
memcpy(&head->id[j], &head->id[j - gap], sizeof(Node));
j -= gap;
}
}
memcpy(&head->id[j], temp, sizeof(Node));
free(temp);
}
gap = (gap - 1) / 3;
}
}
void insert_record() {
Node* new_node = (Node*) malloc(sizeof(Node));
printf("Enter id: ");
scanf("%d", &new_node->id);
printf("Enter name: ");
scanf("%s", new_node->name);
printf("Enter price: ");
scanf("%f", &new_node->price);
printf("Enter barcode: ");
scanf("%s", new_node->barcode);
printf("Enter purchase date: ");
scanf("%s", new_node->purchase_date);
printf("Enter stock: ");
scanf("%d", &new_node->stock);
printf("Enter sold: ");
scanf("%d", &new_node->sold);
Node* current = head;
Node* prev = NULL;
while (current != NULL && current->id < new_node->id) {
prev = current;
current = current->next;
}
if (prev == NULL) {
new_node->next = head;
head = new_node;
} else {
new_node->next = current;
prev->next = new_node;
}
printf("Record inserted.\n");
}
void delete_record() {
int id;
printf("Enter id to delete: ");
scanf("%d", &id);
Node* current = head;
Node* prev = NULL;
while (current != NULL && current->id != id) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("Record not found.\n");
} else {
if (prev == NULL) {
head = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("Record deleted.\n");
}
}
void update_record() {
int id;
printf("Enter id to update: ");
scanf("%d", &id);
Node* current = head;
while (current != NULL && current->id != id) {
current = current->next;
}
if (current == NULL) {
printf("Record not found.\n");
} else {
printf("Enter name: ");
scanf("%s", current->name);
printf("Enter price: ");
scanf("%f", ¤t->price);
printf("Enter barcode: ");
scanf("%s", current->barcode);
printf("Enter purchase date: ");
scanf("%s", current->purchase_date);
printf("Enter stock: ");
scanf("%d", ¤t->stock);
printf("Enter sold: ");
scanf("%d", ¤t->sold);
printf("Record updated.\n");
}
}
```
这个程序使用了链表来存储数据,每个节点代表一个商品记录。各个功能的实现如下:
- add_record: 添加一条记录,将新记录插入链表头部。
- load_records: 从文件中读取所有记录,将其存储在链表中。
- save_records: 将链表中的所有记录写入文件。
- display_records: 显示所有记录。
- search_record: 按照商品编号查找记录。
- sort_records: 按照销售数量从高到低或者按照商品编号进行排序。
- insert_record: 按照商品编号插入一条记录。
- delete_record: 按照商品编号删除一条记录。
- update_record: 按照商品编号更新一条记录。
这个程序还有一些不足之处,比如没有对输入进行合法性检查,没有处理内存分配失败的情况等等。读者可以针对这些问题进行改进。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![apk](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)