c语言用链表、结构体、文件写一个学员管理系统,要求可以添加学员信息(学号、姓名、身份证号(用生日进行验证)、手机号、家庭住址),可以查看所有学员信息、完成查找指定姓名、身份证号、学号的信息(类似于模糊查询)、可以修改学员信息,可以删除学员信息、可以保存学员信息到指定文件中
时间: 2023-12-22 12:03:41 浏览: 98
好的,以下是一个简单的学员管理系统的实现,使用了链表、结构体和文件的操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学员信息结构体
typedef struct student {
char id[10]; // 学号
char name[20]; // 姓名
char idnum[20]; // 身份证号
char phone[12]; // 手机号
char address[50]; // 家庭住址
struct student *next; // 指向下一节点的指针
} Student;
// 打印学员信息
void printStudent(Student *stu) {
printf("学号:%s\n姓名:%s\n身份证号:%s\n手机号:%s\n家庭住址:%s\n", stu->id, stu->name, stu->idnum, stu->phone, stu->address);
}
// 添加学员信息
void addStudent(Student **phead) {
Student *tail = NULL, *newStu = NULL;
// 创建新节点
newStu = (Student *)malloc(sizeof(Student));
printf("请输入学号:");
scanf("%s", newStu->id);
printf("请输入姓名:");
scanf("%s", newStu->name);
printf("请输入身份证号:");
scanf("%s", newStu->idnum);
printf("请输入手机号:");
scanf("%s", newStu->phone);
printf("请输入家庭住址:");
scanf("%s", newStu->address);
newStu->next = NULL;
// 添加新节点
if (*phead == NULL) {
*phead = newStu;
return;
}
tail = *phead;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = newStu;
}
// 查看所有学员信息
void viewAllStudents(Student *head) {
Student *p = head;
while (p != NULL) {
printStudent(p);
p = p->next;
}
}
// 查找指定姓名、身份证号、学号的学员信息
void findStudent(Student *head) {
char keyword[20];
int flag = 0;
printf("请输入要查找的关键字:");
scanf("%s", keyword);
Student *p = head;
while (p != NULL) {
if (strstr(p->name, keyword) != NULL || strstr(p->idnum, keyword) != NULL || strstr(p->id, keyword) != NULL) {
printStudent(p);
flag = 1;
}
p = p->next;
}
if (!flag) {
printf("未找到匹配信息!\n");
}
}
// 修改学员信息
void modifyStudent(Student *head) {
char id[10];
int flag = 0;
printf("请输入要修改信息的学员学号:");
scanf("%s", id);
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printStudent(p);
printf("请输入修改后的信息:\n");
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入身份证号:");
scanf("%s", p->idnum);
printf("请输入手机号:");
scanf("%s", p->phone);
printf("请输入家庭住址:");
scanf("%s", p->address);
flag = 1;
break;
}
p = p->next;
}
if (!flag) {
printf("未找到匹配信息!\n");
}
}
// 删除学员信息
void deleteStudent(Student **phead) {
char id[10];
int flag = 0;
printf("请输入要删除信息的学员学号:");
scanf("%s", id);
Student *p = *phead, *pre = NULL;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
if (pre == NULL) {
*phead = p->next;
} else {
pre->next = p->next;
}
free(p);
flag = 1;
break;
}
pre = p;
p = p->next;
}
if (!flag) {
printf("未找到匹配信息!\n");
}
}
// 保存学员信息到指定文件
void saveStudentToFile(Student *head) {
char filename[50];
printf("请输入要保存到的文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
Student *p = head;
while (p != NULL) {
fprintf(fp, "%s %s %s %s %s\n", p->id, p->name, p->idnum, p->phone, p->address);
p = p->next;
}
fclose(fp);
printf("保存成功!\n");
}
int main() {
int choice = 0;
Student *head = NULL;
while (1) {
printf("\n***** 学员管理系统 *****\n");
printf("1. 添加学员信息\n");
printf("2. 查看所有学员信息\n");
printf("3. 查找指定姓名、身份证号、学号的学员信息\n");
printf("4. 修改学员信息\n");
printf("5. 删除学员信息\n");
printf("6. 保存学员信息到指定文件\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(&head);
break;
case 2:
viewAllStudents(head);
break;
case 3:
findStudent(head);
break;
case 4:
modifyStudent(head);
break;
case 5:
deleteStudent(&head);
break;
case 6:
saveStudentToFile(head);
break;
case 0:
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
```
注意,这只是一个简单的实现,还有很多需要完善的地方,比如输入信息的验证、文件读取等。
阅读全文
相关推荐















