代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业,
长期接单,信誉有保证,标价10-20每份,如有需要请加文章最下方QQ。
本文资源:https://download.csdn.net/download/weixin_47040861/88943508
1.题目要求
题目描述:
一车站每天有n个发车班次,每个班次都有一班次号(1、 2、3...n),固定的发车时间,固定的路线(起始站、 终点站),大致的行车时间,固定的额定载客量。如:
班次 | 发车时间 | 起点站 | 终点站 | 行车时间 | 额定数量 | 已订票人数 |
---|---|---|---|---|---|---|
1 | 8:00 | 十堰 | 丹江口 | 1 | 45 | 30 |
2 | 6:30 | 十堰 | 武当 | 0.5 | 40 | 40 |
3 | 7:00 | 十堰 | 武当 | 0.5 | 40 | 20 |
4 | 10:00 | 十堰 | 武当 | 0.5 | 40 | 2 |
功能要求:
(1)输入功能:可以一次完成若干条班次记录的输入。
(2)显示功能:完成全部班次记录的显示。
(3)插入功能:插入- -条或多条班次记录。
(4)删除功能:按照班次号删除指定记录。
(5)修改功能:按照班次号修改指定记录。
(6)查找功能:按时间区间或者终点站查找相关班次记录,并显示。
(7)排序功能:按额定数量大小进行排序。
扩展功能:
(1)增加统计功能。比如按时间区间统计额定总票数,已定票总数及剩余总票数等。
(2)班次记录信息从文件读入。
(3)将班次记录信息保存到文件中。
2.视频演示
【C语言期末/课程设计】车票管理系统(VC++2010项目)
3.使用流程
结构体和变量:
// 定义常量表示长度
#define LENGTH 30
// 定义结构体用于存储班次信息
struct BusSchedule {
int busNumber; // 班次号
char departureTime[10]; // 发车时间
char startingPoint[50]; // 起点站
char endPoint[50]; // 终点站
float travelTime; // 行车时间(小时)
int capacity; // 额定载量
int bookedSeats; // 已订票人数
};
// 声明一个公有的结构体数组用于存储数据
struct BusSchedule busSchedules[LENGTH];
// 声明一个公有的变量表示数组中数据的个数
int len = 0;
主函数:
首先通过调用getBusScheduleFromFile()函数从当前项目目录下的"BusSchedule.csv"文件中读取数据到结构体数组中,然后调用display()函数打印菜单,接下来使用scanf()接收用户输入的操作编号,根据编号调用对应的功能,每次执行完一次操作后暂停程序并保存修改结果到"BusSchedule.csv"文件中。
int main() {
int choice;
char c;
getBusScheduleFromFile();//读取文件数据
do {
// 显示菜单
displayMenu();
// 获取用户选择
printf("请输入选项:");
scanf("%d", &choice);
c=getchar();
// 根据用户选择执行相应的操作
switch (choice) {
case 1:getInput();break;
case 2:displayData();break;
case 3:insertData();break;
case 4:deleteData();break;
case 5:modifyData();break;
case 6:searchData();break;
case 7:sortData();break;
case 0:printf("程序已退出.\n");break;
default:printf("无效的选项,请重新输入.\n");break;
}
system("pause");
setBusScheduleToFile();
} while (choice != 0);
return 0;
}
1.添加函数 getInput():
- 用户输入要添加的班次信息的条数。
- 循环输入每一条班次信息,包括班次号、发车时间、起点站、终点站、行车时间、额定载量以及已订票人数。
- 在输入班次号时,通过循环验证确保班次号的唯一性,避免重复。
- 在输入发车时间时,通过循环验证确保时间格式的正确性,调用
isValidTimeFormat
函数来判断时间是否符合指定格式(例如8:00)。 - 在输入已订票人数时,通过循环验证确保已订票人数不大于额定载量,以保持逻辑正确性。
- 更新结构体数组的长度,将新添加的班次信息追加到数组末尾。
- 输出成功添加的班次信息数量。
2.显示函数 displayData():
- 首先,打印了一个表头,包含了各个列的标题。
- 接着,通过循环遍历结构体数组
busSchedules
中的每个班次信息。 - 对于每个班次信息,使用
printf
函数按照表格的格式打印各个字段的值。 - 最后,打印了一个表尾,形成表格的底边。
3.插入函数 insertData():
- 用户输入要插入数据的位置(班次编号后的位置,范围在1到数组长度之间)和要插入的班次信息条数。
- 验证插入位置的有效性,如果位置无效则输出提示信息并结束函数。
- 在数组中为插入的数据腾出位置,移动原有数据以便插入新的数据。
- 循环输入每一条要插入的班次信息,包括班次号、发车时间、起点站、终点站、行车时间、额定载量以及已订票人数。
- 在输入班次号时,通过循环验证确保班次号的唯一性,避免重复。
- 在输入发车时间时,通过循环验证确保时间格式的正确性,调用
isValidTimeFormat
函数来判断时间是否符合指定格式(例如8:00)。 - 在输入已订票人数时,通过循环验证确保已订票人数不大于额定载量,以保持逻辑正确性。
- 更新结构体数组的长度,将新插入的班次信息追加到数组中指定位置。
- 输出成功插入的班次信息数量和插入位置。
4.删除函数 deleteData():
- 用户输入要删除的班次编号。
- 遍历结构体数组
busSchedules
中的每个班次信息,查找与用户输入的班次编号相匹配的班次信息。 - 如果找到相匹配的班次编号,执行删除操作:
- 将数组中从找到的位置开始到数组末尾的元素依次向前移动一个位置,覆盖当前位置的数据。
- 减少数组长度
len
。 - 输出删除成功的提示信息,指明已删除的班次编号。
- 通过
break
退出循环。
- 如果未找到相匹配的班次编号,输出未找到的提示信息。
5.修改函数 modifyData():
- 用户输入要修改的班次编号。
- 遍历结构体数组
busSchedules
中的每个班次信息,查找与用户输入的班次编号相匹配的班次信息。 - 如果找到相匹配的班次编号,执行修改操作:
- 输出菜单,允许用户选择要修改的信息,包括发车时间、起点站、终点站、行车时间、额定载量、已订票人数,以及返回上级菜单。
- 用户输入选项编号,并根据选项执行相应的修改操作。
- 输出成功修改的提示信息。
- 通过
break
退出循环。
- 如果未找到相匹配的班次编号,输出未找到的提示信息。
6.查询函数 searchDate():
-
searchByTime
函数:- 用户输入起始时间和结束时间。
- 验证输入的时间格式,如果无效则输出错误信息并返回。
- 将用户输入的时间转换为分钟数(以便进行比较)。
- 遍历班次数组,找到符合时间区间的班次,打印这些班次的相关信息。
- 统计符合条件的班次的总额定票数、总已订票数和剩余票数,然后打印这些统计信息。
-
searchByEndPoint
函数:- 用户输入终点站。
- 遍历班次数组,找到终点站匹配的班次,打印这些班次的相关信息。
-
searchData
函数:- 用户输入操作编号,1 表示按时间区间查找,2 表示按终点站查找。
- 根据用户输入的操作编号执行相应的操作:
- 如果是 1,调用
searchByTime
函数。 - 如果是 2,用户再输入终点站,然后调用
searchByEndPoint
函数。 - 如果是其他数字,输出无效的操作编号。
- 如果是 1,调用
7.排序函数 sortDate():
- 声明新的结构体数组: 声明了一个新的结构体数组
sortedSchedules
,用于存储排序后的班次信息。 - 复制原数组内容: 使用一个循环将原数组
busSchedules
中的内容复制到新数组sortedSchedules
中。 - 使用冒泡排序进行升序排序: 使用冒泡排序算法对新数组中的班次信息按照额定数量的大小进行升序排序。
- 打印排序后的数组: 打印排序后的数组,包括表头、排序后的班次信息和表尾。
↓如有任何问题,请加下方QQ↓