600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C语言航班信息管理系统_增删查改

C语言航班信息管理系统_增删查改

时间:2021-09-03 04:26:22

相关推荐

C语言航班信息管理系统_增删查改

C语言航班信息管理系统来了!

之前在我写好了代码后发布了一篇文章,但是那时候还没有公开代码。

之前的文章/MsADA

今天答辩完了,那么我就公开代码了。

项目地址在/superverybest/FIMS

答辩PPT也在这里。

我承认!!代码是有点凌乱......

目录

概述

系统功能实现

初始化

加载

容量检查

登录

浏览航班信息

添加航班信息

查询航班信息

删除航班信息

修改航班信息

保存航班信息

关于

退出

代码实现

概述

FIMS(Flight Information Management System)是一款航班信息管理系统软件。该软件基于C语言,在Visual Studio 环境下开发。其本质是增删查改,可以实现对航班信息的浏览、添加、查询、删除、修改以及保存。此软件具有用户界面友好、易操作的特点,助力航班相关工作人员提高工作效率。

作者熟练Git,并且常在Git上更新代码,所以决定将此设计在答辩后分享到自己的Gitee中,项目地址为/superverybest/FIMS。为防止抄袭,作者选择在答辩完成前不公开代码。

系统功能实现

采用结构体存储航班信息。用结构体套用结构体,一个结构体用于存放航班的具体信息,另一个结构体用来说明当前容量、已存放的航班信息的数量。

初始化

采用动态内存管理,向系统申请一定数量的空间。为了节省空间,软件默认向程序申请3个航班信息结构体大小的空间。并且置size的值为0,置capacity的值为3。

加载

此功能紧随初始化功能,在初始化后读取.dat文件。如果.dat文件不存在就会有错误提示,存在的话就会将文件中已存放的航班信息加载到程序中。在加载期间还会进行容量检查。

容量检查

用于检查已开辟的空间是否足够使用,若不满足使用就扩容。

登录

主要采用判断语句和循环语句实现密码的输入,使用三目操作符来判断密码的正确性,并且用“*”来遮掩密码,以确保系统和数据的安全。

浏览航班信息

用于浏览航班信息,若size值为0则会提示航班信息为空,否则就显示航班信息。采用冒泡排序,对航班号进行排序并显示。

添加航班信息

用户首先要键入航班号,以确保不能添加相同班次号航班信息。若存在则提示不能添加,若不存在则接着输入其它信息。

查询航班信息

这里提供了两个选择,一个是按航班号扫查询,一个是按目的地查询。如果查找到了相关航班信息,则会对航班信息使用冒泡排序法按单价排序,然后显示出来。

删除航班信息

用户输入航班号之后,程序先是检查航班是否存在,若存在就找到航班信息在结构体数组中的下标,然后遍历将它后边的信息往前覆盖。

修改航班信息

用户输入航班号之后,程序先是检查航班是否存在,若存在则进一步更改航班信息。在更改航班信息的过程中,也要对预期的航班号进行检查,检查其是否存在,然后进一步修改其它信息。

保存航班信息

此功能将程序中现存的信息保存到.dat文件中。如果.dat文件不存在就报错,如果存在就能成功保存信息。

关于

显示软件的相关信息,如版本、作者、项目地址等。

退出

并非简单地退出,而是带有保存功能的退出。

代码实现

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include< conio.h>#include<windows.h>#define DEFAULT_SZ 3void CheckCapacity(struct List* ps);void Destroy(struct List* ps);void Save(struct List* ps);void menu();enum Option {EXIT,GLANCEOVER,ADD,SEARCH,DEL,MODIFY,SAVE,PASSWORD,ABOUT,};typedef struct FlightInfo{long Number;char Depature[20];char Destination[20];int StartTime_hour;int StartTime_min;int ArriveTime_hour;int ArriveTime_min;int volume;float price;}FlightInfo;typedef struct List{struct FlightInfo *data;int size;int capacity;}List;typedef struct List_SortByPrice{struct FlightInfo data[1000];int size;}List_SortByPrice;struct List_SortByPrice sortbyprice;void Load(struct List* ps){FlightInfo tmp = { 0 };FILE* PfRead = fopen("plane.dat","rb");if (PfRead == NULL){printf("Load:%s\n", strerror(errno));return;}while (fread(&tmp, sizeof(FlightInfo), 1, PfRead)){CheckCapacity(ps);ps->data[ps->size] = tmp;ps->size++;}fclose(PfRead);PfRead = NULL;}void ReturnOrEnd(struct List* ps){int RETURN = 2;while (RETURN != 1 && RETURN != 0){printf("请选择(0)返回主页菜单 (1)保存航班信息并退出系统\n");scanf("%d", &RETURN);if (RETURN == 0){system("cls");return;}else if (RETURN == 1){Save(ps);Destroy(ps);printf("退出系统\n");exit(0);}else{system("cls");printf("选择错误!请重新选择\n");}}}void InitList(struct List* ps){ps->data = (struct FlightInfo*)malloc(DEFAULT_SZ * sizeof(struct FlightInfo));if (ps->data == NULL){return;}ps->size = 0;ps->capacity = DEFAULT_SZ;Load(ps);}void Destroy(struct List* ps){free(ps->data);ps->data = NULL;}int FindByNumber( struct List* ps,long search_Number){int i = 0;for (i = 0;i < ps->size;i++){if (ps->data[i].Number == search_Number){return i;}}return -1;}int FindByDestination(struct List* ps, char search_Destination[20]){int i = 0;int j = 0;for (i = 0;i < ps->size;i++){if (strcmp(ps->data[i].Destination,search_Destination)==0){sortbyprice.data[j] = ps->data[i];j++;sortbyprice.size++;}}if (sortbyprice.size == 0)return -1;}void Del(struct List* ps){system("cls");long del_Number;printf("请输入要删除航班的航班号:\n");scanf("%ld", &del_Number);int pos = FindByNumber(ps, del_Number);if (pos == -1){printf("要删除的航班信息不存在!\n");}else{int j = 0;for (j = pos;j < ps->size;j++){ps->data[j] = ps->data[j + 1];}ps->size--;printf("删除成功\n");}ReturnOrEnd(ps);}void Search(struct List* ps){system("cls");int n = 2;while (n != 1 && n != 0){printf("请选择\n(0)按照航班号查询 (1)按照目的地查询\n");scanf("%d", &n);if (n == 0){long search_Number;printf("请输入要查找的航班的航班号\n");scanf("%ld", &search_Number);int pos = FindByNumber(ps, search_Number);if (pos == -1){printf("要查找的航班不存在\n");}else{printf("%8s %10s %10s %s %s %s %s\n", "航班号", "出发地", "目的地", "出发时间", "到达时间", "额定载客量", "单价");printf("%8ld %10s %10s %2d:%2d %2d:%2d%-8d %-10.2f\n", ps->data[pos].Number,ps->data[pos].Depature, ps->data[pos].Destination, ps->data[pos].StartTime_hour, ps->data[pos].StartTime_min, ps->data[pos].ArriveTime_hour, ps->data[pos].ArriveTime_min, ps->data[pos].volume, ps->data[pos].price);}}else if (n == 1){char search_Destination[20];printf("请输入要查找的航班的目的地\n");scanf("%s", &search_Destination);int pos = FindByDestination(ps, search_Destination);if (pos == -1){printf("要查找的航班不存在\n");}else{struct FlightInfo sort;int i = 0;int j = 0;for (i = 0;i < sortbyprice.size - 1; i++){for (j = i;j < sortbyprice.size - 1;j++){if (sortbyprice.data[j].price >sortbyprice.data[j + 1].price){sort = sortbyprice.data[j];sortbyprice.data[j] = sortbyprice.data[j + 1];sortbyprice.data[j + 1] = sort;}}}printf("%8s %10s %10s %s %s %s %s\n", "航班号", "出发地", "目的地", "出发时间", "到达时间", "额定载客量", "单价");for (i = 0;i < sortbyprice.size;i++){printf("%8ld %10s %10s %2d:%2d %2d:%2d%-8d %-10.2f\n", sortbyprice.data[i].Number,sortbyprice.data[i].Depature,sortbyprice.data[i].Destination,sortbyprice.data[i].StartTime_hour,sortbyprice.data[i].StartTime_min,sortbyprice.data[i].ArriveTime_hour,sortbyprice.data[i].ArriveTime_min,sortbyprice.data[i].volume,sortbyprice.data[i].price);}}sortbyprice.size = 0;}else{printf("选择错误,请重新选择!\n");}}ReturnOrEnd(ps);}void Modify(struct List* ps){system("cls");long modify_Number;printf("请输入要修改的航班的航班号\n");scanf("%ld", &modify_Number);int pos=FindByNumber(ps, modify_Number);if (pos == -1){printf("要修改的航班信息不存在\n");}else{long search_Number = 0;printf("请输入要添加的航班号:\n");scanf("%ld", &search_Number);int pos = FindByNumber(ps, search_Number);if (pos != -1){printf("此航班信息已存在,您不能重复添加。您可以对其进行删除或修改\n");ReturnOrEnd(ps);}else{printf("航班信息为空,您可以写入航班信息\n\n");printf("请输入信息:\n");printf("分别为出发地、目的地、出发时间、到达时间、额定载客量、单价\n");printf("以空格为间隔\n");printf("注意!时间输入格式如下:23 15表示二十三时十五分\n");ps->data[ps->size].Number = search_Number;scanf("%s", ps->data[pos].Depature);scanf("%s", ps->data[pos].Destination);scanf("%d", &(ps->data[pos].StartTime_hour));scanf("%d", &(ps->data[pos].StartTime_min));scanf("%d", &(ps->data[pos].ArriveTime_hour));scanf("%d", &(ps->data[pos].ArriveTime_min));scanf("%d", &(ps->data[pos].volume));scanf("%f", &(ps->data[pos].price));printf("修改完成\n");}}ReturnOrEnd(ps);}void Save(struct List* ps){FILE* pfWrite = fopen("plane.dat", "wb");if (pfWrite == NULL){printf("Save:%s", strerror(errno));return ;}int i = 0;for (i = 0;i < ps->size;i++){fwrite(&(ps->data[i]), sizeof(FlightInfo), 1, pfWrite);}system("cls");printf("保存成功\n");fclose(pfWrite);pfWrite = NULL;}void GlanceOver( struct List* ps){system("cls");if (ps->size == 0){printf("航班信息为空\n");}else{int i = 0;int j = 0;int total = 0;printf("%8s %10s %10s %s %s %s %s\n", "航班号", "出发地", "目的地", "出发时间", "到达时间", "额定载客量", "单价");struct FlightInfo sort;for (i = 0;i < ps->size-1; i++){for (j = i;j < ps->size-1;j++){if (ps->data[j].Number < ps->data[j + 1].Number){sort = ps->data[j];ps->data[j] = ps->data[j+1];ps->data[j + 1] = sort;}}}for (i = 0;i < ps->size;i++){printf("%8ld %10s %10s %2d:%2d %2d:%2d%-8d %-10.2f\n",ps->data[i].Number, ps->data[i].Depature, ps->data[i].Destination, ps->data[i].StartTime_hour, ps->data[i].StartTime_min, ps->data[i].ArriveTime_hour, ps->data[i].ArriveTime_min, ps->data[i].volume, ps->data[i].price);if ((i+1) % 20 == 0){total += 2;printf("已显示%d条航班信息,按任意键继续显示",total*10);system("pause");}}}ReturnOrEnd(ps);}void CheckCapacity(struct List* ps){if (ps->size == ps->capacity){struct FlightInfo*ptr= realloc(ps->data,(ps->capacity+2)*sizeof(struct FlightInfo));if (ptr != NULL){ps->data = ptr;ps->capacity += 2;printf("增容成功\n");}else{printf("增容失败\n");}}}void Add(struct List* ps){system("cls");long search_Number = 0;CheckCapacity(ps);printf("请输入要添加的航班号:\n");scanf("%ld",&search_Number);int pos = FindByNumber(ps, search_Number);if (pos != -1){printf("此航班信息已存在,您不能重复添加。您可以对其进行删除或修改\n");ReturnOrEnd(ps);}else{printf("航班信息为空,您可以写入航班信息\n\n");printf("请输入信息:\n");printf("分别为出发地、目的地、出发时间、到达时间、额定载客量、单价\n");printf("以空格为间隔\n");printf("注意!时间输入格式如下:23 15表示二十三时十五分\n");ps->data[ps->size].Number = search_Number;//scanf("%ld", &(ps->data[ps->size].Number));scanf("%s", ps->data[ps->size].Depature);scanf("%s", ps->data[ps->size].Destination);scanf("%d", &(ps->data[ps->size].StartTime_hour));scanf("%d", &(ps->data[ps->size].StartTime_min));scanf("%d", &(ps->data[ps->size].ArriveTime_hour));scanf("%d", &(ps->data[ps->size].ArriveTime_min));scanf("%d", &(ps->data[ps->size].volume));scanf("%f", &(ps->data[ps->size].price));ps->size++;printf("添加成功\n");ReturnOrEnd(ps);}}void Password(struct List* ps){system("cls");printf("由于作者能力有限,无法解决安全性问题,\n");printf("若想修改系统密码,请自行进入此项目仓库下载程序代码并修改密码\n");printf("项目地址:/superverybest/FIMS \n");ReturnOrEnd(ps);}void About(struct List* ps){system("cls");printf("********************************************************\n\n");printf(" 关于FIMS \n\n\n");printf("FIMS由三位在校本科生大一期间创建。\n");printf("FIMS本来只是他们的课程设计,当他们完成这个项目后,并没有把它据为己有,\n");printf("作者深知未来必将是更加开发和开源的时代,所以决定在完成答辩后将其开源。\n");printf("虽然只是很不起眼的小项目,但在软件工程师的世界里,有一种精神,叫做开源精神。\n");printf("它的本质,就是“我做了一个东西,大家来用吧!”");printf("这样一种Geek的精神,同时也有让世界变得更加美好的愿望。\n\n");printf("软件名称:Flight Information Management System\n");printf("简称:FIMS\n");printf("版本:0.0.0.1\n");printf("日期:_12_27\n");printf("编译及测试环境:Visual Studio \n");printf("作者:王逸飞、汪帅桦、李珅\n");printf("此项目为公开开源项目,项目地址/superverybest/FIMS\n\n");printf("联系我们 \n\n");printf("作者邮箱:superverybest@\n");printf("作者博客:/m0_60464690 \n");printf("作者Gitee(代码仓库):/superverybest \n");printf("********************************************************\n");ReturnOrEnd(ps);}int login(){char word[10] = { 0 };char c;char password[10] = "123456789";int i = 0;printf("\n\n");printf("\t--------------------------------------------------------\n");printf("\t-------------------- FIMS登录页面---------------------\n");printf("\t--------------------------------------------------------\n");printf("\n\n");printf("\t请输入密码.\n");printf("\t密码:\n\t按下回车键结束输入\n\t");while (1){c = _getch();if (c == '\r'){break;}else if (c == '\b'){printf("\b \b");--i;}else{word[i++] = c;printf("*");}}system("cls");return((strcmp(password, word) == 0) ? 1 : 0);}void menu(){printf("********************************************************\n\n");printf(" 欢迎使用FIMS \n");printf("Flight Information Management System \n\n\n");printf(" 1.浏览班次信息 \n\n");printf(" 2.添加航班信息 \n\n");printf(" 3.查询航班信息 \n\n");printf(" 4.删除航班信息 \n\n");printf(" 5.修改航班信息 \n\n");printf(" 6.保存航班信息 \n\n");printf(" 7.系统密码问题 \n\n");printf(" 8.关于 \n\n");printf(" 0.退出 \n\n\n");printf("********************************************************\n");}int main(){struct List list;int input = 0;InitList(&list);if (login() == 1){}else{printf("密码错误,为防止暴力破解密码系统已关闭!\n");printf("您可以重新打开程序再次尝试\n");return 0;}do{menu();scanf("%d", &input);switch (input){case GLANCEOVER:GlanceOver(&list);break;case ADD:Add(&list);break;case SEARCH:Search(&list);break;case DEL:Del(&list);break;case MODIFY:Modify(&list);break;case EXIT:Save(&list);Destroy(&list);printf("退出系统\n");break;case SAVE:Save(&list);break;case ABOUT:About(&list);break;case PASSWORD:Password(&list);break;default:printf("输入错误,请重新输入!\n");break;}} while (input);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。