公共选修课选课系统c语言不用指针,大一基础
时间: 2024-06-14 07:01:49 浏览: 137
在使用C语言开发公共选修课选课系统时,虽然C语言本身是基于底层操作,但为了简洁和易于理解,我们可以选择不直接使用指针来实现一些功能。这并不意味着不能完成选课系统的开发,而是可以通过其他数据结构和控制流来代替。
1. 结构体和数组:你可以定义一个课程结构体,包含课程ID、课程名、剩余名额等信息,并用数组或动态内存分配(如`malloc()`)来存储课程列表。
```c
typedef struct Course {
int id;
char name[50];
int remainingSeats;
} Course;
Course courses[MAX_COURSES];
```
2. 动态数组或链表:对于更复杂的数据管理,可以使用动态数组或链表(如`struct Node`)来表示课程列表,这样不需要直接操作内存地址。
3. 函数参数传递:尽量避免使用指针作为参数,可以传递结构体或引用值(`&courses[index]`)来操作数据。
4. 控制流程:利用条件语句(`if`、`for`等)进行逻辑判断和循环处理,而不是通过指针来改变数据结构。
5. 函数和模块化设计:将功能模块化,每个函数专注于单一的操作,比如添加课程、查询课程等,这样代码会更清晰。
相关问题
学生选修课管理 要求 使用c语言 数据结构 创建学生信息结点类型以及学生信息结构体 存储结构 选择单链表存储学生和课程信息 实现功能 以函数方式实现 选课信息链表创建,选课信息输入,选课信息查询, 选课信息修改,选课信息删除,显示已选课程。 字段信息包含,学号,姓名,性别,专业,课程名称,学分,上课时间
好的,下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char major[20]; // 专业
struct course *courses; // 已选课程链表
} Student;
// 课程信息结构体
typedef struct course {
char name[20]; // 课程名称
int credit; // 学分
char time[50]; // 上课时间
struct course *next; // 指向下一个选课信息结点的指针
} Course;
// 选课信息链表结构体
typedef struct course_list {
Course *head; // 指向链表头部结点的指针
int length; // 链表长度
} CourseList;
// 创建学生信息结点
Student *create_student(char *id, char *name, char *gender, char *major) {
Student *stu = (Student *) malloc(sizeof(Student));
strcpy(stu->id, id);
strcpy(stu->name, name);
strcpy(stu->gender, gender);
strcpy(stu->major, major);
stu->courses = NULL;
return stu;
}
// 创建课程信息结点
Course *create_course(char *name, int credit, char *time) {
Course *course = (Course *) malloc(sizeof(Course));
strcpy(course->name, name);
course->credit = credit;
strcpy(course->time, time);
course->next = NULL;
return course;
}
// 创建选课信息链表
CourseList *create_course_list() {
CourseList *list = (CourseList *) malloc(sizeof(CourseList));
list->head = NULL;
list->length = 0;
return list;
}
// 向选课信息链表中添加课程信息结点
void add_course(CourseList *list, char *name, int credit, char *time) {
Course *course = create_course(name, credit, time);
if (list->head == NULL) {
list->head = course;
} else {
Course *p = list->head;
while (p->next != NULL) {
p = p->next;
}
p->next = course;
}
list->length++;
}
// 从选课信息链表中删除课程信息结点
void delete_course(CourseList *list, char *name) {
Course *p = list->head;
Course *pre = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (pre == NULL) {
list->head = p->next;
} else {
pre->next = p->next;
}
free(p);
list->length--;
return;
}
pre = p;
p = p->next;
}
}
// 显示已选课程
void show_courses(CourseList *list) {
Course *p = list->head;
printf("已选课程:\n");
while (p != NULL) {
printf("%s(%d学分,上课时间:%s)\n", p->name, p->credit, p->time);
p = p->next;
}
}
// 创建学生信息结点
Student *create_student_node() {
char id[20], name[20], gender[5], major[20];
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", id);
printf("姓名:");
scanf("%s", name);
printf("性别:");
scanf("%s", gender);
printf("专业:");
scanf("%s", major);
printf("\n");
return create_student(id, name, gender, major);
}
// 向选课信息链表中添加课程信息结点
void add_course_node(Student *stu) {
char name[20], time[50];
int credit;
printf("请输入课程信息:\n");
printf("课程名称:");
scanf("%s", name);
printf("学分:");
scanf("%d", &credit);
printf("上课时间:");
scanf("%s", time);
printf("\n");
add_course(stu->courses, name, credit, time);
}
// 选课信息输入
void input_course_info(Student *stu) {
int choice = 1;
while (choice != 0) {
printf("请选择操作:\n");
printf("1. 添加课程信息\n");
printf("0. 返回\n");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
add_course_node(stu);
break;
}
}
}
// 选课信息查询
void query_course_info(Student *stu) {
char name[20];
printf("请输入要查询的课程名称:");
scanf("%s", name);
printf("\n");
Course *p = stu->courses->head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("%s(%d学分,上课时间:%s)\n", p->name, p->credit, p->time);
return;
}
p = p->next;
}
printf("未找到该课程!\n");
}
// 选课信息修改
void modify_course_info(Student *stu) {
char name[20];
printf("请输入要修改的课程名称:");
scanf("%s", name);
printf("\n");
Course *p = stu->courses->head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入修改后的课程信息:\n");
printf("课程名称:");
scanf("%s", p->name);
printf("学分:");
scanf("%d", &p->credit);
printf("上课时间:");
scanf("%s", p->time);
printf("\n");
return;
}
p = p->next;
}
printf("未找到该课程!\n");
}
// 选课信息删除
void delete_course_info(Student *stu) {
char name[20];
printf("请输入要删除的课程名称:");
scanf("%s", name);
printf("\n");
delete_course(stu->courses, name);
}
int main() {
CourseList *course_list = create_course_list();
Student *stu1 = create_student("001", "张三", "男", "计算机科学与技术");
Student *stu2 = create_student("002", "李四", "女", "软件工程");
add_course(stu1->courses, "计算机组成原理", 4, "周一 1-2节");
add_course(stu1->courses, "操作系统", 3, "周二 3-4节");
add_course(stu2->courses, "数据库原理", 4, "周三 5-6节");
int choice = 1;
while (choice != 0) {
printf("请选择操作:\n");
printf("1. 学生信息录入\n");
printf("2. 选课信息录入\n");
printf("3. 选课信息查询\n");
printf("4. 选课信息修改\n");
printf("5. 选课信息删除\n");
printf("6. 显示已选课程\n");
printf("0. 退出\n");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
printf("暂不支持此功能!\n");
break;
case 2:
input_course_info(stu1);
break;
case 3:
query_course_info(stu1);
break;
case 4:
modify_course_info(stu1);
break;
case 5:
delete_course_info(stu1);
break;
case 6:
show_courses(stu1->courses);
break;
}
}
return 0;
}
```
以上代码仅供参考,具体实现方式可能因需求不同而有所不同。
阅读全文