根据给定的信息,我们可以将这个学生选课系统分解为几个主要的部分进行详细的解析与知识点的阐述。 ### 一、总体架构 本系统采用C语言编写,主要实现了学生选课的功能,包括浏览课程信息、修改个人信息及选课等功能。程序通过顺序存储结构来管理课程和学生数据,使用结构体定义了课程(`struct course`)和学生(`struct student`)的信息,并在内存中直接定义了一些初始数据作为示例。 ### 二、关键数据结构定义 #### 1. 课程结构体 `struct course` ```c struct course { int num; // 课程编号 char subject[10]; // 课程名称 int mark; // 学分 int count; // 已选人数 } cour[5]; ``` - **`num`**:表示课程编号,用于唯一标识一门课程。 - **`subject`**:表示课程名称,用字符数组存储。 - **`mark`**:表示该课程的学分数。 - **`count`**:表示已经选择该课程的学生数量。 #### 2. 学生结构体 `struct student` ```c struct student { long num; // 学生编号 char name[10]; // 学生姓名 char order1[10]; // 第一选课志愿 char order2[10]; // 第二选课志愿 } stu[8]; ``` - **`num`**:表示学生的学号,用作唯一标识。 - **`name`**:表示学生姓名。 - **`order1`** 和 **`order2`**:分别表示学生的两个选课志愿,用字符数组存储课程名。 ### 三、主要功能实现 #### 1. 浏览功能 ```c void scan_1(struct course *p); void scan_2(struct student *p); ``` - **`scan_1`**:用于显示所有课程的信息,包括课程编号、名称、学分及已选人数等。 - **`scan_2`**:用于显示所有学生的信息,包括学号、姓名及选课志愿等。 #### 2. 修改功能 ```c void modify(struct student *p); ``` 此函数允许用户输入一个学生编号,然后根据用户的选择(修改学号或姓名),更改相应的信息,并显示更新后的结果。 #### 3. 选课功能 ```c void select(struct student *p, struct course cour[5]); ``` 该函数实现选课逻辑。首先让用户输入学生编号,然后根据学生的志愿顺序,尝试为学生分配相应的课程。 ### 四、其他辅助函数 #### 1. 清屏函数 `system("cls")` 此函数用于清空屏幕,使得输出更加整洁,便于用户查看最新的信息。 #### 2. 键盘读取函数 `scanf` 此函数用于从键盘读取用户的输入,如学生编号、姓名等信息。 ### 五、代码实现特点 1. **使用结构体组织数据**:通过定义结构体,可以方便地管理和操作复杂的对象,例如课程和学生的信息。 2. **函数化编程**:通过将不同的功能模块化为独立的函数,提高了代码的可读性和可维护性。 3. **交互式设计**:用户可以通过简单的命令行界面与程序交互,完成浏览、修改和选课等操作。 这是一个典型的基于C语言的学生选课系统的实现案例。通过上述分析,我们可以更深入地理解该系统的设计思路和技术要点。
#include "conio.h"
#include "string.h"
#include "stdlib.h"
#include "windows.h"
struct course
{ int num;
char subject[10];
int mark;
int count;
}cour[5]={{1,"C++",3,0},
{2,"MATLAB",3,0},
{3,"Math",5,0},
{4,"English",4,0},
{5,"Chinese",3,0}
};
void scan_1(struct course *p)
{ system("cls");
printf("\n\n\n\n\n 课程信息如下: \n");
for(p=cour;p<cour+4;p++)
printf("no--%d subject--%s mark--%d court--%d\n\n",p->num,p->subject,p->mark,p->count);
}
struct student
{ long num;
char name[10];
char order1[10];
char order2[10];
}stu[8]={{20074001,"guo","NULL","NULL"},
{20074002,"yu","NULL","NULL"},
{20074004,"hua","NULL","NULL"},
{20074005,"du","NULL","NULL"},
{20074006,"su","NULL","NULL"},
{20074007,"liu","NULL","NULL"},
{20074008,"xu","NULL","NULL"},
};
void scan_2(struct student *p)
{ system("cls");
printf("\n\n\n\n 学生选课情况如下:\n");
for(p=stu;p<stu+8;p++)
printf("no--%d name--%s order1--%s order2--%s\n\n",p->num,p->name,p->order1,p->order2);
}
void modify(struct student *p)
{ int s;
char b;
long n;
long m;
char name1[20];
system("cls");
printf("请输入学号(20074001-20074008):");
scanf("%d",&n);
for(p=stu;p<stu+8;p++)
{ if(n==p->num)
{ system("cls");
printf("\n\n\n\n 该学生信息如下\n\n\n");
printf("no--%d name--%s order1--%s order2--%s\n\n",p->num,p->name,p->order1,p->order2);
printf("\nA.修改 退出请按A a外任意字母键\n");
scanf("%s",&b);
剩余6页未读,继续阅读
- 粉丝: 2
- 资源: 27
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助