【C语言期末/课程设计】课程管理系统(vs2022项目)

代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业,
长期接单,信誉有保证,标价10-20每份,如有需要请加文章最下方QQ。

本文资源:https://download.csdn.net/download/weixin_47040861/88971027


1.题目要求

题目描述:

假定有n门课程,每门课程有课程编号,课程名称,课程性质(必须/选修),学时,授课学时,实验或上机学时,学分等信息,学生按要求(总学分不得少于15,其中必修课不得低于10分)自由选课。试设计一个简单选修课程系统。

功能要求:

(1) 输入功能:可以完成若干条课程信息记录的输入
(2) 显示功能:完成全部记录的显示。
(3) 插入功能:插入添加一条或多条记录
(4) 查找功能:按课程编号查找并显示。
(5) 删除功能:按课程编号号进行删除。
(6) 修改功能:按课程编号进行修改。
(7) 排序功能:实现学分进行排序。
(8) 选课功能:按照要求实现选课功能并能随时查阅显示。

扩展功能:

(1) 增加统计功能。比如按照课程性质分别统计总学分等。
(2) 试题记录信息从文件读入。
(3) 将试题记录信息保存到文件中。

2.视频演示

【C语言期末/课程设计】课程管理系统(vs2022项目)

3.项目介绍

结构体和变量:

// 定义常量表示结构体数组长度
#define ARRAY_LENGTH 20

// 定义课程结构体
struct Course {
    int courseNumber;         // 课程编号
    char courseName[50];      // 课程名称
    char courseNature[10];    // 课程性质(必修/选修)
    int totalHours;           // 总学时
    int lectureHours;         // 授课学时
    int labHours;             // 实验或上机学时
    float credits;            // 学分
};

// 声明结构体数组
struct Course courses[ARRAY_LENGTH] = { 0 };
int len = 0;//声明长度

// 声明选课数组
int course_selection[ARRAY_LENGTH];

主函数:

首先调用get()函数获取目录下"Course.csv"文件中的数据,然后打印菜单,根据输入的操作编号调用对应的功能函数,每次执行完成操作后调用set()函数保存结构体数组中的数据到本地的"Course.csv"文件中。

int main() {
    int choice=0;
    get();
    do {
        // 显示菜单
        displayMenu();

        // 获取用户选择
        printf("请选择操作(输入对应的数字): ");
        scanf_s("%d", &choice);

        // 根据用户选择执行相应的操作
        switch (choice) {
        case 1:add();break;
        case 2:show();break;
        case 3:insert();break;
        case 4:find();break;
        case 5:delCourse();break;
        case 6:change();break;
        case 7:sort(); break;
        case 8:selection(); break;
        case 0:; break;
        default:
            // 处理无效的选择
            printf("无效的选择,请重新输入。\n");
        }
        system("pause");
        set();
    } while (choice != 0);

    return 0;
}

1.添加 add()

  1. 提示用户输入要添加的课程数量。
  2. 使用 scanf_s 函数获取用户输入的数量。
  3. 使用 for 循环迭代添加课程信息: a. 提示用户输入第几门课程的信息。 b. 获取课程编号,并进行唯一性验证,如果输入的编号已存在,则提示用户重新输入直到输入一个唯一的编号。 c. 获取课程名称。 d. 验证课程性质是否为"必修"或"选修",如果不是则提示用户重新输入直到输入正确的性质。 e. 获取总学时、授课学时、实验或上机学时以及学分。
  4. 循环结束后更新课程数组的长度。
  5. 打印添加成功的课程数量。

2.显示 show()

  1. 首先检查课程数组的长度是否为零,如果为零,则打印提示信息 "没有课程信息可显示。" 并返回,不进行后续操作。
  2. 如果课程数组不为空,则打印表头,包括课程编号、课程名称、课程性质、总学时、授课学时、实验学时和学分。
  3. 打印分隔线,用于区分表头和课程信息。
  4. 使用循环遍历课程数组,依次打印每门课程的信息,包括课程编号、课程名称、课程性质、总学时、授课学时、实验学时和学分。
  5. 循环结束后再次打印分隔线,用于结尾。

3.插入 insert()

  1. 提示用户输入要插入的数量。
  2. 提示用户输入要插入的课程编号。
  3. 查找课程编号为输入值的课程位置。
  4. 如果找不到对应的课程编号,则输出提示信息并返回。
  5. 检查要插入的数量是否大于结构体数组剩余长度,如果是则输出提示信息并返回。
  6. 向后移动元素,为新数据腾出空间。
  7. 循环输入新数据.
  8. 更新课程数组的长度。
  9. 输出插入成功的信息。

4.查询 find()

  1. 提示用户输入要查询的课程编号。
  2. 使用 scanf_s 函数获取用户输入的课程编号。
  3. 遍历课程结构体数组: a. 如果找到与用户输入的课程编号匹配的课程,则打印该课程的详细信息,并返回函数。 b. 如果未找到匹配的课程编号,则打印提示信息表示未找到该课程。

5.删除 delCourse()

  1. 提示用户输入要删除的课程编号。
  2. 使用 scanf_s 函数获取用户输入的课程编号。
  3. 遍历课程结构体数组: a. 如果找到与用户输入的课程编号匹配的课程,则记录该课程的索引位置,并跳出循环。 b. 如果未找到匹配的课程编号,则打印提示信息表示未找到该课程,并结束函数。
  4. 从找到的索引位置开始,将数组中后续的元素向前移动一个位置,覆盖当前位置的元素,实现删除操作。
  5. 更新课程数组的长度。
  6. 打印删除成功的提示信息。

6.修改 change()

  1. 提示用户输入要修改的课程编号。
  2. 使用 scanf_s 函数获取用户输入的课程编号。
  3. 遍历课程结构体数组: a. 如果找到与用户输入的课程编号匹配的课程,则记录该课程的索引位置,并跳出循环。 b. 如果未找到匹配的课程编号,则打印提示信息表示未找到该课程,并结束函数。
  4. 提示用户选择要修改的内容,包括课程名称、课程性质、总学时、授课学时、实验或上机学时、学分。
  5. 根据用户输入的操作编号执行相应的修改操作: a. 如果是修改课程名称,则提示用户输入新的课程名称。 b. 如果是修改课程性质,则验证用户输入的性质是否为"必修"或"选修",如果不是则要求重新输入。 c. 如果是修改总学时、授课学时、实验或上机学时、学分,则分别提示用户输入新的值。
  6. 执行完相应的修改操作后,打印修改成功的提示信息。

7.排序 sort()

  1. 使用冒泡排序算法,通过比较课程的学分大小来进行排序。
  2. 外层循环控制排序的轮数,从第一个元素到倒数第二个元素。
  3. 内层循环在每一轮中比较相邻的两个课程的学分大小,如果前一个课程的学分小于后一个课程的学分,则交换它们的位置。
  4. 在交换位置的同时,也更新了一个名为 course_selection 的数组,以保持与课程信息数组的对应关系。
  5. 排序完成后,调用 show() 函数打印排序后的课程信息。
  6. 最后打印排序完成的提示信息。

8.选课 selection()

  1. 提示用户选择操作,选课或查询选课结果。
  2. 使用 scanf_s 函数获取用户选择的操作编号,并清除缓冲区中的换行符。
  3. 根据用户的选择执行相应的操作:
    • 如果选择选课功能(操作编号为1):
      • 清空 course_selection 数组,准备重新选择课程。
      • 提示用户输入所选课程名称,以空格分隔。
      • 使用 fgets 函数获取用户输入的课程名称,并将换行符替换为空字符。
      • 使用 strtok_s 函数分割用户输入的课程名称,遍历课程结构体数组,查找课程名对应的编号,并将对应位置的 course_selection 数组标记为1,表示选中该课程。
      • 统计所选课程的总学分、必修课程的总学分和选修课程的总学分。
      • 判断是否满足选课条件(总学分大于15且必修课程的总学分大于10),如果满足则打印选课成功的提示信息,否则打印选课失败的提示信息。
      • 打印选课结果和统计分数。
    • 如果选择查询选课结果功能(操作编号为2):
      • 打印已选课程的信息。
  4. 如果用户输入的操作编号既不是1也不是2,则打印无效选择的提示信息。

↓如有任何问题,请加下方QQ↓

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a辰龙a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值