首页 > 系统相关 >Linux系统大神随笔

Linux系统大神随笔

时间:2022-12-28 17:05:34浏览次数:48  
标签:ticket3 ticket2 ok 大神 Linux else num printf 随笔


/*

车站售票系统

*/

Linux系统大神随笔_#include


Linux系统大神随笔_自然语言处理_02

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>

//车票数量
int ticket1 = 20;
int ticket2 = 10;
int ticket3 = 30;

//乘客已购买的票
int ticket1_ok;
int ticket2_ok;
int ticket3_ok;

//线程
void *task1(void *arg);
void *task2(void *arg);
void *task3(void *arg);

//信号处理函数
void sig_handler(int arg);

int key, key1, q = 1;

pthread_mutex_t lock;

int main(void)
{
pthread_t tid1, tid2, tid3; //线程的指针

int fd1, fd2, ds3;    //进程的id

pthread_mutex_init(&lock, NULL); //动态创建线程互斥锁

printf("欢迎使用xx售票系统!\r\n");

while(1)
{
printf("请选择需要的服务\r\n");
printf("1、买票, 2、退票, 3、改签, 4、 退出系统\r\n");
scanf("%d", &key);
printf("\r\n");

switch(key)
{
case 1:
pthread_create(&tid1, NULL, task1, NULL); //创建线程1,买票
pthread_join(tid1, NULL); //等待线程运行结束
break;
case 2:
pthread_create(&tid2, NULL, task2, NULL); //创建线程2,退票
pthread_join(tid2, NULL); //等待线程运行结束
break;
case 3:
pthread_create(&tid3, NULL, task3, NULL); //创建线程3,改签
pthread_join(tid3, NULL); //等待线程运行结束
break;
case 4:
pthread_mutex_destroy(&lock); //销毁互斥锁
return 0; //结束进程
}
}
return 0;

}

//线程1,买票
void *task1(void *arg)
{
int num;

while(1)
{
printf("当前剩余票数:广州:%d 深圳:%d 肇庆:%d\r\n", ticket1, ticket2, ticket3);
printf("请问您要购买哪个地方的票\r\n");
printf("1、广州, 2、深圳, 3、肇庆, 4、退出\r\n-----输入相应数字即可\r\n");
scanf("%d", &key1);
printf("\r\n");

if(key1 == 4)
{
printf("\r\n");
pthread_exit(0); //结束当前线程
}

printf("请问您需要购买几张\r\n");
scanf("%d", &num);
printf("\r\n");

if(key1 == 1)
{
if((ticket1 - num) >= 0)
{
ticket1 -= num; //系统剩余的票数
ticket1_ok += num; //乘客手中的票数
printf("购票成功!\r\n");
}
else
{
printf("购票失败---目前前往广州的票还剩%d张!\r\n", ticket1);
}
printf("\r\n");
}
else if(key1 == 2)
{
if((ticket2 - num) >= 0)
{
ticket2 -= num;
ticket2_ok += num;
printf("购票成功!\r\n");
}
else
{
printf("购票失败---目前前往深圳的票还剩%d张!\r\n", ticket2);
}
printf("\r\n");
}
else if(key1 == 3)
{
if((ticket3 - num) >= 0)
{
ticket3 -= num;
ticket3_ok += num;
printf("购票成功!\r\n");
}
else
{
printf("购票失败---目前前往肇庆的票还剩%d张!\r\n", ticket3);
}
printf("\r\n");
}
}

}

//线程2,退票
void *task2(void *arg)
{
char temp = 0; //有哪几种票
char flag1 = 0, flag2 = 0, flag3 = 0; //票的种类
char flag11 = 0, flag22 = 0, flag33 = 0;
int i, rec;
char rec1, rec2, rec3;

if(ticket1_ok > 0)
{
printf("您购买了%d张前往广州的票!\r\n", ticket1_ok);
temp ++;
flag1 = 1;
}
if(ticket2_ok > 0)
{
printf("您购买了%d张前往深圳的票!\r\n", ticket2_ok);
temp ++;
flag2 = 1;
}
if(ticket3_ok > 0)
{
printf("您购买了%d张前往肇庆的票!\r\n", ticket3_ok);
temp ++;
flag3 = 1;
}
if(ticket1_ok == 0 && ticket2_ok == 0 && ticket3_ok == 0)
{
pthread_mutex_lock(&lock);//加锁

printf("您还没购票!无法为您提供退票服务!\r\n");
printf("10秒后自动关闭该界面!");
signal(14, sig_handler);
alarm(10); //10秒后自动结束该线程
for(i = 10; i >= 0; i--)
{
printf("%d\r\n", i); //倒计时显示
sleep(1);
}
//while(q);
printf("\r\n");
pthread_exit(0); //结束当前线程
}

//手中有票
while(1)
{
rec1 = flag1;
rec2 = flag2;
rec3 = flag3;

printf("请问你需要退的票是?(按4退出该界面!)\r\n");
for(i = 1; i <= temp; i++) //判断已买的票,并排序
{
if(rec1 > 0)
{
printf("%d:广州\t", i);
rec1 = 0;
flag11 = i; //票的序号
}
else if(rec2 > 0)
{
printf("%d:深圳\t", i);
rec2 = 0;
flag22 = i;
}
else if(rec3 > 0)
{
printf("%d:肇庆\t", i);
rec3 = 0;
flag33 = i;
}
}
printf("\r\n");
scanf("%d", &rec); //选择要退的票
printf("\r\n");
if(rec == flag11) //退广州的票
{
printf("您可以退%d张前往广州的票,请问您需要退几张?\r\n", ticket1_ok);
scanf("%d", &rec); //退几张
printf("\r\n");
if(rec > ticket1_ok)
{
printf("您至多退%d张票\r\n", ticket1_ok);
}
else
{
ticket1_ok -= rec; //原有的票减去要退的票
ticket1 += rec; //系统中的票加上退票
if(ticket1_ok > 0) printf("您还有%d张前往广州的票!\r\n", ticket1_ok);
else
{
printf("您已经没有了前往广州的票!\r\n");
flag1 = 0;
flag11 = 110;
}
}
printf("\r\n");
}
else if(rec == flag22)
{
printf("您可以退%d张前往深圳的票,请问您需要退几张?\r\n", ticket2_ok);
scanf("%d", &rec);
printf("\r\n");
if(rec > ticket2_ok)
{
printf("您至多退%d张票\r\n", ticket2_ok);
}
else
{
ticket2_ok -= rec;
ticket2 += rec;
if(ticket2_ok > 0) printf("您还有%d张前往深圳的票!\r\n", ticket2_ok);
else
{
printf("您已经没有了前往深圳的票!\r\n");
flag2 = 0;
flag22 = 120;
}
}
printf("\r\n");
}
else if(rec == flag33)
{
printf("您可以退%d张前往肇庆的票,请问您需要退几张?\r\n", ticket3_ok);
scanf("%d", &rec);
if(rec > ticket3_ok)
{
printf("您至多退%d张票\r\n", ticket3_ok);
}
else
{
ticket3_ok -= rec;
ticket3 += rec;
if(ticket3_ok > 0) printf("您还有%d张前往肇庆的票!\r\n", ticket3_ok);
else
{
printf("您已经没有了前往肇庆的票!\r\n");
flag3 = 0;
flag33 = 130;
}
}
printf("\r\n");
}
else if(rec == 4)
{
pthread_exit(0);//结束当前线程
}
}

}

//线程3,改签
void *task3(void *arg)
{
int temp = 0, temp1 = 0; //有几种票
char flag1 = 0, flag2 = 0, flag3 = 0; //票的类型
char flag11 = 0, flag22 = 0, flag33 = 0, flag44 = 0, flag55 = 0, flag66 = 0;
char remain1, remain2, remain3; //系统剩下票的标志位
char rec1, rec2, rec3, rec4, rec5, rec6;
int local1, local2; //改签的源、目地点
int num = 0;
char i;

while(1)
{
if(ticket1_ok > 0 | ticket2_ok > 0 | ticket3_ok > 0) //手上有票
{
printf("您现在有:");
if(ticket1_ok > 0)
{
printf("%d张前往广州的票\t", ticket1_ok);
temp++;
flag1 = 1;
}
if(ticket2_ok > 0)
{
printf("%d张前往深圳的票\t", ticket2_ok);
temp++;
flag2 = 1;
}
if(ticket3_ok > 0)
{
printf("%d张前往肇庆的票", ticket3_ok);
temp++;
flag3 = 1;
}
printf("\r\n");
}
else //手上没票
{
pthread_mutex_lock(&lock); //加锁

printf("您还没买票,无法为您提供改签服务!如有需要,请到买票窗口买票\r\n");

printf("10秒后自动关闭该界面!");
signal(14, sig_handler);
alarm(10); //10秒后自动结束该线程
for(i = 10; i >= 0; i--)
{
printf("%d\r\n", i); //倒计时显示
sleep(1);
}
printf("\r\n");
pthread_exit(0); //结束当前线程
}

if(ticket1 > 0 | ticket2 > 0 | ticket3 > 0) //系统中还有余票
{
printf("现在系统剩余的票有:\r\n");

if(ticket1 > 0)
{
printf(" 前往广州的票还有%d张\r\n", ticket1);
remain1 = 1;
temp1++;
}
if(ticket2 > 0)
{
printf(" 前往深圳的票还有%d张\r\n", ticket2);
remain2 = 1;
temp1++;
}
if(ticket3 > 0)
{
printf(" 前往肇庆的票还有%d张\r\n", ticket3);
remain3 = 1;
temp1++;
}
}
else //系统中没有余票
{
pthread_mutex_lock(&lock); //加锁

printf("不好意思,现在系统中已经没有余票了!\r\n");
printf("您可以等别人退票或者等加仓!\r\n");
printf("10秒后自动关闭该界面!");
signal(14, sig_handler);
alarm(10); //10秒后自动结束该线程
for(i = 10; i >= 0; i--)
{
printf("%d\r\n", i); //倒计时显示
sleep(1);
}
printf("\r\n");
pthread_exit(0); //结束当前线程
}


/*********************************************************************/

rec1 = flag1;
rec2 = flag2;
rec3 = flag3;
rec4 = remain1;
rec5 = remain2;
rec6 = remain3;

printf("请问您要改签那种票(按4退出该界面!)\r\n");
for(i = 1; i <= temp; i++)
{
if(rec1 > 0) //flag1 = 0时才不打印
{
printf("%d:广州 ", i);
rec1 = 0;
flag11 = i; //票的序号
}
else if(rec2 > 0)
{
printf("%d:深圳 ", i);
rec2 = 0;
flag22 = i;
}
else if(rec3 > 0)
{
printf("%d:肇庆 ", i);
rec3 = 0;
flag33 = i;
}
}
printf("\r\n");
scanf("%d", &local1);
printf("\r\n");

if(local1 == 4)
{
pthread_exit(0);//结束当前线程
}

printf("现在有票的地点有:\r\n");
for(i = 1; i <= temp1; i++)
{
if(rec4 > 0)
{
printf("%d:广州 ", i);
rec4 = 0; //flag4 = 0时才不打印
num = 1;
flag44 = i;
}
else if(rec5 > 0)
{
printf("%d:深圳 ", i);
rec5 = 0;
num = 1;
flag55 = i;
}
else if(rec6 > 0)
{
printf("%d:肇庆 ", i);
rec6 = 0;
num = 1;
flag66 = i;
}
}
printf("\r\n");
if(num == 0) //不能改签
{
printf("\r\n");
printf("目前没有能改签的地方\r\n");
printf("您可以等别人退票或者等加仓!\r\n");
printf("\r\n");
}
else //能改签
{
printf("\r\n");
printf("请问您要改签到什么地方?\r\n");
scanf("%d", &local2); //目地点

printf("请问您需要改签几张\r\n");
scanf("%d", &num);

if(local1 == flag11) //原地点是广州
{
if(ticket1_ok < num) //手上的票数少过要改的数量
{
printf("改签失败,您手上没有%d张原地点是广州的票\r\n", num);
}
else if(local2 == flag44) //目地点是广州
{
printf("不能改签到一样的地方!\r\n");
}
else if(local2 == flag55) //目地点是深圳
{
if(num > ticket2) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往深圳的票\r\n", ticket2);
}
else
{
printf("改签成功!\r\n");
ticket1_ok -= num; //手上前往广州的票
ticket1 += num; //系统中前往广州的票
ticket2_ok += num; //手上前往深圳的票
ticket2 -= num; //系统中前往深圳的票
}
}
else if(local2 == flag66) //目地点是肇庆
{
if(num > ticket3) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往肇庆的票\r\n", ticket3);
}
else
{
printf("改签成功!\r\n");
ticket1_ok -= num; //手上前往广州的票
ticket1 += num; //系统中前往广州的票
ticket3_ok += num; //手上前往肇庆的票
ticket3 -= num; //系统中前往肇庆的票
}
}
}
else if(local1 == flag22) //原地点是深圳
{
if(ticket2_ok < num) //手上的票数少过要改的数量
{
printf("改签失败,您手上没有%d张原地点是深圳的票\r\n", num);
}
else if(local2 == flag44) //目地点是广州
{
if(num > ticket2) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往广州的票\r\n", ticket1);
}
else
{
printf("改签成功!\r\n");
ticket2_ok -= num; //手上前往深圳的票
ticket2 += num; //系统中前往深圳的票
ticket1_ok += num; //手上前往广州的票
ticket1 -= num; //系统中前往广州的票
}
}
else if(local2 == flag55) //目地点是深圳
{
printf("不能改签到一样的地方!\r\n");
}
else if(local2 == flag66) //目地点是肇庆
{
if(num > ticket3) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往肇庆的票\r\n", ticket3);
}
else
{
printf("改签成功!\r\n");
ticket2_ok -= num; //手上前往深圳的票
ticket2 += num; //系统中前往深圳的票
ticket3_ok += num; //手上前往肇庆的票
ticket3 -= num; //系统中前往肇庆的票
}
}
}
else if(local1 == flag33) //原地点是肇庆
{
if(ticket3_ok < num) //手上的票数少过要改的数量
{
printf("改签失败,您手上没有%d张原地点是肇庆的票\r\n", num);
}
else if(local2 == flag44) //目地点是广州
{
if(num > ticket2) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往广州的票\r\n", ticket1);
}
else
{
printf("改签成功!\r\n");
ticket3_ok -= num; //手上前往肇庆的票
ticket3 += num; //系统中前往肇庆的票
ticket1_ok += num; //手上前往广州的票
ticket1 -= num; //系统中前往广州的票
}
}
else if(local2 == flag55) //目地点是深圳
{
if(num > ticket3) //系统现有的票数少过要改的数量
{
printf("改签失败,现在系统中仅有%d张前往深圳的票\r\n", ticket2);
}
else
{
printf("改签成功!\r\n");
ticket3_ok -= num; //手上前往肇庆的票
ticket3 += num; //系统中前肇庆圳的票
ticket2_ok += num; //手上前往深圳的票
ticket2 -= num; //系统中前往深圳的票
}
}
else if(local2 == flag66) //目地点是肇庆
{
printf("不能改签到一样的地方!\r\n");
}
}
printf("\r\n");
}

//标志位清零
temp = temp1 = flag1 = flag11 = flag2 = flag22 = flag3 = flag33 = flag44 = flag55 = flag66 = 0;
}

}

//信号处理函数
void sig_handler(int arg)
{
q = 0;
pthread_mutex_unlock(&lock); //解锁
}


标签:ticket3,ticket2,ok,大神,Linux,else,num,printf,随笔
From: https://blog.51cto.com/u_11947739/5975725

相关文章

  • Linux的文本处理工具浅谈-awk sed grep
    【【功能说明】用于文本处理的语言(取行,过滤),支持正则NR代表行数,NF最后一列NR20,NR30从20行到30行FS竖着切,列的分隔符RS横着切,行的分隔符【语法格式】awk[–F][“......
  • 48.TNS-12518、TNS-00517和 Linux Error:32:Broken pipe
    现象:使用sqlplus登录oracle时出现如下报错:ERROR:ORA-12537:TNS:connectionclosed查看监听日志: log.xmlTNS-12547:TNS:lostcontactTNS-12560:T......
  • Linux连接MobaXterm出现的问题及解决
    问题描述:在连接Linux虚拟机与MobaXterm时遇到问题,在Linux虚拟机中无法使用ifconfig命令查询当前的IP地址。 出现问题的原因可能是:下载的镜像为min镜像,可能不包含ifcon......
  • Linux-CentOS7安装RocketMQ
    下载地址https://archive.apache.org/dist/rocketmq/基础安装#解压unziprocketmq-all-4.7.0-bin-release.zip修改bin/runserver.shJAVA_OPT="${JAVA_OPT}-server......
  • linux 中修改yum源为网易云
    目录​​1.下载repo文件​​​​2.把下载的文件移动到/etc/yum.repos.d/目录​​​​3.进入到/etc/yum.repos.d/目录​​​​4.用CentOS6-Base-163.repo替换CentOS-Base......
  • linux配置java环境变量(详细)
    一.解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令./jdk-6u14-linux-i586.bin这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入......
  • VMware下的Linux主机联网配置操作
    实验环境:物理主机为windows主机,采用VMware下挂一台Linux主机背景知识:默认会使用LINUX文本编辑的基本操作,有关于局域网的基本配置、数通知识Linux下查看IP配置信息:ipad......
  • 转贴:浅析 Linux 的国际化与本地化机制
       Linux是一个国际化的操作系统,它的工具集和设备驱动程序均支持多语言操作。本文通过分析glibc中实现国际化和本地化机制的函数和命令工具集以及从程序开发者、翻译......
  • 使用 udev 高效、动态地管理 Linux 设备文件(转载)--1
     ​​黄懋​​,软件工程师,IBM简介: 本文以通俗的方法阐述udev及相关术语的概念、udev的配置文件和规则文件,然后以RedHatEnterpriseServer为平台演示一......
  • Linux 下搭建 Qt 环境
    很多时候由于跨平台的需要,我们要在各个平台上安装Qt并进行应用程序的开发,而环境的搭建尤为重要,因为这是程序开发的前提,属于非常关键的一环。由于Linux 各个发行版的安......