在数据库中录入火车信息时,那么多途经点该怎么建表,后续需要用visual studio窗体进行查询和购买,查询语句(c#)要怎么写(那么多站点)
完全没有思路啊,一趟火车的站点要不要拆分开来建表呢,那要建很多表,而且查询也很麻烦
用visual studio和数据库设计火车买票系统
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
wanghui0380 2023-12-04 08:55关注离散数学---图论--------虽然很多人不太像听到任何有关离散数学的词(当然学的时候太痛苦了,对吧)
你要做这个就最明确的思路是他。
然后知道图论了,就知道俺们一般如何表达图----那就是邻接矩阵 或稀疏矩阵然后你问要不要建表?如果你的老师不限制你,你可以直接用图数据库neo4j,如果你的老师限制你必须用某种数据库。
那么就问chartgpt把,反正我们已知所有的关键词和思路。问chartgpt不算作弊(就像现在考试还让带计算器,挺羡慕啊。我当初不让带,纯手算)下面是chartgpt的回答:
问题:mssql 使用邻接矩阵 建立 火车站点 关系,并查询指定站A到站B的线路和价格
回答:我不想排版了,直接用sql语句框,你凑合看把。
在 MSSQL 中使用邻接矩阵建立火车站点关系并查询指定站 A 到站 B 的线路和价格,你可以首先创建两个表:一个用于存储站点信息,另一个用于存储站点之间的连接关系。以下是一个示例: 假设有两个表格: 站点信息表格 Stations,包含站点的ID和名称: sql Copy code CREATE TABLE Stations ( StationID INT PRIMARY KEY, StationName NVARCHAR(100) ); -- 插入一些站点数据示例 INSERT INTO Stations (StationID, StationName) VALUES (1, '站点A'), (2, '站点B'), (3, '站点C'), ...; 邻接矩阵表格 Connections,存储站点之间的连接关系和价格: sql Copy code CREATE TABLE Connections ( StationAID INT, StationBID INT, Distance INT, -- 或者你可以使用 Price 来表示价格 CONSTRAINT FK_StationA FOREIGN KEY (StationAID) REFERENCES Stations(StationID), CONSTRAINT FK_StationB FOREIGN KEY (StationBID) REFERENCES Stations(StationID) ); -- 插入一些连接数据示例 INSERT INTO Connections (StationAID, StationBID, Distance) VALUES (1, 2, 50), -- 站点A到站点B的距离为50(可以根据实际情况修改字段含义和数据类型) (2, 3, 70), ...; 接下来,你可以编写一个存储过程或者一个查询来找到从站点 A 到站点 B 的线路和价格。这里是一个示例存储过程来实现此功能: sql Copy code CREATE PROCEDURE FindRouteAndPrice @StartStation NVARCHAR(100), @EndStation NVARCHAR(100) AS BEGIN DECLARE @StartStationID INT; DECLARE @EndStationID INT; -- 获取起始站点和目标站点的ID SELECT @StartStationID = StationID FROM Stations WHERE StationName = @StartStation; SELECT @EndStationID = StationID FROM Stations WHERE StationName = @EndStation; IF (@StartStationID IS NOT NULL AND @EndStationID IS NOT NULL) BEGIN -- 使用递归CTE查找路径 WITH RouteCTE AS ( SELECT StationAID, StationBID, Distance, CAST(StationAID AS NVARCHAR(MAX)) AS Route FROM Connections WHERE StationAID = @StartStationID UNION ALL SELECT con.StationAID, con.StationBID, con.Distance, RouteCTE.Route + '-' + CAST(con.StationBID AS NVARCHAR(MAX)) FROM Connections con INNER JOIN RouteCTE ON con.StationAID = RouteCTE.StationBID WHERE CHARINDEX(CONCAT('-', con.StationBID, '-'), '-' + RouteCTE.Route + '-') = 0 ) SELECT Route, SUM(Distance) AS TotalDistance FROM RouteCTE WHERE StationBID = @EndStationID GROUP BY Route; END ELSE BEGIN PRINT '指定的站点名称无效,请检查输入的站点名称。'; END END; 然后,你可以通过调用这个存储过程并传入起始站点和目标站点的名称来获取路径和价格信息。比如: sql Copy code EXEC FindRouteAndPrice @StartStation = '站点A', @EndStation = '站点B'; 请记住,这只是一个简单的示例。根据实际情况,你可能需要进行适当的修改以满足你的需求。同时,这种方式仅适用于小型数据集,对于大型数据集可能需要更高效的算法和模型来进行路径查询。ps:其实你也可以自己试试看问一下chartgpt,使用稀疏矩阵怎么弄,使用向量图怎么弄。说白了我这里其实告诉你的就是,学校那些看似毫无用处那些课程,实际上用处很大,应该好好学,好好用。别一头扎在UI应用上
评论 打赏 举报 编辑记录解决 1无用