C语言实现的飞机票系统解析

前言

操作系统:Windows下运行。如果需要在Linux运行(单机版),则需要修改删除conio.h,自己写个头文件获取键盘输入。我已经写好了getch.h文件,需要将其导入使用。

开发环境:CodeBlocks || VS Code ( gcc编译 )

开发语言:C

实现功能:登录,订票,退票

数据存储:文本读写

这几个信息文件不能少!!! 少了程序跑不了!!!

相关图片(仅供参考):程序是没有涉及旅行社的

ps:图片由PowerDesigner绘制而成

ER图:


数据库:


类图:


用例图:


订票顺序图:


订票状态图:


登录活动图:


以上图片仅供参考,请自行斟酌

程序主界面


 进入子功能需要账号和密码,存储在passenger.txt文件中

ps:文件数据的顺序就是结构体的顺序

typedef struct Flight
{
    char fid[20];       //航班号
	char fname[20];	    //航班名称
    char start[10];     //起点
    char end[10];       //终点
    int fnum;	        //票数
}Flight;
 
typedef struct Passenger
{
    char pid[20];	    //身份证
    char pname[10];	    //姓名
    char password[20];	//密码
	char tell[20];	    //电话
}Passenger;
 
typedef struct Order
{
    char pid[20];	//身份证
    char fid[20];	//航班号
	int num;	    //票数
}Order;

单机版(win)

注意头文件使用的conio.h,此版本为windows,linux参考前面的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
//#include "getch.h"
#include <conio.h>
 
#define MAX_Flight 50   // 最大航班数
#define MAX_Passenger 20    // 单航班最多乘客数
#define MAX_Order 50    // 最大订票数
 
typedef struct Flight
{
    char fid[20];       //航班号
	char fname[20];	    //航班名称
    char start[10];     //起点
    char end[10];       //终点
    int fnum;	        //票数
}Flight;
 
typedef struct Passenger
{
    char pid[20];	    //身份证
    char pname[10];	    //姓名
    char password[20];	//密码
	char tell[20];	    //电话
}Passenger;
 
typedef struct Order
{
    char pid[20];	//身份证
    char fid[20];	//航班号
	int num;	    //票数
}Order;
 
Flight *FLI;    // 定义全局变量
Passenger *PAS;
Order *ORD;
 
char start[10]; //起点
char end[10];   //终点
char search_fid[50][20];    //符合条件的航班号
int search_fnum[50];        //符合条件的航班票数
int online = 0;             //是否登录的变量
char online_pid[20];        //在线用户的身份证
int search_num = 0;         //符合条件的航班数
 
void init_sys(void);	    // 系统初始化
void show_flight(void);	    // 显示航班表
void start_sys(void);	    // 系统开始运行
void exit_sys(void);	    // 退出系统
void menu(void);		    // 生成主菜单
void login(void);           // 登录
void logout(void);          //用户登出
void passenger_info(void);  //查询旅客信息
bool change_pas_info(void); //修改旅客信息
void search_start(void);	// 生成查询页面
bool search(void);	        // 查询航班
void order_list(void);	    // 生成订单表
void del_order(void);	    // 退票
void clear_stdin(void);	    // 清除输入缓冲区
char* get_str(char* str,size_t len);  // 获取字符串
char get_cmd(char start,char end);	  // 获取cmd命令
 
// 主函数
int main()
{
	init_sys();     // 系统初始化
	start_sys();    // 系统开始运行
	exit_sys();     // 系统结束
	return 0;
}
 
// 系统初始化
void init_sys(void)
{
	// 申请堆内存、加载数据
	FLI = calloc(MAX_Flight,sizeof(Flight));
	PAS = calloc(MAX_Passenger,sizeof(Passenger));
	ORD = calloc(MAX_Order,sizeof(Order));
	printf("system_init...\n");
 
    // 以只读方式打开 order.txt,如果文件不存在则打开失败,返回值为空。
	FILE* ofrp = fopen("order.txt","r");
    if(NULL == ofrp)    // 打开失败直接退出
    {
        printf("order.txt open failed!\n");
        exit(0);
    }
 
    int i = 0;
	for(i = 0; i < MAX_Order; i++)	//读取文本中的数据到内存,全局变量ORD中
	{	
        int num = 0;
		num = fscanf(ofrp,"%s %s %d\n", ORD[i].pid, ORD[i].fid, &ORD[i].num);
	}
 
	FILE* ffrp = fopen("flight.txt","r");
    if(NULL == ffrp)
    {
        printf("flight.txt open failed!\n");
        exit(0);
    }
	for(i = 0; i < MAX_Flight; i++)
	{
		int num = 0;
		num = fscanf(ffrp,"%s %s %s %s %d\n", FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, &FLI[i].fnum);
	}
 
	FILE* pfrp = fopen("passenger.txt","r");
    if(NULL == pfrp)
    {
        printf("passenger.txt open failed!\n");
        exit(0);
    }
	for(i = 0; i < MAX_Passenger; i++)
	{
		int num = 0;
		num = fscanf(pfrp,"%s %s %s %s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
	}
}
 
// 显示航班表
void show_flight(void)
{
    int i = 0;
	for(i = 0; i < MAX_Flight; i++)
	{
		if(strlen(FLI[i].fid) != 0)
		{
			printf("id:%s name:%s start:%s end:%s fnum:%d\n", FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, 
                FLI[i].fnum);
		}
	}
}
 
// 系统开始运行
void start_sys(void)
{
	// 进入系统的业务流程控制
	//printf("系统开始运行...\n");
	//show_flight();
	while(true)
	{
		menu();
		switch(get_cmd('0','7')) // 获取键盘输入
		{
			case '1': search_start(); break;
			case '2': order_list(); break;
			case '3': del_order(); break;
			case '4': passenger_info(); break;
			case '5': change_pas_info(); break;
			case '6': login(); break;
			case '7': logout(); break;
			case '0': return;
		}
	}
}
 
// 系统结束
void exit_sys(void)
{
    printf("data insert...\n");
	FILE* ofwp = fopen("order.txt","w");
	printf("ready insert order.txt\n");
	int i= 0;
	for(i = 0; i < MAX_Order; i++)	//数据存储回本地
	{
	    int num = 0;
		if(strlen(ORD[i].pid) != 0)
		{
			num = fprintf(ofwp,"%s %s %d\n", ORD[i].pid, ORD[i].fid, ORD[i].num);
			//printf("insert order.txt success\n");
		}
	}
 
    // 以只写方式打开文件flight.txt,如果文件不存在则创建,如果文件存在则把内容清空。
	FILE* ffwp = fopen("flight.txt","w");
	printf("insert flight.txt\n");
	for(i = 0; i < MAX_Flight; i++)
	{
		int num = 0;
		if(strlen(FLI[i].fid) != 0)
		{
			num = fprintf(ffwp,"%s %s %s %s %d\n", FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, FLI[i].fnum);
			//printf("insert flight.txt success\n");
		}
	}
 
	FILE* pfwp = fopen("passenger.txt","w");
	printf("insert passenger.txt\n");
	for(i = 0; i < MAX_Passenger; i++)
	{
		int num = 0;
		if(strlen(PAS[i].pid) != 0)
		{
			num = fprintf(pfwp,"%s %s %s %s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
			//printf("insert passenger.txt success\n");
		}
	}
	// 释放内存、保存数据
	free(FLI);
	free(PAS);
	free(ORD);
	printf("exit...\n");
}
 
// 生成主菜单
void menu(void)
{
    printf("\n");
    printf("********************************\n");
    printf("|                              |\n");
	printf("|      flight order system     |\n");
	printf("*      1.search_flight         *\n");  //查询航班
	printf("|      2.order_list            |\n");   //查询订票信息
	printf("*      3.del_order             *\n");    //退订
	printf("|      4.passenger_info        |\n");   //查询旅客信息
	printf("*      5.change_pas_info       *\n");  //修改旅客信息
	printf("|      6.login                 |\n");  //用户登录
	printf("*      7.logout                *\n");    //用户登出
	printf("|      0.exit_sys              |\n");   //退出系统
	printf("|                              |\n");
	printf("********************************\n");
	//printf("\n");
}
 
// 登录
void login(void)
{
    if(online == 0)	//如果没有登录
    {
        int i=0;
        int time = 0;
        while(time < 3)
        {
            char entry_pid[20]; //临时变量身份证
            char entry_pw[20];  //临时变量密码
            printf("please login!\n");
            printf("please entry pid:");
            get_str(entry_pid, 20);
            printf("please entry password:");
            get_str(entry_pw, 20);
            // 遍历所有乘客
            for(i = 0; i < MAX_Passenger; i++)
            {
                // 数据长度校验
                if(strlen(entry_pid) == 0 || strlen(entry_pw) == 0)
                {
                    printf("pid or password can't be empty\n");
                    time++;
                    break;
                }
                // 成功匹配账号密码
                else if(strcmp(PAS[i].pid, entry_pid) == 0 && strcmp(PAS[i].password, entry_pw) == 0)
                {
                    printf("login success!\n");
                    strncpy(online_pid, entry_pid, 20);
                    online = 1;
                    return;
                }
                else if(i == MAX_Passenger-1)
                {
                    printf("pid or password error\n");
                    time++;
                }
            }
        }
        online = -1;
        printf("you have been locked,you can use this system now\n");
    }
    else if(online ==1)
    {
        printf("you have been login\n");
    }
    else
    {
        printf("you have been locked,you can use this system now\n");
    }
 
}
 
// 用户登出
void logout(void)
{
    if(online == 1)	//如果已经登录
    {
        online = 0;
        printf("logout success\n");
    }
    else if(online == -1)
    {
        printf("you have been locked,you can use this system now\n");
    }
    else
    {
        printf("you have not login\n");
    }
}
 
// 查询旅客信息
void passenger_info(void)
{
    if(online == 1)	//如果已经登录
    {
        //printf("online_pid:");
        //puts(online_pid);
        int i = 0;
        for(i = 0; i < MAX_Passenger; i++)
        {
            if(strcmp(online_pid, PAS[i].pid) == 0)
            {
                printf("pid:%s, pname:%s, password:%s, tell:%s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
                break;
            }
        }
    }
    else if(online == -1)
    {
        printf("you have been locked,you can use this system now\n");
    }
    else
    {
        printf("you have not login\n");
    }
}
 
//修改旅客信息
bool change_pas_info(void)
{
    if(online == 1)	//如果已经登录
    {
        printf("your old info:\n");
        int i = 0;
        for(i = 0; i < MAX_Passenger; i++)
        {
            if(strcmp(online_pid, PAS[i].pid) == 0)
            {
                printf("pid:%s, pname:%s\npassword:%s, tell:%s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
                break;
            }
        }
        char new_pid[20] = {0};
        char new_pname[10] = {0};
        char new_password[20] = {0};
        char new_tell[20] = {0};
        printf("please entry new pid:");
        get_str(new_pid, 20);
        printf("please entry new pname:");
        get_str(new_pname, 10);
        printf("please entry new password:");
        get_str(new_password, 20);
        printf("please entry new tell:");
        get_str(new_tell, 20);
        strncpy(PAS[i].pid, new_pid, 20);
        strncpy(PAS[i].pname, new_pname, 20);
        strncpy(PAS[i].password, new_password, 20);
        strncpy(PAS[i].tell, new_tell, 20);
        printf("change success\n");
    }
    else if(online == -1)
    {
        printf("you have been locked,you can use this system now\n");
    }
    else
    {
        printf("you have not login\n");
    }
}
 
// 开始查询航班
void search_start(void)
{
	if(search())
	{
		printf("1.order\n");
		printf("0.back\n");
		char cmd = get_cmd('0', '1');
		if(cmd == '0')
		{
		    return;
			//start_sys();
		}
		else
		{
		    char fid[20];   // 选择的航班号
            if(online == 1) // 如果已经登录
            {
                printf("please entry fid:");
                get_str(fid, 20);
				if(0 == strlen(fid))
				{
					printf("fid is empty\n");
				}
                int i = 0;
                for(i = 0; i < search_num; i++)
                {
                    //printf("fid:%s s_fid:%s num:%d\n",fid,search_fid[i],search_fnum[i]);
                    if(strcmp(fid,search_fid[i]) == 0 && search_fnum[i] > 0)    //查询到对应航班
                    {
                        printf("order success\n");
                        int j = 0;
                        for(j = 0; j < MAX_Flight; j++) // 遍历航班表
                        {
                            if(strcmp(fid, FLI[j].fid) == 0)
                            {
                                FLI[j].fnum--;	//票数减1
                                break;
                            }
                        }
 
                        int k = 0;
                        for(k = 0; k < MAX_Order; k++)  // 遍历订票表
                        {
                            //printf("ready insert...\n");
                            if(strlen(ORD[k].pid) == 0) // 在空位置插入数据
                            {
                                strcpy(ORD[k].pid, online_pid);  // 插入当前用户身份证
                                strcpy(ORD[k].fid, search_fid[i]);   // 插入当前选择的航班号
                                ORD[k].num = 1;
                                printf("insert_to_order success\n");
                                break;
                            }
                        }
                        return;
                    }
                    else if(strcmp(fid,search_fid[i]) == 0 && search_fnum[i] == 0)
                    {
                        printf("no ticket\n");
                        search_start();
                    }
                    else if(i == MAX_Flight-1)
                    {
                        printf("don't have this fid\n");
                        search_start();
                    }
                }
            }
            else if(online == -1)
            {
                printf("you have been locked,you can use this system now\n");
            }
            else
            {
                login();
            }
		}
	}
}
 
// 查询航班
bool search(void)
{
    printf("start: \n");
	get_str(start,10);
	printf("end: \n");
	get_str(end,10);
	int i = 0;
	search_num = 0;
    // 遍历所有航班
	for(i = 0; i < MAX_Flight; i++)
	{
	    if(strlen(start) == 0 || strlen(end) == 0)
		{
			printf("start or end can't be empty\n");
			return false;
		}
		if(strcmp(FLI[i].start, start) == 0 && strcmp(FLI[i].end, end) == 0)
		{
			printf("fid:%s, ticket_num:%d\n", FLI[i].fid, FLI[i].fnum);
			strncpy(search_fid[search_num], FLI[i].fid, 20);
			search_fnum[search_num] = FLI[i].fnum;
			//printf("search_fid[%d]:%s, search_fun[%d]:%d\n",search_num,search_fid[search_num],search_num,search_fnum[search_num]);
			++search_num;
		}
		if(0 == search_num && i == MAX_Flight-1)
		{
			printf("no flight\n");
			return false;
		}
		if(search_num > 0 && i == MAX_Flight-1)
		{
			//show_flight();
			return true;
		}
	}
}
 
// 输出订单信息
void order_list(void)
{
    if(online == 1)
    {
        int i = 0;
        for(i = 0; i < MAX_Order; i++)
        {
            if(strcmp(online_pid, ORD[i].pid) == 0)
            {
                //printf("online_pid:%s\n",online_pid);
                printf("fid:%s, pid:%s, ticket:%d\n", ORD[i].fid, ORD[i].pid, ORD[i].num);
            }
        }
    }
    else if(online == -1)
    {
        printf("you have been locked,you can use this system now\n");
    }
    else
    {
        login();
    }
}
 
// 删除订单
void del_order(void)
{
    if(online == 1)
    {
        char fid[20];
        printf("order_list:\n");
        order_list();
        printf("please entry del_order fid:");
        get_str(fid, 20);
        int i = 0;
        // 遍历所有订单
        for(i = 0; i < MAX_Order; i++)
        {
            if(strlen(fid) == 0)  //判空
            {
                printf("del_order fid can't be empty\n");
                return;
            }
            if(strcmp(fid, ORD[i].fid) == 0)
            {
                memset(ORD[i].pid, '\0', sizeof(ORD[i].pid));
                int j = 0;
                for(j = 0; j < MAX_Flight; j++)
                {
                    if(strcmp(fid, FLI[j].fid) == 0)
                    {
                        FLI[j].fnum++;  // 返还飞机票
                        break;
                    }
                }
                printf("delete success\n");
                return;
            }
        }
    }
    else if(online == -1)
    {
        printf("you have been locked,you can use this system now\n");
    }
    else
    {
        login();
    }
 
}
 
// 清理输入缓冲区
/*void clear_stdin(void)
{
	stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
}
*/
 
// 读取输入字符串
char* get_str(char* str, size_t len)
{
	if(NULL == str)
	{
		puts("empty ptr!");
		return NULL;
	}
 
	char *in = fgets(str, len, stdin);
 
	size_t cnt = strlen(str);
	if('\n' == str[cnt-1])
	{
		str[cnt-1] = '\0';
	}
	else
	{
		scanf("%*[^\n]");
		scanf("%*c");
	}
	
	//clear_stdin();
 
	return str;
}
 
// 获取cmd命令
char get_cmd(char start, char end)
{
	//clear_stdin();
 
	printf("please entry cmd:");
	while(true)
	{
		char val = getch();
		if(val >= start && val <= end)
		{
			printf("%c\n",val);
			return val;
		}
	}
}

TCP联网版(win)

先运行服务端,再运行客户端

因为懒,阉割了联网版的旅客信息修改功能。

编译参考 

gcc server.c -lwsock32 -o server

效果如下:

client.c

同理这里也是Windows版本,使用winsock实现tcp

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
//#include "getch.h"
#include <conio.h>
#include <WinSock2.h>
 
#pragma comment(lib,"ws2_32.lib")
 
void start_sys(void);       // 系统开始运行
char *send_cmd_recv_val(char* cmd); // 发送命令,接收返回
void show_flight(void);	    // 显示航班表
void exit_sys(void);	    // 退出系统
void menu(void);		    // 生成主菜单
void login(void);           // 登录
void logout(void);          // 用户登出
void passenger_info(void);  // 查询旅客信息
void search_start(void);	// 生成查询页面
char* search(void);	        // 查询航班
void order_list(void);	    // 生成订单表
void del_order(void);	    // 退票
char* get_str(char* str,size_t len);  // 获取字符串
char get_cmd(char start,char end);	  // 获取cmd命令
 
int main(int argv, char* argc[])
{
    system("chcp 65001");
    printf("编码转换完毕\n");
 
    start_sys();
    exit_sys();
 
	return 0;
}
 
// 发送命令,接收返回
char *send_cmd_recv_val(char* cmd)
{
    //初始化
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
 
	//创建套接字
	SOCKET clntSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
	//向服务器发送消息
	struct sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));			//每个字节都用0填充
	sockAddr.sin_family = PF_INET;
	sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	sockAddr.sin_port = htons(8888);
	connect(clntSock, (SOCKADDR*)& sockAddr, sizeof(SOCKADDR));
	
    static char buf[10240] = {0};
 
    // buf置0
    memset(buf, 0, sizeof(buf));
 
    send(clntSock, cmd, strlen(cmd) + sizeof(char), 0);
    recv(clntSock, buf, 10240, 0);
	
	//关闭套接字
	closesocket(clntSock);
 
	//终止dll
	WSACleanup();
 
    return buf;
}
 
// 显示航班表
void show_flight(void)
{
    printf("%s\n", send_cmd_recv_val("show_flight"));
}
 
// 系统开始运行
void start_sys(void)
{
	// 进入系统的业务流程控制
	//printf("系统开始运行...\n");
	//show_flight();
	while(true)
	{
		menu();
		switch(get_cmd('0','6')) // 获取键盘输入
		{
			case '1': search_start(); break;
			case '2': order_list(); break;
			case '3': del_order(); break;
			case '4': passenger_info(); break;
			case '5': login(); break;
			case '6': logout(); break;
			case '0': return;
		}
	}
}
 
// 系统结束
void exit_sys(void)
{
    printf("%s\n", send_cmd_recv_val("exit_sys"));
}
 
// 生成主菜单
void menu(void)
{
    printf("\n");
    printf("*********************************\n");
    printf("|                               |\n");
	printf("|      飞机订票系统             |\n");
	printf("*      1.查询航班               *\n");  //查询航班
	printf("|      2.查询订票信息           |\n");   //查询订票信息
	printf("*      3.退订                   *\n");    //退订
	printf("|      4.查询旅客信息           |\n");   //查询旅客信息
	printf("|      5.用户登录               |\n");  //用户登录
	printf("*      6.用户登出               *\n");    //用户登出
	printf("|      0.退出系统               |\n");   //退出系统
	printf("|                               |\n");
	printf("*********************************\n");
	//printf("\n");
}
 
// 登录
void login(void)
{
    char entry_pid[20]; //临时变量身份证
    char entry_pw[20];  //临时变量密码
    printf("请登录!\n");
    printf("请输入pid:");
    get_str(entry_pid, 20);
    printf("请输入密码:");
    get_str(entry_pw, 20);
 
    char buf[1024] = {0};
 
    snprintf(buf, 1024, "login pid:%s pw:%s", entry_pid, entry_pw);
    
    printf("%s\n", send_cmd_recv_val(buf));
}
 
// 用户登出
void logout(void)
{
    printf("%s\n", send_cmd_recv_val("logout"));
}
 
// 查询旅客信息
void passenger_info(void)
{
    printf("%s\n", send_cmd_recv_val("passenger_info"));
}
 
// 开始查询航班
void search_start(void)
{
    char buf[10240] = {0};
    snprintf(buf, 10240, "%s", search());
	if(strncmp(buf, "起始地 或 目的地 不能为空\n", 50) != 0 && strncmp(buf, "没有航班\n", 50) != 0)
	{
		printf("1.订票\n");
		printf("0.返回\n");
		char cmd = get_cmd('0', '1');
 
        memset(buf, 0, sizeof(buf));
 
		if(cmd == '0')
		{
            snprintf(buf, 10240, "%s", send_cmd_recv_val("0.返回"));
            printf("%s", buf);
            return;
			//start_sys();
		}
		else
		{
            snprintf(buf, 10240, "%s", send_cmd_recv_val("1.订票"));
		    char fid[20];   // 选择的航班号
            printf("请输入fid:");
            get_str(fid, 20);
 
            snprintf(buf, 1024, "order_ticket fid:%s", fid);
            
            printf("%s\n", send_cmd_recv_val(buf));
		}
	}
}
 
// 查询航班
char* search(void)
{
    char start[10] = {0};
    char end[10] = {0};
    printf("起始地: \n");
	get_str(start, 10);
	printf("目的地: \n");
	get_str(end, 10);
	
    char buf[1024] = {0};
    static char buf2[10240] = {0};
    memset(buf2, 0, sizeof(buf2));
 
    snprintf(buf, 1024, "search start:%s end:%s", start, end);
    
    snprintf(buf2, 10240, "%s", send_cmd_recv_val(buf));
 
    printf("%s", buf2);
    
    return buf2;
}
 
// 输出订单信息
void order_list(void)
{
    printf("%s\n", send_cmd_recv_val("order_list"));
}
 
// 删除订单
void del_order(void)
{
    printf("%s\n", send_cmd_recv_val("order_list"));
    char fid[20];
    printf("请输入要删除的fid:");
    get_str(fid, 20);
 
    char buf[1024] = {0};
    snprintf(buf, 1024, "del_order fid:%s", fid);
    
    printf("%s\n", send_cmd_recv_val(buf));
}
 
// 读取输入字符串
char* get_str(char* str, size_t len)
{
	if(NULL == str)
	{
		puts("空指针!");
		return NULL;
	}
 
	char *in = fgets(str, len, stdin);
 
	size_t cnt = strlen(str);
	if('\n' == str[cnt-1])
	{
		str[cnt-1] = '\0';
	}
	else
	{
		scanf("%*[^\n]");
		scanf("%*c");
	}
	
	//clear_stdin();
 
	return str;
}
 
// 获取cmd命令
char get_cmd(char start, char end)
{
	//clear_stdin();
 
	printf("请输入命令:");
	while(true)
	{
		char val = getch();
		if(val >= start && val <= end)
		{
			printf("%c\n",val);
			return val;
		}
	}
}

 server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
//#include "getch.h"
#include <conio.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")		//加载ws2_32.dll
 
#define MAX_Flight 50   // 最大航班数
#define MAX_Passenger 20    // 单航班最多乘客数
#define MAX_Order 50    // 最大订票数
 
typedef struct Flight
{
    char fid[20];       //航班号
	char fname[20];	    //航班名称
    char start[10];     //起点
    char end[10];       //终点
    int fnum;	        //票数
}Flight;
 
typedef struct Passenger
{
    char pid[20];	    //身份证
    char pname[10];	    //姓名
    char password[20];	//密码
	char tell[20];	    //电话
}Passenger;
 
typedef struct Order
{
    char pid[20];	//身份证
    char fid[20];	//航班号
	int num;	    //票数
}Order;
 
Flight *FLI;    // 定义全局变量
Passenger *PAS;
Order *ORD;
 
char search_fid[50][20];    // 符合条件的航班号
int search_fnum[50];        // 符合条件的航班票数
int online = 0;             // 是否登录的变量
char online_pid[20];        // 在线用户的身份证
int search_num = 0;         // 符合条件的航班数
 
char *get_request_content(char *src, char *content, int max_len); // 解析请求的内容
void init_sys(void);	     // 系统初始化
char* show_flight(void);	 // 显示航班表
void exit_sys(void);	     // 退出系统
char* login(char* pid, char* pw);           // 登录
char* logout(void);          // 用户登出
char* passenger_info(void);  // 查询旅客信息
char* order_ticket(char* fid);	 // 生成查询页面
char* search(char* start, char* end);	         // 查询航班
char* order_list(void);	     // 生成订单表
char* del_order(char* fid);	     // 退票
char* get_str(char* str,size_t len);  // 获取字符串
char get_cmd(char start,char end);	  // 获取cmd命令
 
// 主函数
int main(int argv, char* argc[])
{
    system("chcp 65001");
    printf("编码转换完毕\n");
    // 系统初始化
    init_sys();
 
	// 初始化
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
 
	//创建套接字
	SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
	//绑定套接字
	struct sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));		//每个字节用0填充
	sockAddr.sin_family = PF_INET;				//使用ipv4
	sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	sockAddr.sin_port = htons(8888);			//端口
	bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
 
	//进入监听状态
	listen(servSock, 20);
 
    char cmd[1024] = {0};
    char buf[10240] = {0};
 
    for(;;)
    {
        // 接收客户端消息
        SOCKADDR clntAddr;
        int nSize = sizeof(SOCKADDR);
        SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
 
        memset(cmd, 0, sizeof(cmd));
        memset(buf, 0, sizeof(buf));
 
        printf("收到客户端命令:");
        recv(clntSock, cmd, 1024, 0);
        printf("%s\n", cmd);
        if(NULL != strstr(cmd, "exit_sys"))
        {
            //关闭套接字
	        closesocket(clntSock);
            break;
        }
        else if(NULL != strstr(cmd, "search"))
        {
            char* start = get_request_content(cmd, "start:", 20);
            char* end = get_request_content(cmd, "end:", 20);
 
            snprintf(buf, 10240, "%s", search(start, end));
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(0 == strncmp(cmd, "1.订票", 10))
        {
            snprintf(buf, 1024, "订票...\n");
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(0 == strncmp(cmd, "0.返回", 10))
        {
            snprintf(buf, 1024, "返回...\n");
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(NULL != strstr(cmd, "order_ticket"))
        {
            char* fid = get_request_content(cmd, "fid:", 20);
            snprintf(buf, 1024, "%s", order_ticket(fid));
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(NULL != strstr(cmd, "order_list"))
        {
            snprintf(buf, 10240, "%s", order_list());
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(NULL != strstr(cmd, "del_order"))
        {
            char* fid = get_request_content(cmd, "fid:", 20);
            snprintf(buf, 10240, "%s", del_order(fid));
        }
        else if(NULL != strstr(cmd, "passenger_info"))
        {
            snprintf(buf, 10240, "%s", passenger_info());
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(NULL != strstr(cmd, "login"))
        {
            char* pid = get_request_content(cmd, "pid:", 20);
            char* pw = get_request_content(cmd, "pw:", 20);
            snprintf(buf, 10240, "%s", login(pid, pw));
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else if(NULL != strstr(cmd, "logout"))
        {
            snprintf(buf, 10240, "%s", logout());
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        else
        {
            snprintf(buf, 20, "错误命令!");
            send(clntSock, buf, strlen(buf) + sizeof(char), 0);
        }
        //关闭套接字
	    closesocket(clntSock);
    }
 
	//关闭套接字
	closesocket(servSock);
 
	//终止dll使用
	WSACleanup();
 
    exit_sys();	    // 退出系统
 
	return 0;
}
 
// 解析请求的内容
char *get_request_content(char *src, char *content, int max_len)
{
	char *result = (char *)malloc((max_len) * sizeof(char));
	memset(result, 0, max_len);
	int i = 0;
	char *temp = NULL;
	temp = strstr(src, content);
	if (temp == NULL)
	{
		return NULL;
	}
	temp += strlen(content);
	while (1)
	{
		if (max_len == i)
			break;
		if (temp[i] != ' ')
		{
			result[i] = temp[i];
			i++;
		}
		else
		{
			break;
		}
	}
	return result;
}
 
// 系统初始化
void init_sys(void)
{
	// 申请堆内存、加载数据
	FLI = calloc(MAX_Flight,sizeof(Flight));
	PAS = calloc(MAX_Passenger,sizeof(Passenger));
	ORD = calloc(MAX_Order,sizeof(Order));
	printf("系统初始化中...\n");
 
    // 以只读方式打开 order.txt,如果文件不存在则打开失败,返回值为空。
	FILE* ofrp = fopen("order.txt","r");
    if(NULL == ofrp)    // 打开失败直接退出
    {
        printf("order.txt 打开失败!\n");
        exit(0);
    }
 
    int i = 0;
	for(i = 0; i < MAX_Order; i++)	//读取文本中的数据到内存,全局变量ORD中
	{	
        int num = 0;
		num = fscanf(ofrp,"%s %s %d\n", ORD[i].pid, ORD[i].fid, &ORD[i].num);
	}
 
	FILE* ffrp = fopen("flight.txt","r");
    if(NULL == ffrp)
    {
        printf("flight.txt 打开失败!\n");
        exit(0);
    }
	for(i = 0; i < MAX_Flight; i++)
	{
		int num = 0;
		num = fscanf(ffrp,"%s %s %s %s %d\n", FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, &FLI[i].fnum);
	}
 
	FILE* pfrp = fopen("passenger.txt","r");
    if(NULL == pfrp)
    {
        printf("passenger.txt 打开失败!\n");
        exit(0);
    }
	for(i = 0; i < MAX_Passenger; i++)
	{
		int num = 0;
		num = fscanf(pfrp,"%s %s %s %s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
	}
 
    printf("系统初始化完毕!\n");
}
 
// 显示航班表
char* show_flight(void)
{
    static char buf[10240] = {0};
    memset(buf, 0, sizeof(buf));
    int i = 0;
	for(i = 0; i < MAX_Flight; i++)
	{
		if(strlen(FLI[i].fid) != 0)
		{
			snprintf(buf, 10240, "%sid:%s name:%s start:%s end:%s fnum:%d\n", buf, FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, 
                FLI[i].fnum);
		}
	}
 
    return buf;
}
 
// 系统结束
void exit_sys(void)
{
    printf("数据插入中...\n");
	FILE* ofwp = fopen("order.txt","w");
	printf("准备插入 order.txt\n");
	int i= 0;
	for(i = 0; i < MAX_Order; i++)	//数据存储回本地
	{
	    int num = 0;
		if(strlen(ORD[i].pid) != 0)
		{
			num = fprintf(ofwp,"%s %s %d\n", ORD[i].pid, ORD[i].fid, ORD[i].num);
			//printf("insert order.txt success\n");
		}
	}
 
    // 以只写方式打开文件flight.txt,如果文件不存在则创建,如果文件存在则把内容清空。
	FILE* ffwp = fopen("flight.txt","w");
	printf("准备插入 flight.txt\n");
	for(i = 0; i < MAX_Flight; i++)
	{
		int num = 0;
		if(strlen(FLI[i].fid) != 0)
		{
			num = fprintf(ffwp,"%s %s %s %s %d\n", FLI[i].fid, FLI[i].fname, FLI[i].start, FLI[i].end, FLI[i].fnum);
			//printf("insert flight.txt success\n");
		}
	}
 
	FILE* pfwp = fopen("passenger.txt","w");
	printf("准备插入 passenger.txt\n");
	for(i = 0; i < MAX_Passenger; i++)
	{
		int num = 0;
		if(strlen(PAS[i].pid) != 0)
		{
			num = fprintf(pfwp,"%s %s %s %s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
			//printf("insert passenger.txt success\n");
		}
	}
	// 释放内存、保存数据
	free(FLI);
	free(PAS);
	free(ORD);
	printf("程序退出\n");
}
 
// 登录
char* login(char* pid, char* pw)
{
    static char buf[100] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 0)	//如果没有登录
    {
        int i = 0;
        int time = 0;
        // 遍历所有乘客
        for(i = 0; i < MAX_Passenger; i++)
        {
            // 数据长度校验
            if(strlen(pid) == 0 || strlen(pw) == 0)
            {
                printf("pid 或 password 不能为空\n");
                time++;
                break;
            }
            // 成功匹配账号密码
            else if(strcmp(PAS[i].pid, pid) == 0 && strcmp(PAS[i].password, pw) == 0)
            {
                snprintf(buf , 100, "登录成功!\n");
                strncpy(online_pid, pid, 20);
                online = 1;
                return buf;
            }
            else if(i == MAX_Passenger-1)
            {
                snprintf(buf , 100, "pid 或 password 错误\n");
                return buf;
            }
        }
        
    }
    else if(online == 1)
    {
        snprintf(buf , 100, "你还没登录呢\n");
        return buf;
    }
    else
    {
        snprintf(buf , 100, "你已被锁定,禁止使用此系统\n");
        return buf;
    }
 
}
 
// 用户登出
char* logout(void)
{
    static char buf[100] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 1)	//如果已经登录
    {
        online = 0;
        snprintf(buf, 100, "登录成功\n");
    }
    else if(online == -1)
    {
        snprintf(buf, 100, "你已被锁定,禁止使用此系统\n");
    }
    else
    {
        snprintf(buf, 100, "你还没有登录呢\n");
    }
    
    return buf;
}
 
// 查询旅客信息
char* passenger_info(void)
{
    static char buf[100] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 1)	//如果已经登录
    {
        //printf("online_pid:");
        //puts(online_pid);
        int i = 0;
        for(i = 0; i < MAX_Passenger; i++)
        {
            if(strcmp(online_pid, PAS[i].pid) == 0)
            {
                snprintf(buf, 100, "pid:%s, pname:%s, password:%s, tell:%s\n", PAS[i].pid, PAS[i].pname, PAS[i].password, PAS[i].tell);
                break;
            }
        }
    }
    else if(online == -1)
    {
        snprintf(buf, 100, "你已被锁定,禁止使用此系统\n");
    }
    else
    {
        snprintf(buf, 100, "你还没有登录呢\n");
    }
 
    return buf;
}
 
// 订票
char* order_ticket(char* fid)
{
    static char buf[100] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 1) // 如果已经登录
    {
        if(0 == strlen(fid))
        {
            snprintf(buf, 100, "fid 为空\n");
            return buf;
        }
        int i = 0;
        for(i = 0; i < search_num; i++)
        {
            //printf("fid:%s s_fid:%s num:%d\n",fid,search_fid[i],search_fnum[i]);
            if(strcmp(fid,search_fid[i]) == 0 && search_fnum[i] > 0)    //查询到对应航班
            {
                snprintf(buf, 100, "订票成功\n");
                int j = 0;
                for(j = 0; j < MAX_Flight; j++) // 遍历航班表
                {
                    if(strcmp(fid, FLI[j].fid) == 0)
                    {
                        FLI[j].fnum--;	//票数减1
                        break;
                    }
                }
 
                int k = 0;
                for(k = 0; k < MAX_Order; k++)  // 遍历订票表
                {
                    //printf("ready insert...\n");
                    if(strlen(ORD[k].pid) == 0) // 在空位置插入数据
                    {
                        strcpy(ORD[k].pid, online_pid);  // 插入当前用户身份证
                        strcpy(ORD[k].fid, search_fid[i]);   // 插入当前选择的航班号
                        ORD[k].num = 1;
                        printf("插入订票信息成功\n");
                        break;
                    }
                }
                return buf;
            }
            else if(strcmp(fid,search_fid[i]) == 0 && search_fnum[i] == 0)
            {
                snprintf(buf, 100, "无票\n");
                return buf;
            }
            else if(i == MAX_Flight-1)
            {
                snprintf(buf, 100, "不存在此fid\n");
                return buf;
            }
        }
    }
    else if(online == -1)
    {
        snprintf(buf, 100, "你已被锁定,禁止使用此系统\n");
        return buf;
    }
    else
    {
        snprintf(buf, 100, "请登录!\n");
        return buf;
    }
}
 
// 查询航班
char* search(char* start, char* end)
{
    printf("[函数()] 进入 search(%s, %s)\n", start, end);
    static char buf[10240] = {0};
    memset(buf, 0, sizeof(buf));
	int i = 0;
	search_num = 0;
    // 遍历所有航班
	for(i = 0; i < MAX_Flight; i++)
	{
	    if(strlen(start) == 0 || strlen(end) == 0)
		{
			snprintf(buf, 10240, "start 或 end 不能为空\n");
            printf("%s", buf);
			return buf;
		}
		if(strcmp(FLI[i].start, start) == 0 && strcmp(FLI[i].end, end) == 0)
		{
			snprintf(buf, 10240, "%sfid:%s, 票数:%d\n", buf, FLI[i].fid, FLI[i].fnum);
			strncpy(search_fid[search_num], FLI[i].fid, 20);
			search_fnum[search_num] = FLI[i].fnum;
			//printf("search_fid[%d]:%s, search_fun[%d]:%d\n",search_num,search_fid[search_num],search_num,search_fnum[search_num]);
			++search_num;
		}
		if(0 == search_num && i == MAX_Flight-1)
		{
            snprintf(buf, 10240, "没有航班\n");
            printf("%s", buf);
			return buf;
		}
		if(search_num > 0 && i == MAX_Flight-1)
		{
            printf("%s", buf);
			return buf;
		}
	}
 
    return buf;
}
 
// 输出订单信息
char* order_list(void)
{
    static char buf[10240] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 1)
    {
        int i = 0;
        for(i = 0; i < MAX_Order; i++)
        {
            if(strcmp(online_pid, ORD[i].pid) == 0)
            {
                //printf("online_pid:%s\n",online_pid);
                snprintf(buf, 10240, "%sfid:%s, pid:%s, ticket:%d\n", buf, ORD[i].fid, ORD[i].pid, ORD[i].num);
            }
        }
    }
    else if(online == -1)
    {
        snprintf(buf, 100, "你已被锁定,禁止使用此系统\n");
    }
    else
    {
        snprintf(buf, 100, "请登录!\n");
    }
 
    return buf;
}
 
// 删除订单
char* del_order(char* fid)
{
    printf("[函数()] 进入 del_order(%s)\n", fid);
    static char buf[100] = {0};
    memset(buf, 0, sizeof(buf));
    if(online == 1)
    {
        int i = 0;
        // 遍历所有订单
        for(i = 0; i < MAX_Order; i++)
        {
            if(strlen(fid) == 0)  //判空
            {
                snprintf(buf, 100, "del_order 的 fid 不能为空\n");
                return buf;
            }
            if(strcmp(fid, ORD[i].fid) == 0)
            {
                memset(ORD[i].pid, '\0', sizeof(ORD[i].pid));
                int j = 0;
                for(j = 0; j < MAX_Flight; j++)
                {
                    if(strcmp(fid, FLI[j].fid) == 0)
                    {
                        FLI[j].fnum++;  // 返还飞机票
                        break;
                    }
                }
                snprintf(buf, 100, "删除成功\n");
                return buf;
            }
        }
    }
    else if(online == -1)
    {
        snprintf(buf, 100, "你已被锁定,禁止使用此系统\n");
    }
    else
    {
        snprintf(buf, 100, "请登录!\n");
    }
 
    printf("%s", buf);
    return buf;
}
 
// 清理输入缓冲区
/*void clear_stdin(void)
{
	stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
}
*/
 
// 读取输入字符串
char* get_str(char* str, size_t len)
{
	if(NULL == str)
	{
		puts("空指针!");
		return NULL;
	}
 
	char *in = fgets(str, len, stdin);
 
	size_t cnt = strlen(str);
	if('\n' == str[cnt-1])
	{
		str[cnt-1] = '\0';
	}
	else
	{
		scanf("%*[^\n]");
		scanf("%*c");
	}
	
	//clear_stdin();
 
	return str;
}
 
// 获取cmd命令
char get_cmd(char start, char end)
{
	//clear_stdin();
 
	printf("请输入命令:");
	while(true)
	{
		char val = getch();
		if(val >= start && val <= end)
		{
			printf("%c\n",val);
			return val;
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/742469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024高考-优先选专业还是优先选学校

分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 24年高考帷幕落下&#xff0c;一场新的思考与选择悄然来临。对于每一位高考考生&#xff0c;学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”&#xff0c;在分数受限的条件下&#xff0…

作业6.20

1.已知网址www.hqyj.com截取出网址的每一个部分(要求&#xff0c;该网址不能存入文件中) 2.将配置桥接网络的过程整理成文档&#xff0c;发csdn 步骤i&#xff1a;在虚拟机设置中启用桥接模式 1. 打开VMware虚拟机软件。 2. 选择您想要配置的虚拟机&#xff0c;点击菜单栏中的“…

减少液氮罐内液氮损耗的方法

监测与管理液氮容器的密封性能 液氮容器的密封性能直接影响液氮的损耗情况。一个常见的损耗源是容器本身的密封不良或老化导致的泄漏。为了有效减少液氮损耗&#xff0c;首先应当定期检查液氮容器的密封性能。这可以通过简单的方法如肉眼检查外观&#xff0c;或者更精确的方法…

在线客服源码系统全端通用 源码完全开源可以二次开发 带完整的安装代码包以及搭建教程

系统概述 在线客服源码系统采用了先进的技术架构&#xff0c;包括前端界面、后端服务、数据库等部分。前端界面采用了响应式设计&#xff0c;能够自适应不同的设备屏幕尺寸&#xff0c;为用户提供良好的使用体验。后端服务采用了高性能的服务器架构&#xff0c;确保系统的稳定…

中国首例!「DataKit」上架亚马逊云科技 Marketplace add-ons

在 2022 年的 re:Invent 大会上&#xff0c;亚马逊云科技宣布了一项重大更新&#xff1a;亚马逊云科技 Marketplace 为 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;提供了附加组件的支持。这一创新功能极大地丰富了 EKS 的生态系统&#xff0c;使用户…

【力扣】重排链表

&#x1f525;博客主页&#xff1a; 我要成为C领域大神 &#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于分享知识&#xff0c;欢迎大家共同学习和交流。 给定一个单链表…

大模型训练数据

自《中共中央国务院关于构建数据基础制度更好发挥数据要素作用的意见》发布以来&#xff0c;我国数据要素建设不断深入&#xff0c;在国家数据局等 17 部门联合印发的《“数据要素 ” 三年行动计划&#xff08;2024 - 2026 年&#xff09;》进一步明确 “建设高质量语料库和基础…

邮件推送服务的高级功能有哪些?怎么使用?

邮件推送服务的效果如何评估&#xff1f;怎么选择邮件营销服务&#xff1f; 邮件推送服务不断发展&#xff0c;提供了丰富的高级功能&#xff0c;帮助企业提升营销效果&#xff0c;优化客户体验。AokSend将探讨一些邮件推送服务的高级功能&#xff0c;并说明它们如何为企业带来…

HTTP、MQTT、CoAP大比拼:谁才是物联网通信的王者?

物联网&#xff08;IoT&#xff09;时代&#xff0c;数以亿计的设备需要相互连接和通信&#xff0c;而超文本传输协议&#xff08;HTTP&#xff09;作为互联网的基石&#xff0c;凭借其简单易用、广泛应用等优势&#xff0c;也成为了物联网通信协议的有力竞争者。本文将深入浅出…

Windows重新安装安全中心解决白屏问题

重新安装Windows安全中心&#xff08;Windows Security Center&#xff09;涉及多个步骤&#xff0c;包括重置Windows安全功能和重新安装Windows安全应用。以下是详细的步骤&#xff1a; 1. 通过PowerShell重置Windows安全中心 打开PowerShell: 在开始菜单中搜索“PowerShell”…

ClickHouse vs. Elasticsearch:十亿行数据的较量

本文字数&#xff1a;15291&#xff1b;估计阅读时间&#xff1a;39 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse 上海首届 Meetup 讲师招募中&#xff0c;欢迎讲师在文末扫码报名&#xff01; 引言 这…

mysql 主从延迟

mysql 主从延迟 下面这句话&#xff0c;不知道对不对 注意&#xff1a;开启并行复制后&#xff0c;如果想要Xtrabackup进行全量备份的话&#xff0c;那就必须还要开启gtid复制而不是传统的位点复制 精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从…

怎么加密文件夹?文件夹加密软件推荐

文件夹加密是保护电脑数据的重要方法&#xff0c;那么你知道怎么加密文件夹吗&#xff1f;下面小编就为大家推荐两款文件夹加密软件&#xff0c;帮助你安全保护重要文件夹。 文件夹加密超级大师 在加密电脑文件夹时&#xff0c;文件夹加密超级大师是你必须要了解的文件夹加密软…

基于Java仓储出入库管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

基于Jmeter的分布式压测环境搭建及简单压测实践

写在前面 平时在使用Jmeter做压力测试的过程中&#xff0c;由于单机的并发能力有限&#xff0c;所以常常无法满足压力测试的需求。因此&#xff0c;Jmeter还提供了分布式的解决方案。本文是一次利用Jmeter分布式对业务系统登录接口做的压力测试的实践记录。按照惯例&#xff0…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

Docker 安装和加速

目录 1.安装 2.了解 docker 信息 3.查询状态 4. 重新启动Docker 1.安装 yum install –y docker 2.了解 docker 信息 cat /etc/redhat-release 3.查询状态 systemctl status docker 4.支持 1.12 的 docker 镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docke…

stm32学习笔记---TIM输出比较(代码部分)定时器定时中断/定时器外部时钟

目录 第一个代码&#xff1a;定时器定时中断 Timer.c 初始化函数 初始化定时器的步骤 定时器的库函数 TIM_DeInit TIM_TimeBaseInit TIM_TimeBaseStructInit TIM_Cmd TIM_ITConfig TIM_InternalClockConfig TIM_ITRxExternalClockConfig TIM_InputTriggerSource …

一文读懂客户管理系统平台:概念、功能与应用场景介绍!

在当今竞争激烈的市场环境下&#xff0c;企业想要保持竞争力&#xff0c;不仅要有优质的产品和服务&#xff0c;更要有高效的客户管理手段。客户管理系统平台作为一种重要的工具&#xff0c;正在被越来越多的企业所青睐。那么&#xff0c;客户管理系统平台有什么用呢&#xff1…

fidder自动测试cookie脚本

前言 工作在使用fidder抓包时&#xff0c;经常需要找到一个请求携带的cookie中&#xff0c;真正校验了那些cookie&#xff0c;从而在代码中实现写入这些cookie的请求。这个过程除了根据经验快速过滤&#xff0c;就只能一个一个删除测试了。 所以我写了这个脚本&#xff0c;自动…