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
}
}
这个程序包含了以下功能:
- 自行车类型选择:提供4种不同类型的自行车
- 租赁天数输入:限制在1-30天范围内
- 配件选择:可以选择多个配件,输入0结束选择
- 价格计算:
- 自行车租赁费用 = 单价 × 天数
- 配件费用 = 配件单价 × 天数
- 根据租赁天数提供折扣(3天以上5%,7天以上10%)
- 详细账单显示:显示所有费用明细
要运行这个程序:
- 保存为
bike_rental.go - 打开终端,运行:
go run bike_rental.go - 按照提示输入信息
程序会引导用户完成整个租赁流程,并显示详细的费用计算。这个实现包含了错误处理,确保用户输入有效的数据。

