怎样用C语言实现以上功能
时间: 2024-01-21 12:27:20 浏览: 53
使用C语言实现
以下是一个简单的C语言实现,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生基本信息结构体
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int age; // 年龄
char phone[20]; // 电话
struct student *next; // 指向下一个学生的指针
} Student;
// 定义全局变量,指向链表头节点
Student *head = NULL;
// 函数声明
void menu();
void read_file();
void save_file();
void add_student();
void delete_student();
void modify_student();
void search_student();
void print_student(Student *p);
int main() {
read_file(); // 从文件中读取学生信息
while (1) {
menu(); // 显示菜单
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(); // 添加学生信息
break;
case 2:
delete_student(); // 删除学生信息
break;
case 3:
modify_student(); // 修改学生信息
break;
case 4:
search_student(); // 查询学生信息
break;
case 5:
save_file(); // 保存学生信息到文件
break;
case 6:
printf("谢谢使用!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
// 显示菜单
void menu() {
printf("学生基本信息管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 保存学生信息到文件\n");
printf("6. 退出程序\n");
printf("请选择功能:");
}
// 从文件中读取学生信息
void read_file() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("文件不存在!\n");
return;
}
while (!feof(fp)) {
Student *p = (Student*)malloc(sizeof(Student));
fread(p, sizeof(Student), 1, fp);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
Student *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
}
fclose(fp);
}
// 保存学生信息到文件
void save_file() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("文件无法打开!\n");
return;
}
Student *p = head;
while (p != NULL) {
fwrite(p, sizeof(Student), 1, fp);
p = p->next;
}
fclose(fp);
printf("文件保存成功!\n");
}
// 添加学生信息
void add_student() {
Student *p = (Student*)malloc(sizeof(Student));
p->next = NULL;
printf("请输入学号:");
scanf("%s", p->id);
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入性别:");
scanf("%s", p->gender);
printf("请输入年龄:");
scanf("%d", &p->age);
printf("请输入电话:");
scanf("%s", p->phone);
if (head == NULL) {
head = p;
} else {
Student *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("添加成功!\n");
}
// 删除学生信息
void delete_student() {
char id[20];
printf("请输入要删除的学生学号:");
scanf("%s", id);
if (head == NULL) {
printf("学号不存在!\n");
return;
}
if (strcmp(head->id, id) == 0) {
Student *p = head;
head = head->next;
free(p);
printf("删除成功!\n");
return;
}
Student *p = head;
while (p->next != NULL) {
if (strcmp(p->next->id, id) == 0) {
Student *q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("学号不存在!\n");
}
// 修改学生信息
void modify_student() {
char id[20];
printf("请输入要修改的学生学号:");
scanf("%s", id);
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入性别:");
scanf("%s", p->gender);
printf("请输入年龄:");
scanf("%d", &p->age);
printf("请输入电话:");
scanf("%s", p->phone);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("学号不存在!\n");
}
// 查询学生信息
void search_student() {
int choice;
printf("请选择查询方式(1. 学号 2. 姓名):");
scanf("%d", &choice);
if (choice == 1) {
char id[20];
printf("请输入学生学号:");
scanf("%s", id);
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
print_student(p);
return;
}
p = p->next;
}
printf("学号不存在!\n");
} else if (choice == 2) {
char name[20];
printf("请输入学生姓名:");
scanf("%s", name);
Student *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
print_student(p);
}
p = p->next;
}
} else {
printf("输入有误!\n");
}
}
// 打印学生信息
void print_student(Student *p) {
printf("学号:%s\n", p->id);
printf("姓名:%s\n", p->name);
printf("性别:%s\n", p->gender);
printf("年龄:%d\n", p->age);
printf("电话:%s\n", p->phone);
}
```
这个程序使用链表来存储学生信息,可以进行添加、删除、修改、查询以及保存操作。其中,读取和保存学生信息到文件的操作使用了二进制文件读写。请根据具体需求进行修改和完善。
阅读全文