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++;}elsereturn;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);//printf("请输入出生年月:");//scanf("%s", cs->birth);//printf("请输入民族:");//scanf("%s",cs->nation);//printf("请输入居住地:");//scanf("%s", cs->place);//printf("请输入工作单位:");//scanf("%s", cs->work);
}//修改客户信息函数封装
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);//customer[i]->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 ;}}
}

C课设/宾馆客房管理系统/内附源码相关推荐

  1. 基于c++课程设计-宾馆客房管理系统(附源码)

    文章目录 前言 项目简介 涉及知识点 源码获取方法: 系统登陆界面 系统入口 订房实现 入住登记 源码获取方法: 前言 基于c&c++课程设计-宾馆客房管理系统(附源码+可执行程序) 非常完整 ...

  2. PHP-MYSQL宾馆客房管理系统(附源码)

    PHP-MYSQL宾馆客房管理系统(附源码) 主要功能 主要语言 部分界面 获取方式 分为 前台用户和 后台管理员两个角色,功能完善,界面优美,运行良好. (文末有获取源代码方式) 主要功能 用户: ...

  3. jsp+ssm计算机毕业设计宾馆客房管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. JSP课设:投票管理系统(附源码+调试)

    JSP投票管理系统 JSP投票管理系统概述 (1)投票用户:浏览投票系统栏目,参与投票,并实时查投票结果 (2)投票系统后台:新增投票:可以选择投票频道(足球.篮球等等).输入投票名称,输入选项名称, ...

  5. 临近期末,图书管理系统课设项目安排上(附源码)

    图书管理系统 项目介绍 项目截图 源码分享 项目介绍 本系统是一个基于java的图书管理系统,用Swing显示信息. 开发环境为IDEA,使用mysql数据库.用 户分为 用户和管理员. 项目截图 源 ...

  6. 高分毕设基于JAVA的仓库管理系统项目(内附源码)

    一.高分毕设基于JAVA的仓库管理系统项目(内附源码) 项目简介:(源码免费下载链接如下) 基于JAVA的仓库管理系统项目源码.zip-Java文档类资源-CSDN下载 在经过多家公司上线运行后,为了 ...

  7. Web酒店管理系统(附源码及资源)

    Web酒店管理系统(附源码及资源) 一.系统概述: 二.系统功能分析 三.系统主要内容: 四.源码下载 五.总结 一.系统概述: 该系统通过Sublime Text编辑器编写完成,涉及到了htnl.c ...

  8. 视频教程-手把手实现Java图书管理系统(附源码)-Java

    手把手实现Java图书管理系统(附源码) 南京大学软件工程硕士,曾就职于擎天科技.中软国际.华为等上市公司,擅长Java开发.Web前端.Python爬虫.大数据等领域技术. 全栈工程师,从事软件开发 ...

  9. Java项目—停车场管理系统(附源码+资料课件)

    今天给大家分享一个Java项目开发-停车场管理系统(附源码+课件资料). 感兴趣的小伙伴可以点击下方链接,和小编一起学编程哟~ https://www.bilibili.com/video/BV1de ...

  10. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...

    原标题:Selenium 凭什么成为 Web 自动化测试的首选?(内附源码) 自动化 · 工具 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试. 2. Selenium ...

最新文章

  1. 听说,英特尔要对外开放 x86 授权?
  2. tkinter笔记:画布canvas
  3. 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
  4. html 如何用图片代替单选按钮,HTML中图像代替提交按钮
  5. .NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力
  6. 怎样准备阿里技术面试_如何准备技术面试
  7. Atitit 多线程 什么时候使用多进程的选择场景 目录 1.1. 看实现,比如你的用node.js实现,那就没得选了,只能多进程 1 1.2. 如果用java这一类,可以选择多进程与多线程模式,或
  8. python运维脚本简书_Python运维篇:会Python的运维工程师价值多少?
  9. Nginx工作原理及基本使用
  10. JAVA毕设项目-网上订餐系统(附:源码 论文 Sql文件)
  11. Android基于opencv4.6.0实现人脸识别功能
  12. 【22.05.14】native thread exiting without having called DetachCurrentThread
  13. 蔡颖-《APS走向实践》书解读之三:供应、计划排程、供应链优化
  14. 阿里云云计算:1. 云计算的概念
  15. 3d打印技术与计算机,讲述3D打印技术是如何实现打印的,与普通的打印有何不同...
  16. 总结吴恩达 ChatGPT Prompt 免费课程
  17. Hive入门级教程(详细)
  18. linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
  19. 这里有一份面筋请查收(一)
  20. 面试总结:移动web设计与开发

热门文章

  1. docker下载地址
  2. opencv模板匹配matchTemplate
  3. gbk utf-8 asccl url
  4. 使用Phoenix连接HBASE,squirrel使用,代码连接使用Phoenix
  5. matlab绘制符号函数的ezplot函数
  6. 计算机处理器基础原理笔记
  7. 几何画板椭圆九种画法_椭圆的画法几何画板的动画演示
  8. 主数据管理(MDM)的成熟度
  9. 《信号与系统》(吴京)部分课后习题答案与解析——第四章(PART2)
  10. Java 邮政EMS快递面打印实现 笔记