C语言设计一个物流管理系统,要求有菜单、文件操作,数据使用数组、结构体、链表等,键盘操作或鼠标操作,将查找和排序的算法独立出来形成为单独的函数, 加必要的注释。
时间: 2024-02-22 12:59:05 浏览: 143
C语言实现物流管理系统
好的,我可以帮你解答这个问题。
首先,我们可以定义一个结构体来存储货物的信息,包括货物名称、货物数量、货物单价等。代码如下:
```
struct Goods {
char name[50];
int quantity;
float price;
};
```
然后,我们可以定义一个数组来存储所有货物的信息,以及一个链表来存储货物的销售记录。代码如下:
```
struct Goods goods[100];
struct SalesRecord {
char name[50];
int quantity;
float price;
struct SalesRecord *next;
};
struct SalesRecord *sales_head = NULL;
```
接下来,我们可以编写一个菜单程序,让用户可以选择添加货物、删除货物、查询货物、录入销售记录等操作。代码如下:
```
void menu() {
int choice;
while (1) {
printf("1. Add goods\n");
printf("2. Delete goods\n");
printf("3. Search goods\n");
printf("4. Record sales\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_goods();
break;
case 2:
delete_goods();
break;
case 3:
search_goods();
break;
case 4:
record_sales();
break;
case 5:
exit(0);
default:
printf("Invalid input\n");
break;
}
}
}
```
其中,add_goods() 函数用于添加货物信息,delete_goods() 函数用于删除货物信息,search_goods() 函数用于查询货物信息,record_sales() 函数用于录入销售记录。
在这些函数中,我们可以使用文件操作来读取和写入货物信息和销售记录。例如,我们可以在程序开始时读取之前存储的货物信息和销售记录,并在程序结束时将它们写入文件。代码如下:
```
void init() {
FILE *fp;
fp = fopen("goods.txt", "r");
if (fp != NULL) {
fread(goods, sizeof(struct Goods), 100, fp);
fclose(fp);
}
fp = fopen("sales.txt", "r");
if (fp != NULL) {
while (!feof(fp)) {
struct SalesRecord *record = (struct SalesRecord *)malloc(sizeof(struct SalesRecord));
fread(record, sizeof(struct SalesRecord), 1, fp);
if (sales_head == NULL) {
sales_head = record;
} else {
struct SalesRecord *p = sales_head;
while (p->next != NULL) {
p = p->next;
}
p->next = record;
}
}
fclose(fp);
}
}
void save() {
FILE *fp;
fp = fopen("goods.txt", "w");
fwrite(goods, sizeof(struct Goods), 100, fp);
fclose(fp);
fp = fopen("sales.txt", "w");
struct SalesRecord *p = sales_head;
while (p != NULL) {
fwrite(p, sizeof(struct SalesRecord), 1, fp);
p = p->next;
}
fclose(fp);
}
```
最后,我们还需要编写查找和排序的算法,独立出来形成为单独的函数。例如,我们可以编写一个按照货物名称排序的函数 sort_by_name(),代码如下:
```
void sort_by_name() {
int i, j;
for (i = 0; i < 100; i++) {
for (j = i + 1; j < 100; j++) {
if (strcmp(goods[i].name, goods[j].name) > 0) {
struct Goods temp = goods[i];
goods[i] = goods[j];
goods[j] = temp;
}
}
}
}
```
以上就是一个简单的物流管理系统的设计。需要注意的是,上述代码仅供参考,实际开发中可能需要根据具体情况进行修改和完善。
阅读全文