go
复制代码
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"strconv"
"strings"
_ "github.com/mattn/go-sqlite3"
)
type Result struct {
InsuredName string
Money string
IdCard string
AgeStatus string
Payer string
ShowPayer bool
}
func main() {
http.HandleFunc("/", indexHandler)
fmt.Println("========================================")
fmt.Println(" 参保信息查询系统已启动")
fmt.Println(" 访问地址:http://localhost:9999")
fmt.Println(" 关闭本窗口即可退出程序")
fmt.Println("========================================")
err := http.ListenAndServe(":9999", nil)
if err != nil {
log.Fatal("端口被占用,请关闭程序重试")
}
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
idCard := ""
results := []Result{}
showMsg := ""
msgColor := "green"
if r.Method == http.MethodPost {
idCard = strings.TrimSpace(r.FormValue("idcard"))
if idCard != "" {
results = querySQL(idCard)
if len(results) == 0 {
// ========== 你要的红色提示 ==========
showMsg = fmt.Sprintf("未参保 - 2026年 - 输入的身份证:%s", idCard)
msgColor = "red"
}
}
}
showPayerColumn := false
for _, v := range results {
if v.ShowPayer {
showPayerColumn = true
break
}
}
html := `
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>参保查询</title>
<style>
body{max-width:1000px;margin:40px auto;font-family:微软雅黑;font-size:16px}
.query{background:#f5f5f5;padding:20px;border-radius:8px;margin-bottom:20px}
input{padding:10px 12px;width:340px;font-size:16px}
button{padding:10px 25px;background:#0d6efd;color:white;border:none;border-radius:4px;cursor:pointer}
table{width:100%;border-collapse:collapse;margin-top:20px}
th,td{border:1px solid #888;padding:10px;text-align:left}
th{background:#eee}
.age-yes{color:green;font-weight:bold}
.age-no{color:red;font-weight:bold}
.msg{font-size:18px;font-weight:bold;margin:20px 0;}
</style>
</head>
<body>
<h2>参保信息查询</h2>
<div class="query">
<form method="post">
被保险人证件号:
<input type="text" name="idcard" value="` + idCard + `" placeholder="输入身份证号" required>
<button type="submit">查询</button>
</form>
</div>
`
// ========== 提示语(无数据时显示红色) ==========
if showMsg != "" {
html += `<div class="msg" style="color:` + msgColor + `;">` + showMsg + `</div>`
}
// ========== 有数据才显示表格 ==========
if len(results) > 0 {
html += "<table>"
html += "<tr><th>被保险人</th><th>金额</th><th>被保险人证件号</th><th>年龄状态</th>"
if showPayerColumn {
html += "<th>付款人</th>"
}
html += "</tr>"
for _, v := range results {
html += "<tr>"
html += "<td>" + v.InsuredName + "</td>"
html += "<td>" + v.Money + "</td>"
html += "<td>" + v.IdCard + "</td>"
html += "<td>" + v.AgeStatus + "</td>"
if v.ShowPayer {
html += "<td>" + v.Payer + "</td>"
}
html += "</tr>"
}
html += "</table>"
}
html += "</body></html>"
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Write([]byte(html))
}
func querySQL(idCard string) []Result {
db, err := sql.Open("sqlite3", "bank.db")
if err != nil {
log.Println("数据库打开失败:", err)
return nil
}
defer db.Close()
rows, err := db.Query(`
SELECT 被保险人,付款人,付款方式,金额,被保险人证件号,年龄
FROM cbsix
WHERE 被保险人证件号 = ?`, idCard)
if err != nil {
log.Println("查询失败:", err)
return nil
}
defer rows.Close()
var list []Result
for rows.Next() {
var insuredName, payer, payType, money, idCardVal, ageStr string
_ = rows.Scan(&insuredName, &payer, &payType, &money, &idCardVal, &ageStr)
age, _ := strconv.Atoi(ageStr)
ageStatus := ""
if age >= 31 && age <= 75 {
ageStatus = `<span class="age-yes">31-75周岁</span>`
} else {
ageStatus = `<span class="age-no">非31-75周岁</span>`
}
showPayer := false
if payType == "集体出资" || payType == "财政出资" {
showPayer = true
}
list = append(list, Result{
InsuredName: insuredName,
Money: money,
IdCard: idCardVal,
AgeStatus: ageStatus,
Payer: payer,
ShowPayer: showPayer,
})
}
return list
}