题目:学生籍贯管理系统 内容:编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯、通信地址,以顺序存储结构设计程序实现以下功能。 1、输入学生信息并以磁盘文件保存; 2、读取磁盘文件并显示输出所有学生的籍贯信息; 3、按学号或姓名查询其籍贯; 4、按籍贯查询并输出该籍贯的所有学生; 5、能添加、删除(按学号)和修改(按学号)学生的籍贯信息; 6、显示输出上海籍和非上海籍学生的信息并可分别存盘; 7、浏览所有学生的籍贯信息; 8、按学号进行排序。用C语言写一段代码
时间: 2023-11-25 20:08:53 浏览: 134
学生籍贯信息记录簿C语言课程设计.doc
5星 · 资源好评率100%
以下是一个简单的学生籍贯管理系统的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义学生结构体
typedef struct {
int id;
char name[20];
char place[20];
char address[50];
} Student;
//全局变量
Student students[100]; //最多存放100个学生信息
int count = 0; //学生信息数量
//函数声明
void inputStudentInfo(); //输入学生信息
void saveToFile(); //保存到文件
void readFromFile(); //从文件读取信息
void displayPlaceInfo(char* place); //显示某个籍贯的所有学生
void queryByIdOrName(); //按学号或姓名查询学生信息
void addStudent(); //添加学生信息
void deleteStudent(); //删除学生信息
void modifyStudent(); //修改学生信息
void displayShanghaiStudents(); //显示上海籍学生信息
void displayNonShanghaiStudents(); //显示非上海籍学生信息
void displayAll(); //显示所有学生信息
void sortByStudentId(); //按学号排序
//主函数
int main() {
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("7.修改学生信息\n");
printf("8.显示上海籍学生信息\n");
printf("9.显示非上海籍学生信息\n");
printf("10.浏览所有学生信息\n");
printf("11.按学号排序\n");
printf("0.退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
exit(0);
case 1:
inputStudentInfo();
saveToFile();
break;
case 2:
readFromFile();
break;
case 3:
printf("请输入籍贯:");
char place[20];
scanf("%s", place);
displayPlaceInfo(place);
break;
case 4:
queryByIdOrName();
break;
case 5:
addStudent();
saveToFile();
break;
case 6:
deleteStudent();
saveToFile();
break;
case 7:
modifyStudent();
saveToFile();
break;
case 8:
displayShanghaiStudents();
break;
case 9:
displayNonShanghaiStudents();
break;
case 10:
displayAll();
break;
case 11:
sortByStudentId();
break;
default:
printf("输入无效,请重新输入!\n");
}
}
return 0;
}
//输入学生信息
void inputStudentInfo() {
printf("请输入学生信息:\n");
printf("学号:");
scanf("%d", &students[count].id);
printf("姓名:");
scanf("%s", students[count].name);
printf("籍贯:");
scanf("%s", students[count].place);
printf("通信地址:");
scanf("%s", students[count].address);
count++;
}
//保存到文件
void saveToFile() {
FILE* fp;
fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%d %s %s %s\n", students[i].id, students[i].name, students[i].place, students[i].address);
}
fclose(fp);
printf("保存成功!\n");
}
//从文件读取信息
void readFromFile() {
FILE* fp;
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
count = 0;
while (!feof(fp)) {
fscanf(fp, "%d %s %s %s", &students[count].id, students[count].name, students[count].place, students[count].address);
count++;
}
count--;
fclose(fp);
printf("读取成功!\n");
}
//显示某个籍贯的所有学生
void displayPlaceInfo(char* place) {
printf("\n籍贯为%s的学生信息如下:\n", place);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].place, place) == 0) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
}
}
}
//按学号或姓名查询学生信息
void queryByIdOrName() {
int choice;
printf("\n请选择查询方式:\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
scanf("%d", &choice);
if (choice == 1) {
int id;
printf("请输入学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
return;
}
}
printf("未找到该学生信息!\n");
}
else if (choice == 2) {
char name[20];
printf("请输入姓名:");
scanf("%s", name);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
return;
}
}
printf("未找到该学生信息!\n");
}
else {
printf("输入无效,请重新输入!\n");
}
}
//添加学生信息
void addStudent() {
printf("请输入要添加的学生信息:\n");
printf("学号:");
scanf("%d", &students[count].id);
printf("姓名:");
scanf("%s", students[count].name);
printf("籍贯:");
scanf("%s", students[count].place);
printf("通信地址:");
scanf("%s", students[count].address);
count++;
}
//删除学生信息
void deleteStudent() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
for (int j = i; j < count - 1; j++) {
students[j] = students[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生信息!\n");
}
//修改学生信息
void modifyStudent() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
printf("请输入修改后的信息:\n");
printf("姓名:");
scanf("%s", students[i].name);
printf("籍贯:");
scanf("%s", students[i].place);
printf("通信地址:");
scanf("%s", students[i].address);
printf("修改成功!\n");
return;
}
}
printf("未找到该学生信息!\n");
}
//显示上海籍学生信息
void displayShanghaiStudents() {
printf("\n上海籍学生信息如下:\n");
for (int i = 0; i < count; i++) {
if (strcmp(students[i].place, "上海") == 0) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
}
}
}
//显示非上海籍学生信息
void displayNonShanghaiStudents() {
printf("\n非上海籍学生信息如下:\n");
for (int i = 0; i < count; i++) {
if (strcmp(students[i].place, "上海") != 0) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
}
}
}
//显示所有学生信息
void displayAll() {
printf("\n所有学生信息如下:\n");
for (int i = 0; i < count; i++) {
printf("%d\t%s\t%s\t%s\n", students[i].id, students[i].name, students[i].place, students[i].address);
}
}
//按学号排序
void sortByStudentId() {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - 1 - i; j++) {
if (students[j].id > students[j + 1].id) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按学号排序完成!\n");
}
```
值得注意的是,这段代码只是一个简单的实现,可能存在不足之处,需要根据实际需求进行修改和完善。
阅读全文