基于C语言实现URL短链接服务系统(改进版)

本文介绍如何使用C语言实现一个简单的URL短链接服务系统。该系统可以将长URL转换为短链接,并支持访问统计等功能。

1. 项目介绍

URL短链接服务是一种将长URL转换为短链接的服务,常用于社交媒体分享、短信发送等场景。本文将介绍如何使用C语言实现一个简单的URL短链接服务系统。

1.1 主要功能

  • 创建短链接
  • 访问短链接
  • 显示URL统计信息
  • 支持访问次数统计
  • 记录创建时间

2. 系统设计

2.1 数据结构

系统使用结构体URLMapping来存储URL映射信息:

typedef struct {
    char original_url[MAX_URL_LENGTH];  // 原始URL
    char short_code[SHORT_URL_LENGTH];  // 短链接代码
    int visits;                         // 访问次数
    time_t creation_time;               // 创建时间
} URLMapping;

2.2 核心功能实现

2.2.1 生成短链接代码

系统使用随机字符生成短链接代码:

void generate_short_code(char *short_code, int length) {
    const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    const int charset_size = sizeof(charset) - 1;
    
    for (int i = 0; i < length - 1; i++) {
        int index = rand() % charset_size;
        short_code[i] = charset[index];
    }
    
    short_code[length - 1] = '\0';
}
2.2.2 创建短链接

创建短链接的流程如下:

  1. 检查数据库是否已满
  2. 检查URL是否已存在
  3. 生成唯一的短链接代码
  4. 保存到数据库
void create_short_url(const char *original_url) {
    if (url_count >= MAX_URLS) {
        printf("错误:数据库已满,无法创建更多短链接\n");
        return;
    }
    
    int index = find_url(original_url);
    if (index != -1) {
        printf("该URL已有短链接:%s%s\n", 
               BASE_URL, url_database[index].short_code);
        return;
    }
    
    char short_code[SHORT_URL_LENGTH];
    do {
        generate_short_code(short_code, SHORT_URL_LENGTH);
    } while (find_short_code(short_code) != -1);
    
    strcpy(url_database[url_count].original_url, original_url);
    strcpy(url_database[url_count].short_code, short_code);
    url_database[url_count].visits = 0;
    url_database[url_count].creation_time = time(NULL);
    
    printf("已成功创建短链接:%s%s\n", BASE_URL, short_code);
    url_count++;
}
2.2.3 访问短链接

访问短链接时会:

  1. 查找对应的短链接
  2. 增加访问计数
  3. 重定向到原始URL
void visit_short_url(const char *short_code) {
    int index = find_short_code(short_code);
    if (index != -1) {
        url_database[index].visits++;
        printf("重定向到:%s\n", url_database[index].original_url);
        printf("这是第 %d 次访问此链接\n", url_database[index].visits);
        
        char command[MAX_URL_LENGTH + 100];
        snprintf(command, sizeof(command), "start %s", url_database[index].original_url);
        system(command);
    } else {
        printf("错误:短链接不存在\n");
    }
}

2.3 辅助功能实现

2.3.1 URL查找功能

系统提供了两个查找函数,分别用于查找原始URL和短链接代码:

int find_url(const char *url) {
    for (int i = 0; i < url_count; i++) {
        if (strcmp(url_database[i].original_url, url) == 0) {
            return i;
        }
    }
    return -1;
}

int find_short_code(const char *short_code) {
    for (int i = 0; i < url_count; i++) {
        if (strcmp(url_database[i].short_code, short_code) == 0) {
            return i;
        }
    }
    return -1;
}
2.3.2 统计信息显示

系统可以显示所有URL的统计信息,包括访问次数和创建时间:

void show_url_stats() {
    if (url_count == 0) {
        printf("数据库中没有链接\n");
        return;
    }
    
    printf("\n===== URL统计信息 =====\n");
    printf("%-10s %-30s %-30s %-10s %-20s\n", 
           "编号", "原始URL", "短链接", "访问次数", "创建时间");
    
    for (int i = 0; i < url_count; i++) {
        char time_str[30];
        struct tm *time_info = localtime(&url_database[i].creation_time);
        strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", time_info);
        
        printf("%-10d %-30.30s... %-30s %-10d %-20s\n", 
               i + 1, 
               url_database[i].original_url, 
               url_database[i].short_code, 
               url_database[i].visits,
               time_str);
    }
}

2.4 主程序实现

主程序实现了菜单驱动的用户界面:

void show_menu() {
    printf("\n===== URL短链接服务 =====\n");
    printf("1. 创建短链接\n");
    printf("2. 访问短链接\n");
    printf("3. 显示统计信息\n");
    printf("4. 退出\n");
    printf("请选择 (1-4): ");
}

int main() {
    system("chcp 65001");
    system("cls");

    srand(time(NULL));
    
    int choice;
    char input[MAX_URL_LENGTH];
    
    while (1) {
        show_menu();
        scanf("%d", &choice);
        getchar();
        
        switch (choice) {
            case 1:
                printf("请输入原始URL: ");
                fgets(input, MAX_URL_LENGTH, stdin);
                input[strcspn(input, "\n")] = '\0';
                create_short_url(input);
                break;
                
            case 2:
                printf("请输入短码: ");
                fgets(input, SHORT_URL_LENGTH + 1, stdin);
                input[strcspn(input, "\n")] = '\0';
                visit_short_url(input);
                break;
                
            case 3:
                show_url_stats();
                break;
                
            case 4:
                printf("感谢使用URL短链接服务,再见!\n");
                return 0;
                
            default:
                printf("无效的选择,请重新输入\n");
        }
    }
    
    return 0;
}

3. 使用说明

3.1 编译运行

  1. 将代码保存为url_shortener.c
  2. 使用gcc编译:
gcc url_shortener.c -o url_shortener
  1. 运行程序:
./url_shortener

3.2 功能菜单

程序提供以下功能选项:

  1. 创建短链接
  2. 访问短链接
  3. 显示统计信息
  4. 退出

4. 总结

本文介绍了一个基于C语言实现的URL短链接服务系统。该系统具有以下特点:

  1. 简单易用:提供清晰的菜单界面
  2. 功能完整:支持创建、访问和统计功能
  3. 数据持久化:使用数组存储URL映射信息
  4. 访问统计:记录每个短链接的访问次数
  5. 时间记录:保存短链接的创建时间

虽然这是一个简单的实现,但它展示了URL短链接服务的基本原理和实现方法。在实际应用中,你可能需要:

  1. 添加数据库支持
  2. 实现Web接口
  3. 添加用户认证
  4. 增加链接有效期
  5. 添加更多的安全措施

希望本文对你理解URL短链接服务的实现有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值