基于C语言的单链表客房管理系统

Hydra

发布日期: 2019-09-27 07:18:27 浏览量: 95
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、实验内容

1.1 实现功能

以带表头结点的单链表为存储结构,实现如下客房管理的设计要求。

1.2 设计要求

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. //定义客房链表结点结构
  5. typedef struct HNode
  6. {
  7. char roomN[7]; //客房名称
  8. float Price; //标准价格
  9. float PriceL; //入住价格(默认值=标准价格*80%)
  10. int Beds; //床位数Beds
  11. char State[5]; //入住状态(值域:"空闲"、"入住"、"预订",默认值为"空闲")
  12. struct HNode *next; //指针域
  13. }Hotel, *HLink;
  • 实现创建客房信息链表函数void Build(HLink &H),输入(客房名称、标准价格、床位数),同时修改入住价格、入住状态为默认值,即入住价格=标准价格*80%,入住状态为”空闲”(提示:用strcpy()字符串拷贝函数)。为了提高程序调试效率,强烈建议:用文件操作来输入客房信息(客房名称、标准价格、床位数)

  • 实现输出客房信息函数void Exp(HLink H),输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态

  • 函数int Find(HLink &H, char *roomN)),查找房间名称为roomN的客房。如果找到,则返回该客房在链表中的位置序号(>=1),否则返回0。提示:用strcmp()字符串比较函数

  • 实现函数void updateH(HLink &H, int beds, char *state),将床位数为beds的客房入住状态改为state。提示:用strcpy()字符串拷贝函数

  • 函数void Add(HLink &H),将该链表中未入住的客房入住价格均加价20%

  • 求出入住价格最高的客房函数HLink FirstH(HLink &H),该函数内return语句返回入住价格最高的客房结点指针,返回前将该结点在链表中删除

  • 函数void MoveK1(HLink &H, int k),将单链表中倒数第k个结点移到第一个结点位置,注意:严禁采用先计算链表长度n再减k(即n-k)的方法

  • 函数void ReverseN2(HLink &H),将单链表的正中间位置结点之后的全部结点倒置的功能,注意:严禁采用先计算链表长度n再除以2(即n/2)的方法

  • 函数void SortPriceL(HLink &H),按照客房(入住价格,客房名称)升序排序

  • 函数void upBed(HLink &H,int beds),创建一个【床位数为beds的新结点】(还需输入:客房名称、标准价格等信息),使链表的形态为:【头结点】->【床位数>beds的结点】->【床位数为beds的新结点】->【床位数<=beds的结点】,要求【超过beds的结点】和【不超过beds的结点】这两段链表中的结点保持原来的前后相对顺序

  • 主函数main()调用以上函数,(3)若返回值>=1则输出该客房在链表中的位置序号,否则输出该客房不存在;输出(4)~(10)处理后的链表内容,其中(6)还要输出入住价格最高的客房信息

可能用到的函数

  • 从文件中读取客房数据:fscanf(文件指针,”%s %f,%d”,p->roomN,&p->Price,&p->Beds);

  • 输出客房数据:printf(“%s%8.1f%8.1f%6d%8s\n”,p->roomN,p->Price,p->PriceL,p->Beds,p->State);

  • 字符串赋值函数:char* strcpy(char *, const char *);

  • 字符串比较函数:int strcmp(const char *, const char *)

二、实验步骤

按以上实验内容的要求,给出实验步骤,包括程序流程图、源程序和运行结果截图等。

2.1 函数流程图

2.1.1 主函数流程图

2.1.2 Build函数流程图

2.1.3 Exp函数流程图

2.1.4 Find函数流程图

2.1.5 updateH函数流程图

2.1.6 Add函数流程图

2.1.7 FirstH函数流程图

2.1.8 MoveK1函数流程图

2.1.9 ReverseN2函数流程图

2.1.10 SortPriceL函数流程图

2.1.11 upBed函数流程图

2.2 main函数源代码

  1. void main()
  2. {
  3. HLink H;
  4. int choice;
  5. Build(H);
  6. while (1)
  7. {
  8. printf("请选择使用的功能:\n");
  9. printf("1.输出全部客房信息\t\t\t\t2.查找客房名称\n");
  10. printf("3.更改指定床位数的客房的入住状态\t\t4.未入住的客房加价20%%\n");
  11. printf("5.找到价格最高的客房\t\t\t\t6.倒数第k间房移动到第一间的位置\n");
  12. printf("7.正中间客房之后的房间全部倒置\t\t\t8.按照客房(入住价格,客房名称)升序排序\n");
  13. printf("9.创建新客房\n");
  14. scanf("%d", &choice);
  15. switch (choice)
  16. {
  17. case 1:
  18. Exp(H);
  19. break;
  20. case 2:
  21. {
  22. printf("请输入要查找的客房名称:");
  23. char name[7];
  24. scanf("%s", name);
  25. int pos = Find(H, name);
  26. printf("客房名称为%s的房间在第%d个位置:", name, pos);
  27. break;
  28. }
  29. case 3:
  30. printf("请输入要更改的客房的房间数:");
  31. int bed;
  32. scanf("%d", &bed);
  33. printf("请输入要更改的状态\n");
  34. char state[5];
  35. scanf("%s", state);
  36. updateH(H, bed, state);
  37. break;
  38. case 4:
  39. Add(H);
  40. break;
  41. case 5:
  42. {
  43. HLink high = FirstH(H);
  44. break;
  45. }
  46. case 6:
  47. printf("请输入要移动的客房位置:");
  48. int k;
  49. scanf("%d", &k);
  50. MoveK1(H, k);
  51. break;
  52. case 7:
  53. ReverseN2(H);
  54. break;
  55. case 8:
  56. SortPriceL(H);
  57. break;
  58. case 9:
  59. printf("请输入新客房房间数:");
  60. int beds;
  61. scanf("%d", &beds);
  62. upBed(H, beds);
  63. break;
  64. default:
  65. printf("输入不合法\n");
  66. }
  67. printf("\n\n\n");
  68. }
  69. }

2.3 运行结果截图

2.3.1 main函数执行结果

2.3.2 Exp函数执行结果

2.3.3 Find函数执行结果

2.3.4 updataH函数执行结果

2.3.5 FirstH函数执行结果

2.3.6 MoveK1函数执行结果

2.3.7 ReverseN2函数执行结果

2.3.8 sortPrice函数执行结果

2.3.9 upBed函数执行结果

三、总结与体会

通过这些实验题目,让我感受到理论知识和实际应用还是有一些区别,在学习数据结构的过程中,光学习理论知识是不够的,更重要的是自己动手实践,这样才能更好的理解知识并学会运用。

该实验使我对链表有了更好的理解,明白了链表几种基本操作的实现方法,知道了什么时候该用到链表这种结构。我也遇到了一些困难。比如链表操作时使用了NULL指针中的内容;模式匹配不知道如何直观输出匹配过程,不会记录匹配次数。

上传的附件 cloud_download 基于C语言的单链表客房管理系统.7z ( 1.56mb, 1次下载 )
error_outline 下载需要6点积分

发送私信

希望从来不会放弃你,是你放弃了希望

15
文章数
23
评论数
最近文章
eject