如何用C语言编写一个简单的读卡购票系统程序?

2026-10-31 0 阅读

在编写一个简单的读卡购票系统程序时,我们需要考虑几个关键点:用户身份验证、余额查询、票价设置以及购票操作。以下是一个基本的C语言程序示例,用于实现这样一个系统。

系统需求分析

  1. 用户身份验证:通过读卡器读取用户卡片上的信息,验证用户身份。
  2. 余额查询:显示用户的当前余额。
  3. 票价设置:设定车票的价格。
  4. 购票操作:用户选择购票,系统扣除相应金额,并打印车票信息。

程序设计

1. 定义数据结构

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

#define MAX_NAME_LEN 50
#define MAX_BALANCE 1000

typedef struct {
    char name[MAX_NAME_LEN];
    char card_id[20];
    int balance;
} User;

User users[10]; // 假设最多有10个用户

2. 用户管理函数

// 添加用户
void addUser(User *user) {
    printf("Enter user name: ");
    scanf("%s", user->name);
    printf("Enter card ID: ");
    scanf("%s", user->card_id);
    user->balance = MAX_BALANCE; // 初始余额设为1000
}

// 根据卡号查找用户
User *findUserByCardID(const char *card_id) {
    for (int i = 0; i < 10; i++) {
        if (strcmp(users[i].card_id, card_id) == 0) {
            return &users[i];
        }
    }
    return NULL;
}

3. 购票函数

// 购票操作
void buyTicket(User *user, int ticket_price) {
    if (user->balance >= ticket_price) {
        user->balance -= ticket_price;
        printf("Ticket purchased successfully!\n");
        printf("Remaining balance: %d\n", user->balance);
    } else {
        printf("Insufficient balance!\n");
    }
}

4. 主函数

int main() {
    char card_id[20];
    User *user;
    int ticket_price = 10; // 假设票价为10

    // 添加用户示例
    User user1;
    addUser(&user1);

    // 用户读卡
    printf("Enter card ID to login: ");
    scanf("%s", card_id);
    user = findUserByCardID(card_id);

    if (user) {
        // 显示余额
        printf("Welcome, %s. Your balance is %d\n", user->name, user->balance);

        // 购票
        buyTicket(user, ticket_price);
    } else {
        printf("User not found!\n");
    }

    return 0;
}

注意事项

  • 程序中的用户数据存储在栈上,对于实际应用,你可能需要将用户数据持久化存储在文件或数据库中。
  • 此示例中的用户数量和余额是硬编码的,实际应用中需要动态管理。
  • 代码中没有进行错误处理,实际应用中需要考虑各种可能的错误情况。
  • 为了提高用户体验,可以考虑增加图形用户界面(GUI)。

这个程序提供了一个简单的购票系统的框架,你可以根据实际需求进行扩展和优化。

分享到: