C语言客房管理系统,求大神

Python09

C语言客房管理系统,求大神,第1张

 //in head.h 

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include "ctype.h"

#define MaxRoom 20 

struct guest_info

{

 char name[8] 

 char fee[5]

 char idnum[18]

 char time[14]

 char outtime[14]

 int number

 char tel[11]

 int r 

}room[21]

void Login()

void Search()

void Change()

void out()

void save()

void load()

//in login.c

#include"head.h"

void Login()

{

 int i

 system("cls")

 printf("请输入客房号:\n")

 scanf("%d",&i)

  if(room[i].r==1)

 {

  printf("对不起,该房间已入住")

  return

 }

 room[i].number=i

 room[i].r=1

 printf("请输入客户姓名、身份证号码、联系电话、入住时间、退房时间、费用:\n")

 scanf("%s%s%s%s%s%s",room[i].name,room[i].idnum,room[i].tel,room[i].time,room[i].outtime,room[i].fee)

 save()

 printf("恭喜,登记成功!!\n")

void save()

{

 int i

 FILE *fp

 if((fp=fopen("room.txt","wb"))==NULL)

 {

  printf("无法打开文件\n")

  return

 }

 for(i=0i<MaxRoomi++)

  if(fwrite(&room[i],sizeof(struct guest_info),1,fp)!=1)

   printf("文件读取错误\n")

  printf("文件写入完成\n")

  fclose(fp)

}

void load()

{

 FILE *fp

 int i

 if((fp=fopen("room.txt","rb"))==NULL)

 {

  printf("不能打开文件\n")

  return

 }

 for(i=0i<MaxRoomi++)

  if(fread(&room[i],sizeof(struct guest_info),1,fp)!=1)

  {

   if(feof(fp))

   {

    fclose(fp)

    return

   }

  printf("文件读取错误\n")

  }

  fclose(fp)

  system("cls")

  printf("文件读取成功\n")

}

void Change()

{

 int i

 system("cls")

 printf("请输入房间号:\n")

 scanf("%d",&i)

 if(room[i].number==i)

 {

  printf("请输入退房日期:\n")

  scanf("%s",room[i].outtime)

  printf("请输入费用:\n")

  scanf("%s",room[i].fee)

  system("cls")

  printf("修改成功!!\n")

 }

 else

 {

  system("cls")

  printf("该房间为空房!!\n")

 }

}

void out()

{

 int i

 printf("请输入房间号:\n")

 scanf("%d",&i)

 if(room[i].number==i)

 {

  room[i]=room[21]

  save()

  system("cls")

  printf("退房成功\n")

 }

 else

 {

  system("cls")

  printf("该房间为空房\n")

 }

}

void Search()

{

 int i

 system("cls")

 printf("请输入要查询的房间号码:\n")

 scanf("%d",&i)

 if(room[i].number==i)

  {

   printf("姓名:%s\n",room[i].name)

   printf("客房号:%d\n",room[i].number)

   printf("联系电话:%s\n",room[i].tel)

   printf("入住时间:%s\n",room[i].time)

   printf("退房时间:%s\n",room[i].outtime)

   printf("费用:%s\n",room[i].fee)

  }

  else

  {

   printf("很抱歉,没有找到该身份证登记的相关信息!!")

  }

}

void FreeRoom()

{

 int f

 for(f=0f<20f++)

 {

  if(room[f].r==0)

   printf("%d号房为空房\t",f)

  else

   printf("%d号房已入住\t",f)

 }

}

//in main.c

#include"head.h"

int main()

{

 int i

 int count=20

 int j

 for(j=0j<20j++)

 {

  room[j].r=0

 }

 

 do

 {

  printf("\n")

  printf("******************************************************************************\n")

  printf("**************************欢迎使用温馨99客房登记系统**************************\n")

  printf("******************************欢迎员工------1号*******************************\n")

  printf("好消息,特价钟点房40元/2小时,单人房140元/间,双人房230元/间,凭学生证有7折优惠\n")

  printf("\t1.--登记客房信息<Insert>\n")

  printf("\t2.--查询客房信息<Search>\n")

  printf("\t3.--修改客房信息<Change>\n")

  printf("\t4.--用户退房管理<Outside>\n")

  printf("\t5.--显示当前空房信息<Show The Free Romm>\n")

  printf("\t6.--把客房信息保存到文件<Save The Information into File>\n")

  printf("\t7.--从文件记录读取客房信息(维护中)<Show The Information from File>\n")

  printf("\t8--退出客房管理系统<Exit>\n")

  printf("****************>>>>此程序由舒昱鑫吐血打造Version:1.0 Bate>>>>****************\n")

  printf("******************************************************************************\n")

  printf("******************************************************************************\n")

  printf("输入需要选择的功能:")

  scanf("%d",&i)

  switch(i)

  {

   case 1:Login()break

   case 2:Search()break

   case 3:Change()break

   case 4:out()break

   case 5:FreeRoom()break

   case 6:save()break

   case 7:load()break

   case 8:printf("谢谢使用温馨99的客房登记系统,正在退出..........\n退出成功,按任意键关闭程序!!\n")break

   default:printf("输入错误,请从新选择")break

  }

 }

 while(i!=8)

 return 0

}

成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。

对每个成员也必须做类型声明。

其形式为:

类型声明符 成员名

例如:

注意, 最后括号外面的分号是不可少的

结构定义之后,才可以进行变量声明。

凡声明为结构 stu 的变量都由上述4个成员组成。

由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。

声明结构变量 有以下三种方法。

使用上面定义的stu为例:

如:

也可以用宏定义使一个符号常量来表示一个结构类型。例如:

例如:

这种形式的声明的一般形式为:

例如:

这种声明的一般形式为:

第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。

在程序中使用结构变量时,往往不把她作为一个整体来使用。

在ANSI C中除了允许有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括 赋值、输入、输出、运算 等都是通过结构变量的成员来实现的。

表示结构变量成员的一般形式为:

结构变量名.成员名

例如: boy1.num boy2.sex

如果成员本身又是一个结构,则必须逐级找到最低级的成员才能使用。如: boy1.birthday.month

结构变量的赋值就是给各成员赋值。

数组的元素也可以是结构类型的。

因此可以构成结构型数组。

初始化赋值:

当然也可以在定义 stu结构 时同时声明 pstu。

赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。

如果 boy 是被声明为 stu类型 的结构变量。

则:

有了结构指针变量,就能更方便地访问结构变量的各个成员。

其访问的一般形式为:

(*结构指针变量).成员名

结构指针变量->成员名

例如: (*pstu).num 或 pstu->num

例如:

介绍数组的时候,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。

C语言中不允许动态数组类型。

例如:

但是又有此需求,为了解决这个问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

常用的内存管理函数有3个:

例子:分配一块区域,输入一个学生数据

上面的例子采用了动态分配的办法为一个结构分配内存空间。

每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个节点

有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个节点。

当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也就无法确定数组大小。

而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。

用动态存储的方法可以很好地解决这些问题。

有一个学生就分配一个节点,无须预先确定学生的准确人数,某学生退学,可删去该节点,并释放该节点占用的存储空间,从而节约了宝贵的内存资源。

另一方面,用数组的方法必须占用一块连续的内存区域。

而使用动态分配时,每个节点之间可以是不连续的(节点内是连续的)。

节点之间的关系可以用指针实现。

即在节点结构中定义一个成员项来存放下一节点的首地址,这个用于存放地址的成员,常把他称为指针域。

可在第一个节点的指针域内 存入第二个节点的首地址,在第二个节点的指针域内 又存入第三个节点的首地址,如此串联下去直到最后一个节点。

最后一个节点因无后续节点连接,其指针域可赋值 0

这种连接方式,在数据结构中称为“链表”。

链表的基本操作主要有以下几种:

例子:建立一个三个节点的链表,存放学生数据。为简单起见,我们假定学生数据结构中只有学号和年龄两项。可编写一个建立链表的函数create。程序如下:

create函数 用于建立一个有 n个节点 的链表,他是一个指针函数,他返回的指针指向 stu结构。

在create函数内定义了三个 stu结构 的指针变量。

head为头指针,pf为指向两相邻节点的前一节点的指针变量。

pb为后一节点的指针变量。

枚举是一种 基本数据类型 ,而不是一种 构造类型 ,因为他不能再分解为任何基本类型。

enum 枚举名{ 枚举值表 }

例如: enum weekday { sun,mou,tue,wed,thu,fri,sat }

enum weeakday a,b,c

或者为:

enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c

或者为:

enum { sun,mou,tue,wed,thu,fri,sat }a,b,c

例子:

说明:

只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:

a=sunb=mon 是正确的

a=0b=1 是错误的。

如果一定要把数值赋予枚举变量,则必须使用强制类型转换。

如: a=(enum weekday)2

还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。

例子:

typedef定义的一般形式为:

typedef 原类型名 新类型名

其中原类型名中含有定义部分,新类型名一般用大写表示,一般用大写表示,以便于区别。

有时也可用 宏定义 来代替 typedef 功能,但是 宏定义 是由 预处理 完成的,而 typedef 则是 在编译时 完成的,后者更为灵活方便。

使用 typedef 定义数组、指针、结构等类型将带来很大的方便,不仅使书写简单而且使意义更加明确,因而增强了可读性。

例如:

又如: