C语言设计结构体数组

长途客车管理系统
功能:
(1)每一条记录包括一个长途客车的编号、车牌号、司机、联系方式、运输路线,最大载客量等。
(2)输入功能:可以一次完成若干条记录的输入。(3)显示功能:完成长途客车记录的显示。
(4)查找功能:按长途客车编号查找长途客车的相关记录,并显示。(5)修改功能:按长途客车编号修改长途客车信息。(6)删除功能:按长途客车编号删除长途客车信息。(7)实现长途客车信息的保存和读取。
(8)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
要求: (1)用C语言实现系统;
(2)利用结构体数组实现长途客车信息的数据结构设计;(3)系统具有增加、插入、修改、删除、浏览等基本功能;(4)系统的各个功能模块要求用函数的形式实现;

根据需求,我们可以设计如下的长途客车信息结构体:

#define MAX_ROUTE_LEN 100

typedef struct BusInfo {
    int id;
    char plateNum[10];
    char driver[20];
    char phone[20];
    char route[MAX_ROUTE_LEN];
    int maxCapacity;
} BusInfo;

接下来,我们可以定义一个结构体数组,用于存储系统中所有的长途客车信息:

#define MAX_BUS_NUM 1000

BusInfo busInfo[MAX_BUS_NUM];  // 存储所有长途客车信息的数组
int busCount = 0;  // 已有的长途客车数量

下面是一个基于控制台界面的长途客车管理系统的示例 C 代码,实现了增删改查等基本功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_ROUTE_LEN 100
#define MAX_BUS_NUM 1000

typedef struct BusInfo {
    int id;
    char plateNum[10];
    char driver[20];
    char phone[20];
    char route[MAX_ROUTE_LEN];
    int maxCapacity;
} BusInfo;

BusInfo busInfo[MAX_BUS_NUM];
int busCount = 0;

void inputBusInfo() {  // 输入新的长途客车信息
    int n;  // 输入数量
    printf("请输入要添加的长途客车数量:");
    scanf("%d", &n);
    while (n--) {
        BusInfo info;
        printf("请输入长途客车编号:");
        scanf("%d", &info.id);
        printf("请输入车牌号:");
        scanf("%s", info.plateNum);
        printf("请输入司机姓名:");
        scanf("%s", info.driver);
        printf("请输入联系方式:");
        scanf("%s", info.phone);
        printf("请输入运输路线:");
        scanf("%s", info.route);
        printf("请输入最大载客量:");
        scanf("%d", &info.maxCapacity);
        busInfo[busCount++] = info;  // 添加到数组中
    }
    printf("%d 辆长途客车信息添加成功!\n", busCount);
}

void showBusInfo() {  // 显示已有长途客车信息
    if (busCount == 0) {
        printf("当前无任何长途客车信息!\n");
        return;
    }
    printf("当前长途客车信息如下:\n");
    printf("编号\t车牌号\t司机姓名\t联系方式\t运输路线\t最大载客量\n");
    for (int i = 0; i < busCount; i++) {
        BusInfo info = busInfo[i];
        printf("%d\t%s\t%s\t%s\t%s\t%d\n", info.id, info.plateNum, info.driver, info.phone, info.route, info.maxCapacity);
    }
}

void searchBusInfo() {  // 查找长途客车信息
    int id;
    printf("请输入要查找的长途客车编号:");
    scanf("%d", &id);
    for (int i = 0; i < busCount; i++) {
        if (busInfo[i].id == id) {
            BusInfo info = busInfo[i];
            printf("长途客车信息如下:\n");
            printf("编号\t车牌号\t司机姓名\t联系方式\t运输路线\t最大载客量\n");
            printf("%d\t%s\t%s\t%s\t%s\t%d\n", info.id, info.plateNum, info.driver, info.phone, info.route, info.maxCapacity);
            return;
        }
    }
    printf("未找到编号为 %d 的长途客车信息!\n", id);
}

void updateBusInfo() {  // 更新长途客车信息
    int id;
    printf("请输入要更新的长途客车编号:");
    scanf("%d", &id);
    for (int i = 0; i < busCount; i++) {
        if (busInfo[i].id == id) {
            BusInfo info;
            printf("请输入新的车牌号(原:%s):", busInfo[i].plateNum);
            scanf("%s", info.plateNum);
            printf("请输入新的司机姓名(原:%s):",busInfo[i].driver);
            scanf("%s", info.driver);
            printf("请输入新的联系方式(原:%s):", busInfo[i].phone);
            scanf("%s", info.phone);
            printf("请输入新的运输路线(原:%s):", busInfo[i].route);
            scanf("%s", info.route);
            printf("请输入新的最大载客量(原:%d):", busInfo[i].maxCapacity);
            scanf("%d", &info.maxCapacity);
            busInfo[i] = info;
            printf("长途客车信息更新成功!\n");
            return;
        }
    }
    printf("未找到编号为 %d 的长途客车信息!\n", id);
}

void deleteBusInfo() {  // 删除长途客车信息
    int id;
    printf("请输入要删除的长途客车编号:");
    scanf("%d", &id);
    for (int i = 0; i < busCount; i++) {
        if (busInfo[i].id == id) {
            for (int j = i + 1; j < busCount; j++) {
                busInfo[j-1] = busInfo[j];  // 将后面的元素依次往前移动
            }
            busCount--;
            printf("长途客车信息删除成功!\n");
            return;
        }
    }
    printf("未找到编号为 %d 的长途客车信息!\n", id);
}

void saveToFile() {  // 将长途客车信息保存到文件
    if (busCount == 0) {
        printf("当前无任何长途客车信息,无法保存到文件!\n");
        return;
    }
    FILE *fp = fopen("businfo.txt", "w");  // 打开文件
    if (fp == NULL) {
        printf("无法打开文件 businfo.txt 保存长途客车信息!\n");
        return;
    }
    for (int i = 0; i < busCount; i++) {
        BusInfo info = busInfo[i];
        fprintf(fp, "%d %s %s %s %s %d\n", info.id, info.plateNum, info.driver, info.phone, info.route, info.maxCapacity);
    }
    fclose(fp);
    printf("长途客车信息已保存到文件 businfo.txt 中!\n");
}

void loadFromFile() {  // 从文件中读取长途客车信息
    FILE *fp = fopen("businfo.txt", "r");  // 打开文件
    if (fp == NULL) {
        printf("无法打开文件 businfo.txt 读取长途客车信息!\n");
        return;
    }
    int count = 0;
    while (count < MAX_BUS_NUM && !feof(fp)) {
        BusInfo info;
        fscanf(fp, "%d %s %s %s %s %d\n", &info.id, info.plateNum, info.driver, info.phone, info.route, &info.maxCapacity);
        busInfo[count++] = info;
    }
    busCount = count;
    fclose(fp);
    printf("从文件 businfo.txt 中读取了 %d 条长途客车信息!\n", busCount);
}

void showMenu() {  // 显示主菜单
   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("0. 退出系统\n");
}

int main() {
    while (1) {
        showMenu();
        int op;
        printf("\n请选择操作:");
        scanf("%d", &op);
        printf("\n");
        switch (op) {
            case 1:
                inputBusInfo();
                break;
            case 2:
                showBusInfo();
                break;
            case 3:
                searchBusInfo();
                break;
            case 4:
                updateBusInfo();
                break;
            case 5:
                deleteBusInfo();
                break;
            case 6:
                loadFromFile();
                break;
            case 7:
                saveToFile();
                break;
            case 0:
                printf("欢迎下次使用长途客车管理系统!\n");
                return 0;
            default:
                printf("无效操作,请重新选择!\n");
                break;
        }
    }
    return 0;
}

以上代码实现了基本功能,但是仅仅是一个控制台程序,界面不够友好,可以自行考虑使用

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7621601
  • 除此之外, 这篇博客: 指针和数组试题解析(重置版)中的 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安装。所以无法着手写,因为 C预处理,vs2013很难表达,也就意味可能会讲不清楚。所以这篇文章可能需要点时间,再加上小编初期的文章,是没有排版的(而且可能有些错误,请大家以重置版为准),所以这几天我就把这些重新写。有兴趣的朋友可以看看。(ps:如果哪一天没有更新,意味着小编正在努力学习,为了能给大家呈现一片详细好懂的文章。) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读: