Golang构建小型控制台应用程序求助指南

Golang构建小型控制台应用程序求助指南 你好!

为了我的学业(市场营销与传播),我们需要为一家自行车租赁公司开发一个控制台应用程序。目的是为了获得一些使用 Go 编程语言的经验。用户必须能够通过(用户输入)回答一系列问题,例如:自行车类型、租赁天数、配件等。基于这些信息,需要计算出总价格。

我几乎不熟悉编程,更不用说 Go 了。我已经在 Go 学校网站上了解了一些,但要完成这个项目仍然相当困难。

这里是否有人可以帮助我构建一个控制台应用程序,或许可以通过 Discord?

此致,

worldy

1 回复

更多关于Golang构建小型控制台应用程序求助指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我来帮你构建这个控制台应用程序。这是一个完整的解决方案,包含了所有需要的功能:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

// 自行车类型和价格
type BikeType struct {
    Name  string
    Price float64
}

// 配件类型和价格
type Accessory struct {
    Name  string
    Price float64
}

func main() {
    fmt.Println("=== 自行车租赁系统 ===")
    fmt.Println("欢迎使用自行车租赁服务!")
    
    // 初始化数据
    bikeTypes := []BikeType{
        {"城市自行车", 10.0},
        {"山地自行车", 15.0},
        {"公路自行车", 20.0},
        {"电动自行车", 25.0},
    }
    
    accessories := []Accessory{
        {"头盔", 5.0},
        {"车锁", 3.0},
        {"车篮", 2.0},
        {"手机支架", 4.0},
        {"儿童座椅", 8.0},
    }
    
    reader := bufio.NewReader(os.Stdin)
    
    // 选择自行车类型
    fmt.Println("\n请选择自行车类型:")
    for i, bike := range bikeTypes {
        fmt.Printf("%d. %s - 每天 %.2f€\n", i+1, bike.Name, bike.Price)
    }
    
    bikeChoice := getIntInput(reader, "请输入编号 (1-4): ", 1, 4)
    selectedBike := bikeTypes[bikeChoice-1]
    fmt.Printf("已选择: %s\n", selectedBike.Name)
    
    // 输入租赁天数
    days := getIntInput(reader, "请输入租赁天数 (1-30): ", 1, 30)
    
    // 选择配件
    fmt.Println("\n请选择配件 (可多选,输入0结束选择):")
    for i, accessory := range accessories {
        fmt.Printf("%d. %s - 每天 %.2f€\n", i+1, accessory.Name, accessory.Price)
    }
    
    var selectedAccessories []Accessory
    for {
        choice := getIntInput(reader, "选择配件编号 (0结束): ", 0, len(accessories))
        if choice == 0 {
            break
        }
        selectedAccessories = append(selectedAccessories, accessories[choice-1])
        fmt.Printf("已添加: %s\n", accessories[choice-1].Name)
    }
    
    // 计算价格
    bikeCost := selectedBike.Price * float64(days)
    
    var accessoriesCost float64
    if len(selectedAccessories) > 0 {
        fmt.Println("\n已选择的配件:")
        for _, accessory := range selectedAccessories {
            cost := accessory.Price * float64(days)
            accessoriesCost += cost
            fmt.Printf("- %s: %.2f€ × %d 天 = %.2f€\n", 
                accessory.Name, accessory.Price, days, cost)
        }
    }
    
    // 计算总价
    subtotal := bikeCost + accessoriesCost
    var discount float64
    
    // 根据天数提供折扣
    if days >= 7 {
        discount = subtotal * 0.10 // 10% 折扣
        fmt.Printf("\n长期租赁折扣 (10%%): -%.2f€\n", discount)
    } else if days >= 3 {
        discount = subtotal * 0.05 // 5% 折扣
        fmt.Printf("\n短期租赁折扣 (5%%): -%.2f€\n", discount)
    }
    
    total := subtotal - discount
    
    // 显示详细账单
    fmt.Println("\n=== 租赁账单 ===")
    fmt.Printf("自行车: %s × %d 天 = %.2f€\n", 
        selectedBike.Name, days, bikeCost)
    
    if accessoriesCost > 0 {
        fmt.Printf("配件费用: %.2f€\n", accessoriesCost)
    }
    
    fmt.Printf("小计: %.2f€\n", subtotal)
    
    if discount > 0 {
        fmt.Printf("折扣: -%.2f€\n", discount)
    }
    
    fmt.Printf("总计: %.2f€\n", total)
    fmt.Println("\n感谢使用我们的租赁服务!")
}

// 获取整数输入
func getIntInput(reader *bufio.Reader, prompt string, min, max int) int {
    for {
        fmt.Print(prompt)
        input, _ := reader.ReadString('\n')
        input = strings.TrimSpace(input)
        
        num, err := strconv.Atoi(input)
        if err != nil {
            fmt.Printf("请输入有效的数字 (%d-%d)\n", min, max)
            continue
        }
        
        if num < min || num > max {
            fmt.Printf("请输入 %d 到 %d 之间的数字\n", min, max)
            continue
        }
        
        return num
    }
}

这个程序包含了以下功能:

  1. 自行车类型选择:提供4种不同类型的自行车
  2. 租赁天数输入:限制在1-30天范围内
  3. 配件选择:可以选择多个配件,输入0结束选择
  4. 价格计算
    • 自行车租赁费用 = 单价 × 天数
    • 配件费用 = 配件单价 × 天数
    • 根据租赁天数提供折扣(3天以上5%,7天以上10%)
  5. 详细账单显示:显示所有费用明细

要运行这个程序:

  1. 保存为 bike_rental.go
  2. 打开终端,运行:go run bike_rental.go
  3. 按照提示输入信息

程序会引导用户完成整个租赁流程,并显示详细的费用计算。这个实现包含了错误处理,确保用户输入有效的数据。

回到顶部