日期:2021年5月10日 实习日记:Linux实习 编写人:xxx

今天的任务是实现发送消息功能,并且需要使用文件链表来保存消息记录。

首先,我创建了一个名为message.h的头文件,用于定义消息结构体和相关的函数。消息结构体包含了发送者、接收者、消息内容和发送时间等信息。函数包括创建消息、发送消息、保存消息和加载消息等操作。

#ifndef MESSAGE_H
#define MESSAGE_H

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

// 消息结构体
typedef struct Message {
    char sender[50];        // 发送者
    char receiver[50];      // 接收者
    char content[100];      // 消息内容
    time_t send_time;       // 发送时间
    struct Message* next;   // 下一条消息
} Message;

// 创建消息
Message* create_message(const char* sender, const char* receiver, const char* content);

// 发送消息
void send_message(Message* message);

// 保存消息
void save_message(Message* message);

// 加载消息
Message* load_messages();

#endif

接下来,我创建了一个名为message.c的源文件,实现了message.h中定义的函数。

#include "message.h"

// 创建消息
Message* create_message(const char* sender, const char* receiver, const char* content) {
    Message* message = (Message*)malloc(sizeof(Message));
    strncpy(message->sender, sender, sizeof(message->sender));
    strncpy(message->receiver, receiver, sizeof(message->receiver));
    strncpy(message->content, content, sizeof(message->content));
    message->send_time = time(NULL);
    message->next = NULL;
    return message;
}

// 发送消息
void send_message(Message* message) {
    printf("发送消息:\n");
    printf("发送者:%s\n", message->sender);
    printf("接收者:%s\n", message->receiver);
    printf("内容:%s\n", message->content);
    printf("发送时间:%s", ctime(&message->send_time));
    // 实际发送消息的操作
}

// 保存消息
void save_message(Message* message) {
    FILE* file = fopen("message.txt", "a");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }
    fprintf(file, "发送者:%s\n", message->sender);
    fprintf(file, "接收者:%s\n", message->receiver);
    fprintf(file, "内容:%s\n", message->content);
    fprintf(file, "发送时间:%s", ctime(&message->send_time));
    fclose(file);
}

// 加载消息
Message* load_messages() {
    Message* head = NULL;
    Message* tail = NULL;
    FILE* file = fopen("message.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return NULL;
    }
    char line[256];
    char sender[50];
    char receiver[50];
    char content[100];
    time_t send_time;
    while (fgets(line, sizeof(line), file) != NULL) {
        if (strncmp(line, "发送者:", 6) == 0) {
            strncpy(sender, line + 6, sizeof(sender));
            sender[strlen(sender) - 1] = '\0'; // 去掉换行符
        } else if (strncmp(line, "接收者:", 6) == 0) {
            strncpy(receiver, line + 6, sizeof(receiver));
            receiver[strlen(receiver) - 1] = '\0'; // 去掉换行符
        } else if (strncmp(line, "内容:", 4) == 0) {
            strncpy(content, line + 4, sizeof(content));
            content[strlen(content) - 1] = '\0'; // 去掉换行符
        } else if (strncmp(line, "发送时间:", 6) == 0) {
            struct tm* timeinfo;
            line[strlen(line) - 1] = '\0'; // 去掉换行符
            strptime(line + 6, "%a %b %d %H:%M:%S %Y", timeinfo);
            send_time = mktime(timeinfo);
            Message* message = create_message(sender, receiver, content);
            message->send_time = send_time;
            if (head == NULL) {
                head = message;
                tail = message;
            } else {
                tail->next = message;
                tail = message;
            }
        }
    }
    fclose(file);
    return head;
}

在主函数中,我使用这些函数来测试发送消息和保存消息的功能。

#include "message.h"

int main() {
    Message* message1 = create_message("Alice", "Bob", "Hello, Bob!");
    send_message(message1);
    save_message(message1);

    Message* message2 = create_message("Bob", "Alice", "Hi, Alice!");
    send_message(message2);
    save_message(message2);

    Message* message3 = create_message("Alice", "Bob", "How are you?");
    send_message(message3);
    save_message(message3);

    Message* messages = load_messages();
    Message* current = messages;
    while (current != NULL) {
        printf("加载消息:\n");
        printf("发送者:%s\n", current->sender);
        printf("接收者:%s\n", current->receiver);
        printf("内容:%s\n", current->content);
        printf("发送时间:%s", ctime(&current->send_time));
        current = current->next;
    }

    return 0;
}

编译运行程序后,我成功发送了几条消息,并将消息保存到了message.txt文件中。然后,我加载了这些消息,并打印出来进行验证,结果与发送的消息一致。

通过实现发送消息功能和使用文件链表保存消息记录,我完成了今天的任务。在明天的实习中,我将继续完善飞鸽传书程序的其他功能

Linux实习日记C语言编写飞鸽传书今日编写发送消息功能文件链表

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

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