C语言实现学籍管理系统攻略
一、需求分析
学籍管理系统需要具备以下功能:
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 查询学生信息
5. 查看全部学生信息
二、设计思路
学籍管理系统的数据结构可以使用链表来实现,具体分为两个结构体:教务处(包含链表头)和学生。其中教务处是包含多个学生的一个链表,学生则是链表中的一个节点。
具体实现思路如下:
1. 创建学生信息结构体。
2. 创建教务处信息结构体,包含链表头和链表操作函数。
3. 创建教务处进行初始化、添加、删除、修改、查询、查看全部等操作的函数。
4. 创建菜单函数,为用户提供操作选项。
5. 在主函数中,循环等待用户输入进行不同操作。
三、代码实现
1. 创建学生信息结构体
struct student {
char name[20]; // 学生姓名
int id; // 学生学号
float grade; // 学生成绩
struct student *next; // 指向下一个学生结构体的指针
};
2. 创建教务处信息结构体
struct estate {
struct student *head; // 头结点
int num; // 学生总数
};
3. 创建教务处进行初始化、添加、删除、修改、查询、查看全部等操作的函数
// 初始化
void init(struct estate *p) {
p->head = NULL;
p->num = 0;
}
// 添加
void add(struct estate *p) {
struct student *stu = (struct student*)malloc(sizeof(struct student));
printf("请输入学生姓名:");
scanf("%s", stu->name);
printf("请输入学生学号:");
scanf("%d", &stu->id);
printf("请输入学生成绩:");
scanf("%f", &stu->grade);
stu->next = p->head; // 新添加学生结构体的下一个节点指向原来的头结点
p->head = stu; // 将新添加结构体设置为头节点,完成添加
p->num++; // 学生数加1
}
// 删除
void del(struct estate *p) {
int id;
printf("请输入需要删除的学生学号:");
scanf("%d", &id);
struct student *pre = p->head;
while(pre != NULL) {
if(pre->id == id) break; // 当前节点是要删除的节点
pre = pre->next;
}
if(pre == NULL) {
printf("没有找到该学生!\n");
return;
}
if(pre == p->head) p->head = pre->next; // 要删除的节点是头结点
else {
struct student *temp = p->head;
while(temp->next != pre) temp = temp->next; // 找到当前节点的前一个节点
temp->next = pre->next; // 将前一个节点的指针指向要删除节点的下一个节点
}
free(pre); // 释放删除节点的空间
p->num--; // 学生数减1
printf("删除成功!\n");
}
// 修改
void modify(struct estate *p) {
int id;
printf("请输入需要修改的学生学号:");
scanf("%d", &id);
struct student *temp = p->head;
while(temp != NULL) {
if(temp->id == id) break; // 找到需要修改的学生
temp = temp->next;
}
if(temp == NULL) printf("没有找到该学生!\n");
else {
printf("请输入修改后的学生姓名:");
scanf("%s", temp->name);
printf("请输入修改后的学生成绩:");
scanf("%f", &temp->grade);
printf("修改成功!\n");
}
}
// 查询
void search(struct estate *p) {
int id;
printf("请输入需要查询的学生学号:");
scanf("%d", &id);
struct student *temp = p->head;
while(temp != NULL) {
if(temp->id == id) break; // 找到要查询的学生
temp = temp->next;
}
if(temp == NULL) printf("没有找到该学生!\n");
else {
printf("学生信息如下:\n");
printf("学生姓名:%s\n", temp->name);
printf("学生学号:%d\n", temp->id);
printf("学生成绩:%.2f\n", temp->grade);
}
}
// 查看全部
void view(struct estate *p) {
struct student *temp = p->head;
printf("学生信息如下:\n");
printf("姓名\t学号\t成绩\n");
while(temp != NULL) {
printf("%s\t%d\t%.2f\n", temp->name, temp->id, temp->grade);
temp = temp->next;
}
}
// 主菜单
void menu() {
printf("==============================\n");
printf(" 学籍管理系统\n");
printf("==============================\n");
printf(" 1. 添加学生信息\n");
printf(" 2. 修改学生信息\n");
printf(" 3. 删除学生信息\n");
printf(" 4. 查询学生信息\n");
printf(" 5. 查看全部学生信息\n");
printf(" 0. 退出\n");
printf("==============================\n");
}
// 程序入口
void main() {
struct estate p;
init(&p); // 对教务处进行初始化
int choice;
do {
menu(); // 显示菜单
printf("请输入操作选项:");
scanf("%d", &choice);
switch(choice) {
case 1: add(&p); break;
case 2: modify(&p); break;
case 3: del(&p); break;
case 4: search(&p); break;
case 5: view(&p); break;
case 0: exit(0); break;
default: printf("输入有误,请重新输入!\n");
}
}while(1); // 循环等待用户操作
}
4. 示例说明
4.1 添加学生信息
添加一个学生,其中学生姓名为“张三”,学号为“001”,成绩为“90.5”:
示例代码如下:
add(&p);
执行结果如下:
请输入学生姓名:张三
请输入学生学号:001
请输入学生成绩:90.5
4.2 查询学生信息
查询学号为“001”的学生信息:
示例代码如下:
search(&p);
执行结果如下:
请输入需要查询的学生学号:001
学生信息如下:
学生姓名:张三
学生学号:1
学生成绩:90.50
四、总结
通过以上代码实现,我们实现了一个简单的学籍管理系统。在实现过程中,我们学习了使用链表数据结构来存储学生信息,并用结构体来定义链表节点。同时我们也学习了C语言中函数的定义和调用,以及循环、条件等控制语句的使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现学籍管理系统 - Python技术站