用c语言编写1. 学生档案记录录入:录入学生的学号、姓名、性别、年龄和总绩点,以记录形式保存在 文件末尾。注意:录入第一个学生的记录时要创建文件,录入其他学生的记录时只需要 打开已经创建的文件就可以 2. 学生档案记录修改:允许用户选择并从文件中读取要修改的学生记录,修改指定的记录 后,能将改记录写回文件中原来的位置 3. 学生档案记录删除:允许用户选择要删除的学生记录,告诉用户准备删除哪个记录,获 得用户确认后从文件中删除这个记录。注意:删除一个记录后,后面的记录都得往前挪! 4. 学生记录排序:对保存在文件中的记录按学号排序,排序后的记录仍写回原来的文件 5. 其他功能:其他您以为适当的功能,比如按姓名、绩点排序,统计平均年龄和绩点,按 姓名、年龄查找并显示学生档案资料 程序设计提示: 1. 设计文件数据结构:设计文件的存储结构,将每个学生的学号、姓名、性别、年龄和总 绩点保存为一个记录,以便进行随机存取。例如:学号 12 个字节,姓名 8 个字节,性 别 2 个字节,年龄 2 个字节,总绩点 3 个字节,记起来一个学生的记录总共需要 27 个 字节,记录的长度就是 27 个字节 2. 根据所要保存的学生档案记录内容(学号、姓名、性别、年龄和总绩点),设计结构体 数据类型,结合结构体数组的运用实现文件记录的读写访问 3. 将以上各功能都设计成独立的函数,在 main 函数中显示一个菜单,让用户选择要执行 的功能,然后转而执行相应的函数 4. 如果可能,在学生记录中增加若干需要登记的资料,例如:住址、专业、班级号等
时间: 2024-03-08 08:48:48 浏览: 127
MQ-2烟雾传感器模块,c语言学生信息录入系统源码,c语言
这是一个比较复杂的程序设计,需要考虑文件的读写、数据结构、函数设计等方面。以下是一个简单的参考实现,仅供参考。
```c
#include <stdio.h>
#include <string.h>
// 定义学生档案记录结构体
struct student {
char id[13]; // 学号,12 个字节,最后一个字节为 '\0'
char name[9]; // 姓名,8 个字节,最后一个字节为 '\0'
char gender; // 性别,1 个字节
int age; // 年龄,2 个字节
float gpa; // 总绩点,4 个字节
};
// 定义全局变量
struct student students[1000]; // 最多存储 1000 个学生记录
int count = 0; // 实际存储的学生记录数
// 声明函数
void show_menu();
void add_student();
void modify_student();
void delete_student();
void sort_students();
void search_students();
void print_students();
void save_students();
int main() {
// 读取文件中已有的学生记录
FILE* fp = fopen("students.dat", "rb");
if(fp != NULL) {
// 文件存在,读取数据
while(!feof(fp)) {
fread(&students[count], sizeof(struct student), 1, fp);
if(strlen(students[count].id) > 0) {
count++;
}
}
fclose(fp);
}
// 显示菜单
int choice;
do {
show_menu();
scanf("%d", &choice);
switch(choice) {
case 1:
add_student();
break;
case 2:
modify_student();
break;
case 3:
delete_student();
break;
case 4:
sort_students();
break;
case 5:
search_students();
break;
case 6:
print_students();
break;
case 7:
save_students();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
} while(choice != 0);
return 0;
}
// 显示菜单
void show_menu() {
printf("\n");
printf("1. 添加学生记录\n");
printf("2. 修改学生记录\n");
printf("3. 删除学生记录\n");
printf("4. 排序学生记录\n");
printf("5. 查找学生记录\n");
printf("6. 显示所有学生记录\n");
printf("7. 保存学生记录到文件中\n");
printf("0. 退出程序\n");
printf("请选择要执行的操作:");
}
// 添加学生记录
void add_student() {
if(count >= 1000) {
printf("学生记录已满,无法添加新记录!\n");
return;
}
printf("请输入学生的学号、姓名、性别、年龄和总绩点(用空格分隔):");
scanf("%s %s %c %d %f", students[count].id, students[count].name, &students[count].gender, &students[count].age, &students[count].gpa);
count++;
}
// 修改学生记录
void modify_student() {
printf("请输入要修改的学生的学号:");
char id[13];
scanf("%s", id);
int index = -1;
for(int i = 0; i < count; i++) {
if(strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if(index == -1) {
printf("找不到指定的学生记录!\n");
return;
}
printf("该学生的记录为:%s %s %c %d %f\n", students[index].id, students[index].name, students[index].gender, students[index].age, students[index].gpa);
printf("请输入修改后的学号、姓名、性别、年龄和总绩点(用空格分隔):");
scanf("%s %s %c %d %f", students[index].id, students[index].name, &students[index].gender, &students[index].age, &students[index].gpa);
printf("修改成功!\n");
}
// 删除学生记录
void delete_student() {
printf("请输入要删除的学生的学号:");
char id[13];
scanf("%s", id);
int index = -1;
for(int i = 0; i < count; i++) {
if(strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if(index == -1) {
printf("找不到指定的学生记录!\n");
return;
}
printf("您确定要删除以下学生的记录吗?\n");
printf("%s %s %c %d %f\n", students[index].id, students[index].name, students[index].gender, students[index].age, students[index].gpa);
printf("请输入 Y 或 N 确认或取消:");
char choice;
scanf(" %c", &choice);
if(choice == 'Y' || choice == 'y') {
for(int i = index; i < count - 1; i++) {
students[i] = students[i + 1];
}
count--;
printf("删除成功!\n");
} else {
printf("操作已取消!\n");
}
}
// 排序学生记录
void sort_students() {
printf("请选择排序方式(1. 按学号升序 2. 按姓名升序 3. 按绩点降序):");
int choice;
scanf("%d", &choice);
switch(choice) {
case 1:
for(int i = 0; i < count - 1; i++) {
for(int j = i + 1; j < count; j++) {
if(strcmp(students[i].id, students[j].id) > 0) {
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按学号升序排序成功!\n");
break;
case 2:
for(int i = 0; i < count - 1; i++) {
for(int j = i + 1; j < count; j++) {
if(strcmp(students[i].name, students[j].name) > 0) {
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按姓名升序排序成功!\n");
break;
case 3:
for(int i = 0; i < count - 1; i++) {
for(int j = i + 1; j < count; j++) {
if(students[i].gpa < students[j].gpa) {
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按绩点降序排序成功!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
}
// 查找学生记录
void search_students() {
printf("请选择查找方式(1. 按姓名查找 2. 按年龄查找 3. 按绩点查找):");
int choice;
scanf("%d", &choice);
switch(choice) {
case 1:
printf("请输入要查找的学生姓名:");
char name[9];
scanf("%s", name);
for(int i = 0; i < count; i++) {
if(strcmp(students[i].name, name) == 0) {
printf("%s %s %c %d %f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].gpa);
}
}
break;
case 2:
printf("请输入要查找的学生年龄:");
int age;
scanf("%d", &age);
for(int i = 0; i < count; i++) {
if(students[i].age == age) {
printf("%s %s %c %d %f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].gpa);
}
}
break;
case 3:
printf("请输入要查找的学生绩点范围(用空格分隔):");
float min_gpa, max_gpa;
scanf("%f %f", &min_gpa, &max_gpa);
for(int i = 0; i < count; i++) {
if(students[i].gpa >= min_gpa && students[i].gpa <= max_gpa) {
printf("%s %s %c %d %f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].gpa);
}
}
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
}
// 显示所有学生记录
void print_students() {
for(int i = 0; i < count; i++) {
printf("%s %s %c %d %f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].gpa);
}
}
// 保存学生记录到文件中
void save_students() {
FILE* fp = fopen("students.dat", "wb");
if(fp == NULL) {
printf("无法创建文件!\n");
return;
}
for(int i = 0; i < count; i++) {
fwrite(&students[i], sizeof(struct student), 1, fp);
}
fclose(fp);
printf("保存成功!\n");
}
```
该程序使用了一个结构体数组存储学生档案记录,每个学生的信息包括学号、姓名、性别、年龄和总绩点。在主函数中,通过显示菜单让用户选择要执行的操作,然后调用相应的函数实现相应功能。具体实现细节请参考注释。
阅读全文