用C语言编写一个三百行的代码
时间: 2023-09-09 16:10:59 浏览: 342
好的,以下是一个简单的学生信息管理系统的C语言代码,共有300多行,包含注释。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
int age; // 年龄
char gender; // 性别
int score; // 分数
} Student;
// 定义链表节点结构体
typedef struct Node {
Student data;
struct Node *next;
} Node;
// 创建一个空链表
Node *create_list() {
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 在链表尾部插入一个节点
void insert_node(Node *head, Student data) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
Node *p = head;
while (p->next) {
p = p->next;
}
p->next = new_node;
}
// 从链表中删除指定学号的节点
void delete_node(Node *head, char *id) {
Node *p = head->next;
Node *prev = head;
while (p) {
if (strcmp(p->data.id, id) == 0) {
prev->next = p->next;
free(p);
printf("删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("没有找到该学生!\n");
}
// 修改指定学号的学生信息
void modify_data(Node *head, char *id) {
Node *p = head->next;
while (p) {
if (strcmp(p->data.id, id) == 0) {
printf("请输入修改后的姓名:");
scanf("%s", p->data.name);
printf("请输入修改后的年龄:");
scanf("%d", &p->data.age);
printf("请输入修改后的性别:");
scanf("%s", &p->data.gender);
printf("请输入修改后的分数:");
scanf("%d", &p->data.score);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 显示所有学生信息
void show_all(Node *head) {
Node *p = head->next;
while (p) {
printf("%s %s %d %c %d\n", p->data.id, p->data.name, p->data.age, p->data.gender, p->data.score);
p = p->next;
}
}
// 显示指定学号的学生信息
void show_data(Node *head, char *id) {
Node *p = head->next;
while (p) {
if (strcmp(p->data.id, id) == 0) {
printf("%s %s %d %c %d\n", p->data.id, p->data.name, p->data.age, p->data.gender, p->data.score);
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 保存学生信息到文件
void save_data(Node *head) {
FILE *fp = fopen("students.dat", "wb");
Node *p = head->next;
while (p) {
fwrite(&p->data, sizeof(Student), 1, fp);
p = p->next;
}
fclose(fp);
printf("保存成功!\n");
}
// 从文件中加载学生信息
Node *load_data() {
Node *head = create_list();
FILE *fp = fopen("students.dat", "rb");
if (!fp) {
return head;
}
Student data;
while (fread(&data, sizeof(Student), 1, fp)) {
insert_node(head, data);
}
fclose(fp);
printf("加载成功!\n");
return head;
}
// 主函数
int main() {
Node *head = load_data();
int choice;
char id[10];
Student data;
while (1) {
printf("\n学生信息管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 显示所有学生信息\n");
printf("5. 显示指定学号的学生信息\n");
printf("6. 保存学生信息到文件\n");
printf("7. 退出\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学生学号:");
scanf("%s", data.id);
printf("请输入学生姓名:");
scanf("%s", data.name);
printf("请输入学生年龄:");
scanf("%d", &data.age);
printf("请输入学生性别:");
scanf("%s", &data.gender);
printf("请输入学生分数:");
scanf("%d", &data.score);
insert_node(head, data);
printf("添加成功!\n");
break;
case 2:
printf("请输入要删除的学生学号:");
scanf("%s", id);
delete_node(head, id);
break;
case 3:
printf("请输入要修改的学生学号:");
scanf("%s", id);
modify_data(head, id);
break;
case 4:
show_all(head);
break;
case 5:
printf("请输入要显示的学生学号:");
scanf("%s", id);
show_data(head, id);
break;
case 6:
save_data(head);
break;
case 7:
save_data(head);
exit(0);
default:
printf("请输入正确的操作编号!\n");
break;
}
}
return 0;
}
```
这个学生信息管理系统包含了链表的创建、插入、删除、遍历等操作,以及文件的读写操作。它的主要功能包括添加学生信息、删除学生信息、修改学生信息、显示所有学生信息、显示指定学号的学生信息、保存学生信息到文件和退出程序。在代码中有详细的注释,方便您理解每个函数的功能和实现。
阅读全文