C语言物流信息管理系统设计与实现

设计思路

  1. 车辆信息: 定义结构体变量存储车辆信息,包括车牌号、车型、司机姓名、联系电话、每公里单价、是否可用等。
  2. 运输信息: 同样定义结构体变量存储运输信息,包括运输编号、发货人、收货人、收货人电话、出发地、到达地、重量、里程、价格、车牌号等。
  3. 统计收入: 定义函数根据运输信息计算收入。
  4. 添加、删除、查询: 定义函数实现对车辆信息和运输信息的添加、删除和查询操作。
  5. 保存: 定义函数将车辆信息和运输信息保存到文件中,以便下次打开程序时读取。

设计要点

  1. 定义结构体变量存储车辆信息和运输信息。
  2. 定义函数实现统计收入、添加、删除和查询操作。
  3. 使用文件存储车辆信息和运输信息。
  4. 设计友好的用户界面。

代码实现

#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;
}
C语言物流信息管理系统设计与实现

原文地址: https://www.cveoy.top/t/topic/ozjD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录