编写一个可查询、修改、添加信息的程序,要能够存储:学号、姓名、专业、家庭住址、联系电话等信息。 功能要求: (1)程序提示界面 提示界面应具有:学生信息添加、学生信息删除、学生信息修改、学生单个信息修改、学生全部信息修改和学生信息查询选项(中文显示),可安照相应的提示进行相应的操作,提示可用1,2,3,4或 A , B , C , D 等,选择方式不限。 (2)新增信息 采用文件,放在文件的后面;(方式不限,可自行设计,不局限于以上方法) (3)删除信息 删除信息后,要保证数据的连续性;采用数组,则要把数组中的删除位置以后的信息向前移动一位;方式可任意选择,但不要出现空数据。 (4)查询 要能够实现数据全部显示,相关信息按行输出,能够显示信息总数;能够通过学号、姓名、专业等关键词查找,找到相关信息后,显示出该同学的完整信息,未找到此人则输出:查无此人; 请用C语言
时间: 2023-06-23 21:10:27 浏览: 77
学生信息管理系统(可实现查询,删除,修改,增加等功能)
以下是一个简单的实现,使用结构体数组来存储学生信息,将数据存储在文件中。代码中注释说明了函数的作用及流程。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多存储100个学生信息
#define FILENAME "students.txt" // 文件名
// 学生信息结构体
struct student {
char id[20]; // 学号
char name[20]; // 姓名
char major[20]; // 专业
char address[40]; // 家庭住址
char phone[20]; // 联系电话
};
// 学生信息数组
struct student students[MAX_STUDENTS];
// 当前学生数量
int count = 0;
// 添加学生信息
void add_student() {
if (count == MAX_STUDENTS) { // 数组已满
printf("学生信息已满,无法添加新的学生!\n");
return;
}
struct 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;
// 写入文件
FILE *fp = fopen(FILENAME, "a");
fprintf(fp, "%s %s %s %s %s\n", s.id, s.name, s.major, s.address, s.phone);
fclose(fp);
printf("学生信息添加成功!\n");
}
// 删除学生信息
void delete_student() {
if (count == 0) { // 数组为空
printf("学生信息为空,无法删除学生!\n");
return;
}
char id[20];
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; j < count - 1; j++) {
students[j] = students[j + 1];
}
count--;
// 写入文件
FILE *fp = fopen(FILENAME, "w");
for (int j = 0; j < count; j++) {
fprintf(fp, "%s %s %s %s %s\n", students[j].id, students[j].name, students[j].major, students[j].address, students[j].phone);
}
fclose(fp);
printf("学生信息删除成功!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 修改学生信息
void modify_student() {
if (count == 0) { // 数组为空
printf("学生信息为空,无法修改学生信息!\n");
return;
}
char id[20];
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("学号(不可修改):%s\n", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("专业:");
scanf("%s", students[i].major);
printf("家庭住址:");
scanf("%s", students[i].address);
printf("联系电话:");
scanf("%s", students[i].phone);
// 写入文件
FILE *fp = fopen(FILENAME, "w");
for (int j = 0; j < count; j++) {
fprintf(fp, "%s %s %s %s %s\n", students[j].id, students[j].name, students[j].major, students[j].address, students[j].phone);
}
fclose(fp);
printf("学生信息修改成功!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 修改学生单个信息
void modify_student_info() {
if (count == 0) { // 数组为空
printf("学生信息为空,无法修改学生信息!\n");
return;
}
char id[20];
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("1. 姓名\n");
printf("2. 专业\n");
printf("3. 家庭住址\n");
printf("4. 联系电话\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入修改后的姓名:");
scanf("%s", students[i].name);
break;
case 2:
printf("请输入修改后的专业:");
scanf("%s", students[i].major);
break;
case 3:
printf("请输入修改后的家庭住址:");
scanf("%s", students[i].address);
break;
case 4:
printf("请输入修改后的联系电话:");
scanf("%s", students[i].phone);
break;
default:
printf("无效的选项!\n");
return;
}
// 写入文件
FILE *fp = fopen(FILENAME, "w");
for (int j = 0; j < count; j++) {
fprintf(fp, "%s %s %s %s %s\n", students[j].id, students[j].name, students[j].major, students[j].address, students[j].phone);
}
fclose(fp);
printf("学生信息修改成功!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 修改学生全部信息
void modify_student_all_info() {
if (count == 0) { // 数组为空
printf("学生信息为空,无法修改学生信息!\n");
return;
}
char id[20];
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("学号(不可修改):%s\n", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("专业:");
scanf("%s", students[i].major);
printf("家庭住址:");
scanf("%s", students[i].address);
printf("联系电话:");
scanf("%s", students[i].phone);
// 写入文件
FILE *fp = fopen(FILENAME, "w");
for (int j = 0; j < count; j++) {
fprintf(fp, "%s %s %s %s %s\n", students[j].id, students[j].name, students[j].major, students[j].address, students[j].phone);
}
fclose(fp);
printf("学生信息修改成功!\n");
break;
}
}
if (!found) {
printf("查无此人!\n");
}
}
// 查询学生信息
void query_student() {
if (count == 0) { // 数组为空
printf("学生信息为空,无法查询学生信息!\n");
return;
}
printf("请选择查询方式:\n");
printf("1. 查询所有学生信息\n");
printf("2. 按学号查询\n");
printf("3. 按姓名查询\n");
printf("4. 按专业查询\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
printf("共有%d名学生:\n", count);
for (int i = 0; i < count; i++) {
printf("学号:%s,姓名:%s,专业:%s,家庭住址:%s,联系电话:%s\n", students[i].id, students[i].name, students[i].major, students[i].address, students[i].phone);
}
break;
case 2: {
char id[20];
printf("请输入学生学号:");
scanf("%s", id);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
found = 1;
printf("学号:%s,姓名:%s,专业:%s,家庭住址:%s,联系电话:%s\n", students[i].id, students[i].name, students[i].major, students[i].address, students[i].phone);
break;
}
}
if (!found) {
printf("查无此人!\n");
}
break;
}
case 3: {
char name[20];
printf("请输入学生姓名:");
scanf("%s", name);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
found = 1;
printf("学号:%s,姓名:%s,专业:%s,家庭住址:%s,联系电话:%s\n", students[i].id, students[i].name, students[i].major, students[i].address, students[i].phone);
}
}
if (!found) {
printf("查无此人!\n");
}
break;
}
case 4: {
char major[20];
printf("请输入学生专业:");
scanf("%s", major);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].major, major) == 0) {
found = 1;
printf("学号:%s,姓名:%s,专业:%s,家庭住址:%s,联系电话:%s\n", students[i].id, students[i].name, students[i].major, students[i].address, students[i].phone);
}
}
if (!found) {
printf("查无此人!\n");
}
break;
}
default:
printf("无效的选项!\n");
break;
}
}
int main() {
// 从文件读取数据
FILE *fp = fopen(FILENAME, "r");
if (fp != NULL) {
while (fscanf(fp, "%s %s %s %s %s", students[count].id, students[count].name, students[count].major, students[count].address, students[count].phone) != EOF) {
count++;
}
fclose(fp);
}
printf("欢迎使用学生信息管理系统!\n");
while (1) {
printf("请选择要进行的操作:\n");
printf("A. 学生信息添加\n");
printf("B. 学生信息删除\n");
printf("C. 学生信息修改\n");
printf("D. 学生单个信息修改\n");
printf("E. 学生全部信息修改\n");
printf("F. 学生信息查询\n");
printf("Q. 退出\n");
char choice;
scanf(" %c", &choice);
switch (choice) {
case 'A':
case 'a':
add_student();
break;
case 'B':
case 'b':
delete_student();
break;
case 'C':
case 'c':
modify_student();
break;
case 'D':
case 'd':
modify_student_info();
break;
case 'E':
case 'e':
modify_student_all_info();
break;
case 'F':
case 'f':
query_student();
break;
case 'Q':
case 'q':
printf("谢谢使用!\n");
exit(0);
default:
printf("无效的选项!\n");
break;
}
}
return 0;
}
```
阅读全文