这学期的数据结构课结了,上个周做了课程设计,在此总结下(晒一下)


先是老师给了选题,我选了航空客运订票系统这个选题。

这个系统定义的也很简单,就是两个单链表,一个航班的,一个顾客的,再对它俩进行遍历、增加、查找、删除,来实现订票、取消订票、查询顾客、查询航班。

可是课程设计为期一个星期,总不能这么就完了吧,这不就啥也没干嘛!      我转念一想,不行!我必须做出和其他人不一样的程序。

可是栈、图、串在这个项目里好像用不到啊,开始想把单链表换成双链表,但感觉和大家比起来没啥突破。

最后决定做win32程序。

由于程序要在xp环境下运行,编译器用vc++6.0。由于编译器过于老旧必须下一个Strsafe相关的头文件以及链接库。

考虑到程序的规模不是很大,就用API来做。下面附上代码。

StdAfx.h头文件(关于数据结构和部分函数的定义)

// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers#include <windows.h>
#include <conio.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define OK 1
#define ERROR 0 typedef struct airlinezzz{  /* 飞机航班的结构定义 */         char air_num[8];         char plane_num[8];         char end_place[20];         int  total;         int  left;          struct airlinezzz *next; }airlinezzz;  typedef struct customerzzz{ /*顾客信息的结构定义 */         char name[8];         char air_num[8];  int seat_num;         struct customerzzz *next; }customerzzz;
airlinezzz *start_air();   /*创建航班链表 */
customerzzz *start_cus(); /*创建顾客链表 */
airlinezzz *modefy_airline(airlinezzz *l,char *air_num); /* 修改航班的空余座位信息 */ int insert_air(airlinezzz **p,char *air_num,char *plane_num,char *end_place,int total,int left); /* 增加航班信息*/ int  insert_cus(customerzzz **p,char *name,char *air_num,int seat_num); /*增加某航班的顾客信息*/
int book(airlinezzz *a,char *air_num,customerzzz *c,char *name); /*订票操作*/
int del_cus(customerzzz *c,airlinezzz *l,char *name); /*取消订票信息操作*/
int search_air(airlinezzz *head,HWND hwnd); /*查找航班信息操作*/ int search_cus(customerzzz *head,HWND hwnd);/*查找顾客信息操作*/ int creat_air(airlinezzz **l); /*预先设置航班信息*/ int creat_cus(customerzzz **l);/*预先设置已订票的顾客信息*/ typedef struct
{ TCHAR achName[MAX_PATH]; TCHAR achPosition[12]; int nGamesPlayed; int nGoalsScored;
} Player; // TODO: reference additional headers your program requires here//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)

StdAfx.cpp(对于头文件里面定义的函数进行实现)

// stdafx.cpp : source file that includes just the standard includes
//  asd.pch will be the pre-compiled header
//  stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
#include "resource.h"
#include "StdAfx.h"
HWND hwnd;
airlinezzz *start_air()   /*创建航班链表 */ {          airlinezzz *a;a=(airlinezzz*)malloc(sizeof(airlinezzz));if(a==NULL)        MessageBox(hwnd,"空间不足","失败",0); return a;}  customerzzz *start_cus() /*创建顾客链表 */ {          customerzzz *c;c=(customerzzz*)malloc(sizeof(customerzzz));if(c==NULL)           MessageBox(hwnd,"空间不足","失败",0);         return c; }  airlinezzz *modefy_airline(airlinezzz *l,char *air_num) /* 修改航班的空余座位信息 */ {          airlinezzz *p;p=l->next;for(;p!=NULL;p=p->next){if(strcmp(air_num,p->air_num)==0){                          p->left++;return l;}MessageBox(hwnd,"没有这个人搭乘的航班","取消信息",0); return 0;}}  int insert_air(airlinezzz **p,char *air_num,char *plane_num,char *end_place,int total,int left) /* 增加航班信息*/ {          airlinezzz *q;q=(airlinezzz*)malloc(sizeof(airlinezzz));strcpy(q->air_num,air_num);strcpy(q->plane_num,plane_num);strcpy(q->end_place,end_place);q->total=total;q->left=left;q->next=NULL;(*p)->next=q; (*p)=(*p)->next;   return OK;  }  int  insert_cus(customerzzz **p,char *name,char *air_num,int seat_num) /*增加某航班的顾客信息*/ {       customerzzz *q;    q=(customerzzz*)malloc(sizeof(customerzzz));   strcpy(q->name,name);  strcpy(q->air_num,air_num);   q->seat_num=seat_num;  q->next=NULL; (*p)->next=q; (*p)=(*p)->next;   return OK;
} int book(airlinezzz *a,char *air_num,customerzzz *c,char *name) /*订票操作*/
{ airlinezzz *p=a; customerzzz *q=c->next; p=a->next;  for(;q->next!=NULL;q=q->next){} for(;p->next!=NULL;p=p->next) {  if(p->left>0) {  //printf("Your seat number is %d",(p->total-p->left+1)); insert_cus(&q,name,air_num,p->total-p->left+1); p->left--; return OK;   } else {  MessageBox(hwnd,"座位满了","失败",0); return 0; } }
} int del_cus(customerzzz *c,airlinezzz *l,char *name) /*取消订票信息操作*/
{  customerzzz *p,*pr; char air_num[8]; pr=c; p=pr->next; while(p!=NULL) {  if(strcmp(p->name,name)==0) {  strcpy(air_num,p->air_num); l=modefy_airline(l,air_num);  pr->next=p->next; p=pr->next; MessageBox(hwnd,"取消订票成功","成功",0); return OK; }  pr=pr->next; p=pr->next; }   MessageBox(hwnd,"没有这个人","失败",0);  return ERROR;
}int search_air(airlinezzz *head,HWND hwnd) /*查找航班信息操作*/
{airlinezzz *p=head->next;  //printf("air_num  plane_num  end_place  total  left\n"); HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX_EXAMPLE);  for(int i=1;p!=NULL;p=p->next,i++) {int pos = (int)SendMessage(hwndList, LB_ADDSTRING,0, (LPARAM)p->air_num); SendMessage(hwndList, LB_SETITEMDATA, pos, (LPARAM) i); //printf("%s%-10s %-8s%-8d%-8d\n",p->air_num,p->plane_num,p->end_place,p->total,p->left); } SetFocus(hwndList); return OK;
} int search_cus(customerzzz *head,HWND hwnd) /*查找顾客信息操作*/
{  customerzzz *q=head->next;  //printf("name   air_num  seat_num\n"); HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX_EXAMPLE1);  for(int i=1;q!=NULL;q=q->next,i++) {int pos = (int)SendMessage(hwndList, LB_ADDSTRING,0, (LPARAM)q->name); SendMessage(hwndList, LB_SETITEMDATA, pos, (LPARAM) i); //printf("%-8s%-12s%-d\n",q->name,q->air_num,q->seat_num); } SetFocus(hwndList); return OK;
} int creat_air(airlinezzz **l) /*预先设置航班信息*/
{  airlinezzz *p=*l; int i=0;  char *air_num[3]={"007af","008af","009af"}; char *plane_num[3]={"plane1","plane2","plane3"}; char *end_place[3]={"Beijing","Shanghai","Tianjin"}; int total[3]={100,110,120}; int left[3]={52,54,76}; for(i=0;i<3;i++)  insert_air(&p,air_num[i],plane_num[i],end_place[i],total[i],left[i]); return OK;
}int creat_cus(customerzzz **l)/*预先设置已订票的顾客信息*/
{ customerzzz *p=*l; int i=0;  char *name[3]={"zhsan","lisi","wangwu"};char *air_num[3]={"007af","008af","009af"}; int seat_num[3]={2,5,7}; for(i=0;i<3;i++) insert_cus(&p,name[i],air_num[i],seat_num[i]);  return OK; } // TODO: reference any additional headers you need in STDAFX.H
// and not in this file

最后是win32程序的入口asd.cpp

// asd.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#include "strsafe.h"
HINSTANCE hInstance;
customerzzz *cus=start_cus();
airlinezzz *air=start_air();
char name[8]="\0";
char air_num[8]="\0";
char ch;
HBITMAP bg;
HBITMAP MM;
BOOL WINAPI MY(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
BOOL WINAPI BOOK_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
BOOL WINAPI CANCEL_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
BOOL WINAPI SEARCH_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
BOOL WINAPI SEARCH_2(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);  int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{bg=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_1));creat_air(&air); creat_cus(&cus);DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_1),NULL,MY,NULL); return 0;
}
BOOL WINAPI MY(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{ switch(msg){case WM_PAINT:{PAINTSTRUCT ps;RECT rt;HDC hdc=BeginPaint(hwnd,&ps);//HBITMAP bg=LoadBitmap((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_1));HBRUSH bgg=CreatePatternBrush(bg);SelectObject(hdc,bgg);GetWindowRect(hwnd,&rt);Rectangle(hdc,0,0,rt.right,rt.bottom);}break;case WM_COMMAND: {     switch(LOWORD(wParam))     {     case IDBOOK:         {   DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_BOOK),NULL,BOOK_1,NULL);break;         }     case IDCANCEL:         {           DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_CANCEL),NULL,CANCEL_1,NULL);break;      }    case IDSEARCH1:{DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_SEARCH1),NULL,SEARCH_1,NULL);break;}case IDSEARCH2:{DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_SEARCH2),NULL,SEARCH_2,NULL);break;}}default:   break; } case WM_CLOSE:     {         DestroyWindow(hwnd);    }    break; } return 0; }BOOL WINAPI BOOK_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{switch(msg){   case WM_PAINT:{PAINTSTRUCT ps;RECT rt;HDC hdc=BeginPaint(hwnd,&ps);//HBITMAP bg=LoadBitmap((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_1));HBRUSH bgg=CreatePatternBrush(bg);SelectObject(hdc,bgg);GetWindowRect(hwnd,&rt);Rectangle(hdc,0,0,rt.right,rt.bottom);}break;case WM_COMMAND: {     switch(LOWORD(wParam))     {case IDOK:         {char* qweqwe="\0";HWND a=GetDlgItem(hwnd,IDC_1);           //获取编辑框的句柄GetWindowText(a,air_num,8);                //把该句柄中的文字复制到cha1中HWND b=GetDlgItem(hwnd,IDC_2);GetWindowText(b,name,8);book(air,air_num,cus,name); MessageBox(hwnd,"录入成功","成功",0);//}break;         }     } default:   break; } case WM_CLOSE:     {         DestroyWindow(hwnd);    }    break; } return 0; }BOOL WINAPI CANCEL_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{switch(msg){ case WM_PAINT:{PAINTSTRUCT ps;RECT rt;HDC hdc=BeginPaint(hwnd,&ps);//HBITMAP bg=LoadBitmap((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_1));HBRUSH bgg=CreatePatternBrush(bg);SelectObject(hdc,bgg);GetWindowRect(hwnd,&rt);Rectangle(hdc,0,0,rt.right,rt.bottom);}break;case WM_COMMAND: {     switch(LOWORD(wParam))     {     case IDOK:         { HWND b=GetDlgItem(hwnd,IDC_3);GetWindowText(b,name,8);del_cus(cus,air,name);break;         }     } default:   break; } case WM_CLOSE:     {         DestroyWindow(hwnd);    }    break; } return 0; }BOOL WINAPI SEARCH_1(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{airlinezzz *p=air; switch(msg){ case WM_PAINT:{PAINTSTRUCT ps;RECT rt;HDC hdc=BeginPaint(hwnd,&ps);//HBITMAP bg=LoadBitmap((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_1));HBRUSH bgg=CreatePatternBrush(bg);SelectObject(hdc,bgg);GetWindowRect(hwnd,&rt);Rectangle(hdc,0,0,rt.right,rt.bottom);}break;case WM_INITDIALOG:{// Add items to list. search_air(air,hwnd);                         //封装起来关于   将airnum引入列表框return TRUE;} case WM_COMMAND:switch (LOWORD(wParam)){case IDCANCEL:EndDialog(hwnd, LOWORD(wParam));return TRUE;case IDC_LISTBOX_EXAMPLE:                         //当鼠标点击了类表框{switch (HIWORD(wParam)) { case LBN_SELCHANGE:{HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX_EXAMPLE); int lbItem = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); int i = (int)SendMessage(hwndList, LB_GETITEMDATA, lbItem, 0);for(int q=0;q<i;q++){p=p->next;}// Do something with the data from Roster[i]char buff[90];StringCbPrintf(buff, 90,  TEXT("航班号: %s\n目的地: %s\n座位总数: %d\n剩余座位数: %d"), p->plane_num, p->end_place, p->total,p->left);SetDlgItemText(hwnd, IDC_STATISTICS, buff); return TRUE; } }}return TRUE;}} return 0; }BOOL WINAPI SEARCH_2(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{customerzzz *p=cus; switch(msg){ case WM_PAINT:{PAINTSTRUCT ps;RECT rt;HDC hdc=BeginPaint(hwnd,&ps);//HBITMAP bg=LoadBitmap((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_1));HBRUSH bgg=CreatePatternBrush(bg);SelectObject(hdc,bgg);GetWindowRect(hwnd,&rt);Rectangle(hdc,0,0,rt.right,rt.bottom);}break;case WM_INITDIALOG:{// Add items to list. search_cus(cus,hwnd);                         //封装起来关于   将airnum引入列表框return TRUE;} case WM_COMMAND:switch (LOWORD(wParam)){case IDCANCEL:EndDialog(hwnd, LOWORD(wParam));return TRUE;case IDC_LISTBOX_EXAMPLE1:                         //当鼠标点击了类表框{switch (HIWORD(wParam)) { case LBN_SELCHANGE:{HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX_EXAMPLE1); int lbItem = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); int i = (int)SendMessage(hwndList, LB_GETITEMDATA, lbItem, 0);for(int q=0;q<i;q++){p=p->next;}// Do something with the data from Roster[i]char buff[90];StringCbPrintf(buff, 90,  TEXT("航班号: %s\n座位号: %d\n"), p->air_num, p->seat_num);SetDlgItemText(hwnd, IDC_STATISTICS1, buff); return TRUE; } }}return TRUE;}} return 0; }

然后关于资源文件我就简单提一下,有五个对话窗口,一个重绘背景的图,一个图片控件的图,还有一个图标

运行程序

打开DEBUG文件夹下的

进入界面

各功能都测试过,没有问题(前提是订票之前先查看有哪些航班后,在输入航班号的时候千万不要输错,在这点上我做的不太人性化)

关于测试图我就不一一发了,我直接把debug文件夹打包后上传到资源里,感兴趣可以下载下来玩玩。

下载点击这里   http://download.csdn.net/detail/weixing11/6748081

关于对成果的不足之处:

1.在订票界面,输入航班的编辑框完全可以用一个下拉菜单来代替,毕竟用鼠标来选择当前现有航班就不会出错了。

2.按钮本来想重绘的,每个不同窗口背景也想重绘成不同背景,但是嫌麻烦,就没实现。

3.如果添加一个提示当前时间还有天气的控件能更人性化(嫌麻烦没做.....)

4.如果再添加一个“程序载入中”的模块再添点音效就更好了。

得到的收获:自娱自乐又完成了课程设计,两全其美。

win API之航空客运订票系统(课程设计)相关推荐

  1. (附源码)ssm航空客运订票系统 毕业设计 141612

    SSM航空客运订票系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针 ...

  2. C++数据结构 航空客运订票系统

    航空客运订票系统  问题描述:业务主要包括查询航线和客票预订的信息.客票预订和办理 退票等.  基本要求: 系统必须能存储以下数据信息: 航班信息:飞机抵达城市.航班号.飞机号.起降时间.票价.总 ...

  3. 航空客运订票系统(C语言,软件用的DEV)

    这两天整理之前的作业代码,把自己一点一点敲出来的系统又看了一下,挑几个发出来供大家参考.想要源码.报告可以找我啦,代码的注释之前写的都是非常详细的! 但是不是无偿的啦(不坑,一杯奶茶喽,不做白嫖怪啦^ ...

  4. 【数据结构应用】航空客运订票系统

    目录 前言 一.作业要求介绍 二.各个函数的实现 1.头文件总结需要的功能 (1)结构体的定义 (2)各个功能的函数 2.各个函数的具体实现 (1)初始化 (2)打印航班信息表 (4)查找航班信息 ( ...

  5. C语言版-数据结构-期末课程设计-大作业(航空客运订票系统)附源码+实验文档

    设计题目:航空客运订票系统 本项目涉及到的知识:指针.结构体数组.链表.参数传递 [问题描述]航空客运订票的业务活动包含查询航线和客票预订信息,可以办理订.退票等,用c语言设计一个程序模拟实现. 一. ...

  6. 航空客运订票系统C语言程序设计,航空客运订票系统.doc

    洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 数据结构课程设计 设计题目 航空客运订票系统 专 课 程 设 计 任 务 书 设计题目:航空客运订票系统___________________ ...

  7. ssm航空客运订票系统 毕业设计源码141612

    SSM航空客运订票系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针 ...

  8. C++课程设计:航空客运订票系统

    航空客运订票系统 选题背景 方案论证 过程论述 运行结果 完整代码 选题背景 ①背景: 现在人们更多的使用飞机作为出行交通工具,因此机票票务市场也在快速发展.国内外航空事业在飞速发展,各航空公司对票务 ...

  9. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

最新文章

  1. 阿里从来不只属于马云,但马云会永远属于阿里
  2. idea 升级到2020后 无法启动_启动崩盘!IDEA 2020 无法启动的解决办法|赠送 IDEA 2020 新功能...
  3. ASP+COM 组件开发
  4. VMware Workstation 8下Ubuntu 13.04中安装VMware Tools出错
  5. 汇编语言笔记(一):基础
  6. dumpbin的使用
  7. RobotStudio Smart组件创建动态夹具
  8. 太棒了!8 个流行的 Python 可视化工具包,你喜欢哪个?
  9. java文件写入_java怎么写入文件
  10. python接口自动化发送get请求 详解(一)
  11. 十分钟理解线性代数的本质_复习线性代数的正确方式
  12. 线索二叉树(Binary Thread Tree)
  13. linux命令格式,获取帮助及其目录结构简要理解
  14. cesium模型不遮挡点线面_VueCLI3.0干货系列之集成Cesium三维地球框架
  15. 测试方案的设计及模板
  16. ESP8266+WIFI继电器初识
  17. 阿里云ace认证内容有哪些?
  18. Data URL实现用户头像上传
  19. VS Code 中解决 C++ 代码编写时的爆红
  20. The requested URL returned error: 403

热门文章

  1. SkeyeWebPlayer.js H5播放器是怎么样炼成的
  2. 【华为机试真题 Python实现】免单统计
  3. 【转】Windows 任务管理器 PF使用率 总数 核心内存 物理内存
  4. 细数国内优秀WordPress主题
  5. 《暗黑破坏神3》蓝贴:游戏引擎的来源
  6. 每个孩子都该拥有的神奇画板,感觉自己的童年弱爆了丨钛空舱
  7. Endnote无法通过在线数据库添加文献, “未找到匹配文献”
  8. 11.JVMGC基础
  9. 乐视TV超级电视完胜小米电视的秘诀
  10. 想考一个华为认证需要学习那些东西?