软件测试01(源代码)

01

from datetime import datetime

# 星期中英文对照表
WEEKDAY_CN = {
    "Monday": "星期一",
    "Tuesday": "星期二",
    "Wednesday": "星期三",
    "Thursday": "星期四",
    "Friday": "星期五",
    "Saturday": "星期六",
    "Sunday": "星期日"
}


def get_weekday(date_str):
    """将日期字符串转换为中文星期"""
    for fmt in ("%Y-%m-%d", "%Y/%m/%d", "%Y.%m.%d"):
        try:
            date_obj = datetime.strptime(date_str, fmt)
            return WEEKDAY_CN[date_obj.strftime('%A')]
        except ValueError:
            continue
    return "无效日期"


def main():
    print("=== 日期转星期程序 ===")
    print("支持格式:YYYY-MM-DD / YYYY/MM/DD / YYYY.MM.DD")

    while True:
        input_str = input("\n请输入日期(输入 q 退出): ").strip()
        if input_str.lower() == 'q':
            print("程序已退出")
            break

        if not input_str:
            print("错误:输入内容不能为空")
            continue

        result = get_weekday(input_str)
        if result == "无效日期":
            print(f"错误:{input_str} 不是有效日期")
        else:
            print(f"查询结果:{input_str} 是 {result}")


if __name__ == "__main__":
    main()

02

import tkinter as tk
from tkinter import messagebox


def calculate_change():
    # 清空结果栏
    result_text.delete(1.0, tk.END)

    try:
        # 获取输入值
        R = int(entry_R.get())
        P = int(entry_P.get())

        # 输入验证
        if R < 0 or R > 100:
            messagebox.showerror("错误", "价格必须为0-100的整数")
            return
        if P < 0 or P > 100:
            messagebox.showerror("错误", "付款金额必须为0-100的整数")
            return
        if P < R:
            messagebox.showerror("错误", "付款金额不足")
            return

        # 计算找零
        change = P - R
        if change == 0:
            result_text.insert(tk.END, "无需找零")
            return

        # 分解货币组合
        N50 = change // 50
        remaining = change % 50

        N10 = remaining // 10
        remaining %= 10

        N5 = remaining // 5
        remaining %= 5

        N1 = remaining

        # 构建结果字符串
        result = []
        if N50 > 0:
            result.append(f"50元: {N50}张")
        if N10 > 0:
            result.append(f"10元: {N10}张")
        if N5 > 0:
            result.append(f"5元: {N5}张")
        if N1 > 0:
            result.append(f"1元: {N1}张")

        total = N50 + N10 + N5 + N1
        result.append(f"\n总张数: {total}")

        # 显示结果
        result_text.insert(tk.END, "\n".join(result))

    except ValueError:
        messagebox.showerror("错误", "请输入整数")


# 创建主窗口
root = tk.Tk()
root.title("找零钱最佳组合计算器")
root.geometry("400x300")

# 输入区域
frame_input = tk.Frame(root)
frame_input.pack(pady=10)

tk.Label(frame_input, text="商品价格 (0-100元):").grid(row=0, column=0, padx=5)
entry_R = tk.Entry(frame_input, width=10)
entry_R.grid(row=0, column=1, padx=5)

tk.Label(frame_input, text="付款金额 (0-100元):").grid(row=1, column=0, padx=5)
entry_P = tk.Entry(frame_input, width=10)
entry_P.grid(row=1, column=1, padx=5)

# 计算按钮
btn_calculate = tk.Button(root, text="计算找零", command=calculate_change)
btn_calculate.pack(pady=5)

# 结果展示区域
result_text = tk.Text(root, height=8, width=30)
result_text.pack(pady=10)

root.mainloop()

  03

import tkinter as tk
from tkinter import ttk, messagebox


class VendingMachine:
    @staticmethod
    def vend(coin, button):
        """自动售货机核心逻辑"""
        if coin not in [0.5, 1.0] or button not in ["橙汁", "啤酒"]:
            return "无效输入:金额或按钮不合法"

        if coin == 0.5:
            return f"送出{button}", "无找零"
        elif coin == 1.0:
            return f"送出{button}", "退回5角硬币"


class ClassicVendingGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("自动售货机模拟程序")
        self.root.geometry("400x300")

        # 初始化变量
        self.coin = tk.DoubleVar(value=0.0)
        self.drink = tk.StringVar()

        # 创建界面
        self.create_widgets()

        # 配置样式
        self.configure_style()

    def configure_style(self):
        """配置经典样式"""
        style = ttk.Style()
        style.configure("TRadiobutton", font=("微软雅黑", 10))
        style.configure("TButton", font=("微软雅黑", 10), width=8)
        style.configure("TLabel", font=("微软雅黑", 10))

    def create_widgets(self):
        """创建经典界面组件"""
        main_frame = ttk.Frame(self.root)
        main_frame.pack(padx=20, pady=10, fill=tk.BOTH, expand=True)

        # 投币区域
        coin_frame = ttk.LabelFrame(main_frame, text="请拨币")
        coin_frame.pack(fill=tk.X, pady=5)

        ttk.Radiobutton(coin_frame, text="无", variable=self.coin, value=0.0).pack(side=tk.LEFT, padx=5)
        ttk.Radiobutton(coin_frame, text="五角", variable=self.coin, value=0.5).pack(side=tk.LEFT, padx=5)
        ttk.Radiobutton(coin_frame, text="一元", variable=self.coin, value=1.0).pack(side=tk.LEFT, padx=5)

        # 商品选择区域
        product_frame = ttk.LabelFrame(main_frame, text="请选择商品")
        product_frame.pack(fill=tk.X, pady=5)

        ttk.Button(product_frame, text="啤酒", command=lambda: self.drink.set("啤酒")).pack(side=tk.LEFT, padx=10,
                                                                                            pady=5)
        ttk.Button(product_frame, text="橙汁", command=lambda: self.drink.set("橙汁")).pack(side=tk.LEFT, padx=10,
                                                                                            pady=5)

        # 操作按钮
        btn_frame = ttk.Frame(main_frame)
        btn_frame.pack(pady=10)

        ttk.Button(btn_frame, text="确定", command=self.process).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="复位", command=self.reset).pack(side=tk.LEFT, padx=5)

        # 输出区域
        output_frame = ttk.LabelFrame(main_frame, text="输出")
        output_frame.pack(fill=tk.X, pady=5)

        ttk.Label(output_frame, text="请取饮料:").pack(side=tk.LEFT, padx=5)
        self.drink_label = ttk.Label(output_frame, text="", foreground="blue")
        self.drink_label.pack(side=tk.LEFT)

        ttk.Label(output_frame, text="找零:").pack(side=tk.LEFT, padx=5)
        self.change_label = ttk.Label(output_frame, text="", foreground="green")
        self.change_label.pack(side=tk.LEFT)

    def process(self):
        """处理购买请求"""
        coin = self.coin.get()
        drink = self.drink.get()

        # 输入验证
        if coin == 0.0:
            messagebox.showerror("错误", "请先投币!")
            return
        if not drink:
            messagebox.showerror("错误", "请选择饮料!")
            return

        # 获取结果
        result = VendingMachine.vend(coin, drink)

        # 显示结果
        if isinstance(result, tuple):
            self.drink_label.config(text=result[0])
            self.change_label.config(text=result[1])
        else:
            messagebox.showerror("错误", result)

    def reset(self):
        """复位所有选项"""
        self.coin.set(0.0)
        self.drink.set("")
        self.drink_label.config(text="")
        self.change_label.config(text="")


if __name__ == "__main__":
    root = tk.Tk()
    app = ClassicVendingGUI(root)
    root.mainloop()

  04

import tkinter as tk
from tkinter import ttk, messagebox


# 服务查询核心逻辑
def check_services(route, cabin, flight_time):
    if route not in ["欧美", "国外非欧美", "国内"] or cabin not in ["商务舱", "经济舱"] or flight_time < 0:
        return ("输入错误", "输入错误")

    if route == "欧美":
        return ("有食物", "可播放电影")
    elif route == "国外非欧美":
        return ("有食物", "可播放电影") if cabin == "商务舱" else ("有食物", "不可播放电影")
    elif route == "国内":
        if cabin == "商务舱":
            return ("有食物", "不可播放电影")
        else:
            return ("有食物", "不可播放电影") if flight_time > 2 else ("无食物", "不可播放电影")


class AviationApp:
    def __init__(self, root):
        self.root = root
        self.root.title("航空服务查询系统")
        self.root.geometry("800x600")

        self.create_widgets()
        self.setup_test_cases()

    def create_widgets(self):
        # 输入区域
        input_frame = ttk.LabelFrame(self.root, text="查询条件", padding=10)
        input_frame.pack(pady=10, fill="x", padx=20)

        # 航线选择
        ttk.Label(input_frame, text="航线:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
        self.route_var = tk.StringVar()
        self.route_cb = ttk.Combobox(input_frame, textvariable=self.route_var,
                                     values=["欧美", "国外非欧美", "国内"], width=15)
        self.route_cb.grid(row=0, column=1, padx=5)

        # 舱位选择
        ttk.Label(input_frame, text="舱位:").grid(row=0, column=2, padx=5, pady=5, sticky="w")
        self.cabin_var = tk.StringVar()
        self.cabin_cb = ttk.Combobox(input_frame, textvariable=self.cabin_var,
                                     values=["商务舱", "经济舱"], width=15)
        self.cabin_cb.grid(row=0, column=3, padx=5)

        # 飞行时间输入
        ttk.Label(input_frame, text="飞行时间(小时):").grid(row=0, column=4, padx=5, sticky="w")
        self.time_entry = ttk.Entry(input_frame, width=10)
        self.time_entry.grid(row=0, column=5, padx=5)

        # 操作按钮
        btn_frame = ttk.Frame(self.root)
        btn_frame.pack(pady=10)

        ttk.Button(btn_frame, text="查询", command=self.query).pack(side="left", padx=5)
        ttk.Button(btn_frame, text="运行所有测试", command=self.run_all_tests).pack(side="left", padx=5)
        ttk.Button(btn_frame, text="退出", command=self.root.quit).pack(side="left", padx=5)

        # 结果展示区域
        result_frame = ttk.LabelFrame(self.root, text="测试报告", padding=10)
        result_frame.pack(fill="both", expand=True, padx=20, pady=10)

        # 结果表格
        self.tree = ttk.Treeview(result_frame, columns=("状态", "输入", "预期", "实际"), show="headings")
        self.tree.heading("状态", text="状态")
        self.tree.heading("输入", text="输入条件")
        self.tree.heading("预期", text="预期输出")
        self.tree.heading("实际", text="实际输出")
        self.tree.column("状态", width=80, anchor="center")
        self.tree.column("输入", width=200)
        self.tree.column("预期", width=150)
        self.tree.column("实际", width=150)

        vsb = ttk.Scrollbar(result_frame, orient="vertical", command=self.tree.yview)
        hsb = ttk.Scrollbar(result_frame, orient="horizontal", command=self.tree.xview)
        self.tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)

        self.tree.grid(row=0, column=0, sticky="nsew")
        vsb.grid(row=0, column=1, sticky="ns")
        hsb.grid(row=1, column=0, sticky="ew")

    def setup_test_cases(self):
        self.test_cases = [
            (("欧美", "商务舱", 1), ("有食物", "可播放电影")),
            (("欧美", "经济舱", 5), ("有食物", "可播放电影")),
            (("国外非欧美", "商务舱", 3), ("有食物", "可播放电影")),
            (("国外非欧美", "经济舱", 4), ("有食物", "不可播放电影")),
            (("国内", "商务舱", 1), ("有食物", "不可播放电影")),
            (("国内", "经济舱", 3), ("有食物", "不可播放电影")),
            (("国内", "经济舱", 2), ("无食物", "不可播放电影")),
            (("南极", "商务舱", 5), ("输入错误", "输入错误")),
            (("国内", "头等舱", 4), ("输入错误", "输入错误")),
        ]

    def query(self):
        try:
            route = self.route_var.get()
            cabin = self.cabin_var.get()
            time = float(self.time_entry.get())
            result = check_services(route, cabin, time)
            messagebox.showinfo("查询结果",
                                f"食物供应: {result[0]}\n影音服务: {result[1]}")
        except:
            messagebox.showerror("错误", "请输入有效的飞行时间")

    def run_all_tests(self):
        self.tree.delete(*self.tree.get_children())
        for idx, (input_data, expected) in enumerate(self.test_cases, 1):
            route, cabin, time = input_data
            result = check_services(route, cabin, time)
            status = "通过" if result == expected else "失败"

            # 添加颜色标签
            tag = "pass" if status == "通过" else "fail"
            self.tree.insert("", "end", values=(
                status,
                f"航线: {route}, 舱位: {cabin}, 时间: {time}h",
                f"{expected[0]}, {expected[1]}",
                f"{result[0]}, {result[1]}"
            ), tags=(tag,))

        # 配置标签样式
        self.tree.tag_configure("pass", foreground="green")
        self.tree.tag_configure("fail", foreground="red")


if __name__ == "__main__":
    root = tk.Tk()
    app = AviationApp(root)
    root.mainloop()

  

posted @ 2025-05-06 21:41  艾鑫4646  阅读(11)  评论(0)    收藏  举报