学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …C语言设计
时间: 2024-03-17 15:43:01 浏览: 132
学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。
5星 · 资源好评率100%
这是一个典型的C语言学生信息管理系统设计,以下是我的实现思路:
1. 定义结构体
首先我们应该定义一个结构体,用来存储学生的信息,包括学号、姓名、性别、宿舍号码、电话号码和成绩等属性。定义如下:
```
struct student {
char id[10];
char name[20];
char sex[5];
char dorm[10];
char phone[15];
float score;
};
```
2. 学生信息录入功能
我们可以使用文件操作来实现学生信息的录入功能,将学生信息保存在一个文本文件中。录入时,需要提示用户输入学生的各项信息,输入完成后将学生信息写入文件中。代码如下:
```
void add_student() {
FILE *fp;
struct student stu;
fp = fopen("students.txt", "a+");
printf("请输入学生的学号:");
scanf("%s", stu.id);
printf("请输入学生的姓名:");
scanf("%s", stu.name);
printf("请输入学生的性别:");
scanf("%s", stu.sex);
printf("请输入学生的宿舍号码:");
scanf("%s", stu.dorm);
printf("请输入学生的电话号码:");
scanf("%s", stu.phone);
printf("请输入学生的成绩:");
scanf("%f", &stu.score);
fprintf(fp, "%s %s %s %s %s %.2f\n", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, stu.score);
printf("学生信息录入成功!\n");
fclose(fp);
}
```
3. 学生信息浏览功能
同样,我们可以使用文件操作来实现学生信息的浏览功能,将学生信息从文件中读取出来并输出到屏幕上。代码如下:
```
void view_students() {
FILE *fp;
struct student stu;
fp = fopen("students.txt", "r");
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
while (fscanf(fp, "%s%s%s%s%s%f", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, &stu.score) != EOF) {
printf("%s\t%s\t%s\t%s\t\t%s\t\t%.2f\n", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, stu.score);
}
fclose(fp);
}
```
4. 查询功能
我们需要实现两种查询功能,一种是按学号查询,一种是按姓名查询。代码如下:
按学号查询:
```
void search_by_id() {
FILE *fp;
struct student stu;
char id[10];
int flag = 0;
fp = fopen("students.txt", "r");
printf("请输入要查询的学生学号:");
scanf("%s", id);
while (fscanf(fp, "%s%s%s%s%s%f", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, &stu.score) != EOF) {
if (strcmp(stu.id, id) == 0) {
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
printf("%s\t%s\t%s\t%s\t\t%s\t\t%.2f\n", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, stu.score);
flag = 1;
break;
}
}
if (flag == 0) {
printf("未找到该学生信息!\n");
}
fclose(fp);
}
```
按姓名查询:
```
void search_by_name() {
FILE *fp;
struct student stu;
char name[20];
int flag = 0;
fp = fopen("students.txt", "r");
printf("请输入要查询的学生姓名:");
scanf("%s", name);
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
while (fscanf(fp, "%s%s%s%s%s%f", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, &stu.score) != EOF) {
if (strcmp(stu.name, name) == 0) {
printf("%s\t%s\t%s\t%s\t\t%s\t\t%.2f\n", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, stu.score);
flag = 1;
}
}
if (flag == 0) {
printf("未找到该学生信息!\n");
}
fclose(fp);
}
```
5. 排序功能
我们需要实现两种排序功能,一种是按分数升序排序,一种是按分数降序排序。代码如下:
按分数升序排序:
```
void sort_by_score_ascending() {
FILE *fp;
struct student stu[100], temp;
int i = 0, j, n;
fp = fopen("students.txt", "r");
while (fscanf(fp, "%s%s%s%s%s%f", stu[i].id, stu[i].name, stu[i].sex, stu[i].dorm, stu[i].phone, &stu[i].score) != EOF) {
i++;
}
n = i;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (stu[i].score > stu[j].score) {
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
for (i = 0; i < n; i++) {
printf("%s\t%s\t%s\t%s\t\t%s\t\t%.2f\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].dorm, stu[i].phone, stu[i].score);
}
fclose(fp);
}
```
按分数降序排序:
```
void sort_by_score_descending() {
FILE *fp;
struct student stu[100], temp;
int i = 0, j, n;
fp = fopen("students.txt", "r");
while (fscanf(fp, "%s%s%s%s%s%f", stu[i].id, stu[i].name, stu[i].sex, stu[i].dorm, stu[i].phone, &stu[i].score) != EOF) {
i++;
}
n = i;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (stu[i].score < stu[j].score) {
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
for (i = 0; i < n; i++) {
printf("%s\t%s\t%s\t%s\t\t%s\t\t%.2f\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].dorm, stu[i].phone, stu[i].score);
}
fclose(fp);
}
```
6. 容错处理
在输入学生信息时,需要对成绩进行合法性检查,如果输入的成绩不在0~100之间,就提示不合法,要求重新输入。代码如下:
```
void add_student() {
FILE *fp;
struct student stu;
fp = fopen("students.txt", "a+");
printf("请输入学生的学号:");
scanf("%s", stu.id);
printf("请输入学生的姓名:");
scanf("%s", stu.name);
printf("请输入学生的性别:");
scanf("%s", stu.sex);
printf("请输入学生的宿舍号码:");
scanf("%s", stu.dorm);
printf("请输入学生的电话号码:");
scanf("%s", stu.phone);
do {
printf("请输入学生的成绩:");
scanf("%f", &stu.score);
if (stu.score < 0 || stu.score > 100) {
printf("成绩不合法,请重新输入!\n");
}
} while (stu.score < 0 || stu.score > 100);
fprintf(fp, "%s %s %s %s %s %.2f\n", stu.id, stu.name, stu.sex, stu.dorm, stu.phone, stu.score);
printf("学生信息录入成功!\n");
fclose(fp);
}
```
总的来说,这个学生信息管理系统设计涉及到了文件操作、结构体、排序算法等多个方面的知识,实现起来比较综合和有难度,但是通过实践,能够有效地提高我们的编程能力和解决问题的能力。
阅读全文