🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
c语言代码运行不成功 某航空公司飞机购票模拟系统(服务器端)目前来看数据读取和存储出了问题 希望可以帮忙修改代码运行成功。
https://blog.csdn.net/2301_80123071/article/details/140338022
内容:
文件信息:
航线信息:航线编码、起点、终点、公里数、飞行时间。
航班信息:航班编号、航线编码、起飞时间、可售机票总数、票价、当前状态(准备、已出票、售完、已结束)。
售票信息:航班编号、顾客ID、顾客姓名、购票时间(y-m-d-h-m-s)。
设计程序能实现以下航空公司服务器端功能:
(1)航线的维护(创建、修改(按航线编号)、删除(按航线编号,不能删除已出票、售完航班))
(2) 航班的维护(创建、修改(按航班编号)、删除(按航班编号,不能删除已出票、售完航班))。
(3)显示航班列表。
(4)显示指定航班的售票情况(明细和统计值)。
(5)显示各航班的销售情况。
(6)按起飞时间对航班信息进行升序排序。
(7)保存:数据永久性存放至外存。
(8)读取:将存放于外存的数据读入内存继续操作。
友情提示:
如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。
解决方案
如下是上述问题的解决方案,仅供参考:
根据您提供的代码和描述,您的C语言程序是一个航空公司飞机购票模拟系统,目前存在数据读取和存储的问题。以下是一些可能的问题和建议的解决方法:
-
文件打开模式:
在saveData
和loadData
函数中,您使用fopen
时的模式可能不正确。例如,在loadData
中,您使用"all_data.txt"
作为文件名,但没有指定模式。通常,如果您要读取和写入二进制数据,应使用"wb"
(写入)和"rb"
(读取)模式。 -
数据写入和读取:
您的saveData
函数中使用fwrite
直接写入结构体数据,这是正确的。但在loadData
函数中,您似乎尝试以文本方式读取数据,这可能不匹配您写入时的格式。如果使用fwrite
写入,应使用fread
读取。 -
时间字符串转换:
在loadData
中,您使用sscanf
来解析时间字符串,但未提供正确的格式字符串。例如,对于tempFlight.departure_time
,您应该使用与stringToTime
函数中相应的sscanf
格式。 -
内存分配:
在loadData
函数中,当创建新节点时,您需要确保为新读取的数据分配内存。例如,newNode = createNodeWithRoute(tempRoute);
应该在读取数据后立即创建。 -
链表操作:
在loadData
函数中,您需要确保正确地将新读取的节点添加到链表中。您可能需要在链表末尾添加节点,而不是在链表的开始。 -
错误处理:
在fopen
失败时,您应该添加适当的错误处理代码,比如打印错误消息并退出程序。 -
调试:
使用printf
或其他调试工具来检查程序在运行过程中的状态,特别是文件读写和链表操作部分。 -
代码风格:
您的代码中存在一些风格问题,比如在loadData
函数中isRoute
、isFlight
和isTicket
变量的使用,这可能会引起逻辑上的混淆。
以下是修改后的 loadData
函数示例,假设您使用二进制方式读写数据:
void loadData(const char *filename, Node **routes, Node **flights, Node **tickets) {
FILE *file = fopen(filename, "rb");
if (file == NULL) {
perror("无法打开文件");
return;
}
// 读取数据到链表
while (!feof(file)) {
DataType type;
size_t read_count = fread(&type, sizeof(DataType), 1, file);
if (read_count == 0) break; // 检查是否到达文件末尾
switch (type) {
case ROUTE_DATA:
{
Route tempRoute;
read_count = fread(&tempRoute, sizeof(Route), 1, file);
if (read_count == 1) {
*routes = createNodeWithRoute(tempRoute);
addNodeToLinkedList(routes, *routes);
}
break;
}
case FLIGHT_DATA:
{
Flight tempFlight;
read_count = fread(&tempFlight, sizeof(Flight), 1, file);
if (read_count == 1) {
*flights = createNodeWithFlight(tempFlight);
addNodeToLinkedList(flights, *flights);
}
break;
}
case TICKET_DATA:
{
Ticket tempTicket;
read_count = fread(&tempTicket, sizeof(Ticket), 1, file);
if (read_count == 1) {
*tickets = createNodeWithTicket(tempTicket);
addNodeToLinkedList(tickets, *tickets);
}
break;
}
}
}
fclose(file);
printf("数据加载成功。\n");
}
请注意,这只是一个示例,您可能需要根据实际的数据结构和逻辑进行调整。希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更详细的错误信息或描述,以便进一步分析。
希望如上措施及解决方案能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。