成绩记录簿 编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能: (1)创建信息链表并以磁盘文件保存; (2)读取磁盘文件并显示输出所有学生的成绩; (3)按学号或姓名查询成绩; (4)添加成绩记录; (5)修改指定姓名或学号的学生的成绩并可存盘; (6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
时间: 2023-05-21 12:06:19 浏览: 212
答案:非常好,这是一个标准的C语言管理系统的实现,我很高兴为您提供帮助。以下是具体实现步骤:
(1) 根据需要创建一个包含学号、姓名和成绩的学生结构体,并在结构体中添加成员变量。
(2) 在主函数中,创建一个链表结构体,用于存储所有学生的信息,并且将数据保存到磁盘文件中。
(3) 读取磁盘文件并显示输出所有学生的成绩。您可以使用fopen()函数打开文件,使用fscanf()函数从文件中读取数据,并使用printf()函数在屏幕上输出学生信息。
(4) 按学号或姓名查询成绩。您可以使用strcmp()函数比较学生姓名或学号,并使用if语句来确定是否有匹配学生信息。
(5) 添加成绩记录。您可以使用malloc()函数为新的学生信息分配内存空间,并将新的学生信息链接到已有的学生信息结构体中。
(6) 修改指定姓名或学号的学生的成绩并可存盘。您可以使用strcmp()函数来比较学生姓名或学号,并使用if语句来确定是否有匹配学生信息。修改学生成绩后,使用fopen()函数打开磁盘文件,并使用fprintf()函数将修改后的成绩写入文件中。
(7) 显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。您可以使用if语句的嵌套语法来确定学生分数所属的分数段。
要注意的是,在代码实现的过程中,需要注意代码的可读性、健壮性以及安全性。
相关问题
编制一个C/C++程序设计语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能: (1)创建信息链表并以磁盘文件保存
我很乐意帮您解答这个问题,以下是可能的程序设计实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char id[10];
char name[20];
int score;
struct student *next;
} Student;
void insert(Student **head, char *id, char *name, int score) {
Student *new_student = (Student *)malloc(sizeof(Student));
strcpy(new_student->id, id);
strcpy(new_student->name, name);
new_student->score = score;
new_student->next = NULL;
if (*head == NULL) {
*head = new_student;
} else {
Student *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
}
}
void save(Student *head) {
FILE *fp = fopen("score.txt", "w");
if (fp != NULL) {
Student *p = head;
while (p != NULL) {
fprintf(fp, "%s %s %d\n", p->id, p->name, p->score);
p = p->next;
}
fclose(fp);
} else {
printf("Error: Unable to save file.\n");
}
}
int main() {
Student *head = NULL;
// example usage
insert(&head, "10001", "张三", 80);
insert(&head, "10002", "李四", 90);
insert(&head, "10003", "王五", 85);
save(head);
// free memory
Student *p = head;
while (p != NULL) {
Student *tmp = p;
p = p->next;
free(tmp);
}
return 0;
}
```
此程序使用链表来保存学生信息,可以插入新的学生,以及将信息保存到磁盘文件中(score.txt)。需要注意的是,此程序只是一种参考实现,您可以自行进行修改和优化。
题目:学生籍贯管理系统 内容:编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯、通信地址,以顺序存储结构设计程序实现以下功能。 1、输入学生信息并以磁盘文件保存; 2、读取磁盘文件并显示输出所有学生的籍贯信息; 3、按学号或姓名查询其籍贯; 4、按籍贯查询并输出该籍贯的所有学生; 5、能添加、删除(按学号)和修改(按学号)学生的籍贯信息; 6、显示输出上海籍和非上海籍学生的信息并可分别存盘; 7、浏览所有学生的籍贯信息; 8、按学号进行排序。用C语言写一段代码
以下是一个简单的学生籍贯管理系统的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");
}
```
值得注意的是,这段代码只是一个简单的实现,可能存在不足之处,需要根据实际需求进行修改和完善。
阅读全文