C语言源代码系列-管理系统之学生选修课程系统

news2025/7/8 22:19:48
往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

假定有n门课程,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,
实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供一下功能:
(1)系统以菜单方式工作;
(2)课程信息和学生信息的录入功能(课程信息有文件保存)----输入;
(3)课程信息浏览功能----输出;
(4)查询功能(至少一种查询方式)—算法;
(5)按学分查询;
(6)某门课程学生选修情况(可选项)。

😜回答

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N1, N2;
int n = 0;

struct course
{
    int num1; //课程编号
    char name1[20];
    char major[20];
    char type[20];
    int credit;
    int period;
    char teacher[20];
    int people; //选此门课程的人数

    struct course *next;
}; //结构体指针

struct student
{
    int num2;
    char name2[20];
    int nelenum[50]; //所选课程编号
    int nelen; //所选课程学分和

    struct student * next;
};

struct course

*head1;

struct student

*head2;

void zhang() //从键盘录入课程信息
{
    struct course* p1, *p2;
    N1 = 0;
    p1 = p2 = (struct course *)malloc(sizeof(struct course));
    int y, n;
    if (n == 0)
        do
        {
            printf("--------------------\n");
            printf("请输入课程编号:");
            scanf("%d", &p1->num1);
            printf("请输入课程名称:");
            scanf("%s", p1->name1);
            printf("请输入主修:");
            scanf("%s", p1->major);
            printf("请输入课程性质:");
            scanf("%s", p1->type);
            printf("请输入学分:");
            scanf("%d", &p1->credit);
            printf("请输入课时:");
            scanf("%d", &p1->period);
            printf("请输入教师名称:");
            scanf("%s", p1->teacher);
            n++;
            p1++;
            printf("\n1.继续输入.\n0.输入完毕.\n");
            printf("请选择:");
            scanf("%d", &y);
        } while (y == 1);

    printf("提示:输入完毕!你一共输入%d个\n", n);
}

void zhang1() //从文件录入课程信息
{
    FILE* fp;
    char filepath[20];
    struct course* p1, *p2;
    N1 = 0;
    printf("请输入您要读取的路径:");
    getchar();
    gets(filepath);
    if ((fp = fopen(filepath, "r")) == NULL)
    {
        printf("找不到 %s 文件!\n", filepath);
        exit(0);
    }

    p1 = p2 = (struct course *)malloc(sizeof(struct course));
    fscanf(fp, "%d%s%s%s%d%d%s%d", &p1->num1, p1->name1, p1->major, p1->type, &p1->credit, &p1->period, p1->teacher,
        &p1->people);
    while (!feof(fp))
    {
        N1 = N1 + 1;
        if (N1 == 1)
            head1 = p1;
        else
            p2->next = p1;
        p2 = p1;
        p1 = (struct course * )malloc(sizeof(struct course));
        fscanf(fp, "%d%s%s%s%d%d%s%d", &p1->num1, p1->name1, p1->major, p1->type, &p1->credit, &p1->period, p1->teacher,
            &p1->people);
    }

    p2->next = NULL;
}

void load() //录入课程信息函数
{
    int i;
    printf("\t\t\t录入课程信息\n");
    printf("\n1.从键盘录入");
    printf("\n2.从文件录入");
    printf("\n3.返回主菜单\n");
    printf("请选择1-3:");
    scanf("%d", &i);
    switch (i)
    {
        case 1:
            zhang();
            break;
        case 2:
            zhang1();
            break;
        case 3: break;
    }
}

void insert(

struct course

*incourse) //增加课程信息
{
struct course *p0, *p1, *p2;
p1=head1;
p0=incourse;
if(head1==NULL)
{
    head1 = p0;
    p0->next = NULL;
}
else
{
    while ((p0->num1 > p1->num1) && (p1->next != NULL))
    {
        p2 = p1;
        p1 = p1->next;
    }

    if (p0->num1 <= p1->num1)
    {
        if (head1 == p1)
            head1 = p0;
        else
            p2->next = p0;
        p0->next = p1;
    }
    else
    {
        p1->next = p0;
        p0->next = NULL;
    }
}
N1 = N1 + 1;
}
void delc(int num1) //删除课程信息
{
struct course *p1, *p2;
if(head1==NULL)
{
    printf("\n无法删除!\n");
    goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
    p2 = p1;
    p1 = p1->next;
}
if (num1 == p1->num1)
{
    if (p1 == head1)
        head1 = p1->next;
    else
        p2->next = p1->next;
    printf("已删除\n");
    N1 = N1 - 1;
}
else
    printf("没有此课程\n");

end: ;
}
void managementc() //课程信息管理函数
{
struct course * p1;
int i, num1;
printf("\t\t\t课程信息管理\n");
printf("1.添加课程\n");
printf("2.删除课程\n");
printf("3.返回\n");
printf("请输入1-3:\n");
scanf("%d", &i);
switch(i)
{
    case 1:{ struct course* p1, *p2;
        N1 = 0;
        p1 = p2 = (struct course *)malloc(sizeof(struct course));
        int y, n;
        if (n == 0)
            do
            {
                printf("--------------------\n");
                printf("请输入课程编号:");
                scanf("%d", &p1->num1);
                printf("请输入课程名称:");
                scanf("%s", p1->name1);
                printf("请输入主修:");
                scanf("%s", p1->major);
                printf("请输入课程性质:");
                scanf("%s", p1->type);
                printf("请输入学分:");
                scanf("%d", &p1->credit);
                printf("请输入课时:");
                scanf("%d", &p1->period);
                printf("请输入教师名称:");
                scanf("%s", p1->teacher);
                n++;
                p1++;
                printf("\n1.继续输入.\n0.输入完毕.\n");
                printf("请选择:");
                scanf("%d", &y);
            } while (y == 1);

        printf("提示:输入完毕!你一共输入%d个\n", n);
    }
    break;
    case 2:printf("请输入您要删除的课程编号:\n");
    scanf("%d", &num1);
    delc(num1);
    break;
    case 3:break;
}
}
void putin(void) //从键盘录入学生信息
{
    int i, n, y;
    struct student* p1, *p2;
    N2 = 0;
    p1 = p2 = (struct student *)malloc(sizeof(struct student));
    do
    {
        printf("学号:\t");
        scanf("%d", &p1->num2);
        printf("姓名:\t");
        scanf("%s", p1->name2);
        p1->nelen = 0;
        for (i = 0; i < 20; i++) p1->nelenum[i] = 0;
        head2 = NULL;
        n++;
        p1++;
        printf("\n1.继续输入.\n0.输入完毕.\n");
        printf("请选择:");
        scanf("%d", &y);
    } while (y == 1);

    printf("提示:输入完毕!你一共输入%d个\n", n);
}

void putin2() //从文件录入学生信息
{
    int i = 0;
    FILE* fp;
    char filepath[20];
    struct student* p1, *p2;
    N2 = 0;
    printf("请输入您要读取的路径:");
    getchar();
    gets(filepath);
    if ((fp = fopen(filepath, "rt")) == NULL)
    {
        printf("找不到 %s 文件!\n", filepath);
        exit(0);
    }

    p1 = p2 = (struct student *)malloc(sizeof(struct student));
    fread(p1, sizeof(struct student),1,fp);
    head2 = NULL;
    while (!feof(fp))
    {
        i = 0;
        N2 = N2 + 1;
        if (N2 == 1)
            head2 = p1;
        else
            p2->next = p1;
        p2 = p1;
        p1 = (struct student * )malloc(sizeof(struct student));
        fread(p1, sizeof(struct student),1,fp);
    }

    p2->next = NULL;
}

void input() //录入学生信息函数
{
    int i;
    printf("\t\t\t录入学生信息\n");
    printf("\n1.从键盘录入\n");
    printf("2.从文件录入\n");
    printf("3.返回主菜单\n");
    printf("请输入1-3:\n");
    scanf("%d", &i);
    switch (i)
    {
        case 1:
            putin();
            break;
        case 2:
            putin2();
            break;
        case 3: break;
    }
}

void inserts(

struct student

*incouse) //增加学生信息
{
struct student *p0, *p1, *p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
    head2 = p0;
    p0->next = NULL;
}
else
{
    while ((p0->num2 > p1->num2) && (p1->next != NULL))
    {
        p2 = p1;
        p1 = p1->next;
    }

    if (p0->num2 <= p1->num2)
    {
        if (head2 == p1) head2 = p0;
        else p2->next = p0;
        p0->next = p1;
    }
    else
    {
        p1->next = p0;
        p0->next = NULL;
    }
}
N2 = N2 + 1;
}
void dels(int num2) //删除学生信息
{
struct student *p1, *p2;
if(head2==NULL)
{
    printf("\n无法删除\n");
    goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
    p2 = p1;
    p1 = p1->next;
}
if (num2 == p1->num2)
{
    if (p1 == head2)
        head2 = p1->next;
    else
        p2->next = p1->next;
    printf("已删除\n");
    N2 = N2 - 1;
}
else
    printf("没有此学生编号\n");

end: ;
}
void managements() //学生信息管理函数
{
struct student * p1;
int i, num2;
printf("\t\t\t学生信息管理\n");
printf("1.添加学生信息\n");
printf("2.删除学生信息\n");
printf("3.返回主菜单\n");
printf("请选择1-3:\n");
scanf("%d", &i);
switch(i)
{
    case 1:{
        p1 = (struct student *)malloc(sizeof(struct student));
        p1->nelen = 0;
        p1->nelenum[0] = 0;
        printf("num\tname\n");
        scanf("%d%s", &p1->num2, p1->name2);
        inserts(p1);
    }
    break;
    case 2:{
        printf("请输入您要删除的学生编号:\n");
        scanf("%d", &num2);
        dels(num2);
    }
    break;
    case 3:break;
}
}
void elect() //学生选课
{
    struct student* s;
    struct course* p1;
    int a, i, b;
    printf("请输入您的学号:\n");
    scanf("%d", &a);
    s = head2;
    while ((s->num2) != a && s->next != NULL) s = s->next;
    if (s->num2 != a)
    {
        printf("您的信息不存在,请重新输入:\n");
        goto end;
    }

    if ((s->nelen) > 10)
    {
        printf("您的学分已满");
        goto end;
    }

    printf("请输入您要选修的课程编号\n");
    scanf("%d", &b);
    for (i = 0; (s->nelenum[i]) == 0; i++) ;
    s->nelenum[i] = b;
    p1 = head1;
    while ((p1->num1) != b)
        p1 = p1->next;
    for (i = 0; (s->nelenum[i]) != 0; i++) ;
    s->nelenum[i] = b;
    (p1->people)++;
    (s->nelen) = (s->nelen) + (p1->credit);
    (p1->people)++;
    end: ;
}

void back() //学生退课
{
    struct student* p;
    struct course* p1;
    int b, i, j, a;
    printf("请输入您的学号:\n");
    scanf("%d", &a);
    p = head2;
    while (p->num2 != a && p != NULL) p = p->next;
    if (p == NULL)
        printf("您的信息不存在:\n");
    else
    {
        printf("请输入您要退选的课程:\n");
        scanf("%d", &b);
        p1 = head1;
        while (p1->num1 != b) p1 = p1->next;
        for (i = 0; p->nelenum[i] != b; i++) ;
        for (j = i; p->nelenum[j] != 0; j++)
            p->nelenum[j] = p->nelenum[j + 1];
        p->nelenum[--j] = 0;
        (p->nelen) = (p->nelen) - (p1->credit);
        (p1->people)--;
        printf("succeed!\n");
    }
}

void elective() //学生选课信息管理
{
    int i;
    printf("\t\t\t学生选课信息管理\n");
    printf("1.选课\n");
    printf("2.退课\n");
    printf("3.返回主菜单\n");
    printf("请输入1-3:\n");
    scanf("%d", &i);
    switch (i)
    {
        case 1:
            elect();
            break;
        case 2:
            back();
            break;
        case 3: break;
    }
}

void listc() //浏览课程信息
{
    struct course* p;
    int i, j;
    if (n != 0)
    {
        printf("学生总数:%d\n", n);
        printf("课程编号    课程名称    主修    课程性质    学分    课时    教师   选课人数\n");
        printf("-----------------------------------------------------\n");
        for (i = 0; i < n; i++)
            printf("%6d%13s%13s%10s%7d%7d%12s%5d\n", &p->num1, p->name1, p->major, p->type, &p->credit, &p->period,
                p->teacher, &p->people);
    }
    else printf("提示:无数据,请输入数据!");
}

void lists() //浏览学生信息
{
    struct student* p;
    int a;
    p = head2;
    printf("学生编号     学生姓名       所选课程编号       所选课程学分\n");
    while (p != NULL)
    {
        printf("%6d%13s", &p->num2, p->name2);
        printf("%6d", &p->nelen);
        for (a = 0; p->nelenum[a] != 0 && a < 14; a++)
            printf("%d", &p->nelenum[a]);
        printf("\n");
        p = p->next;
    }
}

void intoc() //存储课程信息
{
    FILE* fp;
    struct course* p;
    char filepath[30];
    printf("输入路径:");
    getchar();
    gets(filepath);
    if ((fp = fopen(filepath, "w")) == NULL)
    {
        printf("\无法储存!");
        exit(0);
    }

    p = head1;
    while (p != NULL)
    {
        fprintf(fp, "%d%s%s%s%d%d%s%d\n", p->num1, p->name1, p->major, p->type, p->credit, p->period, p->teacher,
            p->people);
        p = p->next;
    }

    fclose(fp);
    printf("已储存入%s文件!\n", filepath);
}

void intos() //存储学生信息
{
    FILE* fp;
    struct student* p;
    char filepath[30];
    printf("请输入路径:");
    getchar();
    gets(filepath);
    if ((fp = fopen(filepath, "wt")) == NULL)
    {
        printf("\n 无法储存!");
        exit(0);
    }

    p = head2;
    while (p != NULL)
    {
        fwrite(p, sizeof(struct student),1,fp);
        p = p->next;
    }

    fclose(fp);
    printf("已储存入 %s文件!\n", filepath);
}

void into() //信息存储函数
{
    int i;
    printf("\t\t\t信息存储\n");
    printf("1.课程信息存储\n");
    printf("2.学生信息存储\n");
    printf("3.返回主菜单\n");
    printf("请输入1-3\n");
    scanf("%d", &i);
    switch (i)
    {
        case (1):
            intoc();
            break;
        case (2):
            intos();
            break;
        case (3): break;
    }
}

void store() //信息存储浏览函数
{
    int i;
    printf("\t\t信息存储和浏览\n");
    printf("1.课程信息浏览\n");
    printf("2.学生信息浏览\n");
    printf("3.信息存储\n");
    printf("4.返回主菜单\n");
    printf("请输入1-4:\n");
    scanf("%d", &i);
    switch (i)
    {
        case (1):
            listc();
            break;
        case (2):
            lists();
            break;
        case (3):
            into();
            break;
        case (4): break;
    }
}

void search1() //按学生编号查找学生信息
{
    int a, b;
    struct student* p;
    printf("请输入学生编号");
    scanf("%d", &a);
    p = head2;
    printf("学号       学生姓名    所选课程编号   所选课程学分\n");
    while (p != NULL)
    {
        if (p->num2 == a)
        {
            printf("%6d%13s ", p->num2, p->name2);
            for (b = 0; p->nelenum[b] != 0 && b < 14; b++)
                printf("%d", p->nelenum[b]);
            printf("%10d\n", p->nelen);
        }

        p = p->next;
    }
}

void search2() //按学生姓名查找学生信息
{
    int b;
    char name[20];
    struct student* p;
    printf("请输入要查找的学生姓名:");
    scanf("%s", name);
    p = head2;
    printf("学号       学生姓名     所选课程编号   所选课程学分\n");
    while (p != NULL)
    {
        if (strcmp(name, p->name2) == 0)
        {
            printf("%6d%13s ", p->num2, p->name2);
            for (b = 0; p->nelenum[b] != 0 && b < 14; b++)
                printf("%d", p->nelenum[b]);
            printf("%10d\n", p->nelen);
        }

        p = p->next;
    }
}

void search() //学生信息查找主函数
{
    int i;
    printf("\t\t\t学生信息查找");
    printf("\n1.按学号查找");
    printf("\n2.按姓名查找");
    printf("\n3.返回主菜单");
    printf("\n请输入1-3:");
    scanf("%d", &i);
    switch (i)
    {
        case 1:
            search1();
            break;
        case 2:
            search2();
            break;
        case 3: break;
    }
}

int main() //主函数
{
    char m;
    int i;
    start:
    printf("\t\t\t*******************************\n");
    printf("\n\t\t\t\t学生选修课程系统!\n");
    printf("\n\t\t\t\t欢迎使用此系统!\n");
    printf("\t\t\t*******************************\n");
    printf("\n");
    printf("\t\t\t\t-----目录-----\n");
    printf("\t\t\t|1.录入课程信息\n");
    printf("\t\t\t|2.课程信息管理\n");
    printf("\t\t\t|3.录入学生信息\n");
    printf("\t\t\t|4.学生信息管理\n");
    printf("\t\t\t|5.学生选课\n");
    printf("\t\t\t|6.信息存储与浏览\n");
    printf("\t\t\t|7.查找学生信息\n");
    printf("\t\t\t|8.退出系统\n");
    printf("选择功能前面的数字进入功能:\n");
    scanf("%d", &i);
    switch (i)
    {
        case 1:
            system("cls");
            load();
            goto start;
            break;
        case 2:
            system("cls");
            managementc();
            goto start;
            break;
        case 3:
            system("cls");
            input();
            goto start;
            break;
        case 4:
            system("cls");
            managements();
            goto start;
            break;
        case 5:
            system("cls");
            elective();
            goto start;
            break;
        case 6:
            system("cls");
            store();
            goto start;
            break;
        case 7:
            system("cls");
            search();
            goto start;
            break;
        case 8:
        {
            system("cls");
            printf("Thank you for using this program!\n\nBye-Bye!\n");
        }
    }

    return 0;
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

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

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

相关文章

想归隐啦——与自然生活为伴

目录 一、陶渊明-桃花源记 二、梭罗-瓦尔登湖 结庐在人境&#xff0c;而无车马喧。问君何能尔&#xff1f;心远地自偏。采菊东篱下&#xff0c;悠然见南山 一、陶渊明-桃花源记 晋太元中&#xff0c;武陵人捕鱼为业。缘溪行&#xff0c;忘路之远近。忽逢桃花林&#xff0c;夹…

第五届“传智杯”全国大学生计算机大赛(练习赛)传智杯 #5 练习赛] 平等的交易

[传智杯 #5 练习赛] 平等的交易 题目描述 你有 nnn 件道具可以买&#xff0c;其中第 iii 件的价格为 aia_iai​。 你有 www 元钱。你仅能用钱购买其中的一件商道具。当然&#xff0c;你可以拿你手中的道具换取其他的道具&#xff0c;只是这些商道具的价值之和&#xff0c;不…

Vuecli项目结构,及组件的使用

根目录文件介绍 node_modules &#xff1a;管理项目中使用的依赖 public&#xff1a;存放一些静态资源&#xff0c;webpack打包时会放入dist文件夹内。 src&#xff1a;书写vue源代码【重点】 .gitignore &#xff1a;存放需要被git忽略文件&#xff08;不需要保存&#xff09;…

[附源码]java毕业设计青少年计算机知识学习系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ArcGIS制作横向图例

ArcGIS制作横向图例 右键栅格图层&#xff0c;Symbology——Stretched 切换布局视图——View——Layout View&#xff0c;添加经纬网并调整 Insert——Legend&#xff0c;一路默认点下去 双击图例&#xff0c;Items——Style&#xff0c;进一步调整 选择图中标注的这个样式&am…

ES6 Symbol 内置值及使用场景

Symbol 基本使用 ES6 引入了一种新的原始数据类型 Symbol&#xff0c;表示独一无二的值。它是 JavaScript 语言的第七种数据类型&#xff0c;是一种类似于字符串的数据类型。 Symbol 特点 1) Symbol 的值是唯一的&#xff0c;用来解决命名冲突的问题 2) Symbol 值不能与其…

Spring之Bean的实例化

文章目录前言一、通过构造方法实例化二、通过简单工厂模式实例化三、通过factory-bean实例化四、通过FactoryBean接口实例化前言 Spring为Bean提供了多种实例化方法&#xff0c;通常包括四种方式。目的是&#xff1a;更加灵活 第一种&#xff1a;通过构造方法实例化第二种&am…

计算机网络——第五章网络层笔记(4)

距离矢量路由选择协议&#xff08;DV算法&#xff09; 每个路由器维护一张表&#xff0c;表中列出了当前已知的到每个目标的最佳距离&#xff0c;以及为了到达那个目标&#xff0c;应该从哪个接口转发。 DV算法是动态的和分布式的&#xff0c;它常被用于小型网络&#xff0c;…

开发时长一年半golang工程师应该具备什么样的技术能力?

一、为什么会有人选择golang? 其实无非是被动和主动。 **被动&#xff1a;**面试新公司后&#xff0c;被领导调岗现学golang&#xff0c;因为公司需要。 **主动&#xff1a;**觉得这个方向有前景&#xff0c;大厂有需求&#xff0c;学了可以升职加薪&#xff01; 所以不管…

visual studio连接远程开发

一、问题提出 vscode在连接远程调试时不知道如何调试cmake&#xff0c;研究了半天没研究出来&#xff0c;因此决定使用visual studio进行调试。 二、安装 Linux端 cmake版本最低为3.11&#xff0c;可以从此网站下载&#xff1a;https://cmake.org/files/v3.11/ 之前安装的visu…

怎么样恢复移动硬盘格式化的数据呢?

怎么样恢复移动硬盘格式化的数据呢&#xff1f; 这是一个让人很困扰的问题&#xff0c;其实格式化后的数据可以使用牛学长数据恢复工具一键恢复数据&#xff0c;它可以快速识别指定存储介质中所有丢失的文件&#xff0c;操作简单且恢复成功率高。 其工作原理只会提取原有数据&…

安装mayavi

mayavi是一款可视化工具&#xff0c;知乎说直接pip install mayavi不好使&#xff0c;所以我就直接没试&#xff0c;我直接试的好使的。 下面的链接是一个各种依赖包的地址&#xff0c;点开进去之后找mayavi https://link.zhihu.com/?targethttps%3A//www.lfd.uci.edu/~gohlke…

详解Unity中的新版Nav Mesh|导航寻路系统 (一)

前言 之前我们讲解过Unity的Nav Mesh系统&#xff0c;其中提到过这个新版的Nav Mesh&#xff0c;它解决现有Nav Mesh的几个缺陷&#xff0c;比如无法动态烘焙&#xff0c;无法按照Agent的半径和高度适当的判断可行路径。现在新版Nav Mesh可以彻底解决这个问题&#xff01;某种…

Android Studio 插件开发2、网络请求、创建dialog、trello获取cardId等

网络请求 点击这里就出来一个弹框 更新Actions 关注这个 <actions><action id"TrelloAction"class"com.anguomob.anguo.actions.trello.TrelloAction"text"TrelloAction"description"Move a trello card from to do to the next …

大神带你玩转异步编程,理论与实践齐飞,敢说是目前最全的讲解了

要完全理解异步编程需要先理解几个概念 任务 我给任务的定义是完成某项功能的单元模块&#xff0c;任务有大有小&#xff0c;站在操作系统的角度&#xff0c;一个程序就是一个任务&#xff0c;每当运行一个程序就会创建一个新的任务&#xff0c;它在操作系统中还有一个无人不…

软件需求分析——需求工程过程

如果有兴趣了解更多相关内容&#xff0c;可以来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;相关概念 需求工程过程的目的&#xff1a;介绍为软件加强型系统中的复杂软件设计的需求工程过程&#xff0c;涉及 抽取需求分析需求验证需求管理需求 主要关注点&#xf…

Isaac-gym(7):物理模拟(actor生成、创建、控制等)

1. 创建actor 1.1 actor的创建与句柄 actor是GymAsset的实例。函数create_actor将一个参与者添加到环境中&#xff0c;并返回一个参与者句柄&#xff0c;该句柄可用于以后与该参与者交互。出于性能原因&#xff0c;最好在actor创建期间保存句柄&#xff0c;而不是在模拟运行时…

[同向双指针] 209. 长度最小的子数组 713. 乘积小于 K 的子数组 3. 无重复字符的最长子串

同向双指针 该文结合灵神讲解进行编码&#xff1a;https://www.bilibili.com/video/BV1hd4y1r7Gq 该类滑动窗口一般符合某种单调性。 当不满足条件时左指针后移&#xff0c;当满足条件时右指针后移。 假设数组长度为 n&#xff0c;左指针最多移动 n 次&#xff0c;右指针最…

【无人机】基于RRT算法实现四旋翼无人机的安全和最小能量轨迹规划附matlab代码和报告

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Linux安装RabbitMQ步骤分享

1、Erlnag安装 1.1、 安装Erlang版本要求 Erlang安装需要对应各自的版本 RabbitMQ Erlang Version Requirements — RabbitMQ 1.2、 Erlang安装 1、目录准备 cd /usr/local/src/ mkdir rabbitmq cd rabbitmq2、添加仓库地址 为了减少安装的错误 我们使用仓库安装 ,类似于m…