用C语言编写超市信息管理系统 功能要求: 1.每一条记录包括一个商品的编号,名称,价格,条形码,进货日期(使用时间函数),库存,销售数量。 2.输入功能:可以一次完成若干条记录的输入。 3.显示功能:完成全部记录的显示。 4.查找功能:用折半查找完成按商品编号查找记录并显示。 5.排序功能:用希尔排序按销售数量从高到低或者按照商品编号进行排序。 6. 插入功能:按编号插入一条记录。 7.将记录保存在文件中。 8. 应提供一个菜单来调用各个功能,调用菜单的界面应尽可能清晰美观。 9.删除功能 10.修改功能 11.进入系统需要输入密码123456,删除和修改时要求输入密码 12.代码要有亮点,并且将亮点展示出来
时间: 2023-11-28 07:47:19 浏览: 69
以下是一个简单的超市信息管理系统的C代码,实现了上述所有功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_ITEMS 1000 // 最大商品数量
#define PASSWORD "123456" // 管理员密码
// 商品结构体
struct item {
int id; // 编号
char name[20]; // 名称
float price; // 价格
char barcode[20]; // 条形码
time_t purchase_date; // 进货日期
int stock; // 库存
int sold; // 销售数量
};
// 全局变量
struct item items[MAX_ITEMS]; // 商品数组
int num_items = 0; // 商品数量
// 函数声明
void input_items();
void display_items();
void search_items();
void sort_items_by_sold();
void sort_items_by_id();
void insert_item();
void delete_item();
void modify_item();
void save_items();
void load_items();
void login();
// 主函数
int main() {
int choice;
login(); // 登录
load_items(); // 加载文件中的商品信息
while (1) {
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("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_by_sold();
break;
case 5:
sort_items_by_id();
break;
case 6:
insert_item();
break;
case 7:
delete_item();
break;
case 8:
modify_item();
break;
case 9:
save_items();
break;
case 0:
save_items();
exit(0);
default:
printf("输入有误,请重新输入!\n");
}
}
return 0;
}
// 输入商品信息
void input_items() {
int n;
printf("请输入要输入的商品数量:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
struct item item;
// 自动生成编号
item.id = num_items + 1;
printf("请输入商品名称:");
scanf("%s", item.name);
printf("请输入商品价格:");
scanf("%f", &item.price);
printf("请输入商品条形码:");
scanf("%s", item.barcode);
item.purchase_date = time(NULL); // 自动生成进货日期
printf("请输入商品库存:");
scanf("%d", &item.stock);
item.sold = 0; // 初始销售数量为0
items[num_items++] = item; // 将商品添加到数组中
}
printf("输入成功!\n");
}
// 显示商品信息
void display_items() {
if (num_items == 0) {
printf("暂无商品信息!\n");
return;
}
printf("编号\t名称\t价格\t条形码\t\t进货日期\t库存\t销售数量\n");
for (int i = 0; i < num_items; i++) {
struct 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, ctime(&item.purchase_date), item.stock, item.sold);
}
}
// 查找商品信息
void search_items() {
int id;
printf("请输入要查找的商品编号:");
scanf("%d", &id);
int left = 0, right = num_items - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (items[mid].id == id) {
struct item item = items[mid];
printf("编号\t名称\t价格\t条形码\t\t进货日期\t库存\t销售数量\n");
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n", item.id, item.name, item.price, item.barcode, ctime(&item.purchase_date), item.stock, item.sold);
return;
} else if (items[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("未找到该商品!\n");
}
// 按销售数量从高到低排序
void sort_items_by_sold() {
for (int gap = num_items / 2; gap > 0; gap /= 2) {
for (int i = gap; i < num_items; i++) {
struct item temp = items[i];
int j;
for (j = i; j >= gap && items[j - gap].sold < temp.sold; j -= gap) {
items[j] = items[j - gap];
}
items[j] = temp;
}
}
printf("排序完成!\n");
}
// 按商品编号排序
void sort_items_by_id() {
for (int gap = num_items / 2; gap > 0; gap /= 2) {
for (int i = gap; i < num_items; i++) {
struct item temp = items[i];
int j;
for (j = i; j >= gap && items[j - gap].id > temp.id; j -= gap) {
items[j] = items[j - gap];
}
items[j] = temp;
}
}
printf("排序完成!\n");
}
// 插入商品信息
void insert_item() {
int id;
printf("请输入要插入的商品编号:");
scanf("%d", &id);
for (int i = 0; i < num_items; i++) {
if (items[i].id == id) {
printf("该编号已存在,请重新输入!\n");
return;
}
}
struct item item;
item.id = id;
printf("请输入商品名称:");
scanf("%s", item.name);
printf("请输入商品价格:");
scanf("%f", &item.price);
printf("请输入商品条形码:");
scanf("%s", item.barcode);
item.purchase_date = time(NULL);
printf("请输入商品库存:");
scanf("%d", &item.stock);
item.sold = 0;
items[num_items++] = item;
printf("插入成功!\n");
}
// 删除商品信息
void delete_item() {
int id;
char password[10];
printf("请输入要删除的商品编号:");
scanf("%d", &id);
printf("请输入管理员密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) != 0) {
printf("密码错误,删除失败!\n");
return;
}
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("未找到该商品,删除失败!\n");
}
// 修改商品信息
void modify_item() {
int id;
char password[10];
printf("请输入要修改的商品编号:");
scanf("%d", &id);
printf("请输入管理员密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) != 0) {
printf("密码错误,修改失败!\n");
return;
}
for (int i = 0; i < num_items; i++) {
if (items[i].id == id) {
struct item item = items[i];
printf("原商品信息:\n");
printf("编号\t名称\t价格\t条形码\t\t进货日期\t库存\t销售数量\n");
printf("%d\t%s\t%.2f\t%s\t%s\t%d\t%d\n", item.id, item.name, item.price, item.barcode, ctime(&item.purchase_date), item.stock, item.sold);
printf("请输入新的商品名称(不修改请按回车):");
scanf("%s", item.name);
printf("请输入新的商品价格(不修改请按回车):");
scanf("%f", &item.price);
printf("请输入新的商品条形码(不修改请按回车):");
scanf("%s", item.barcode);
printf("请输入新的商品库存(不修改请按回车):");
scanf("%d", &item.stock);
items[i] = item;
printf("修改成功!\n");
return;
}
}
printf("未找到该商品,修改失败!\n");
}
// 保存商品信息到文件中
void save_items() {
FILE *fp;
fp = fopen("items.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(&num_items, sizeof(int), 1, fp); // 先写入商品数量
fwrite(items, sizeof(struct item), num_items, fp); // 写入商品信息
fclose(fp);
printf("保存成功!\n");
}
// 从文件中加载商品信息
void load_items() {
FILE *fp;
fp = fopen("items.dat", "rb");
if (fp == NULL) {
return;
}
fread(&num_items, sizeof(int), 1, fp); // 先读取商品数量
fread(items, sizeof(struct item), num_items, fp); // 读取商品信息
fclose(fp);
}
// 登录
void login() {
char password[10];
printf("请输入管理员密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) != 0) {
printf("密码错误,程序退出!\n");
exit(0);
}
}
```
代码亮点:
1. 使用了结构体来表示商品信息,代码更加简洁易读。
2. 采用了折半查找算法和希尔排序算法来实现查找和排序功能,提高了效率。
3. 实现了管理员密码和保存商品信息到文件中的功能,保证了数据的安全性和持久性。