C Primer Plus(第五版) 第十四章 第八题

2024-03-17 11:18

本文主要是介绍C Primer Plus(第五版) 第十四章 第八题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



删除操作还没有做好,有些小地方不知道如何处理了,可能需要看一些开源项目来理解如何进行字符串操作。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX_char 20
#define NUMBER 12//number of seat

struct seat
{
 int number;//0~11
 int used;//0~1
 char First[MAX_char];//20
 char Last[MAX_char];//20
};
struct airplane
{
 struct seat seats[NUMBER];
};

char menu();
void init(struct airplane *a);
void show_empty(struct airplane *a);
int cal_empty(struct airplane *a);
void show_alp(struct airplane a);
void add_customer(struct airplane *a,int pos);
void delet_seat(struct airplane *a);
int b[12]={0,1,2,3,4,5,6,7,8,9,10,11};//seats

int cmp1(const void *a,const void *b)
{
 return strcmp(((struct seat*)a)->First,((struct seat *)b)->First);
}

void eatline()
{
 while(getchar()!='\n')
  continue;
}
int get_int(void)
{
 int a;
 char ch;
 while(scanf("%d",&a)!=1||a<0||a>11)
 {
  while((ch=getchar())!='\n')
   putchar(ch);
  puts(" is not correct input");
  puts("Please input the integer in the scope 0~11.");
 }
 eatline();
 return a;
}

int main(int argc, char **argv)
{
 //printf("hello world\n");
 char choose;
 struct airplane Planes;
 FILE *in;
 int i=0;//0~11
 int filecount=0;
 
 init(&Planes);//initial
 if((in=fopen("seats.dat","a+b"))==NULL)
 {
  fputs("Can't open the planes.dat",stderr);
  exit(1);
 }
 //rewind(in);
 while(i<NUMBER&&fread(&(Planes.seats[i]),sizeof(struct seat),1,in)==1)
 {
  if(i==0) puts("Here is current state of seats in airplane:");
  
  if(Planes.seats[i].used==1) printf("Number:%-2d Used:%-2d Customer %-10s %-10s\n",Planes.seats[i].number,Planes.seats[i].used,Planes.seats[i].First,Planes.seats[i].Last);
  i++;
 }
 filecount=i;
 while(1)
 {
  choose=menu();
  if(choose=='a') cal_empty(&Planes);
  if(choose=='b') show_empty(&Planes);
  if(choose=='c') show_alp(Planes);
  if(choose=='d')
  {
   add_customer(&Planes,i);
   //printf("%s %s No:%d Used:%d\n",Planes.seats[i].First,Planes.seats[i].Last,Planes.seats[i].number,Planes.seats[i].used);   
   
   fwrite(&(Planes.seats[i]),sizeof(struct seat),1,in);
   i++;
  }
  if(choose=='e') delet_seat(&Planes);
  if(choose=='f') { break;}
  //printf("you choose the choice:%c\n",choose);
  puts("\n");
 }
 /*if(i>0)
 {
  int index;
  puts("Here is the list of your plane:");
  for(index=0;index<12;index++)
   printf("%s %s No:%d Used:%d\n",Planes.seats[index].First,Planes.seats[index].Last,Planes.seats[index].number,Planes.seats[index].used);
  fwrite(&(Planes.seats[filecount]),sizeof(struct seat),i-filecount,in);
 }*/
 fclose(in);
 return 0;
}
void add_customer(struct airplane *a,int pos)
{
 int remain=cal_empty(a);
 show_empty(a);
 int sign_end=0;//0 or 1
 puts("Which seat do you want to choose? ");
 struct seat save;
 save.number=get_int();
 puts("Please input your First name");
 gets(save.First);
 puts("Please input your Last name");
 gets(save.Last);
 puts("Do you want to save the information? Please press 'y' to confirm.");
 if(tolower(getchar())=='y')
 { save.used=1;
  //int pos=save.number;
  a->seats[pos].number=save.number;
  strcpy(a->seats[pos].First,save.First);
  strcpy(a->seats[pos].Last,save.Last);
  a->seats[pos].used=save.used;
 }
 else
  save.used=0;
 eatline();
 //printf("%s %s No:%d Used:%d\n",save.First,save.Last,save.number,save.used);
}
void delet_seat(struct airplane *a)
{
 int pos,i=0;
 show_alp(*a);
 puts("which postion do you want to delete?");
 scanf("%d",&pos);
 eatline();
 while(i<NUMBER)
 {
  if(a->seats[i].number==pos)
   {a->seats[i].used=0;break;}
  i++;
 }
 
}
void init(struct airplane *a)
{
 int i=0;
 
 while(i<NUMBER)
 {
  a->seats[i].number=i;
  a->seats[i].used=0;
  strcpy(a->seats[i].First," ");
  strcpy(a->seats[i].Last," ");
  //printf("%s %s number: %d used:%d\n",a->seats[i].Last,a->seats[i].First,a->seats[i].number,a->seats[i].used);
  i++;
 }
}
void show_alp(struct airplane a)
{
 qsort(a.seats,12,sizeof(struct seat),cmp1);
 int i=0;
 while(i<NUMBER)
 {
  if(a.seats[i].used==1)
   printf("%-10s %-10s NO:%-.2d\n",a.seats[i].First,a.seats[i].Last,a.seats[i].number);
  i++;
 }
 
}
int cal_empty(struct airplane *a)
{
 int i=0;
 int count=0;
 while(i<NUMBER)
 {
  if(a->seats[i].used==0)
   count++;
  i++;
 }
 printf("The empty seats in this plane:%d\n",count);
 return count;
}
void show_empty(struct airplane *a)
{
 int i=0;
 while(i<NUMBER)
 {
  if(i==0) puts("The Empty Number of this plane: ");
  if(a->seats[i].used==1) b[a->seats[i].number]=-1;
  i++;
 }
 for(i=0;i<NUMBER;i++)
  if(b[i]!=-1) printf("%d ",b[i]);
  
 int b[12]={0,1,2,3,4,5,6,7,8,9,10,11};
 printf("\n");
}
char menu()
{
 char ans;
 puts("To choose a function,enter its letter label:");
 puts("a)Show number of empty seats");
 puts("b)Show list of empty");
 puts("c)Show alphabetical list of seats");
 puts("d)Assign a customer to a seat assignment");
 puts("e)Delete a seat assignment");
 puts("f)Quit");
 ans=tolower(getchar());
 eatline();
 while(strchr("abcdef",ans)==NULL)
 {
  puts("Please input the one of 'a,b,c,d,e,f'");
  ans=tolower(getchar());
  eatline();
 }
 return ans;
}

这篇关于C Primer Plus(第五版) 第十四章 第八题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818793

相关文章

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "String.h"using namespace std;int main(){String s1(" and I am a

Mybatis Plus快速重构真批量sql入库操作

Mybatis快速重构真批量sql入库操作 基本思路 重构mybatis默认方法saveBatch和saveOrUpdateBatch的实现 基本步骤 真批量保存实现类InsertBatchMethod真批量更新实现类MysqlInsertOrUpdateBath注册InsertBatchMethod和MysqlInsertOrUpdateBath到EasySqlInjector注册Eas

leetcode#66. Plus One

题目 Given a non-negative integer represented as a non-empty array of digits, plus one to the integer. You may assume the integer do not contain any leading zero, except the number 0 itself. The digi

【C++ Primer Plus习题】12.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "Cow.h"using namespace std;int main(){Cow c1;Cow c2("老母牛", "喝奶"

《C Primer Plus》第10 章复习题和编程练习

目录 一、复习题二、编程练习 一、复习题 1. 下面的程序将打印什么内容? #include <stdio.h>int main(){int ref[] = {8, 4, 0 ,2};int *ptr;int index;for (index = 0, ptr = ref; index < 4; index++, ptr++){printf("%d %d\n", ref[in

MyBatis-Plus 框架 QueryWrapper UpdateWrapper 方法修复sql注入漏洞事件

什么是漏洞? 漏洞是指软件、系统或网络中存在的安全弱点或错误,这些弱点可能导致系统遭受攻击或被不当使用。在计算机安全领域,漏洞通常源于编程错误、设计缺陷或配置失误。 对于对象关系映射(ORM)框架来说,漏洞通常指的是设计或实施中的安全问题,这些问题可能让应用程序面临SQL注入攻击的风险。 SQL 注入漏洞 如果ORM框架在执行SQL操作时没有正确过滤或转义用户输入,攻击者可以利用输入的恶意数据