利用C语言生成学生会组织人员管理系统的代码,并有以下功能:1添加学生信息到部门 2根据学号查找学生 3可以按部门输出学生会全体成员 4退出程序,且符合基本要求:以数信学院为例(根据数信学院实际情况自已设计树);存储结构采用孩子兄弟表示法;
时间: 2024-03-07 07:49:46 浏览: 110
以下是一个简单的 C 语言学生会组织人员管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个学生结构体
typedef struct student {
char name[20]; // 姓名
int id; // 学号
char dept[20]; // 部门
struct student *next; // 下一个学生
struct student *child; // 第一个子节点
} Student;
// 定义一个全局变量,存储学生会组织架构
Student *root = NULL;
// 添加一个新的学生到指定的部门中
void addStudent(char *dept, char *name, int id) {
// 创建一个新的学生节点
Student *newStudent = (Student*)malloc(sizeof(Student));
strcpy(newStudent->name, name);
newStudent->id = id;
strcpy(newStudent->dept, dept);
newStudent->next = NULL;
newStudent->child = NULL;
// 如果学生会组织架构为空,则新节点为根节点
if (root == NULL) {
root = newStudent;
return;
}
// 查找指定部门的最后一个学生节点
Student *cur = root;
while (cur != NULL) {
if (strcmp(cur->dept, dept) == 0) {
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = newStudent;
return;
}
cur = cur->child;
}
// 如果指定部门不存在,则创建新的部门节点
Student *newDept = (Student*)malloc(sizeof(Student));
strcpy(newDept->name, dept);
newDept->id = -1;
newDept->next = NULL;
newDept->child = newStudent;
// 将新部门节点插入到学生会组织架构中
cur = root;
while (cur->child != NULL) {
cur = cur->child;
}
cur->child = newDept;
}
// 根据学号查找学生信息
Student *findStudent(int id) {
Student *cur = root;
while (cur != NULL) {
Student *s = cur->child;
while (s != NULL) {
if (s->id == id) {
return s;
}
s = s->next;
}
cur = cur->child;
}
return NULL;
}
// 输出指定部门的所有学生信息
void printDept(char *dept) {
Student *cur = root;
while (cur != NULL) {
if (strcmp(cur->dept, dept) == 0) {
printf("%s部门成员:\n", dept);
Student *s = cur->child;
while (s != NULL) {
printf("姓名:%s\t学号:%d\n", s->name, s->id);
s = s->next;
}
return;
}
cur = cur->child;
}
printf("未找到部门:%s\n", dept);
}
// 释放所有学生节点的内存
void freeStudents(Student *cur) {
if (cur == NULL) {
return;
}
freeStudents(cur->next);
freeStudents(cur->child);
free(cur);
}
int main() {
while (1) {
printf("\n请选择操作:\n");
printf("1. 添加学生信息到部门\n");
printf("2. 根据学号查找学生\n");
printf("3. 按部门输出学生会全体成员\n");
printf("4. 退出程序\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: {
char dept[20], name[20];
int id;
printf("请输入部门名称:");
scanf("%s", dept);
printf("请输入学生姓名:");
scanf("%s", name);
printf("请输入学生学号:");
scanf("%d", &id);
addStudent(dept, name, id);
printf("添加成功!\n");
break;
}
case 2: {
int id;
printf("请输入学生学号:");
scanf("%d", &id);
Student *s = findStudent(id);
if (s != NULL) {
printf("姓名:%s\t学号:%d\t部门:%s\n", s->name, s->id, s->dept);
} else {
printf("未找到学号为 %d 的学生!\n", id);
}
break;
}
case 3: {
char dept[20];
printf("请输入部门名称:");
scanf("%s", dept);
printDept(dept);
break;
}
case 4: {
freeStudents(root);
printf("程序已退出!\n");
return 0;
}
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
这个程序使用孩子兄弟表示法存储学生会组织架构,实现了以下功能:
1. 添加学生信息到指定的部门
2. 根据学号查找学生信息
3. 按部门输出学生会全体成员
4. 退出程序
在程序运行时,用户可以选择要执行的操作。如果选择添加学生信息,则需要输入部门名称、学生姓名和学号。如果选择根据学号查找学生,则需要输入学号。如果选择按部门输出学生会全体成员,则需要输入部门名称。如果选择退出程序,则会释放所有学生节点的内存并退出程序。
阅读全文