编写一个可查询、修改、添加信息的程序,要能够存储:学号、姓名、专业、家庭住址、联系电话等信息。 功能要求: (1)程序提示界面 提示界面应具有:学生信息添加、学生信息删除、学生信息修改、学生单个信息修改、学生全部信息修改和学生信息查询选项(中文显示),可安照相应的提示进行相应的操作,提示可用1,2,3,4或 A , B , C , D 等,选择方式不限。 (2)新增信息 采用文件,放在文件的后面;(方式不限,可自行设计,不局限于以上方法) (3)删除信息 删除信息后,要保证数据的连续性;采用数组,则要把数组中的删除位置以后的信息向前移动一位;方式可任意选择,但不要出现空数据。 (4)查询 要能够实现数据全部显示,相关信息按行输出,能够显示信息总数;能够通过学号、姓名、专业等关键词查找,找到相关信息后,显示出该同学的完整信息,未找到此人则输出:查无此人; 请用C语言
时间: 2023-07-16 11:11:39 浏览: 84
好的,这是一个简单的实现,基于文件存储,使用结构体存储学生信息:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大存储学生数
// 学生信息结构体
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char major[20]; // 专业
char address[50]; // 家庭住址
char phone[20]; // 联系电话
} Student;
int count = 0; // 学生数量
Student students[MAX_STUDENTS]; // 学生信息数组
// 显示菜单
void show_menu() {
printf("欢迎使用学生信息管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("0. 退出程序\n");
}
// 保存学生信息到文件
void save_to_file() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fwrite(&count, sizeof(int), 1, fp); // 先写入学生数量
for (int i = 0; i < count; i++) {
fwrite(&students[i], sizeof(Student), 1, fp); // 写入每个学生信息
}
fclose(fp);
}
// 从文件中读取学生信息
void load_from_file() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fread(&count, sizeof(int), 1, fp); // 先读取学生数量
for (int i = 0; i < count; i++) {
fread(&students[i], sizeof(Student), 1, fp); // 读取每个学生信息
}
fclose(fp);
}
// 添加学生信息
void add_student() {
Student s;
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", s.id);
printf("姓名:");
scanf("%s", s.name);
printf("专业:");
scanf("%s", s.major);
printf("家庭住址:");
scanf("%s", s.address);
printf("联系电话:");
scanf("%s", s.phone);
students[count++] = s; // 加入学生数组
save_to_file(); // 保存到文件
printf("学生信息已添加!\n");
}
// 删除学生信息
void delete_student() {
char id[10];
printf("请输入要删除的学生学号:");
scanf("%s", id);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) { // 找到
found = 1;
for (int j = i + 1; j < count; j++) { // 后面的向前移动
students[j - 1] = students[j];
}
count--; // 学生数量减一
save_to_file(); // 保存到文件
printf("学生信息已删除!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 修改学生信息
void modify_student() {
char id[10];
printf("请输入要修改的学生学号:");
scanf("%s", id);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) { // 找到
found = 1;
printf("请输入新的学生信息:\n");
printf("姓名:");
scanf("%s", students[i].name);
printf("专业:");
scanf("%s", students[i].major);
printf("家庭住址:");
scanf("%s", students[i].address);
printf("联系电话:");
scanf("%s", students[i].phone);
save_to_file(); // 保存到文件
printf("学生信息已修改!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 查询学生信息
void query_student() {
int option;
printf("请选择查询方式:\n");
printf("1. 根据学号查询\n");
printf("2. 根据姓名查询\n");
printf("3. 根据专业查询\n");
scanf("%d", &option);
char keyword[20];
printf("请输入查询关键词:");
scanf("%s", keyword);
int found = 0;
for (int i = 0; i < count; i++) {
Student s = students[i];
if (option == 1 && strcmp(s.id, keyword) == 0
|| option == 2 && strcmp(s.name, keyword) == 0
|| option == 3 && strcmp(s.major, keyword) == 0) { // 找到
printf("学号:%s\n", s.id);
printf("姓名:%s\n", s.name);
printf("专业:%s\n", s.major);
printf("家庭住址:%s\n", s.address);
printf("联系电话:%s\n", s.phone);
found = 1;
}
}
if (!found) {
printf("查无此人!\n");
}
}
int main() {
load_from_file(); // 从文件中读取学生信息
int option;
do {
show_menu();
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
query_student();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
} while (option != 0);
return 0;
}
```
注意,这个程序只是简单的实现,还有很多可以优化和改进的地方。
阅读全文