用C语言编写超市信息管理系统 功能要求: 1.每一条记录包括一个商品的编号,名称,价格,条形码,进货日期,库存,销售数量。 2.输入功能:可以一次完成若干条记录的输入。 3.显示功能:完成全部记录的显示。 4.查找功能:用折半查找完成按商品编号查找记录并显示。 5.排序功能:用希尔排序按销售数量从高到低或者按照商品编号进行排序。 6. 插入功能:按编号插入一条记录。 7.将记录保存在文件中。 8. 应提供一个菜单来调用各个功能,调用菜单的界面应尽可能清晰美观。 9.删除功能 10.修改功能 11.进入系统需要输入密码123456,删除和修改时要求输入密码 12.代码要有亮点,并且将亮点展示出来
时间: 2023-11-27 13:49:41 浏览: 36
以下是用C语言编写的超市信息管理系统,其中包含以上所有的功能要求:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORDS 1000 // 最大记录数
#define PASSWORD "123456" // 管理员密码
// 商品信息结构体
typedef struct {
int id; // 商品编号
char name[50]; // 商品名称
float price; // 商品价格
char barcode[20]; // 商品条形码
char purchase_date[20]; // 进货日期
int inventory; // 库存数量
int sales; // 销售数量
} Product;
Product records[MAX_RECORDS]; // 存储所有记录
int num_records = 0; // 记录数量
// 添加一条记录
void add_record() {
printf("请输入商品编号:");
scanf("%d", &records[num_records].id);
printf("请输入商品名称:");
scanf("%s", records[num_records].name);
printf("请输入商品价格:");
scanf("%f", &records[num_records].price);
printf("请输入商品条形码:");
scanf("%s", records[num_records].barcode);
printf("请输入进货日期:");
scanf("%s", records[num_records].purchase_date);
printf("请输入库存数量:");
scanf("%d", &records[num_records].inventory);
printf("请输入销售数量:");
scanf("%d", &records[num_records].sales);
num_records++;
printf("添加成功!\n");
}
// 显示所有记录
void display_records() {
printf("编号\t名称\t价格\t条形码\t进货日期\t库存\t销售量\n");
for (int i = 0; i < num_records; i++) {
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n", records[i].id, records[i].name, records[i].price, records[i].barcode, records[i].purchase_date, records[i].inventory, records[i].sales);
}
}
// 折半查找记录
void binary_search() {
int id, left = 0, right = num_records - 1, mid;
printf("请输入要查找的商品编号:");
scanf("%d", &id);
while (left <= right) {
mid = (left + right) / 2;
if (records[mid].id == id) {
printf("编号\t名称\t价格\t条形码\t进货日期\t库存\t销售量\n");
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n", records[mid].id, records[mid].name, records[mid].price, records[mid].barcode, records[mid].purchase_date, records[mid].inventory, records[mid].sales);
return;
} else if (records[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("该商品不存在!\n");
}
// 希尔排序
void shell_sort(int mode) {
int gap = num_records / 2;
while (gap > 0) {
for (int i = gap; i < num_records; i++) {
Product temp = records[i];
int j = i - gap;
if (mode == 1) { // 按销售数量从高到低排序
while (j >= 0 && records[j].sales < temp.sales) {
records[j + gap] = records[j];
j -= gap;
}
} else { // 按商品编号排序
while (j >= 0 && records[j].id > temp.id) {
records[j + gap] = records[j];
j -= gap;
}
}
records[j + gap] = temp;
}
gap /= 2;
}
printf("排序成功!\n");
}
// 插入一条记录
void insert_record() {
int id, index = -1;
printf("请输入要插入的商品编号:");
scanf("%d", &id);
for (int i = 0; i < num_records; i++) {
if (records[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("该商品不存在,无法插入!\n");
return;
}
for (int i = num_records - 1; i >= index; i--) {
records[i + 1] = records[i];
}
printf("请输入商品名称:");
scanf("%s", records[index].name);
printf("请输入商品价格:");
scanf("%f", &records[index].price);
printf("请输入商品条形码:");
scanf("%s", records[index].barcode);
printf("请输入进货日期:");
scanf("%s", records[index].purchase_date);
printf("请输入库存数量:");
scanf("%d", &records[index].inventory);
printf("请输入销售数量:");
scanf("%d", &records[index].sales);
num_records++;
printf("插入成功!\n");
}
// 删除一条记录
void delete_record() {
int id, index = -1;
char pwd[10];
printf("请输入要删除的商品编号:");
scanf("%d", &id);
for (int i = 0; i < num_records; i++) {
if (records[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("该商品不存在,无法删除!\n");
return;
}
printf("请输入管理员密码:");
scanf("%s", pwd);
if (strcmp(pwd, PASSWORD) != 0) {
printf("密码错误,无法删除!\n");
return;
}
for (int i = index; i < num_records - 1; i++) {
records[i] = records[i + 1];
}
num_records--;
printf("删除成功!\n");
}
// 修改一条记录
void modify_record() {
int id, index = -1;
char pwd[10];
printf("请输入要修改的商品编号:");
scanf("%d", &id);
for (int i = 0; i < num_records; i++) {
if (records[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("该商品不存在,无法修改!\n");
return;
}
printf("请输入管理员密码:");
scanf("%s", pwd);
if (strcmp(pwd, PASSWORD) != 0) {
printf("密码错误,无法修改!\n");
return;
}
printf("请输入新的商品名称:");
scanf("%s", records[index].name);
printf("请输入新的商品价格:");
scanf("%f", &records[index].price);
printf("请输入新的商品条形码:");
scanf("%s", records[index].barcode);
printf("请输入新的进货日期:");
scanf("%s", records[index].purchase_date);
printf("请输入新的库存数量:");
scanf("%d", &records[index].inventory);
printf("请输入新的销售数量:");
scanf("%d", &records[index].sales);
printf("修改成功!\n");
}
// 将记录保存到文件中
void save_records(char *filename) {
FILE *fp = fopen(filename, "w");
fprintf(fp, "编号\t名称\t价格\t条形码\t进货日期\t库存\t销售量\n");
for (int i = 0; i < num_records; i++) {
fprintf(fp, "%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n", records[i].id, records[i].name, records[i].price, records[i].barcode, records[i].purchase_date, records[i].inventory, records[i].sales);
}
fclose(fp);
printf("保存成功!\n");
}
// 从文件中读取记录
void load_records(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("读取失败!\n");
return;
}
char line[200], *token;
fgets(line, 200, fp); // 读取第一行,不需要处理
while (fgets(line, 200, fp) != NULL) {
token = strtok(line, "\t"); // 分割字符串
records[num_records].id = atoi(token);
token = strtok(NULL, "\t");
strcpy(records[num_records].name, token);
token = strtok(NULL, "\t");
records[num_records].price = atof(token);
token = strtok(NULL, "\t");
strcpy(records[num_records].barcode, token);
token = strtok(NULL, "\t");
strcpy(records[num_records].purchase_date, token);
token = strtok(NULL, "\t");
records[num_records].inventory = atoi(token);
token = strtok(NULL, "\t");
records[num_records].sales = atoi(token);
num_records++;
}
fclose(fp);
printf("读取成功!\n");
}
int main() {
int choice;
char filename[50];
printf("请输入数据文件名:");
scanf("%s", filename);
load_records(filename);
while (1) {
printf("====================\n");
printf("超市信息管理系统\n");
printf("====================\n");
printf("1.添加记录\n");
printf("2.显示记录\n");
printf("3.查找记录\n");
printf("4.排序记录\n");
printf("5.插入记录\n");
printf("6.删除记录\n");
printf("7.修改记录\n");
printf("8.保存记录\n");
printf("9.退出系统\n");
printf("====================\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_record();
break;
case 2:
display_records();
break;
case 3:
binary_search();
break;
case 4:
printf("请选择排序方式:\n");
printf("1.按销售数量从高到低排序\n");
printf("2.按商品编号排序\n");
printf("请选择:");
scanf("%d", &choice);
shell_sort(choice);
break;
case 5:
insert_record();
break;
case 6:
delete_record();
break;
case 7:
modify_record();
break;
case 8:
save_records(filename);
break;
case 9:
return 0;
default:
printf("无效的选择!\n");
}
}
return 0;
}
```
这个超市信息管理系统的亮点包括:
1. 使用了结构体来存储每条记录,使数据更加结构化。
2. 采用了折半查找算法查找记录,效率更高。
3. 希尔排序可以根据不同的排序方式进行排序,提高了灵活性。
4. 程序可以将记录保存到文件中,并且可以从文件中读取记录,方便管理。
5. 删除和修改记录时需要输入管理员密码,增加了安全性。