C语言物流信息管理系统设计与实现
C语言物流信息管理系统设计与实现
设计思路
- 车辆信息: 定义结构体变量存储车辆信息,包括车牌号、车型、司机姓名、联系电话、每公里单价、是否可用等。
- 运输信息: 同样定义结构体变量存储运输信息,包括运输编号、发货人、收货人、收货人电话、出发地、到达地、重量、里程、价格、车牌号等。
- 统计收入: 定义函数根据运输信息计算收入。
- 添加、删除、查询: 定义函数实现对车辆信息和运输信息的添加、删除和查询操作。
- 保存: 定义函数将车辆信息和运输信息保存到文件中,以便下次打开程序时读取。
设计要点
- 定义结构体变量存储车辆信息和运输信息。
- 定义函数实现统计收入、添加、删除和查询操作。
- 使用文件存储车辆信息和运输信息。
- 设计友好的用户界面。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CAR_NUM 100
#define MAX_TRANS_NUM 100
typedef struct CarInfo {
char plate_num[10];
char car_type[20];
char driver_name[20];
char driver_phone[20];
float price_per_km;
int is_available;
} CarInfo;
typedef struct TransInfo {
char trans_id[20];
char sender_name[20];
char receiver_name[20];
char receiver_phone[20];
char start_place[50];
char end_place[50];
float weight;
float distance;
float price;
char plate_num[10];
} TransInfo;
CarInfo car_list[MAX_CAR_NUM];
TransInfo trans_list[MAX_TRANS_NUM];
int car_cnt = 0, trans_cnt = 0;
int read_car_info();
int read_trans_info();
int write_car_info();
int write_trans_info();
int add_car();
int add_trans();
int del_car();
int del_trans();
int query_car();
int query_trans();
int calc_income();
int main() {
int choice;
read_car_info();
read_trans_info();
while (1) {
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');
scanf('%d', &choice);
switch (choice) {
case 1:
add_car();
break;
case 2:
add_trans();
break;
case 3:
del_car();
break;
case 4:
del_trans();
break;
case 5:
query_car();
break;
case 6:
query_trans();
break;
case 7:
calc_income();
break;
case 8:
write_car_info();
write_trans_info();
return 0;
default:
printf('无效的选择!\n');
break;
}
}
}
int read_car_info() {
FILE *fp = fopen('car_info.txt', 'r');
if (fp == NULL) {
printf('无法打开车辆信息文件!\n');
return -1;
}
int i = 0;
while (fscanf(fp, '%s %s %s %s %f %d', car_list[i].plate_num, car_list[i].car_type, car_list[i].driver_name, car_list[i].driver_phone, &car_list[i].price_per_km, &car_list[i].is_available) != EOF) {
i++;
}
car_cnt = i;
fclose(fp);
printf('读取车辆信息成功!\n');
return 0;
}
int read_trans_info() {
FILE *fp = fopen('trans_info.txt', 'r');
if (fp == NULL) {
printf('无法打开运输信息文件!\n');
return -1;
}
int i = 0;
while (fscanf(fp, '%s %s %s %s %s %s %f %f %f %s', trans_list[i].trans_id, trans_list[i].sender_name, trans_list[i].receiver_name, trans_list[i].receiver_phone, trans_list[i].start_place, trans_list[i].end_place, &trans_list[i].weight, &trans_list[i].distance, &trans_list[i].price, trans_list[i].plate_num) != EOF) {
i++;
}
trans_cnt = i;
fclose(fp);
printf('读取运输信息成功!\n');
return 0;
}
int write_car_info() {
FILE *fp = fopen('car_info.txt', 'w');
if (fp == NULL) {
printf('无法打开车辆信息文件!\n');
return -1;
}
int i;
for (i = 0; i < car_cnt; i++) {
fprintf(fp, '%s %s %s %s %.2f %d\n', car_list[i].plate_num, car_list[i].car_type, car_list[i].driver_name, car_list[i].driver_phone, car_list[i].price_per_km, car_list[i].is_available);
}
fclose(fp);
printf('保存车辆信息成功!\n');
return 0;
}
int write_trans_info() {
FILE *fp = fopen('trans_info.txt', 'w');
if (fp == NULL) {
printf('无法打开运输信息文件!\n');
return -1;
}
int i;
for (i = 0; i < trans_cnt; i++) {
fprintf(fp, '%s %s %s %s %s %s %.2f %.2f %.2f %s\n', trans_list[i].trans_id, trans_list[i].sender_name, trans_list[i].receiver_name, trans_list[i].receiver_phone, trans_list[i].start_place, trans_list[i].end_place, trans_list[i].weight, trans_list[i].distance, trans_list[i].price, trans_list[i].plate_num);
}
fclose(fp);
printf('保存运输信息成功!\n');
return 0;
}
int add_car() {
if (car_cnt >= MAX_CAR_NUM) {
printf('车辆信息已满,无法添加!\n');
return -1;
}
printf('请输入车牌号:\n');
scanf('%s', car_list[car_cnt].plate_num);
printf('请输入车型:\n');
scanf('%s', car_list[car_cnt].car_type);
printf('请输入司机姓名:\n');
scanf('%s', car_list[car_cnt].driver_name);
printf('请输入司机电话:\n');
scanf('%s', car_list[car_cnt].driver_phone);
printf('请输入每公里单价:\n');
scanf('%f', &car_list[car_cnt].price_per_km);
printf('请输入是否可用(0表示不可用,1表示可用):\n');
scanf('%d', &car_list[car_cnt].is_available);
car_cnt++;
printf('添加车辆信息成功!\n');
return 0;
}
int add_trans() {
if (trans_cnt >= MAX_TRANS_NUM) {
printf('运输信息已满,无法添加!\n');
return -1;
}
printf('请输入运输编号:\n');
scanf('%s', trans_list[trans_cnt].trans_id);
printf('请输入发货人姓名:\n');
scanf('%s', trans_list[trans_cnt].sender_name);
printf('请输入收货人姓名:\n');
scanf('%s', trans_list[trans_cnt].receiver_name);
printf('请输入收货人电话:\n');
scanf('%s', trans_list[trans_cnt].receiver_phone);
printf('请输入出发地:\n');
scanf('%s', trans_list[trans_cnt].start_place);
printf('请输入目的地:\n');
scanf('%s', trans_list[trans_cnt].end_place);
printf('请输入货物重量:\n');
scanf('%f', &trans_list[trans_cnt].weight);
printf('请输入运输里程:\n');
scanf('%f', &trans_list[trans_cnt].distance);
printf('请输入运输价格:\n');
scanf('%f', &trans_list[trans_cnt].price);
printf('请输入车牌号:\n');
scanf('%s', trans_list[trans_cnt].plate_num);
trans_cnt++;
printf('添加运输信息成功!\n');
return 0;
}
int del_car() {
char plate_num[10];
printf('请输入需要删除的车牌号:\n');
scanf('%s', plate_num);
int i;
for (i = 0; i < car_cnt; i++) {
if (strcmp(car_list[i].plate_num, plate_num) == 0) {
int j;
for (j = i; j < car_cnt - 1; j++) {
car_list[j] = car_list[j+1];
}
car_cnt--;
printf('删除车辆信息成功!\n');
return 0;
}
}
printf('未找到该车辆信息!\n');
return -1;
}
int del_trans() {
char trans_id[20];
printf('请输入需要删除的运输编号:\n');
scanf('%s', trans_id);
int i;
for (i = 0; i < trans_cnt; i++) {
if (strcmp(trans_list[i].trans_id, trans_id) == 0) {
int j;
for (j = i; j < trans_cnt - 1; j++) {
trans_list[j] = trans_list[j+1];
}
trans_cnt--;
printf('删除运输信息成功!\n');
return 0;
}
}
printf('未找到该运输信息!\n');
return -1;
}
int query_car() {
char plate_num[10];
printf('请输入需要查询的车牌号(留空表示查询所有车辆信息):\n');
scanf('%s', plate_num);
int i, flag = 0;
printf('车牌号\t车型\t司机姓名\t司机电话\t每公里单价\t是否可用\n');
for (i = 0; i < car_cnt; i++) {
if (strlen(plate_num) == 0 || strcmp(car_list[i].plate_num, plate_num) == 0) {
printf('%s\t%s\t%s\t%s\t%.2f\t %d\n', car_list[i].plate_num, car_list[i].car_type, car_list[i].driver_name, car_list[i].driver_phone, car_list[i].price_per_km, car_list[i].is_available);
flag = 1;
}
}
if (!flag) {
printf('未找到车辆信息!\n');
return -1;
}
return 0;
}
int query_trans() {
char trans_id[20];
printf('请输入需要查询的运输编号(留空表示查询所有运输信息):\n');
scanf('%s', trans_id);
int i, flag = 0;
printf('运输编号\t发货人\t收货人\t收货人电话\t出发地\t目的地\t货物重量\t运输里程\t运输价格\t车牌号\n');
for (i = 0; i < trans_cnt; i++) {
if (strlen(trans_id) == 0 || strcmp(trans_list[i].trans_id, trans_id) == 0) {
printf('%s\t%s\t%s\t%s\t %s\t%s\t%.2f\t %.2f\t %.2f\t %s\n', trans_list[i].trans_id, trans_list[i].sender_name, trans_list[i].receiver_name, trans_list[i].receiver_phone, trans_list[i].start_place, trans_list[i].end_place, trans_list[i].weight, trans_list[i].distance, trans_list[i].price, trans_list[i].plate_num);
flag = 1;
}
}
if (!flag) {
printf('未找到运输信息!\n');
return -1;
}
return 0;
}
int calc_income() {
char plate_num[10];
printf('请输入需要统计收入的车牌号(留空表示统计所有车辆的收入):\n');
scanf('%s', plate_num);
int i;
float total_income = 0;
for (i = 0; i < trans_cnt; i++) {
if (strlen(plate_num) == 0 || strcmp(trans_list[i].plate_num, plate_num) == 0) {
int j;
for (j = 0; j < car_cnt; j++) {
if (strcmp(car_list[j].plate_num, trans_list[i].plate_num) == 0) {
total_income += trans_list[i].distance * car_list[j].price_per_km;
break;
}
}
}
}
printf('总收入:%.2f\n', total_income);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/ozjD 著作权归作者所有。请勿转载和采集!