学生学籍管理系统c语言课程设计
时间: 2023-11-29 13:06:33 浏览: 292
学生学籍管理系统是一个常见的课程设计题目,它可以涵盖C语言中的许多基础知识点,如文件操作、结构体、指针等。下面是一个简单的学生学籍管理系统的设计思路和代码示例:
1. 首先,我们需要定义一个学生信息的结构体,包括学号、姓名、性别、年龄、出生日期、班级等基本信息:
```
struct student {
char id[20];
char name[20];
char sex[5];
int age;
char birth[20];
char class[20];
};
```
2. 接着,我们可以设计一个主菜单,让用户可以选择进行哪些操作,如添加学生信息、查询学生信息、修改学生信息、删除学生信息等:
```
int main() {
int choice;
while (1) {
printf("学生学籍管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 查询学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
query_student();
break;
case 3:
modify_student();
break;
case 4:
delete_student();
break;
case 5:
exit(0);
default:
printf("无效的选择,请重新输入!\n");
}
}
return 0;
}
```
3. 添加学生信息的函数可以通过文件操作将学生信息保存到文件中:
```
void add_student() {
struct student stu;
FILE *fp;
fp = fopen("students.txt", "a");
printf("请输入学生学号:");
scanf("%s", stu.id);
printf("请输入学生姓名:");
scanf("%s", stu.name);
printf("请输入学生性别:");
scanf("%s", stu.sex);
printf("请输入学生年龄:");
scanf("%d", &stu.age);
printf("请输入学生出生日期:");
scanf("%s", stu.birth);
printf("请输入学生班级:");
scanf("%s", stu.class);
fprintf(fp, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
fclose(fp);
printf("添加成功!\n");
}
```
4. 查询学生信息的函数可以通过文件操作读取学生信息并输出:
```
void query_student() {
struct student stu;
FILE *fp;
char id[20];
fp = fopen("students.txt", "r");
printf("请输入要查询的学生学号:");
scanf("%s", id);
while (fscanf(fp, "%s %s %s %d %s %s", stu.id, stu.name, stu.sex, &stu.age, stu.birth, stu.class) != EOF) {
if (strcmp(stu.id, id) == 0) {
printf("学生信息如下:\n");
printf("学号:%s\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("性别:%s\n", stu.sex);
printf("年龄:%d\n", stu.age);
printf("出生日期:%s\n", stu.birth);
printf("班级:%s\n", stu.class);
break;
}
}
if (feof(fp)) {
printf("未找到对应学生的信息!\n");
}
fclose(fp);
}
```
5. 修改学生信息和删除学生信息的函数可以通过文件操作先读取学生信息,然后修改或删除对应信息,最后将信息重新写入文件中。
完整代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char id[20];
char name[20];
char sex[5];
int age;
char birth[20];
char class[20];
};
void add_student();
void query_student();
void modify_student();
void delete_student();
int main() {
int choice;
while (1) {
printf("学生学籍管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 查询学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
query_student();
break;
case 3:
modify_student();
break;
case 4:
delete_student();
break;
case 5:
exit(0);
default:
printf("无效的选择,请重新输入!\n");
}
}
return 0;
}
void add_student() {
struct student stu;
FILE *fp;
fp = fopen("students.txt", "a");
printf("请输入学生学号:");
scanf("%s", stu.id);
printf("请输入学生姓名:");
scanf("%s", stu.name);
printf("请输入学生性别:");
scanf("%s", stu.sex);
printf("请输入学生年龄:");
scanf("%d", &stu.age);
printf("请输入学生出生日期:");
scanf("%s", stu.birth);
printf("请输入学生班级:");
scanf("%s", stu.class);
fprintf(fp, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
fclose(fp);
printf("添加成功!\n");
}
void query_student() {
struct student stu;
FILE *fp;
char id[20];
fp = fopen("students.txt", "r");
printf("请输入要查询的学生学号:");
scanf("%s", id);
while (fscanf(fp, "%s %s %s %d %s %s", stu.id, stu.name, stu.sex, &stu.age, stu.birth, stu.class) != EOF) {
if (strcmp(stu.id, id) == 0) {
printf("学生信息如下:\n");
printf("学号:%s\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("性别:%s\n", stu.sex);
printf("年龄:%d\n", stu.age);
printf("出生日期:%s\n", stu.birth);
printf("班级:%s\n", stu.class);
break;
}
}
if (feof(fp)) {
printf("未找到对应学生的信息!\n");
}
fclose(fp);
}
void modify_student() {
struct student stu;
FILE *fp, *fp1;
char id[20];
int found = 0;
fp = fopen("students.txt", "r");
fp1 = fopen("temp.txt", "w");
printf("请输入要修改的学生学号:");
scanf("%s", id);
while (fscanf(fp, "%s %s %s %d %s %s", stu.id, stu.name, stu.sex, &stu.age, stu.birth, stu.class) != EOF) {
if (strcmp(stu.id, id) == 0) {
found = 1;
printf("学生信息如下:\n");
printf("学号:%s\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("性别:%s\n", stu.sex);
printf("年龄:%d\n", stu.age);
printf("出生日期:%s\n", stu.birth);
printf("班级:%s\n", stu.class);
printf("请输入新的学生姓名:");
scanf("%s", stu.name);
printf("请输入新的学生性别:");
scanf("%s", stu.sex);
printf("请输入新的学生年龄:");
scanf("%d", &stu.age);
printf("请输入新的学生出生日期:");
scanf("%s", stu.birth);
printf("请输入新的学生班级:");
scanf("%s", stu.class);
fprintf(fp1, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
printf("修改成功!\n");
} else {
fprintf(fp1, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
}
}
if (!found) {
printf("未找到对应学生的信息!\n");
}
fclose(fp);
fclose(fp1);
remove("students.txt");
rename("temp.txt", "students.txt");
}
void delete_student() {
struct student stu;
FILE *fp, *fp1;
char id[20];
int found = 0;
fp = fopen("students.txt", "r");
fp1 = fopen("temp.txt", "w");
printf("请输入要删除的学生学号:");
scanf("%s", id);
while (fscanf(fp, "%s %s %s %d %s %s", stu.id, stu.name, stu.sex, &stu.age, stu.birth, stu.class) != EOF) {
if (strcmp(stu.id, id) == 0) {
found = 1;
printf("学生信息如下:\n");
printf("学号:%s\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("性别:%s\n", stu.sex);
printf("年龄:%d\n", stu.age);
printf("出生日期:%s\n", stu.birth);
printf("班级:%s\n", stu.class);
printf("确定删除吗?(y/n):");
char confirm;
scanf("%s", &confirm);
if (confirm == 'y' || confirm == 'Y') {
printf("删除成功!\n");
} else {
fprintf(fp1, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
}
} else {
fprintf(fp1, "%s %s %s %d %s %s\n", stu.id, stu.name, stu.sex, stu.age, stu.birth, stu.class);
}
}
if (!found) {
printf("未找到对应学生的信息!\n");
}
fclose(fp);
fclose(fp1);
remove("students.txt");
rename("temp.txt", "students.txt");
}
```
需要注意的是,这只是一个简单的学生学籍管理系统,还有很多需要改进和完善的地方。比如,可以添加搜索、排序、统计等功能,也可以使用链表等数据结构来存储和操作学生信息。
阅读全文