微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

标志条件和文件写入

如何解决标志条件和文件写入

我正在为我的大学项目创建一个酒店管理系统软件。代码有两个主要问题。

  1. 程序接收一个房间号,通过检查功能运行它,如果根据条件预订它,但是当我尝试使用唯一的房间号再次预订时,它说它已被预订,即使它没有在现实中。它只预订了一次房间。
  2. book_rooms 的功能不是将内容写入文件
#include<iostream>
#include<conio.h>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
using namespace std;
struct hotel
{
    int room_no[50];
    string name[50] ;
    string adress[50];
    int mobile_no[50];
    int bill[50];
    int days[50];
    int room;
    int room1;
    int flag=0;
    fstream records;

void main_menu();
int book_rooms();
int customer_records();
int rooms_alloted();
int edit_records();
int customer_bills();
int check(int);
};

void hotel :: main_menu()
{
    int choice;
while(choice!=6)
{

  system("cls");
cout<<"\n\t\t\t\t*************************";
cout<<"\n\t\t\t\t HOTEL MANAGEMENT SYstem ";
cout<<"\n\t\t\t\t      * MAIN MENU *";
cout<<"\n\t\t\t\t*************************";
cout<<"\n\n\n\t\t\t1.Book A Room";
cout<<"\n\t\t\t2.Customer Records";
cout<<"\n\t\t\t3.Rooms Allotted";
cout<<"\n\t\t\t4.Edit Record";
cout<<"\n\t\t\t5.Customer Bills";
cout<<"\n\t\t\t6.Exit";
cout<<"\n\n\t\t\tEnter Your Choice: ";
cin>>choice;
switch (choice)
{
case 1:
    {
        book_rooms();
        break;
    }
    case 2:
    {
        customer_records();
        break;
    }
    case 3:
    {
        rooms_alloted();
        break;
    }
    case 4:
    {
        edit_records();
        break;
    }
    case 5:
    {
        customer_bills();
        break;
    }
    case 6:
    {
        break;
    }
}

}
}
int hotel:: book_rooms()
{
    
    system("cls");
    int room;
    cout<<"\n\t*************************";
    cout<<"\n\t     ROOM BOOKING";
    cout<<"\n\t*************************";
    cout<<"\n\nPlease enter the room number you want to book.";
    cout<<"\n1: Standard room(Room 1-20) (Rs.1000/night)";
    cout<<"\n2.Suite(Room 21-40) (Rs.5000/night)";
    cout<<"\n3.Luxury Room(Room 41-50) (Rs.10000/night)\n";
    ofstream records("rooms.txt");



    cin>>room;
    room1=room-1;

    flag=check(room);



    if(flag==1)
    {
        cout<<"Sorry this room has been taken";
        system("pause");
    }

    else{

            room_no[room-1]=room;

    records<<"Room "<<room_no[room-1]<<"\n";
    cout<<"Name:";
    getline(cin,name[room-1]);
    getline(cin,name[room-1]);
    records<<name[room-1]<<"\n";
    cout<<"Adress:";
    getline(cin,adress[room-1]);
    records<<adress[room-1]<<"\n";
    cout<<"\nMobile no: ";
    cin>>mobile_no[room-1];
    records<<mobile_no[room-1]<<"\n";
    records.close();
    cout<<"\nYour room has been booked\n";
    system("pause");
}}
int hotel::check(int r)
{
ifstream records("rooms.txt");
while(!records.eof())
{


records>>room_no[r-1];
if(room_no[r-1]==r)
    {
    flag=1;
    break;

    }
    }

records.close();
return flag;

}




int main()
{
    hotel p;
    p.main_menu();
}

解决方法

此代码很可能存在多个问题。但是您的直接问题似乎是您同时打开 "rooms.txt" 进行输入和输出。

int hotel::book_rooms()
{
    ...
    ofstream records("rooms.txt");
    ...
    flag=check(room);
    ...
}

int hotel::check(int r)
{
    ifstream records("rooms.txt");
    ...
}

看到问题了吗? book_rooms 立即打开rooms.txt 进行输出,然后check 尝试打开相同的文件进行输入。像这样重新组织你的代码,这样你就不会同时在两个地方打开文件。

int hotel::book_rooms()
{
    ...
    flag=check(room);
    ...
    ofstream records("rooms.txt");
    ...
}

int hotel::check(int r)
{
    ifstream records("rooms.txt");
    ...
}

但正如我所说,我认为您会发现这只是此代码的多个问题中的第一个。似乎您试图过于雄心勃勃,并且在没有足够测试的情况下编写了太多代码。这是初学者很常见的失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?