用C语言编写一个可查询、修改、添加信息的程序,要能够存储:学号、姓名、专业、家庭住址、联系电话等信息,要能使用文本文件对学生信息进行存储、查询、添加、删除等操作
时间: 2023-09-25 09:11:21 浏览: 50
好的,以下是一个可以存储、查询、修改、添加、删除学生信息的C语言程序,同时使用文本文件进行存储操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct student {
char id[10];
char name[20];
char major[20];
char address[50];
char phone[20];
struct student *next;
} Student;
// 读取学生信息文件
Student *read_student_file() {
FILE *fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("文件不存在!\n");
exit(1);
}
Student *head = (Student *)malloc(sizeof(Student));
head->next = NULL;
while (!feof(fp)) {
Student *new_student = (Student *)malloc(sizeof(Student));
fscanf(fp, "%s %s %s %s %s", new_student->id, new_student->name, new_student->major, new_student->address, new_student->phone);
new_student->next = NULL;
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
}
fclose(fp);
return head;
}
// 添加学生信息
void add_student(Student *head) {
Student *new_student = (Student *)malloc(sizeof(Student));
printf("请输入学生学号:");
scanf("%s", new_student->id);
printf("请输入学生姓名:");
scanf("%s", new_student->name);
printf("请输入学生专业:");
scanf("%s", new_student->major);
printf("请输入学生家庭住址:");
scanf("%s", new_student->address);
printf("请输入学生联系电话:");
scanf("%s", new_student->phone);
new_student->next = NULL;
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
// 将学生信息写入文件
FILE *fp = fopen("students.txt", "a");
fprintf(fp, "%s %s %s %s %s\n", new_student->id, new_student->name, new_student->major, new_student->address, new_student->phone);
fclose(fp);
printf("添加成功!\n");
}
// 删除学生信息
void delete_student(Student *head) {
char id[10];
printf("请输入要删除的学生学号:");
scanf("%s", id);
Student *p = head->next;
Student *pre = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
pre->next = p->next;
free(p);
// 重新写入文件
FILE *fp = fopen("students.txt", "w");
p = head->next;
while (p != NULL) {
fprintf(fp, "%s %s %s %s %s\n", p->id, p->name, p->major, p->address, p->phone);
p = p->next;
}
fclose(fp);
printf("删除成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("未找到该学生!\n");
}
// 查找学生信息
void find_student(Student *head) {
char id[10];
printf("请输入要查找的学生学号:");
scanf("%s", id);
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("学号:%s\t姓名:%s\t专业:%s\t家庭住址:%s\t联系电话:%s\n", p->id, p->name, p->major, p->address, p->phone);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 修改学生信息
void modify_student(Student *head) {
char id[10];
printf("请输入要修改的学生学号:");
scanf("%s", id);
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入新的学生姓名:");
scanf("%s", p->name);
printf("请输入新的学生专业:");
scanf("%s", p->major);
printf("请输入新的学生家庭住址:");
scanf("%s", p->address);
printf("请输入新的学生联系电话:");
scanf("%s", p->phone);
// 重新写入文件
FILE *fp = fopen("students.txt", "w");
p = head->next;
while (p != NULL) {
fprintf(fp, "%s %s %s %s %s\n", p->id, p->name, p->major, p->address, p->phone);
p = p->next;
}
fclose(fp);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 显示所有学生信息
void show_all_student(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("学号:%s\t姓名:%s\t专业:%s\t家庭住址:%s\t联系电话:%s\n", p->id, p->name, p->major, p->address, p->phone);
p = p->next;
}
}
int main() {
Student *head = read_student_file();
int choice;
while (1) {
printf("\n***********学生信息管理系统***********\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 查找学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 显示所有学生信息\n");
printf("6. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(head);
break;
case 2:
delete_student(head);
break;
case 3:
find_student(head);
break;
case 4:
modify_student(head);
break;
case 5:
show_all_student(head);
break;
case 6:
printf("谢谢使用!\n");
exit(0);
default:
printf("请输入正确的操作编号!\n");
}
}
return 0;
}
```
该程序使用了文件操作函数,通过读取和写入文本文件来实现学生信息的存储和修改。注意,在文件操作时需要注意文件是否存在和文件打开方式等问题。
另外,为了简化代码,该程序没有对输入进行严格的检查和处理,请根据需要进行修改和完善。