C课设/宾馆客房管理系统/内附源码/数组实现
两周的C语言课程设计结束了,课设是对一个程序从刚开始的构思到最后的编写代码调试代码的一个过程。完整的做出一个产品的雏形,锻炼编程实战能力,体现对学习C的实战运用。
下面是我对此次课设过程的经验分享,以及代码的开源。 课设题目:宾馆客房管理系统。
1.题目要求
设计“宾馆客房管理系统”软件,使之具备如下要求: (1) 系统所涉及的信息有: ① 顾客信息包括:编号,姓名,性别,籍贯,身份证号,出生日期,年龄,民族,居住地,工作单位等。 ② 客房信息包括:房间编号,房间等级,价格,是否空闲等 ③ 入住信息包括:所住顾客编号,顾客姓名,入住日期,退房日期等。 ④ 服务信息包括:服务项目编号,项目名称,费用等。 (2) 系统能够实现:信息浏览功能;查询功能:按房号、姓名、入住时间查询;信息的删除与修改。
本管理系统采用结构体数组实现,也可以用链表来存储信息,其基本功能大致相同。涉及单链表的基本操作源码,请看下面的文章: 单链表的基本操作源码以及数据结构的基本学习思路
2.产品需求
该管理系统适用于各类中小型酒店的客房资源和客户信息的管理,实现了酒店的信息化管理,该系统主要包括基础信息设置、查询统计管理,实现开房退房功能。
编译软件:本程序使用的编译软件:microsoft visual C++ 6.0
3.功能需求
3.1管理员登陆系统
(1)初始化管理员登录账号及密码
(2)管理员输入登录密码
(3)进入系统界面完成开房退房信息查询等功能
3.2登记客户信息系统
(1)登记顾客姓名,性别,身份证号码等信息
(2)记录顾客预住天数和预支付房费
(3)显示顾客成功登记的房间号
(4)选择房间并自动更改房间状态信息
由于住房及顾客信息由于涉及多种类型的数据,因此应用结构体数组储存信息。可以用文件记录相关数据。
3.3房间信息及顾客信息查询
(1)查询房间状态
(2)按顾客姓名查找:查找顾客的房间号码及顾客信息
(3)按顾客身份证号码查找:查找顾客的房间号码及顾客信息
3.4开房函数的封装
(1)动态内存分配初始化新增顾客信息
(2)记录顾客预住天数和预支付房费
(3)显示顾客成功登记的房间号且顾客数量加一
(4)更改房间状态信息
3.5退房函数的封装
(1)根据实际住房时间计算实际消费金额
(2)更改房间状态且顾客数量减一
(3)显示退房成功并释放该内存空间
4.详细设计
4.1主函数(main)
【功能】此程序运行的入口
4.2登录函数
【功能】管理员同时输入正确的账户和密码登录进入系统界面
4.3信息录入函数
【功能】录入客户信息
4.4进入系统函数
【功能】进入系统界面进行功能选择
4.5信息查询函数
【功能】查询客户信息以及客房状态信息
4.6开房函数的封装
【功能】为顾客选择需求类型的房间并修改房间状态
4.7退房函数的封装
【功能】实现退房并修改房间状态
5.系统测试
登录界面 只有用户同时输入正确的用户名和密码,才可以进入本系统,如图:
 如果输入错误,提示请重新输入!如图:  系统主界面 用户成功进入系统界面,可以根据需求选择需要实现的功能,实现用户与该系统的交互。如图: 
入住与选择界面 录入入住顾客信息,选择房间类型和预住天数。如图: 
输入信息全部完善并正确后就会出现对应应支付的金额以及安排入住的房间号码,开房成功。如图: 
查询宾馆房间状态 打印出已经住人的房间和未住人的房间号码,以十个房间为一行输出在屏幕上,如图:  按照顾客姓名查找顾客信息,如图: 
按照顾客身份证号码查找顾客信息,如图:  退房界面 (1)输入退房顾客姓名和身份证号码 (2)输入实际住房天数 (3)返回实际消费金额 如图: 
6.参考文献
[1] 谭浩强. 《 C程序设计(第三版)》. 清华大学出版社.2005年 [2]何钦铭 颜晖.《C语言程序设计》.高等教育出版社.2008年 [3] 陈强 .《C语言核心开发技术从开发到精通》.电子工业大学出版社.2006年 [4]严蔚敏、吴为民.《数据结构(C语言版)》.清华大学出版社.2007年 [5]周二强.《新编C程序设计》.清华大学出版社.2011年 [6]邓文华.《数据结构实验和实训教程》.清华大学出版社.2011年
7.源码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
void init_room();
void enter();
void start();
void check_in();
void check_out();
void change();
void search();
void add(struct Customer* cs);
int i = 0;
int pay = 0;
struct Room
{
int number;
int grade;
int price;
int status;
};
struct Customer
{
char name[10];
char sex[2];
char ID[19];
char addr[10];
char birth[10];
char nation[10];
char place[10];
char work[10];
int pay;
int day;
int room_number;
};
struct Room room[60];
struct Customer* customer[60];
int main()
{
system("mode con cols=130 lines=50");
system("color 0A");
init_room();
enter();
while (1)
{
start();
}
return 0;
}
void init_room()
{
int j = 101, k;
for (k = 0; k < 20; k++)
{
room[k].number = j++;
room[k].grade = 1;
room[k].price = 150;
room[k].status = 0;
}
j = 201, k;
for (k = 20; k < 40; k++)
{
room[k].number = j++;
room[k].grade = 2;
room[k].price = 200;
room[k].status = 0;
}
j = 301, k;
for (k = 40; k < 60; k++)
{
room[k].number = j++;
room[k].grade = 3;
room[k].price = 300;
room[k].status = 0;
}
}
void enter()
{
char administrator[10] = "123";
char password[20] = "000";
char name[10];
char code[20];
printf("\n\n\n\n");
printf("\t\t\t\t--------------------------------------------------\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t-------------欢迎进入酒店客房管理系统-------------\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t--------------------------------------------------\n");
printf("\n\n");
printf("\t\t\t\t账号:");
scanf("%s", name);
printf("\t\t\t\t密码:");
scanf("%s", code);
while ((strcmp(name, administrator) != 0) || (strcmp(code, password) != 0))
{
printf("\t\t\t\t输入不正确,请重新输入!\n");
printf("\t\t\t\t账号:");
scanf("%s", name);
printf("\t\t\t\t密码:");
scanf("%s", code);
}
printf("\t\t\t\t请按任意键登录!\n");
}
void start()
{
int choice;
system("pause");
system("cls");
printf("1->开房 2->退房 3->信息查询 4->修改信息 5->退出系统\n");
printf("请输入你的选择:");
scanf("%d", &choice);
while (choice != 1 && choice != 2 && choice != 3 && choice != 4&&choice!=5)
{
printf("选项输入无效,请重新输入:\n");
printf("1->开房 2->退房 3->信息查询 4->修改信息 5->退出系统\n");
printf("请输入你的选择:\n");
scanf("%d", &choice);
}
switch (choice)
{
case 1:
check_in();
break;
case 2:
check_out();
break;
case 3:
search();
break;
case 4:
change();
break;
case 5:
exit(0);
break;
default:
break;
}
}
void check_in()
{
int choice, day;
customer[i] = (struct Customer*)malloc(sizeof(struct Customer));
add(customer[i]);
printf("1->单人房150/间 2->双人房200/间 3->家庭房300/间\n");
printf("请选择房型:");
scanf("%d", &choice);
printf("请输入预住天数:");
scanf("%d", &day);
customer[i]->day = day;
switch (choice)
{
int n;
case 1:
for (n = 0; n < 20; n++)
{
if (room[n].status == 0)
{
pay = 150 * day;
printf("请收取%d房费\n", pay);
printf("入住房间号码为:%d\n", room[n].number);
customer[i]->pay = pay;
customer[i]->room_number = room[n].number;
room[n].status = 1;
}
break;
}
break;
case 2:
for (n = 20; n < 40; n++)
{
if (room[n].status == 0)
{
pay = 200 * day;
printf("请收取%d房费\n", pay);
printf("入住房间号码为:%d\n", room[n].number);
customer[i]->pay = pay;
customer[i]->room_number = room[n].number;
room[n].status = 1;
}
break;
}
break;
case 3:
for (n = 40; n < 60; n++)
{
if (room[n].status == 0)
{
pay = 200 * day;
printf("请收取%d房费\n", pay);
printf("入住房间号码为:%d\n", room[n].number);
customer[i]->pay = pay;
customer[i]->room_number = room[n].number;
room[n].status = 1;
}
break;
}
break;
}
++i;
}
void check_out()
{
char name2[10], ID2[19];
int k, day2, room_number, day, standard,choice;
printf("请输入退房顾客的姓名:");
scanf("%s", name2);
printf("请输入退房顾客的身份证号码:");
scanf("%s", ID2);
printf("请输入该顾客实住天数:\n");
scanf("%d", &day2);
for (k = 0; k < i; k++)
{
if ((strcmp(customer[k]->ID, ID2) == 0) && (strcmp(customer[k]->name, name2) == 0))
{
room_number = customer[k]->room_number;
day = (customer[k]->day) - day2;
standard = room_number / 100;
switch (standard)
{
case 1:
printf("顾客的房间号是%d :为单人间,每天150元\n",room_number);
printf("实际住房消费 %d元整!\n", day2 * 150);
printf("\n");
if (day2 * 150 < pay)
printf("请退给该顾客 %d 元整!\n", day * 150);
if (day2 * 150 > pay)
printf("请补收该顾客住房费 %d 元整!\n", day2 * 150 - pay);
printf("消费总钱数为%d\n", day2 * 150);
break;
case 2:
printf("顾客的房间号是%d :为双人间,每天200元\n",room_number);
printf("实际住房消费 %d元整!\n", day2 * 200);
printf("\n");
if (day2 * 200 < pay)
printf("请退给该顾客 %d 元整!\n", day * 150);
if (day2 * 200 > pay)
printf("请补收该顾客住房费 %d 元整!\n", day2 * 200 - pay);
printf("消费总钱数为%d\n", day2 * 200);
break;
case 3:
printf("号顾客的房间号是%d :为家庭房,每天300元\n",room_number);
printf("实际住房消费 %d元整!\n", day2 * 300);
printf("\n");
if (day2 * 300 < pay)
printf("请退给该顾客 %d 元整!\n", day * 300);
if (day2 * 150 > pay)
printf("请补收该顾客住房费 %d 元整!\n", day2 * 300 - pay);
printf("消费总钱数为%d\n", day2 * 300);
break;
}
printf("退房核算清楚,请按1: ");
scanf("%d", &choice);
if (choice == 1)
{
int j;
for (j = 0; j < 80; j++)
{
if (room[j].number == customer[k]->room_number)
room[j].status = 0;
}
--i;
for (j = 0; j < i; j++)
{
customer[j] = customer[j + 1];
}
free(customer[i]);
printf("退房成功!");
}
}
}
}
void search()
{
int choice;
char name3[10];
char id3[19];
printf("1->房间信息查询\n2->顾客信息查询\n");
printf("请输入你的选择:");
fflush(stdin);
scanf("%d", &choice);
if (choice == 1)
{
int k, count1 = 0, count2 = 0;
printf("未住人的房间有:\n");
for (k = 0; k < 60; k++)
{
if (room[k].status == 0)
{
printf("%d", room[k].number);
count1++;
printf(" ");
}
if (count1 % 10 == 0)
{
printf("\n");
}
}
printf("\n");
printf("住人的房间有:\n");
for (k = 0; k < 60; k++)
{
if (room[k].status != 0)
{
printf("%d", room[k].number);
count2++;
}
else
return;
if (count2 % 10 == 0)
{
printf("\n");
}
}
printf("\n");
}
else if (choice == 2)
{
int choice2 ,j;
printf("1->按姓名查找:\n2->按身份证号码查找\n:");
printf("请输入你的选择:");
scanf("%d",&choice2);
switch (choice2)
{
case 1:
printf("请输入顾客的姓名: \n");
scanf("%s", name3);
for (j = 0; j < i; j++)
{
if (strcmp(customer[j]->name, name3) == 0)
{
printf("%s的住房信息如下:\n", name3);
printf("房间号为: %d\n",customer[j]->room_number);
printf("姓名:%s\n",customer[j]->name);
printf("身份证号码:%s\n",customer[j]->ID);
printf("籍贯:%s\n",customer[j]->addr);
}
}
break;
case 2:
printf("请输入顾客的身份证: \n");
scanf("%s", id3);
for (j = 0; j < i; j++)
{
if (strcmp(customer[j]->ID, id3) == 0)
{
printf("%s的住房信息如下:\n", customer[j]->name);
printf("房间号为: %d\n", customer[j]->room_number);
printf("姓名:%s\n",customer[j]->name);
printf("身份证号码:%s\n",customer[j]->ID);
printf("籍贯:%s\n",customer[j]->addr);
}
}
break;
}
}
else
{
printf("输入不合适!");
}
}
void add(struct Customer* cs)
{
printf("请输入顾客的姓名:");
scanf("%s",cs->name);
printf("请输入性别:");
scanf("%s", cs->sex);
printf("请输入身份证号码:");
scanf("%s", cs->ID);
printf("请输入籍贯:");
scanf("%s", cs->addr);
}
void change()
{
char name4[10];
int k,choice;
char name5[10],sex5[2],ID5[19],addr5[10];
printf("请输入你要修改的客户姓名:\n");
scanf("%s",&name4);
for(k=0;k<i;k++)
{
if(strcmp(customer[k]->name,name4)==0)
{
printf("1->姓名 2->性别 3->身份证号码 4->籍贯\n");
printf("请选择你要修改的客户信息:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入修改后的姓名:");
scanf("%s",&name5);
strcpy(customer[k]->name,name5);
break;
case 2:
printf("请输入修改后的性别:");
scanf("%s",&sex5);
strcpy(customer[k]->sex,sex5);
break;
case 3:
printf("请输入修改后的身份证号码:");
scanf("%s",&ID5);
strcpy(customer[k]->ID,ID5);
break;
case 4:
printf("请输入修改后的籍贯:");
scanf("%s",&addr5);
strcpy(customer[k]->addr,addr5);
break;
}
printf("修改成功!");
}
else
{
printf("输入有误!");
return ;
}
}
}
|