(c语言)学生基本信息管理系统,系统中包含目前在校所有学生信息以及近三年毕业的学生信息。
(1)分为学生和教师管理员登录
(2)程序启动时,从默认数据文件读取当前最新的学生信息数据。
(3)信息查询。可以按照省、市、性别进行分类查询;可以进行此关键字联合查询,查询结果按选择的排序方式输出;若查询结果不唯一按学号升序输出。
(4)数据排序。对指定数据按照指定关键字进行排序(排序方法不限定)。
(5)信息修改。有权限的人员可以修改学生的状态。学生状态包括:在籍、休学、结业、毕业。
(6)导出功能。可以将指定的查询结果导出到指定文件。
(7)系统以菜单方式工作。
尤其是信息修改和导出功能,想要完整的代码,谢谢各位!
c语言学生基本信息管理系统
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
11条回答 默认 最新
小逸2023 2023-03-28 22:09关注该回答引用ChatGPT
这是一个比较复杂的项目,需要涉及到文件读写、数据结构、排序算法等知识点。下面是一个简单的实现,供参考。
1. 学生信息结构体定义c
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char province[20]; // 省份
char city[20]; // 城市
char status[10]; // 状态:在籍、休学、结业、毕业
int year; // 入学年份
} Student;
2. 学生信息读取和存储c
// 从文件中读取学生信息
void readStudents(Student students[], int *count) {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fread(count, sizeof(int), 1, fp);
fread(students, sizeof(Student), *count, fp);
fclose(fp);
}
// 将学生信息存储到文件中
void saveStudents(Student students[], int count) {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fwrite(&count, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), count, fp);
fclose(fp);
}
3. 学生信息查询c
// 按省份查询学生信息
void queryByProvince(Student students[], int count, char province[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].province, province) == 0) {
printStudent(students[i]);
}
}
}
// 按城市查询学生信息
void queryByCity(Student students[], int count, char city[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].city, city) == 0) {
printStudent(students[i]);
}
}
}
// 按性别查询学生信息
void queryByGender(Student students[], int count, char gender[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].gender, gender) == 0) {
printStudent(students[i]);
}
}
}
// 联合查询学生信息
void query(Student students[], int count) {
char province[20], city[20], gender[5];
printf("请输入省份:");
scanf("%s", province);
printf("请输入城市:");
scanf("%s", city);
printf("请输入性别:");
scanf("%s", gender);
int i, flag;
for (i = 0; i < count; i++) {
flag = 1;
if (strcmp(students[i].province, province) != 0) {
flag = 0;
}
if (strcmp(students[i].city, city) != 0) {
flag = 0;
}
if (strcmp(students[i].gender, gender) != 0) {
flag = 0;
}
if (flag) {
printStudent(students[i]);
}
}
}
// 按学号升序输出查询结果
void printQueryResult(Student students[], int count) {
sortById(students, count);
int i;
for (i = 0; i < count; i++) {
printStudent(students[i]);
}
}
4. 学生信息排序c
// 按学号排序
void sortById(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].id, students[j + 1].id) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按姓名排序
void sortByName(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按入学年份排序
void sortByYear(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (students[j].year > students[j + 1].year) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
5. 学生信息修改c
// 修改学生状态
void modifyStatus(Student students[], int count) {
char id[10], status[10];
printf("请输入学号:");
scanf("%s", id);
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入状态(在籍、休学、结业、毕业):");
scanf("%s", status);
strcpy(students[i].status, status);
printf("修改成功\
");
return;
}
}
printf("未找到该学生\
");
}
6. 导出查询结果c
// 导出查询结果到文件
void exportToFile(Student students[], int count) {
char filename[50];
printf("请输入文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
int i;
for (i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %s %s %s %d\
", students[i].id, students[i].name, students[i].gender, students[i].province, students[i].city, students[i].status, students[i].year);
}
fclose(fp);
}
7. 菜单界面c
int main() {
Student students[1000];
int count = 0;
readStudents(students, &count);
int choice;
while (1) {
printf("1. 学生登录\
");
printf("2. 教师管理员登录\
");
printf("3. 信息查询\
");
printf("4. 数据排序\
");
printf("5. 信息修改\
");
printf("6. 导出查询结果\
");
printf("7. 退出\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 学生登录
break;
case 2:
// 教师管理员登录
break;
case 3:
// 信息查询
queryMenu(students, count);
break;
case 4:
// 数据排序
sortMenu(students, count);
break;
case 5:
// 信息修改
modifyStatus(students, count);
break;
case 6:
// 导出查询结果
exportToFile(students, count);
break;
case 7:
// 退出
saveStudents(students, count);
return 0;
default:
printf("无效选择\
");
break;
}
}
return 0;
}
8. 查询和排序菜单c
// 信息查询菜单
void queryMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按省份查询\
");
printf("2. 按城市查询\
");
printf("3. 按性别查询\
");
printf("4. 联合查询\
");
printf("5. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按省份查询
queryByProvinceMenu(students, count);
break;
case 2:
// 按城市查询
queryByCityMenu(students, count);
break;
case 3:
// 按性别查询
queryByGenderMenu(students, count);
break;
case 4:
// 联合查询
query(students, count);
printf("按学号升序输出查询结果:\
");
printQueryResult(students, count);
break;
case 5:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}
// 按省份查询菜单
void queryByProvinceMenu(Student students[], int count) {
char province[20];
printf("请输入省份:");
scanf("%s", province);
queryByProvince(students, count, province);
}
// 按城市查询菜单
void queryByCityMenu(Student students[], int count) {
char city[20];
printf("请输入城市:");
scanf("%s", city);
queryByCity(students, count, city);
}
// 按性别查询菜单
void queryByGenderMenu(Student students[], int count) {
char gender[5];
printf("请输入性别:");
scanf("%s", gender);
queryByGender(students, count, gender);
}
// 数据排序菜单
void sortMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按学号排序\
");
printf("2. 按姓名排序\
");
printf("3. 按入学年份排序\
");
printf("4. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按学号排序
sortById(students, count);
printf("按学号排序结果:\
");
printStudents(students, count);
break;
case 2:
// 按姓名排序
sortByName(students, count);
printf("按姓名排序结果:\
");
printStudents(students, count);
break;
case 3:
// 按入学年份排序
sortByYear(students, count);
printf("按入学年份排序结果:\
");
printStudents(students, count);
break;
case 4:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}
这只是一个简单的实现,还有很多细节需要考虑,比如输入的合法性、错误处理等。同时,还可以考虑使用链表或树等数据结构来存储学生信息,以提高查询和排序的效率。解决 无用评论 打赏 举报