C语言实现学生信息管理系统(链表)
简介
学生信息管理系统是管理学生的一种系统,可以实现添加、查找、删除和修改学生信息等功能。本文将使用C语言实现学生信息管理系统,并通过链表的方式进行实现。
前提条件
在开始之前,我们需要了解如下内容:
- C语言基础知识
- 链表的基本概念和使用
系统架构
学生信息管理系统主要包含以下几个模块:
- 学生信息结构体
- 添加学生信息
- 查找学生信息
- 删除学生信息
- 修改学生信息
- 显示所有学生信息
学生信息结构体定义如下:
typedef struct Student {
char name[20];
int age;
char sex[10];
char major[20];
int num;
struct Student* next;
}Stu;
添加学生信息
利用链表实现添加学生信息功能,示例代码如下:
Stu* create() {
Stu* head, * p, * pre;
int n;
printf("请输入学生总人数:");
scanf_s("%d", &n);
head = p = (Stu*)malloc(sizeof(Stu));
printf("请输入第 1 个学生的信息:\n");
printf("第1个学生的学号为 1 \n");
scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
p->num = 1;
p->next = NULL;
for (int i = 2; i <= n; i++) {
pre = p;
p = (Stu*)malloc(sizeof(Stu));
printf("请输入第 %d 个学生的信息:\n",i);
printf("第 %d 个学生的学号为 %d \n",i, i);
scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
p->num = i;
p->next = NULL;
pre->next = p;
}
return head;
}
查找学生信息
利用链表实现查找学生信息功能,示例代码如下:
void query(Stu* head, char name[20])
{
Stu* p = head;
while (p != NULL)
{
if (strcmp(p->name, name) == 0)
{
printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
return;
}
p = p->next;
}
printf("未找到该学生信息!\n");
}
删除学生信息
利用链表实现删除学生信息功能,示例代码如下:
Stu* delete(Stu* head, char name[20]) {
Stu* p, * pre;
p = head->next;
pre = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
pre->next = p->next;
free(p);
printf("删除成功!\n");
return head;
}
pre = p;
p = p->next;
}
printf("对不起,未找到该学生信息!\n");
return head;
}
修改学生信息
利用链表实现修改学生信息功能,示例代码如下:
Stu* change(Stu* head, char name[20]) {
Stu* p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入新的学生信息:\n");
printf("请输入新的学生姓名:");
scanf_s("%s", &p->name, 20);
printf("请输入新的学生年龄:");
scanf_s("%d", &p->age);
printf("请输入新的学生性别:");
scanf_s("%s", &p->sex, 10);
printf("请输入新的学生专业:");
scanf_s("%s", &p->major, 20);
printf("修改成功\n");
return head;
}
p = p->next;
}
printf("对不起,未找到该学生信息!\n");
return head;
}
显示所有学生信息
利用链表实现显示所有学生信息功能,示例代码如下:
void show(Stu* head) {
printf("序号\t姓名\t年龄\t性别\t专业\n");
Stu* p = head;
while (p != NULL) {
printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
p = p->next;
}
}
完整示例代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student {
char name[20];
int age;
char sex[10];
char major[20];
int num;
struct Student* next;
}Stu;
Stu* create() {
Stu* head, * p, * pre;
int n;
printf("请输入学生总人数:");
scanf_s("%d", &n);
head = p = (Stu*)malloc(sizeof(Stu));
printf("请输入第 1 个学生的信息:\n");
printf("第1个学生的学号为 1 \n");
scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
p->num = 1;
p->next = NULL;
for (int i = 2; i <= n; i++) {
pre = p;
p = (Stu*)malloc(sizeof(Stu));
printf("请输入第 %d 个学生的信息:\n",i);
printf("第 %d 个学生的学号为 %d \n",i, i);
scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
p->num = i;
p->next = NULL;
pre->next = p;
}
return head;
}
void query(Stu* head, char name[20])
{
Stu* p = head;
while (p != NULL)
{
if (strcmp(p->name, name) == 0)
{
printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
return;
}
p = p->next;
}
printf("未找到该学生信息!\n");
}
Stu* delete(Stu* head, char name[20]) {
Stu* p, * pre;
p = head->next;
pre = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
pre->next = p->next;
free(p);
printf("删除成功!\n");
return head;
}
pre = p;
p = p->next;
}
printf("对不起,未找到该学生信息!\n");
return head;
}
Stu* change(Stu* head, char name[20]) {
Stu* p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入新的学生信息:\n");
printf("请输入新的学生姓名:");
scanf_s("%s", &p->name, 20);
printf("请输入新的学生年龄:");
scanf_s("%d", &p->age);
printf("请输入新的学生性别:");
scanf_s("%s", &p->sex, 10);
printf("请输入新的学生专业:");
scanf_s("%s", &p->major, 20);
printf("修改成功\n");
return head;
}
p = p->next;
}
printf("对不起,未找到该学生信息!\n");
return head;
}
void show(Stu* head) {
printf("序号\t姓名\t年龄\t性别\t专业\n");
Stu* p = head;
while (p != NULL) {
printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
p = p->next;
}
}
void menu() {
printf("\n\n\n");
printf("\t\t\t********************\n");
printf("\t\t\t 学生信息管理系统 \n");
printf("\t\t\t********************\n");
printf("\t\t\t** 1.添加学生信息 **\n");
printf("\t\t\t** 2.查找学生信息 **\n");
printf("\t\t\t** 3.删除学生信息 **\n");
printf("\t\t\t** 4.修改学生信息 **\n");
printf("\t\t\t** 5.显示所有学生信息 **\n");
printf("\t\t\t** 0.退出管理系统 **\n");
printf("\t\t\t************************************************************\n");
}
int main() {
int num;
char name[20];
Stu* head=create();
start:
menu();
printf("请输入你选择的模块编号:");
scanf_s("%d", &num);
switch (num) {
case 1: {
printf("添加新学生\n");
printf("请输入学生姓名:");
Stu* p = (Stu*)malloc(sizeof(Stu));
p->next = NULL;
scanf_s("%s", &p->name, 20);
printf("请输入学生年龄:");
scanf_s("%d", &p->age);
printf("请输入学生性别:");
scanf_s("%s", &p->sex, 10);
printf("请输入学生专业:");
scanf_s("%s", &p->major, 20);
Stu* q = head;
while (q->next != NULL) {
q = q->next;
}
p->num = q->num + 1;
q->next = p;
printf("添加成功!\n");
goto start;
}
case 2: {
printf("查找学生\n");
printf("请输入要查找的学生姓名:");
scanf_s("%s", &name, 20);
query(head, name);
goto start;
}
case 3: {
printf("删除学生\n");
printf("请输入要删除的学生姓名:");
scanf_s("%s", &name, 20);
Stu* p = delete(head, name);
goto start;
}
case 4: {
printf("修改学生信息\n");
printf("请输入要修改的学生姓名:");
scanf_s("%s", &name, 20);
Stu* p = change(head, name);
goto start;
}
case 5: {
printf("显示所有学生信息\n");
show(head);
goto start;
}
case 0: {
printf("退出管理系统\n"); return 0;
}
default: goto start;
}
return 0;
}
总结
通过本文的介绍,我们了解了如何使用C语言实现学生信息管理系统,并掌握了链表的应用。学生信息管理系统是一种比较基础的实践项目,可以帮助我们更好地学习和掌握C语言编程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现学生信息管理系统(链表) - Python技术站