航空客运订票系统(数据结构与算法课设)(C语言版)

news2024/11/17 6:43:21

        本文为数据结构与算法课设《航空客运订票系统》的分享与实践,采用了顺序表和链表两种数据结构。贴近生活采用了系统选择来区别用户和管理员。

目录

1.设计内容与要求

2.功能实现和程序调试

功能实现

函数原型清单 

程序调试 

3.代码实现

(1)结构体定义

(2)管理员菜单和密码识别

(3)航班信息导入

(4)乘客信息导入

(5)航班信息修改

(6)信息显示函数

(7)信息导入文件

(8)用户菜单和证件号识别

(9)航班情况查询

(10)用户情况显示

(11)用户订票操作

(12)用户退票操作

(*13)完整代码

4.问题反思与总结


1.设计内容与要求

设计内容:

飞机订票系统包括:查询航线、客票预订和办理退票等。具体功能有:

(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据结合实际情况自定);

(2)修改航班信息:可以修改航班数据文件。

(3)客户资料:包括姓名,证件号,订票数量及航班情况,订单要有编号;

(4) 查询:可以查询某趟航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;

(5)订票:订票情况可以存在一个数据文件中,结构自己设定;如果该航班已经无票,可以提供相关可选择航班;

(6)退票:退票后修改相关数据文件;

设计要求:

(1) 符合课题要求,实现相应功能;

(2) 要求界面友好美观,操作方便易行;

(3) 注意程序的实用性、安全性;

2.功能实现和程序调试

功能实现

        该流程图主要在区分系统工作的流程。具体功能实现参照代码展示。


 

函数原型清单 

/*函数声明部分*/

void Choice();
void security();
void Register();
void Menu();
void Menu_1();
void Menu_2();
void Menuport_1(Parent* current);
void Menuport_2();
void flie_Flight();
void Printf_flight();
void file_parent();
void Printdf_parent();
void Amend();
int Search_flightID(int ID);
void Out_file_1();
void Out_file_2();
void Search_flight();
void Search_parent(Parent* current);
void Reserve(Parent* current);
void Cancel(Parent* current);

程序调试 

        进入主菜单选择

       管理员系统 

 

 

 

3.代码实现

(1)结构体定义

typedef struct {
    int flightID;           // 航班号  
    char departureCity[50]; // 起飞城市  
    char arrivalCity[50];   // 抵达城市  
    char departureTime[20]; // 起飞时间  
    char arrivalTime[20];   // 抵达时间  
    int ticketPrice;        // 票价  
    float discount;         // 折扣  
    int totalSeats;         // 总座位数  
    int bookedSeats;        // 已预订座位数  
} Flight;

typedef struct p {
    char name[50];
    char Id[20];
    int num_flight = 0;
    int arr_flight[2][N]; //存储该用户的订单信息 乘坐的航班和订单编号
    struct p* next;
}Parent;

Flight fli[N]; // 全局变量数组存储航班信息
int num_fli = 0;

Parent* head = NULL; //存储乘客信息的链表
Parent* Float = head; //存储乘客信息的链表
Parent* tail = NULL;
int Max_sum = 0;

        程序主体的函数是通过调用的全局变量信息。


(2)管理员菜单和密码识别

        这里的密码识别是不完善的,只能提前存储修改密码。只是贴合实际的设计了一个页面。

void security() {

    system("cls");
    printf("\n  ***********************************\n");
    printf("  **                               **\n");
    printf("  **         管理员密码验证        **\n");
    printf("  **                               **\n");
    printf("  ***********************************\n");
    char Sec[10] = { "050501" };
    char Key[10];
    int sum = 0;
    while (1) {
        printf("请输入密码:");
        scanf("%s",Key);
        if (strcmp(Sec, Key) == 0) { printf("     密码正确 !!!\n\n 欢迎使用管理员系统\n"); printf("     正在加载。"); for (int i = 0; i < 4; i++) { Sleep(1000); printf("。"); }system("cls"); Menu_2(); Menuport_2(); return; }
        else { printf("密码错误 请重新输入\n\n"); sum++;
        if (sum == 3) { printf("错误次数已达上限\n已退出系统\n"); break; }
        printf("(还有%d次输入机会)\n",3-sum); }
    }
}

        分两个菜单是考虑到不是所有用户都可以进行航班信息修改和导入以及所有用户信息的查找和显示。所以设计了管理源系统来实现这些功能。 

void Menu_2() {
    system("cls");
    printf("\n  ***********************************\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 Menuport_2() {
    int input;
    while (1) {
        printf("请选择你的操作:");
        scanf("%d", &input);
        switch (input) {
        case 1: {
                   Menu_2(); 
                   printf("\n  ***********************************\n");
                   printf("  **                               **\n"); 
                   printf("  **        当前为航班导入窗口     **\n");
                   printf("  **                               **\n");
                   printf("  ***********************************\n\n");
                   
                   file_Flight();
                   break; 
        }
        case 2: {
                  Menu_2();
                  printf("\n  ***********************************\n");
                  printf("  **                               **\n");
                  printf("  **        当前为航班显示窗口     **\n");
                  printf("  **                               **\n");
                  printf("  ***********************************\n\n");
                  
                  Print_flight();
                  break; 
        }
        case 3: {
                  Menu_2();
                  printf("\n  ***********************************\n");
                  printf("  **                               **\n");
                  printf("  **        当前为航班修改窗口     **\n");
                  printf("  **                               **\n");
                  printf("  ***********************************\n\n");

                  Amend();
                  break; 
        }

        case 4: {
                 Menu_2();
                 printf("\n  ***********************************\n");
                 printf("  **                               **\n");
                 printf("  **        当前为乘客导入窗口     **\n");
                 printf("  **                               **\n");
                 printf("  ***********************************\n\n");
            
                 file_parent();
                 break;
        }
        case 5: {
                 Menu_2();
                 printf("\n  ***********************************\n");
                 printf("  **                               **\n");
                 printf("  **        当前为乘客显示窗口     **\n");
                 printf("  **                               **\n");
                 printf("  ***********************************\n\n");
                 
                 Printf_parent();
                 break;
        }
        case 6: {
                 Menu_2();
                 printf("\n  ***********************************\n");
                 printf("  **                               **\n");
                 printf("  **     当前为航班信息导出窗口    **\n");
                 printf("  **                               **\n");
                 printf("  ***********************************\n\n");

                 Out_file_1();

                 Menu_2();
                 printf("\n  ***********************************\n");
                 printf("  **                               **\n");
                 printf("  **     当前为乘客信息导出窗口    **\n");
                 printf("  **                               **\n");
                 printf("  ***********************************\n\n");

                 Out_file_2();

                 break;
        }
        case 0: {
                 printf("系统已成功退出,感谢您的使用\n"); 
                 return;
        }
        default: {
                 printf("无效的选择,请重新输入\n"); 
        }
        }
    }
}

(3)航班信息导入

        文件中信息存储格式以 “,”为分割符,按照顺序逐个读取。函数开头的getchar()函数是为了吸收之前在菜单选择时的换行符。避免缓冲区等待数据对于文件名的输入产生影响。

void file_Flight() {
    getchar();
    char filename[50];
    printf("请输入导入文件的名称(不含扩展名): ");

    if (fgets(filename, sizeof(filename), stdin) != NULL) {
        size_t len = strlen(filename);
        if (len > 0 && filename[len - 1] == '\n') {
            filename[len - 1] = '\0'; // 去除换行符
        }
        strcat(filename, ".txt"); // 添加扩展名

        FILE* file = fopen(filename, "r");
        if (file == NULL) {
            printf("无法打开文件 %s!\a\n", filename);
            return;
        }

        char line[1256];

        while (fgets(line, sizeof(line), file) && num_fli < N) {
            line[strcspn(line, "\n")] = 0; // 去除行尾换行符

            char* token = strtok(line, ",");
            int fieldIndex = 0; // 用于记录字段索引
            while (token != NULL && fieldIndex < 9) {
                switch (fieldIndex) {
                case 0: sscanf(token, "%d", &fli[num_fli].flightID); break;
                case 1: strncpy(fli[num_fli].departureCity, token, 50); break;
                case 2: strncpy(fli[num_fli].departureTime, token, 20); break;
                case 3: sscanf(token, "%50s", fli[num_fli].arrivalCity); break;
                case 4: sscanf(token, "%20s", fli[num_fli].arrivalTime);break; 
                case 5: sscanf(token, "%d", &fli[num_fli].ticketPrice); break;
                case 6: sscanf(token, "%f", &fli[num_fli].discount); break;
                case 7: sscanf(token, "%d", &fli[num_fli].totalSeats); break;
                case 8: sscanf(token, "%d", &fli[num_fli].bookedSeats); break;
                }
                fieldIndex++;
                token = strtok(NULL, ",");
            }
            num_fli++;
        }
        fclose(file);
        printf("成功从文件 %s 导入数据!\n", filename);
    }
    else {
        printf("读取文件名失败\n");
    }
}

 

(4)乘客信息导入

void file_parent() {
    getchar();
    char filename[50];
    printf("请输入导入文件的名称(不含扩展名): ");
    if (fgets(filename, sizeof(filename), stdin) != NULL) {
        size_t len = strlen(filename);
        if (len > 0 && filename[len - 1] == '\n') {
            filename[len - 1] = '\0';
        }

        strcat(filename, ".txt");

        FILE* file = fopen(filename, "r");
        if (file == NULL) {
            printf("无法打开文件 %s!\a\n", filename);
            return;
        }

        char line[1256];
        Parent* head = NULL, * newparent;

        while (fgets(line, sizeof(line), file)) {
            line[strcspn(line, "\n")] = 0; // 去除行尾换行符  

            newparent = (Parent*)malloc(sizeof(Parent));
            newparent->next = NULL;
            if (!newparent) {
                perror("Memory allocation failed");
                fclose(file);
                return;
            }

            char* token = strtok(line, ",");
            int fieldIndex = 0;

            while (token != NULL && fieldIndex < 3) {
                switch (fieldIndex) {
                case 0: sscanf(token, "%20s", newparent->name);break;
                case 1: sscanf(token, "%s", newparent->Id); break;
                case 2: {
                    sscanf(token, "%d", &newparent->num_flight);
                    if (newparent->num_flight > Max_sum) {
                        Max_sum = newparent->num_flight;
                    }
                    for (int i = 0; i < newparent->num_flight && token != NULL; i++) {
                        token = strtok(NULL, ",");
                        if (token) {
                            sscanf(token, "%d", &newparent->arr_flight[0][i]);
                            token = strtok(NULL, ",");
                            if (token) {
                                sscanf(token, "%d", &newparent->arr_flight[1][i]);
                            }
                        }
                    }
                    break;
                }
                }
                fieldIndex++;
                token = strtok(NULL, ",");
            }

            if (!head) {
                head = newparent;
                tail = newparent;
            }
            else {
                tail->next = newparent;
                tail = newparent;
            }
        }

        Float = head;  // 更新全局链表头  
        printf("已由文件成功导入\n");
        fclose(file);
    }
}

 

(5)航班信息修改

void Amend() {

    int newname;
    int input;
    printf("\n请输入要修改的航班编号\n");
    scanf("%d",&newname);
    int wei = Search_flightID(newname);

    Menu_2();
    printf("\n  ***********************************\n");
    printf("  **                               **\n");
    printf("  **       当前为航班修改窗口      **\n");
    printf("  **                               **\n");
    printf("  **         1.航班起飞时间        **\n");
    printf("  **         2.航班抵达时间        **\n");
    printf("  **         3.航班荷载人数        **\n");
    printf("  **         0.退出修改窗口        **\n");
    printf("  **                               **\n");
    printf("  ***********************************\n\n");
    while (1) {
        printf("请选择修改内容\n");
        scanf("%d", &input);
        switch (input) {
        case 1: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].departureTime, time); break; }
        case 2: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].arrivalTime, time); break; }
        case 3: {int num; printf("请输入当前所荷载人数:"); scanf("%d", &num); fli[wei].totalSeats = num; break; }
        case 0: {printf("\n已退出航班修改\n"); return;}
        }
    }
}

(6)信息显示函数

void Print_flight() {
    if (num_fli == 0) { printf("当前无航班信息 请导入\n"); return;}
    printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
    printf("│      编号     │        起飞城市     │       起飞时间      │       抵达城市      │       抵达时间      │       总座位数      │     已预订座位数    │\n");
    printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
    for (int i = 0; i < num_fli; i++) {

        printf("│");
        int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); }  /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
         printf("%d", fli[i].flightID);   for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }

        printf("│");
        int padd = (length_2  - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
        printf("%s",fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }

        printf("│");
        padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
        printf("%s",fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }

        printf("│");
        padd = (length_2 - strlen(fli[i].arrivalCity)) / 2;  for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
        printf("%s", fli[i].arrivalCity);  for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }

        printf("│");
        padd = (length_2 - strlen(fli[i].arrivalTime)) / 2;  for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
        printf("%s", fli[i].arrivalTime);  for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }

        printf("│");
        padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); }  if (fli[i].totalSeats > 9) { padding++; if (fli[i].totalSeats > 99) { if (fli[i].totalSeats > 999) { padding++; } padding++; } }
        printf("%d", fli[i].totalSeats);for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }

        printf("│");
        padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); }  if (fli[i].bookedSeats > 9) { padding++; if (fli[i].bookedSeats > 99) { if (fli[i].bookedSeats > 999) { padding++; } padding++; } }
        printf("%d", fli[i].bookedSeats); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }

        printf("│\n");
      
        if (i + 1 == num_fli) { printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n"); }
        else { printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n"); }
    }

    printf("\n显示完成\n");
}
void Printf_parent() {

    Parent* current = Float; if (current == NULL) { printf("当前无乘客信息 请导入\n"); return;}

    printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < Max_sum-1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行

    printf("│        姓名         │        证件号       │       航班数量      │");
    int padding = ((length_2+1) * Max_sum -1- strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2+1) * Max_sum -1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行

    printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < Max_sum-1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行

    while (current != NULL) {
        int padding, padd;
      
        printf("│                     │                     │                     ");

        for (int i = 0; i < Max_sum; i++) {
            if (i < current->num_flight) {
                printf("│");
                padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
                printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
            }
            else { 
                printf("│"); for (int ko = 0; ko < length_2; ko++) { printf(" "); }
            }
        }printf("│\n");
           //数据输出第一行


        printf("│");
        padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
        printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
    
        printf("│");
        padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
        printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }

        printf("│");
        padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
        printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }

        printf("├");
        for (int as = 0; as < Max_sum - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
            //数据输出第二行


        printf("│                 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依开发平台数据权限设计与实现深度剖析

概述 在之前的博客《数据权限的设计与思考》中&#xff0c;我们对软件系统的数据权限进行了全面的梳理。接下来&#xff0c;本文深度剖析主流开源的若依开发平台数据权限是怎么设计与实现的。 平台展示 在角色管理菜单中&#xff0c;在角色列表中选择一个具体角色&#xff…

【C++】实验十二

题目&#xff1a; 1、事先编好程序&#xff0c;上机调试和运行程序&#xff0c;分析结果。 将教材第11章例11.1的程序片段补充和改写成一个完整、正确的程序&#xff0c;用公用继承方式。在程序中包括输入数据的函数&#xff0c;在程序运行时输入num&#xff0c;name&#xf…

人工智能与机器学习原理精解【11】

文章目录 广义线性模型基础理论泊松分布的基本公式一、基本公式二、泊松分布的特点三、泊松分布的应用场景四、泊松分布与二项分布的关系五、总结 泊松回归例子1例子背景模型设定数据收集模型拟合结果解释预测应用场景 泊松回归例子2背景数据准备模型设定模型拟合结果解释预测 …

红外视觉简介:近红外图像与中远红外图像

在本教程中,您将学习红外成像的基础知识,包括: 什么是红外图像:近红外与中远红外红外摄像机的类型它们有什么用处什么是红外图像?近红外图像 在开始处理这种奇怪的图像之前,我们应该了解它们的来源。 我们都熟悉常见的数字彩色可见图片(图 1,左),因为我们每年都会用…

“华数杯”全国大学生数学建模竞赛含金量如何?

“华数杯”全国大学生数学建模竞赛是由华中师范大学主办的一项全国性的大学生数学建模竞赛。该竞赛旨在提高大学生的数学建模能力和实践能力,增强大学生的创新意识和团队协作精神。 搜集一些评价,有人说该竞赛的含金量较高,但是也有一些人认为其认可度不高,报名费用较贵。…

【漏洞复现】华天动力OA downloadWpsFile.jsp 任意文件读取漏洞

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合&#xff0c;为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA downloadWpsFile.jsp 接口处存在任意文件读取漏洞&#xff0c;未经身份认证的攻击者可利用…

springboot民办高校科研项目管理系统-计算机毕业设计源码54009

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

Chat2DB新推Chat2Excel,让数据对话跃然纸上

Excel 智能问答 Chat2Excel 1. 创建新聊天 点击左侧AI对话&#xff0c;进入对话界面。点击加号""按钮以开始一个新的对话。 新建对话选择表格类型, 选择上传excel文档。 双击对话名称可以修改对话名称。现在我们就可以开始针对于Excel进行智能问答了。 2. 智能…

小程序开发_02项目构成

一、项目的基本结构 二、小程序的页面组成部分 三、json配置文件 ① project.config.json文件 作用&#xff1a;项目的配置文件&#xff0c;用来记录对小程序开发工具所作的个性化配置 ② sitemap.json 作用&#xff1a;是否允许被微信引擎搜索,不希望被搜索dis ③ app.jso…

Pycharm打开 .xlsx文件 使用系统自带的软件

问题由来 最初默认是使用自带的软件打开 同事电脑默认打开方式是pycharm&#xff0c;有点不好弄&#xff0c;希望打开方式是默认系统默认&#xff1b; 自己尝试修改了一下自己的.xlsx打开方式&#xff0c;无法解决同事问题&#xff0c;后删除默认&#xff0c;自己电脑就出现乱码…

软考网络工程师 VS 华为认证HCIP,中级认证里哪个更香?

在网络工程师的专业发展道路上&#xff0c;技能的提升可以说是升职加薪的第一要点。 如果有想要考证的网工朋友&#xff0c;想来软考和华为认证&#xff0c;基本都是绕不开的。 很多朋友都会在软考中级的网络工程师认证和华为HCIP之间感到犯难&#xff0c;一样都是中级认证&…

GIT版本管理与分支控制

目录 1、了解Git功能 2、第一次使用Git&#xff08;首次配置好&#xff0c;后续不用再操作&#xff09; 打开git后端 设置用户签名 结果 3、初始项目架构 创建本地新仓库并初始化 文件添加到本地仓库 a.文件添加缓存区 b.缓存区内容提交到本地仓库 c.改写提交的注释 …

Miniconda快速安装conda

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 安装官方网址&#xff1a;https://docs.anaconda.com/miniconda/#quick-command-line-install 1. Miniconda for Windows curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe -o …

Python酷库之旅-第三方库Pandas(048)

目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…

刷新历史新高后又大跌!剖析黄金现在适合投资吗?

近期现货黄金价格的波动再度受到世界投资者的瞩目&#xff0c;先是七月上旬受美国CPI数据走弱、美联储降息预期增强等因素的影响&#xff0c;金价出现了十分强势的上涨&#xff0c;而且刷新历史高点2482。但从七月下旬开始&#xff0c;市场开始消化降息的预期&#xff0c;并且部…

Kimi与AiPPT合作:一键生成PPT的新体验

Kimi AiPPT 又是一次强强联手&#xff01;这次 Kimi 与 AiPPT 达成协作&#xff0c;作为国内领先的智能助手和宏大的PPT制作平台&#xff0c;两者携手推出的一键生成PPT功能。这次合作直接合并了双方各自的优势&#xff0c;通过“一键生成PPT”的创新服务&#xff0c;极大地提…

昇思25天学习打卡营第20天|ShuffleNet 图像分类案例:模块、训练与评估

目录 基于 MindSpore 的分组卷积类定义与实现 基于 MindSpore 的 ShuffleV1Block 类定义与数据处理 基于 MindSpore 的 ShuffleNetV1 网络定义与构建 Cifar-10 数据集的获取、预处理与分批操作 基于 ShuffleNetV1 模型在 CPU 上的训练配置与执行 ShuffleNetV1 模型在 CPU …

【神器分享】自从用了这个神器,大规模RNA-seq数据挖掘我也可以

咱不来虚的&#xff0c;只分享干货&#xff0c;不谈枯燥的理论&#xff0c;只来通俗易懂的操作。先来看一张图&#xff1a; 通过这张图展示的是 GEO数据库中的 RNA-seq数据与芯片数据积累随时间的变化&#xff0c;很显然测序数据从2015年开始就已经超过了芯片数据的累积 &#…

EtherCAT运动控制器上位机之Python+Qt(一):链接与单轴运动

ZMC408CE硬件介绍 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持8轴运动控制&#xff0c;最多可扩展至32轴…

AI初学者必看: 什么是大型语言模型 (LLM)?

介绍 “人工智能&#xff08;AI&#xff09;”一词于 1956 年问世&#xff0c;如今已为大家所熟知。然而&#xff0c;在 ChatGPT 迅速流行之前&#xff0c;AI 的使用和讨论大多局限于科学研究或虚构电影。如今&#xff0c;AI 尤其是生成式 AI 已成为大家热议的话题。 初学者生…