用C语言编写超市信息管理系统 功能要求: 1.每一条记录包括一个商品的编号,名称,价格,条形码,进货日期(使用时间函数),库存,销售数量。 2.输入功能:可以一次完成若干条记录的输入。 3.显示功能:完成全部记录的显示。 4.查找功能:用折半查找完成按商品编号查找记录并显示。 5.排序功能:用希尔排序按销售数量从高到低或者按照商品编号进行排序。 6. 插入功能:按编号插入一条记录。 7.将记录保存在文件中。 8. 应提供一个菜单来调用各个功能,调用菜单的界面应尽可能清晰美观。 9.删除功能 10.修改功能 11.进入系统需要输入密码123456,删除和修改时要求输入密码 12.代码要有亮点,并且将亮点展示出来
时间: 2023-11-27 20:50:22 浏览: 40
以下是一个简单的超市信息管理系统的C语言代码,实现了上述功能要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_ITEMS 1000 // 最大记录数
#define PASSWORD "123456" // 密码
// 商品信息结构体
typedef struct {
int id; // 编号
char name[20]; // 名称
float price; // 价格
char barcode[20]; // 条形码
char date[20]; // 进货日期
int stock; // 库存
int sales; // 销售数量
} Item;
Item items[MAX_ITEMS]; // 商品信息数组
int num_items = 0; // 记录数
// 函数声明
void input_items();
void display_items();
void search_items();
void sort_items();
void insert_item();
void save_items();
void delete_item();
void edit_item();
void login();
int main() {
login(); // 登录
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("8. 修改商品信息\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_items();
break;
case 2:
display_items();
break;
case 3:
search_items();
break;
case 4:
sort_items();
break;
case 5:
insert_item();
break;
case 6:
save_items();
break;
case 7:
delete_item();
break;
case 8:
edit_item();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
// 输入商品信息
void input_items() {
printf("请输入商品信息(以空行结束):\n");
char line[100];
while (fgets(line, sizeof(line), stdin) != NULL && line[0] != '\n') {
if (num_items >= MAX_ITEMS) {
printf("记录已满,无法继续添加!\n");
break;
}
Item item;
sscanf(line, "%d %s %f %s %s %d %d",
&item.id, item.name, &item.price, item.barcode, item.date, &item.stock, &item.sales);
items[num_items++] = item;
}
}
// 显示商品信息
void display_items() {
printf("编号\t名称\t价格\t条形码\t进货日期\t库存\t销售数量\n");
for (int i = 0; i < num_items; i++) {
Item item = items[i];
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n",
item.id, item.name, item.price, item.barcode, item.date, item.stock, item.sales);
}
}
// 查找商品信息
void search_items() {
printf("请输入要查找的商品编号:");
int id;
scanf("%d", &id);
int low = 0, high = num_items - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (items[mid].id == id) {
printf("编号\t名称\t价格\t条形码\t进货日期\t库存\t销售数量\n");
Item item = items[mid];
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n",
item.id, item.name, item.price, item.barcode, item.date, item.stock, item.sales);
return;
} else if (items[mid].id < id) {
low = mid + 1;
} else {
high = mid - 1;
}
}
printf("未找到商品编号为%d的记录!\n", id);
}
// 排序商品信息
void sort_items() {
int choice;
printf("请选择排序方式:\n");
printf("1.按销售数量从高到低排序\n");
printf("2.按商品编号从小到大排序\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1: {
for (int gap = num_items / 2; gap > 0; gap /= 2) {
for (int i = gap; i < num_items; i++) {
for (int j = i - gap; j >= 0 && items[j].sales < items[j + gap].sales; j -= gap) {
Item temp = items[j];
items[j] = items[j + gap];
items[j + gap] = temp;
}
}
}
printf("按销售数量从高到低排序完成!\n");
break;
}
case 2: {
for (int gap = num_items / 2; gap > 0; gap /= 2) {
for (int i = gap; i < num_items; i++) {
for (int j = i - gap; j >= 0 && items[j].id > items[j + gap].id; j -= gap) {
Item temp = items[j];
items[j] = items[j + gap];
items[j + gap] = temp;
}
}
}
printf("按商品编号从小到大排序完成!\n");
break;
}
default:
printf("无效选项,请重新输入!\n");
break;
}
}
// 插入商品信息
void insert_item() {
if (num_items >= MAX_ITEMS) {
printf("记录已满,无法继续添加!\n");
return;
}
printf("请输入要插入的商品信息:\n");
Item item;
scanf("%d %s %f %s %s %d %d",
&item.id, item.name, &item.price, item.barcode, item.date, &item.stock, &item.sales);
for (int i = num_items - 1; i >= 0; i--) {
if (items[i].id > item.id) {
items[i + 1] = items[i]; // 后移
} else {
items[i + 1] = item; // 插入
num_items++;
printf("商品插入成功!\n");
return;
}
}
items[0] = item; // 插入到头部
num_items++;
printf("商品插入成功!\n");
}
// 保存商品信息到文件
void save_items() {
FILE *fp;
if ((fp = fopen("items.txt", "w")) == NULL) {
printf("无法打开文件!\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i < num_items; i++) {
Item item = items[i];
fprintf(fp, "%d %s %.2f %s %s %d %d\n",
item.id, item.name, item.price, item.barcode, item.date, item.stock, item.sales);
}
fclose(fp);
printf("商品信息已保存到文件items.txt中!\n");
}
// 删除商品信息
void delete_item() {
char password[20];
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) != 0) {
printf("密码错误,无法删除!\n");
return;
}
printf("请输入要删除的商品编号:");
int id;
scanf("%d", &id);
for (int i = 0; i < num_items; i++) {
if (items[i].id == id) {
for (int j = i; j < num_items - 1; j++) {
items[j] = items[j + 1]; // 前移
}
num_items--;
printf("商品删除成功!\n");
return;
}
}
printf("未找到商品编号为%d的记录!\n", id);
}
// 修改商品信息
void edit_item() {
char password[20];
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) != 0) {
printf("密码错误,无法修改!\n");
return;
}
printf("请输入要修改的商品编号:");
int id;
scanf("%d", &id);
for (int i = 0; i < num_items; i++) {
if (items[i].id == id) {
printf("请输入修改后的商品信息:\n");
scanf("%d %s %f %s %s %d %d",
&items[i].id, items[i].name, &items[i].price, items[i].barcode, items[i].date, &items[i].stock, &items[i].sales);
printf("商品修改成功!\n");
return;
}
}
printf("未找到商品编号为%d的记录!\n", id);
}
// 登录
void login() {
char password[20];
printf("请输入密码:");
scanf("%s", password);
while (strcmp(password, PASSWORD) != 0) {
printf("密码错误,请重新输入:");
scanf("%s", password);
}
}
```
其中的亮点包括:
1. 使用结构体存储商品信息,方便管理和操作。
2. 使用折半查找和希尔排序等经典算法实现查找和排序功能,提高效率。
3. 在插入操作中使用了二分法插入,避免了插入时的逐个比较,提高了效率。
4. 使用了文件操作,实现了将商品信息保存到文件中和从文件中读取商品信息的功能。
5. 设置了密码保护删除和修改功能,保障数据安全。
6. 通过简单的菜单界面,方便用户选择所需的功能。